@mft/moneyhub-api-client
Version:
Node.JS client for the Moneyhub API
503 lines • 19.6 kB
JavaScript
;
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