@cubejs-backend/api-gateway
Advanced tools
Comparing version 0.13.6 to 0.13.7
@@ -6,2 +6,13 @@ # Change Log | ||
## [0.13.7](https://github.com/cube-js/cube.js/compare/v0.13.6...v0.13.7) (2019-12-31) | ||
### Features | ||
* Extendable context ([#299](https://github.com/cube-js/cube.js/issues/299)) ([38e33ce](https://github.com/cube-js/cube.js/commit/38e33ce)), closes [#295](https://github.com/cube-js/cube.js/issues/295) [#296](https://github.com/cube-js/cube.js/issues/296) | ||
## [0.13.6](https://github.com/cube-js/cube.js/compare/v0.13.5...v0.13.6) (2019-12-19) | ||
@@ -8,0 +19,0 @@ |
64
index.js
@@ -223,2 +223,3 @@ const jwt = require('jsonwebtoken'); | ||
this.enforceSecurityChecks = options.enforceSecurityChecks || (process.env.NODE_ENV === 'production'); | ||
this.extendContext = options.extendContext; | ||
} | ||
@@ -230,5 +231,4 @@ | ||
query: req.query.query, | ||
context: this.contextByReq(req), | ||
res: this.resToResultFn(res), | ||
requestId: this.requestIdByReq(req) | ||
context: await this.contextByReq(req, req.authInfo, this.requestIdByReq(req)), | ||
res: this.resToResultFn(res) | ||
}); | ||
@@ -240,5 +240,4 @@ })); | ||
query: req.query.query, | ||
context: this.contextByReq(req), | ||
res: this.resToResultFn(res), | ||
requestId: this.requestIdByReq(req) | ||
context: await this.contextByReq(req, req.authInfo, this.requestIdByReq(req)), | ||
res: this.resToResultFn(res) | ||
}); | ||
@@ -250,5 +249,4 @@ })); | ||
query: req.query.query, | ||
context: this.contextByReq(req), | ||
res: this.resToResultFn(res), | ||
requestId: this.requestIdByReq(req) | ||
context: await this.contextByReq(req, req.authInfo, this.requestIdByReq(req)), | ||
res: this.resToResultFn(res) | ||
}); | ||
@@ -259,5 +257,4 @@ })); | ||
await this.meta({ | ||
context: this.contextByReq(req), | ||
res: this.resToResultFn(res), | ||
requestId: this.requestIdByReq(req) | ||
context: await this.contextByReq(req, req.authInfo, this.requestIdByReq(req)), | ||
res: this.resToResultFn(res) | ||
}); | ||
@@ -275,3 +272,3 @@ })); | ||
async meta({ context, res, requestId }) { | ||
async meta({ context, res }) { | ||
const requestStarted = new Date(); | ||
@@ -284,3 +281,3 @@ try { | ||
this.handleError({ | ||
e, context, res, requestStarted, requestId | ||
e, context, res, requestStarted | ||
}); | ||
@@ -291,3 +288,3 @@ } | ||
async sql({ | ||
query, context, res, requestId | ||
query, context, res | ||
}) { | ||
@@ -307,3 +304,3 @@ const requestStarted = new Date(); | ||
this.handleError({ | ||
e, context, query, res, requestStarted, requestId | ||
e, context, query, res, requestStarted | ||
}); | ||
@@ -314,3 +311,3 @@ } | ||
async load({ | ||
query, context, res, requestId | ||
query, context, res | ||
}) { | ||
@@ -322,4 +319,3 @@ const requestStarted = new Date(); | ||
type: 'Load Request', | ||
query, | ||
requestId | ||
query | ||
}); | ||
@@ -345,3 +341,3 @@ const normalizedQuery = await this.queryTransformer(normalizeQuery(query), context); | ||
renewQuery: normalizedQuery.renewQuery, | ||
requestId | ||
requestId: context.requestId | ||
}; | ||
@@ -354,4 +350,3 @@ const response = await this.getAdapterApi({ | ||
query, | ||
duration: this.duration(requestStarted), | ||
requestId | ||
duration: this.duration(requestStarted) | ||
}); | ||
@@ -375,3 +370,3 @@ const flattenAnnotation = { | ||
this.handleError({ | ||
e, context, query, res, requestStarted, requestId | ||
e, context, query, res, requestStarted | ||
}); | ||
@@ -382,3 +377,3 @@ } | ||
async subscribe({ | ||
query, context, res, subscribe, subscriptionState, requestId | ||
query, context, res, subscribe, subscriptionState | ||
}) { | ||
@@ -402,4 +397,3 @@ const requestStarted = new Date(); | ||
query, | ||
context, | ||
requestId: `${requestId}-${uuid()}`, | ||
context: { ...context, requestId: `${context.requestId}-${uuid()}` }, | ||
res: (message, opts) => { | ||
@@ -455,4 +449,10 @@ if (message.error) { | ||
contextByReq(req) { | ||
return { authInfo: req.authInfo }; | ||
async contextByReq(req, authInfo, requestId) { | ||
const extensions = await Promise.resolve(typeof this.extendContext === 'function' ? this.extendContext(req) : {}); | ||
return { | ||
authInfo, | ||
requestId, | ||
...extensions | ||
}; | ||
} | ||
@@ -465,3 +465,3 @@ | ||
handleError({ | ||
e, context, query, res, requestStarted, requestId | ||
e, context, query, res, requestStarted | ||
}) { | ||
@@ -473,3 +473,2 @@ if (e instanceof CubejsHandlerError) { | ||
error: e.message, | ||
requestId, | ||
duration: this.duration(requestStarted) | ||
@@ -483,3 +482,2 @@ }); | ||
error: e.message, | ||
requestId, | ||
duration: this.duration(requestStarted) | ||
@@ -493,3 +491,2 @@ }); | ||
error: e.error, | ||
requestId, | ||
duration: this.duration(requestStarted) | ||
@@ -503,3 +500,2 @@ }); | ||
error: e.stack || e.toString(), | ||
requestId, | ||
duration: this.duration(requestStarted) | ||
@@ -556,3 +552,3 @@ }); | ||
const { type, ...restParams } = event; | ||
this.logger(type, { ...restParams, authInfo: context.authInfo }); | ||
this.logger(type, { ...restParams, ...context }); | ||
} | ||
@@ -559,0 +555,0 @@ } |
@@ -5,3 +5,3 @@ { | ||
"author": "Statsbot, Inc.", | ||
"version": "0.13.6", | ||
"version": "0.13.7", | ||
"repository": { | ||
@@ -38,3 +38,3 @@ "type": "git", | ||
"license": "Apache-2.0", | ||
"gitHead": "53337fbbe5a9bfd6026b2bfd7d64ce1d0acaa878" | ||
"gitHead": "167f2bb16920a1278b8a06e30f6494f36158ada5" | ||
} |
@@ -23,3 +23,3 @@ const UserError = require('./UserError'); | ||
async processMessage(connectionId, message, isSubscription) { | ||
let context = {}; | ||
let authContext = {}; | ||
try { | ||
@@ -30,5 +30,5 @@ if (typeof message === 'string') { | ||
if (message.authorization) { | ||
const newContext = {}; | ||
await this.apiGateway.checkAuthFn(newContext, message.authorization); | ||
await this.subscriptionStore.setAuthContext(connectionId, newContext); | ||
authContext = { isSubscription: true }; | ||
await this.apiGateway.checkAuthFn(authContext, message.authorization); | ||
await this.subscriptionStore.setAuthContext(connectionId, authContext); | ||
this.sendMessage(connectionId, { handshake: true }); | ||
@@ -47,5 +47,5 @@ return; | ||
context = await this.subscriptionStore.getAuthContext(connectionId); | ||
authContext = await this.subscriptionStore.getAuthContext(connectionId); | ||
if (!context) { | ||
if (!authContext) { | ||
await this.sendMessage( | ||
@@ -66,2 +66,5 @@ connectionId, | ||
const requestId = message.requestId || `${connectionId}-${message.messageId}`; | ||
const context = await this.apiGateway.contextByReq(message, authContext.authInfo, requestId); | ||
const allowedParams = methodParams[message.method]; | ||
@@ -75,3 +78,2 @@ const params = allowedParams.map(k => ({ [k]: (message.params || {})[k] })) | ||
res: this.resultFn(connectionId, message.messageId), | ||
requestId: message.requestId || `${connectionId}-${message.messageId}`, | ||
subscriptionState: async () => { | ||
@@ -78,0 +80,0 @@ const subscription = await this.subscriptionStore.getSubscription(connectionId, message.messageId); |
51863
800