UNPKG

salesforce-jwt-promise

Version:

Promise Based SalesForce Auth 2.0 JWT Bearer Token Flow Implementation, written in typescript

75 lines (64 loc) 2.17 kB
import * as request from 'request' import * as jwt from 'jsonwebtoken'; export interface JWTResponse { access_token: string; scope: string; instance_url: string; id: string; token_type: string; } export interface JWTError { error: string; error_description: string; } export interface JWTOptions { clientId: string, privateKey: string; userName: string; audience?: string; //defaults to login.salesforce.com instanceUrl?: string; //defaults to audience } export const getJWTToken = (opts: JWTOptions): Promise<JWTResponse> => { let audience = opts.audience || 'https://login.salesforce.com'; let instanceUrl = opts.instanceUrl || audience; var options: jwt.SignOptions = { issuer: opts.clientId, audience, expiresIn: 3, algorithm: 'RS256' } var token = jwt.sign({ prn: opts.userName }, opts.privateKey, options); return new Promise((resolve, reject) => { request( { uri: `${instanceUrl}/services/oauth2/token`, form: { 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'assertion': token }, method: 'post' }, function (err, res, body) { if (err) { reject(err); }; if (!body) { reject(new Error('No response from oauth endpoint.')); return; }; var respBody; try { respBody = JSON.parse(body); } catch (e) { reject(new Error('Could Not Parse Response')); return; } if (res.statusCode != 200) { let respError = respBody as JWTError; var message = 'Failed to Authenticate: ' + respError.error + ' (' + respError.error_description + ')'; reject(new Error(message)) return; }; resolve(respBody as JWTResponse); }); }) }