diff --git a/graph/context.js b/graph/context.js index 52bb7fdfc..e9ac7ea61 100644 --- a/graph/context.js +++ b/graph/context.js @@ -42,6 +42,32 @@ const decorateContextPlugins = (context, contextPlugins) => { ); }; +/** + * Some pieces of the Context are quite complex to setup, using multiple merges + * and other lodash functions. This proxies that access such that it is only + * loaded if it is used. Helpful for a query that only uses a loader, and not a + * mutator. + * + * @param {Object} ctx the graph proxy + * @param {Function} loader the loadable component that should be proxied + */ +const createLazyContextLoader = (ctx, loader) => + new Proxy( + { loaded: false, data: null }, + { + get: (obj, prop) => { + if (obj.loaded) { + return obj.data[prop]; + } + + obj.data = loader(ctx); + obj.loaded = true; + + return obj.data[prop]; + }, + } + ); + /** * Stores the request context. */ @@ -61,16 +87,18 @@ class Context { this.connectors = connectors; // Create the loaders. - this.loaders = loaders(this); + this.loaders = createLazyContextLoader(this, loaders); // Create the mutators. - this.mutators = mutators(this); + this.mutators = createLazyContextLoader(this, mutators); // Decorate the plugin context. - this.plugins = decorateContextPlugins(this, contextPlugins); + this.plugins = createLazyContextLoader(this, () => + decorateContextPlugins(this, contextPlugins) + ); // Bind the publish/subscribe to the context. - this.pubsub = getBroker(); + this.pubsub = createLazyContextLoader(this, () => getBroker()); // Bind the parent context. this.parent = ctx; diff --git a/plugins/talk-plugin-google-auth/README.md b/plugins/talk-plugin-google-auth/README.md index edf0b9488..f68b56c32 100644 --- a/plugins/talk-plugin-google-auth/README.md +++ b/plugins/talk-plugin-google-auth/README.md @@ -11,7 +11,7 @@ plugin: - Client --- -Enables sign-in via Facebook via the server side passport middleware. +Enables sign-in via Google+ via the server side passport middleware. You will need to enable the Google+ API in the dashboard and create credentials for a new OAuth client ID web application. The authorized JavaScript origin @@ -26,4 +26,4 @@ Configuration: the [Google API Console](https://console.developers.google.com/apis/). - `TALK_GOOGLE_CLIENT_SECRET` (**required**) - The Google OAuth2 client ID for your Google login web app. You can learn more about getting a Google Client - ID at the [Google API Console](https://console.developers.google.com/apis/). \ No newline at end of file + ID at the [Google API Console](https://console.developers.google.com/apis/). diff --git a/routes/api/v1/account.js b/routes/api/v1/account.js index e1395323d..f7d8ea126 100644 --- a/routes/api/v1/account.js +++ b/routes/api/v1/account.js @@ -80,7 +80,7 @@ router.post('/password/reset', async (req, res, next) => { token, }, subject: 'Password Reset', - to: email, + email, }); } diff --git a/services/logging.js b/services/logging.js index 00e9c523b..47ef93af8 100644 --- a/services/logging.js +++ b/services/logging.js @@ -1,18 +1,18 @@ const { version } = require('../package.json'); const Logger = require('bunyan'); const { LOGGING_LEVEL, REVISION_HASH } = require('../config'); +const logger = new Logger({ + src: true, + name: 'talk', + version, + revision: REVISION_HASH, + level: LOGGING_LEVEL, + serializers: Logger.stdSerializers, +}); // Create the logging instance that all logger's are branched from. function createLogger(name, traceID) { - return new Logger({ - src: true, - name, - traceID, - version, - revision: REVISION_HASH, - level: LOGGING_LEVEL, - serializers: Logger.stdSerializers, - }); + return logger.child({ origin: name, traceID }); } -module.exports = { createLogger }; +module.exports = { logger, createLogger }; diff --git a/yarn.lock b/yarn.lock index 3556a26ba..786086d39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8239,10 +8239,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pell@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pell/-/pell-1.0.1.tgz#8f1e97165001024e5f371e0ce0b329457c847b5d" - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"