UNPKG

@financialforcedev/orizuru-auth

Version:

Salesforce authentication for Heroku Node applications.

53 lines 8.15 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"); /** * Uses the [OAuth 2.0 JWT Bearer Token Flow](https://help.salesforce.com/articleView?id=remoteaccess_oauth_jwt_flow.htm) to request an access token. * * @param env The auth environment parameters. * @returns A function that requests an access token for a given user. */ function createTokenGrantor(env) { const validatedEnvironment = environment_1.validate(env); return async function requestAccessToken(params, opts) { try { // The TokenGrantorParams interface 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 = 'urn:ietf:params:oauth:grant-type:jwt-bearer'; const client = await cache_1.findOrCreateClient(validatedEnvironment); return await client.grant(internalParams, opts); } catch (error) { throw new Error(`Invalid grant for user (${params.user.username}). Caused by: ${error.message}`); } }; } exports.createTokenGrantor = createTokenGrantor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0QmVhcmVyVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5kZXgvZmxvdy9qd3RCZWFyZXJUb2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRzs7QUFPSCwyQ0FBcUQ7QUFDckQsaUVBQTJEO0FBRTNEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsR0FBZ0I7SUFFbEQsTUFBTSxvQkFBb0IsR0FBRyxzQkFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BQThCLEVBQUUsSUFBbUI7UUFFM0YsSUFBSTtZQUVILHNFQUFzRTtZQUN0RSxrRUFBa0U7WUFDbEUsTUFBTSxjQUFjLEdBQTRCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFFLGNBQWMsQ0FBQyxTQUFTLEdBQUcsNkNBQTZDLENBQUM7WUFFekUsTUFBTSxNQUFNLEdBQUcsTUFBTSwwQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlELE9BQU8sTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWdDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FFbEU7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxpQkFBaUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDakc7SUFFRixDQUFDLENBQUM7QUFFSCxDQUFDO0FBdEJELGdEQXNCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZpbmFuY2lhbEZvcmNlLmNvbSwgaW5jXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG4gKiAgIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBGaW5hbmNpYWxGb3JjZS5jb20sIGluYyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnNcbiAqICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcbiAqICAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcbiAqICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTFxuICogIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICogIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EU1xuICogIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuICogIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKVxuICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbi8qKlxuICogQG1vZHVsZSBmbG93L2p3dEJlYXJlclRva2VuXG4gKi9cblxuaW1wb3J0IHsgQWNjZXNzVG9rZW5SZXNwb25zZSwgRW52aXJvbm1lbnQsIEdyYW50T3B0aW9ucywgSnd0QmVhcmVyQWNjZXNzVG9rZW5HcmFudG9yLCBKd3RHcmFudFBhcmFtcywgVXNlclRva2VuR3JhbnRvclBhcmFtcyB9IGZyb20gJy4uJztcbmltcG9ydCB7IGZpbmRPckNyZWF0ZUNsaWVudCB9IGZyb20gJy4uL2NsaWVudC9jYWNoZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZSB9IGZyb20gJy4uL2NsaWVudC92YWxpZGF0b3IvZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIFVzZXMgdGhlIFtPQXV0aCAyLjAgSldUIEJlYXJlciBUb2tlbiBGbG93XShodHRwczovL2hlbHAuc2FsZXNmb3JjZS5jb20vYXJ0aWNsZVZpZXc/aWQ9cmVtb3RlYWNjZXNzX29hdXRoX2p3dF9mbG93Lmh0bSkgdG8gcmVxdWVzdCBhbiBhY2Nlc3MgdG9rZW4uXG4gKlxuICogQHBhcmFtIGVudiBUaGUgYXV0aCBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHJlcXVlc3RzIGFuIGFjY2VzcyB0b2tlbiBmb3IgYSBnaXZlbiB1c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5HcmFudG9yKGVudjogRW52aXJvbm1lbnQpOiBKd3RCZWFyZXJBY2Nlc3NUb2tlbkdyYW50b3Ige1xuXG5cdGNvbnN0IHZhbGlkYXRlZEVudmlyb25tZW50ID0gdmFsaWRhdGUoZW52KTtcblxuXHRyZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFjY2Vzc1Rva2VuKHBhcmFtczogVXNlclRva2VuR3JhbnRvclBhcmFtcywgb3B0cz86IEdyYW50T3B0aW9ucyk6IFByb21pc2U8QWNjZXNzVG9rZW5SZXNwb25zZT4ge1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Ly8gVGhlIFRva2VuR3JhbnRvclBhcmFtcyBpbnRlcmZhY2UgZXhjbHVkZXMgdGhlIGdyYW50X3R5cGUgc28gdGhhdCBpdFxuXHRcdFx0Ly8gZG9lc24ndCBoYXZlIHRvIGJlIHNldCBieSB0aGUgY2FsbGVyLiBNYWtlIHN1cmUgaXQgaXMgc2V0IGhlcmUuXG5cdFx0XHRjb25zdCBpbnRlcm5hbFBhcmFtczogUGFydGlhbDxKd3RHcmFudFBhcmFtcz4gPSBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpO1xuXHRcdFx0aW50ZXJuYWxQYXJhbXMuZ3JhbnRUeXBlID0gJ3VybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmp3dC1iZWFyZXInO1xuXG5cdFx0XHRjb25zdCBjbGllbnQgPSBhd2FpdCBmaW5kT3JDcmVhdGVDbGllbnQodmFsaWRhdGVkRW52aXJvbm1lbnQpO1xuXHRcdFx0cmV0dXJuIGF3YWl0IGNsaWVudC5ncmFudChpbnRlcm5hbFBhcmFtcyBhcyBKd3RHcmFudFBhcmFtcywgb3B0cyk7XG5cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdyYW50IGZvciB1c2VyICgke3BhcmFtcy51c2VyLnVzZXJuYW1lfSkuIENhdXNlZCBieTogJHtlcnJvci5tZXNzYWdlfWApO1xuXHRcdH1cblxuXHR9O1xuXG59XG4iXX0=