UNPKG

@financialforcedev/orizuru-auth

Version:

Salesforce authentication for Heroku Node applications.

65 lines 9.99 kB
"use strict"; /* * Copyright (c) 2019, FinancialForce.com, inc * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of the FinancialForce.com, inc nor the names of its contributors * may be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Object.defineProperty(exports, "__esModule", { value: true }); const cache_1 = require("../client/cache"); const environment_1 = require("../client/validator/environment"); /** * Creates the authorization endpoint to initialise the [OAuth 2.0 Web Server Authentication Flow](https://help.salesforce.com/articleView?id=remoteaccess_oauth_web_server_flow.htm). * * @param env The auth environment parameters. * @returns A function that generates the authorization URL with the given state and options. */ function authorizationUrlGenerator(env) { const validatedEnvironment = environment_1.validate(env); return async function generateAuthorizationUrl(params, opts) { const openidClient = await cache_1.findOrCreateClient(validatedEnvironment); return openidClient.createAuthorizationUrl(params, opts); }; } exports.authorizationUrlGenerator = authorizationUrlGenerator; /** * [Exchanges a verification code for an access token](https://help.salesforce.com/articleView?id=remoteaccess_oauth_web_server_flow.htm#vc_for_at). * * Defaults to using a signed JWT bearer assertion to validate the user rather than the * using the client secret. However, this is configurable via the GrantOptions. * * @param env The auth environment parameters. * @returns A function that exchanges a verification code for an access token. */ function createTokenGrantor(env) { const validatedEnvironment = environment_1.validate(env); return async function requestAccessToken(params, opts) { // The GrantCheckerMiddlewareParameters type excludes the grant_type // so that it doesn't have to be set by the caller. Make sure it is set here. const internalParams = Object.assign({}, params); internalParams.grantType = 'authorization_code'; const client = await cache_1.findOrCreateClient(validatedEnvironment); return client.grant(internalParams, opts); }; } exports.createTokenGrantor = createTokenGrantor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViU2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2luZGV4L2Zsb3cvd2ViU2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHOztBQU9ILDJDQUFxRDtBQUNyRCxpRUFBMkQ7QUFFM0Q7Ozs7O0dBS0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxHQUFnQjtJQUV6RCxNQUFNLG9CQUFvQixHQUFHLHNCQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsT0FBTyxLQUFLLFVBQVUsd0JBQXdCLENBQUMsTUFBcUIsRUFBRSxJQUFrQjtRQUV2RixNQUFNLFlBQVksR0FBRyxNQUFNLDBCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEUsT0FBTyxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTFELENBQUMsQ0FBQztBQUVILENBQUM7QUFYRCw4REFXQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsR0FBZ0I7SUFFbEQsTUFBTSxvQkFBb0IsR0FBRyxzQkFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BQTBCLEVBQUUsSUFBbUI7UUFFdkYsb0VBQW9FO1FBQ3BFLDZFQUE2RTtRQUM3RSxNQUFNLGNBQWMsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0UsY0FBYyxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztRQUVoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLDBCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDOUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQXFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFbEUsQ0FBQyxDQUFDO0FBRUgsQ0FBQztBQWhCRCxnREFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGaW5hbmNpYWxGb3JjZS5jb20sIGluY1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuICogICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRmluYW5jaWFsRm9yY2UuY29tLCBpbmMgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzXG4gKiAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XG4gKiAgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbiAqICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTXG4gKiAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTExcbiAqICBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCxcbiAqICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFNcbiAqICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUllcbiAqICBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSlcbiAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG4vKipcbiAqIEBtb2R1bGUgZmxvdy93ZWJTZXJ2ZXJcbiAqL1xuXG5pbXBvcnQgeyBBdXRoQ29kZUFjY2Vzc1Rva2VuR3JhbnRvciwgQXV0aENvZGVHcmFudFBhcmFtcywgQXV0aE9wdGlvbnMsIEF1dGhVcmxHZW5lcmF0b3IsIEF1dGhVcmxQYXJhbXMsIEVudmlyb25tZW50LCBHcmFudE9wdGlvbnMsIFRva2VuR3JhbnRvclBhcmFtcyB9IGZyb20gJy4uJztcbmltcG9ydCB7IGZpbmRPckNyZWF0ZUNsaWVudCB9IGZyb20gJy4uL2NsaWVudC9jYWNoZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZSB9IGZyb20gJy4uL2NsaWVudC92YWxpZGF0b3IvZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgdG8gaW5pdGlhbGlzZSB0aGUgW09BdXRoIDIuMCBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uIEZsb3ddKGh0dHBzOi8vaGVscC5zYWxlc2ZvcmNlLmNvbS9hcnRpY2xlVmlldz9pZD1yZW1vdGVhY2Nlc3Nfb2F1dGhfd2ViX3NlcnZlcl9mbG93Lmh0bSkuXG4gKlxuICogQHBhcmFtIGVudiBUaGUgYXV0aCBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyB0aGUgYXV0aG9yaXphdGlvbiBVUkwgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYW5kIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdXRob3JpemF0aW9uVXJsR2VuZXJhdG9yKGVudjogRW52aXJvbm1lbnQpOiBBdXRoVXJsR2VuZXJhdG9yIHtcblxuXHRjb25zdCB2YWxpZGF0ZWRFbnZpcm9ubWVudCA9IHZhbGlkYXRlKGVudik7XG5cblx0cmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQXV0aG9yaXphdGlvblVybChwYXJhbXM6IEF1dGhVcmxQYXJhbXMsIG9wdHM/OiBBdXRoT3B0aW9ucykge1xuXG5cdFx0Y29uc3Qgb3BlbmlkQ2xpZW50ID0gYXdhaXQgZmluZE9yQ3JlYXRlQ2xpZW50KHZhbGlkYXRlZEVudmlyb25tZW50KTtcblx0XHRyZXR1cm4gb3BlbmlkQ2xpZW50LmNyZWF0ZUF1dGhvcml6YXRpb25VcmwocGFyYW1zLCBvcHRzKTtcblxuXHR9O1xuXG59XG5cbi8qKlxuICogW0V4Y2hhbmdlcyBhIHZlcmlmaWNhdGlvbiBjb2RlIGZvciBhbiBhY2Nlc3MgdG9rZW5dKGh0dHBzOi8vaGVscC5zYWxlc2ZvcmNlLmNvbS9hcnRpY2xlVmlldz9pZD1yZW1vdGVhY2Nlc3Nfb2F1dGhfd2ViX3NlcnZlcl9mbG93Lmh0bSN2Y19mb3JfYXQpLlxuICpcbiAqIERlZmF1bHRzIHRvIHVzaW5nIGEgc2lnbmVkIEpXVCBiZWFyZXIgYXNzZXJ0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyIHJhdGhlciB0aGFuIHRoZVxuICogdXNpbmcgdGhlIGNsaWVudCBzZWNyZXQuIEhvd2V2ZXIsIHRoaXMgaXMgY29uZmlndXJhYmxlIHZpYSB0aGUgR3JhbnRPcHRpb25zLlxuICpcbiAqIEBwYXJhbSBlbnYgVGhlIGF1dGggZW52aXJvbm1lbnQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBleGNoYW5nZXMgYSB2ZXJpZmljYXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5HcmFudG9yKGVudjogRW52aXJvbm1lbnQpOiBBdXRoQ29kZUFjY2Vzc1Rva2VuR3JhbnRvciB7XG5cblx0Y29uc3QgdmFsaWRhdGVkRW52aXJvbm1lbnQgPSB2YWxpZGF0ZShlbnYpO1xuXG5cdHJldHVybiBhc3luYyBmdW5jdGlvbiByZXF1ZXN0QWNjZXNzVG9rZW4ocGFyYW1zOiBUb2tlbkdyYW50b3JQYXJhbXMsIG9wdHM/OiBHcmFudE9wdGlvbnMpIHtcblxuXHRcdC8vIFRoZSBHcmFudENoZWNrZXJNaWRkbGV3YXJlUGFyYW1ldGVycyB0eXBlIGV4Y2x1ZGVzIHRoZSBncmFudF90eXBlXG5cdFx0Ly8gc28gdGhhdCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgc2V0IGJ5IHRoZSBjYWxsZXIuIE1ha2Ugc3VyZSBpdCBpcyBzZXQgaGVyZS5cblx0XHRjb25zdCBpbnRlcm5hbFBhcmFtczogUGFydGlhbDxBdXRoQ29kZUdyYW50UGFyYW1zPiA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyk7XG5cdFx0aW50ZXJuYWxQYXJhbXMuZ3JhbnRUeXBlID0gJ2F1dGhvcml6YXRpb25fY29kZSc7XG5cblx0XHRjb25zdCBjbGllbnQgPSBhd2FpdCBmaW5kT3JDcmVhdGVDbGllbnQodmFsaWRhdGVkRW52aXJvbm1lbnQpO1xuXHRcdHJldHVybiBjbGllbnQuZ3JhbnQoaW50ZXJuYWxQYXJhbXMgYXMgQXV0aENvZGVHcmFudFBhcmFtcywgb3B0cyk7XG5cblx0fTtcblxufVxuIl19