UNPKG

@mft/moneyhub-api-client

Version:
503 lines 19.6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const got_1 = __importDefault(require("got")); const R = __importStar(require("ramda")); const filterUndefined = R.reject(R.isNil); exports.default = ({ client, config, }) => { const { identityServiceUrl, client: { client_id, redirect_uri, response_type, }, } = config; const setPermissionsToClaims = (permissions, permissionsAction) => (claims) => { if (permissions && R.is(Array, permissions)) { return R.mergeDeepRight(claims, { id_token: { "mh:consent": { essential: true, value: { permissions, permissionsAction: permissionsAction || "add", }, }, }, }); } return claims; }; const getAuthorizeUrlFromRequestUri = ({ requestUri }) => { return `${client.issuer.authorization_endpoint}?request_uri=${requestUri}`; }; const getRequestObject = ({ scope, state, claims, nonce, pkceParams, }) => { const authParams = filterUndefined({ client_id, scope, state, nonce, claims, exp: Math.round(Date.now() / 1000) + 300, redirect_uri, response_type, prompt: "consent", ...pkceParams, }); return client.requestObject(authParams); }; const getAuthorizationUrlFromParams = async ({ scope, state, claims, nonce, pkceParams, }) => { const request = await getRequestObject({ scope, state, claims, nonce, pkceParams }); const { request_uri: requestUri } = await client.pushedAuthorizationRequest({ request }); const url = getAuthorizeUrlFromRequestUri({ requestUri, }); return url; }; const getAuthorizeUrl = ({ state, scope, nonce, claims = {}, permissions, permissionsAction, enableAsync, accVerification, expirationDateTime, transactionFromDateTime, codeChallenge, }) => { const pkceParams = codeChallenge ? { code_challenge: codeChallenge, code_challenge_method: "S256", } : undefined; const defaultClaims = { id_token: { sub: { essential: true, }, "mh:con_id": { essential: true, }, ...(expirationDateTime || transactionFromDateTime) && { "mh:consent": { "essential": true, "value": { ...expirationDateTime && { expirationDateTime }, ...transactionFromDateTime && { transactionFromDateTime }, }, }, }, ...enableAsync && { "mh:sync": { "essential": true, "value": { "enableAsync": true }, }, ...accVerification && { "mh:account_verification": { "essential": true, "value": { "accVerification": true }, }, }, }, }, }; const _claims = R.compose(setPermissionsToClaims(permissions, permissionsAction), R.mergeDeepRight(defaultClaims))(claims); return getAuthorizationUrlFromParams({ scope, claims: _claims, nonce, state, pkceParams, }); }; const getAuthorizeUrlLegacy = ({ state, scope, nonce, claims = {}, permissions, permissionsAction, enableAsync, expirationDateTime, transactionFromDateTime, codeChallenge, }) => { const pkceParams = codeChallenge ? { code_challenge: codeChallenge, code_challenge_method: "S256", } : undefined; const authParams = filterUndefined({ scope, state, nonce, }); const defaultClaims = { id_token: { sub: { essential: true, }, "mh:con_id": { essential: true, }, ...(expirationDateTime || transactionFromDateTime) && { "mh:consent": { "essential": true, "value": { ...expirationDateTime && { expirationDateTime }, ...transactionFromDateTime && { transactionFromDateTime }, }, }, }, ...enableAsync && { "mh:sync": { "essential": true, "value": { "enableAsync": true }, }, }, }, }; const _claims = R.compose(setPermissionsToClaims(permissions, permissionsAction), R.mergeDeepRight(defaultClaims))(claims); return client.requestObject({ ...pkceParams, ...authParams, claims: _claims, max_age: 86400, }) .then((request) => ({ ...authParams, request, })) .then(client.authorizationUrl.bind(client)); }; const getRequestUri = async (requestObject) => { const { body } = await got_1.default.post(identityServiceUrl + "/request", { body: requestObject, headers: { "Content-Type": "application/jws", }, }); return body; }; return { getAuthorizeUrl, getAuthorizeUrlLegacy, getAuthorizeUrlFromRequestUri, requestObject: getRequestObject, getRequestUri, getAuthorizeUrlForCreatedUser: async ({ bankId, state, nonce, userId, claims = {}, permissions, permissionsAction, expirationDateTime, transactionFromDateTime, enableAsync, codeChallenge, }) => { const scope = `id:${bankId} openid`; const defaultClaims = { id_token: { sub: { essential: true, value: userId, }, "mh:con_id": { essential: true, }, }, }; const _claims = R.compose(setPermissionsToClaims(permissions, permissionsAction), R.mergeDeepRight(defaultClaims))(claims); const url = await getAuthorizeUrl({ state, nonce, scope, claims: _claims, expirationDateTime, transactionFromDateTime, permissions, permissionsAction, enableAsync, codeChallenge, }); return url; }, getReauthAuthorizeUrlForCreatedUser: async ({ userId, connectionId, state, nonce, claims = {}, expirationDateTime, transactionFromDateTime, enableAsync, codeChallenge, }) => { const scope = "openid reauth"; const defaultClaims = { id_token: { sub: { essential: true, value: userId, }, "mh:con_id": { essential: true, value: connectionId, }, }, }; const _claims = R.mergeDeepRight(defaultClaims, claims); const url = await getAuthorizeUrl({ state, nonce, scope, claims: _claims, expirationDateTime, transactionFromDateTime, enableAsync, codeChallenge, }); return url; }, getReconsentAuthorizeUrlForCreatedUser: async ({ userId, connectionId, expiresAt, state, nonce, claims = {}, codeChallenge, }) => { const scope = "openid reconsent"; const defaultClaims = { id_token: { sub: { essential: true, value: userId, }, "mh:con_id": { essential: true, value: connectionId, }, "mh:consent": { value: { expirationDateTime: expiresAt, }, }, }, }; const _claims = R.mergeDeepRight(defaultClaims, claims); return getAuthorizeUrl({ state, nonce, scope, claims: _claims, codeChallenge, }); }, getRefreshAuthorizeUrlForCreatedUser: async ({ userId, connectionId, state, nonce, claims = {}, expirationDateTime, transactionFromDateTime, enableAsync, codeChallenge, }) => { const scope = "openid refresh"; const defaultClaims = { id_token: { sub: { essential: true, value: userId, }, "mh:con_id": { essential: true, value: connectionId, }, }, }; const _claims = R.mergeDeepRight(defaultClaims, claims); return getAuthorizeUrl({ state, scope, nonce, claims: _claims, expirationDateTime, transactionFromDateTime, enableAsync, codeChallenge, }); }, getPaymentAuthorizeUrl: async ({ bankId, payeeRef, payeeId, payee, payer, payeeType, amount, payerRef, payerId, payerType, state, nonce, context, readRefundAccount, userId, claims = {}, codeChallenge, }) => { if (!state) { console.error("State is required"); throw new Error("Missing parameters"); } if (!payeeId && !payee) { console.error("PayeeId or Payee are required"); throw new Error("Missing parameters"); } const scope = `payment openid id:${bankId}`; const defaultClaims = { id_token: { "mh:con_id": { essential: true, }, "mh:payment": { essential: true, value: { amount, payeeRef, payerRef, payeeId, payee, payer, payeeType, payerId, payerType, context, readRefundAccount, }, }, ...userId && { sub: { value: userId, }, }, }, }; const _claims = R.mergeDeepRight(defaultClaims, claims); return getAuthorizeUrl({ scope, state, claims: _claims, nonce, codeChallenge, }); }, getReversePaymentAuthorizeUrl: async ({ bankId, paymentId, state, nonce, amount, claims = {}, payerId, payerType, payer, codeChallenge, }) => { if (!state) { console.error("State is required"); throw new Error("Missing parameters"); } if (!paymentId) { console.error("PayeeId is required"); throw new Error("Missing parameters"); } const scope = `reverse_payment openid id:${bankId}`; const defaultClaims = { id_token: { "mh:con_id": { essential: true, }, "mh:reverse_payment": { essential: true, value: { payerId, payerType, paymentId, payer, amount, }, }, "mh:payment": { essential: true, }, }, }; const _claims = R.mergeDeepRight(defaultClaims, claims); return getAuthorizeUrl({ scope, state, claims: _claims, nonce, codeChallenge, }); }, getRecurringPaymentAuthorizeUrl: async ({ bankId, payeeId, payee, payeeType, payerId, payerType, reference, validFromDate, validToDate, maximumIndividualAmount, currency, periodicLimits, type, context, state, nonce, userId, claims = {}, codeChallenge, }) => { if (!state) { console.error("State is required"); throw new Error("Missing parameters"); } if (!payeeId && !payee) { console.error("PayeeId or Payee are required"); throw new Error("Missing parameters"); } const scope = `recurring_payment:create openid id:${bankId}`; const defaultClaims = { id_token: { "mh:con_id": { essential: true, }, "mh:recurring_payment": { essential: true, value: { payeeId, payee, payeeType, payerId, payerType, reference, validFromDate, validToDate, maximumIndividualAmount, currency, periodicLimits, type, context, }, }, ...userId && { sub: { value: userId, }, }, }, }; const _claims = R.mergeDeepRight(defaultClaims, claims); return getAuthorizeUrl({ scope, state, claims: _claims, nonce, codeChallenge, }); }, getStandingOrderAuthorizeUrl: async ({ bankId, payeeId, payee, payeeType, payerId, payerType, reference, frequency, numberOfPayments, firstPaymentAmount, recurringPaymentAmount, finalPaymentAmount, currency, firstPaymentDate, recurringPaymentDate, finalPaymentDate, state, nonce, context, claims = {}, codeChallenge, }) => { if (!state) { console.error("State is required"); throw new Error("Missing parameters"); } if (!payeeId && !payee) { console.error("PayeeId or Payee are required"); throw new Error("Missing parameters"); } const scope = `standing_orders:create openid id:${bankId}`; const defaultClaims = { id_token: { "mh:con_id": { essential: true, }, "mh:standing_order": { essential: true, value: { payeeId, payee, payeeType, payerId, payerType, reference, frequency, numberOfPayments, firstPaymentAmount, recurringPaymentAmount, finalPaymentAmount, currency, firstPaymentDate, recurringPaymentDate, finalPaymentDate, context, }, }, }, }; const _claims = R.mergeDeepRight(defaultClaims, claims); return getAuthorizeUrl({ scope, state, claims: _claims, nonce, codeChallenge, }); }, getPushedAuthorisationRequestUrl: async ({ bankId, state, nonce, userId, claims = {}, permissions, permissionsAction, expirationDateTime, transactionFromDateTime, enableAsync, codeChallenge, }) => { const scope = `id:${bankId} openid`; const defaultClaims = { id_token: { sub: { essential: true, value: userId, }, "mh:con_id": { essential: true, }, }, }; const _claims = R.compose(setPermissionsToClaims(permissions, permissionsAction), R.mergeDeepRight(defaultClaims))(claims); return getAuthorizeUrl({ scope, claims: _claims, codeChallenge, enableAsync, expirationDateTime, nonce, permissions, state, transactionFromDateTime, }); }, }; }; //# sourceMappingURL=get-auth-urls.js.map