Skip to content

Commit

Permalink
FEN-499: Support OAuth via access_token [React Native] (#90)
Browse files Browse the repository at this point in the history
* FEN-499: Support oath access token

* test: include access_token in assertions

* 3.0.5
  • Loading branch information
kingisaac95 authored Jul 4, 2024
1 parent b0e8625 commit 264a4b9
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 13 deletions.
33 changes: 25 additions & 8 deletions __tests__/Lean.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@ describe('Lean SDK', () => {
});

it('all params: returns the correct URL', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=link&customer_id=dda80d32-4062-404c-abe7-ba9b9290c873&permissions=identity&permissions=accounts&permissions=balance&permissions=transactions&bank_identifier=LEANMB1_SAU&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=link&customer_id=dda80d32-4062-404c-abe7-ba9b9290c873&permissions=identity&permissions=accounts&permissions=balance&permissions=transactions&bank_identifier=LEANMB1_SAU&access_token=test&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;

const initializationURL = lean.link({
customer_id: config.customerId,
permissions: ['identity', 'accounts', 'balance', 'transactions'],
bank_identifier: 'LEANMB1_SAU',
access_token: 'test',
fail_redirect_url: 'https://dev.leantech.me/fail',
success_redirect_url: 'https://dev.leantech.me/success',
});
Expand All @@ -59,7 +60,7 @@ describe('Lean SDK', () => {
});

it('all params: returns the correct URL', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=connect&customer_id=dda80d32-4062-404c-abe7-ba9b9290c873&permissions=identity&permissions=accounts&permissions=balance&permissions=transactions&permissions=payments&bank_identifier=LEANMB1_SAU&end_user_id=626715d7-222f-4087-bcce-2832135e4981&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&access_to=10-10-2023&access_from=10-05-2023&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=connect&customer_id=dda80d32-4062-404c-abe7-ba9b9290c873&permissions=identity&permissions=accounts&permissions=balance&permissions=transactions&permissions=payments&bank_identifier=LEANMB1_SAU&end_user_id=626715d7-222f-4087-bcce-2832135e4981&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&access_token=test&access_to=10-10-2023&access_from=10-05-2023&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;

const initializationURL = lean.connect({
customer_id: config.customerId,
Expand All @@ -70,6 +71,7 @@ describe('Lean SDK', () => {
'transactions',
'payments',
],
access_token: 'test',
access_to: '10-10-2023',
access_from: '10-05-2023',
end_user_id: '626715d7-222f-4087-bcce-2832135e4981',
Expand All @@ -84,7 +86,7 @@ describe('Lean SDK', () => {
});

describe('reconnect', () => {
it('returns the correct URL when called', () => {
it('partial params: returns the correct URL when called', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=reconnect&reconnect_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0`;

const initializationURL = lean.reconnect({
Expand All @@ -93,6 +95,17 @@ describe('Lean SDK', () => {

expect(initializationURL).toBe(expectedUrl);
});

it('all params: returns the correct URL when called', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=reconnect&reconnect_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&access_token=test`;

const initializationURL = lean.reconnect({
access_token: 'test',
reconnect_id: '617207b3-a4d4-4413-ba1b-b8d32efd58a0',
});

expect(initializationURL).toBe(expectedUrl);
});
});

describe('createBeneficiary', () => {
Expand All @@ -107,9 +120,10 @@ describe('Lean SDK', () => {
});

it('all params: returns the correct URL', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=createBeneficiary&customer_id=726715d7-222f-4087-bcce-2832135e4981&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success&payment_source_id=8b3b7960-c4a1-41da-8ad0-5df36cf67540&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0`;
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=createBeneficiary&customer_id=726715d7-222f-4087-bcce-2832135e4981&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success&access_token=test&payment_source_id=8b3b7960-c4a1-41da-8ad0-5df36cf67540&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0`;

const initializationURL = lean.createBeneficiary({
access_token: 'test',
customer_id: '726715d7-222f-4087-bcce-2832135e4981',
fail_redirect_url: 'https://dev.leantech.me/fail',
success_redirect_url: 'https://dev.leantech.me/success',
Expand All @@ -133,9 +147,10 @@ describe('Lean SDK', () => {
});

it('all params: returns the correct URL', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=createPaymentSource&customer_id=726715d7-222f-4087-bcce-2832135e4981&bank_identifier=LEANMB1_SAU&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=createPaymentSource&customer_id=726715d7-222f-4087-bcce-2832135e4981&bank_identifier=LEANMB1_SAU&access_token=test&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;

const initializationURL = lean.createPaymentSource({
access_token: 'test',
bank_identifier: 'LEANMB1_SAU',
customer_id: '726715d7-222f-4087-bcce-2832135e4981',
fail_redirect_url: 'https://dev.leantech.me/fail',
Expand All @@ -160,9 +175,10 @@ describe('Lean SDK', () => {
});

it('all params: returns the correct URL', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=updatePaymentSource&customer_id=726715d7-222f-4087-bcce-2832135e4981&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&payment_source_id=8b3b7960-c4a1-41da-8ad0-5df36cf67540&end_user_id=626715d7-222f-4087-bcce-2832135e4981&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=updatePaymentSource&customer_id=726715d7-222f-4087-bcce-2832135e4981&access_token=test&payment_destination_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&payment_source_id=8b3b7960-c4a1-41da-8ad0-5df36cf67540&end_user_id=626715d7-222f-4087-bcce-2832135e4981&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;

const initializationURL = lean.updatePaymentSource({
access_token: 'test',
customer_id: '726715d7-222f-4087-bcce-2832135e4981',
end_user_id: '626715d7-222f-4087-bcce-2832135e4981',
fail_redirect_url: 'https://dev.leantech.me/fail',
Expand All @@ -187,10 +203,11 @@ describe('Lean SDK', () => {
});

it('all params: returns the correct URL', () => {
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=pay&payment_intent_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&account_id=8b3b7960-c4a1-41da-8ad0-5df36cf67540&end_user_id=626715d7-222f-4087-bcce-2832135e4981&show_balances=true&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;
const expectedUrl = `https://cdn.leantech.me/link/loader/prod/ae/latest/lean-sdk.html?implementation=webview-hosted-html&implementation_config=platform+mobile&implementation_config=sdk+react_native&implementation_config=os+ios&implementation_config=sdk_version+${pkg.version}&implementation_config=is_version_pinned+false&app_token=9fb9e934-9efb-4e7e-a508-de67c0839be0&sandbox=false&language=en&version=latest&country=ae&env=production&method=pay&payment_intent_id=617207b3-a4d4-4413-ba1b-b8d32efd58a0&access_token=test&account_id=8b3b7960-c4a1-41da-8ad0-5df36cf67540&end_user_id=626715d7-222f-4087-bcce-2832135e4981&show_balances=true&fail_redirect_url=https://dev.leantech.me/fail&success_redirect_url=https://dev.leantech.me/success`;

const initializationURL = lean.pay({
show_balances: true,
access_token: 'test',
account_id: '8b3b7960-c4a1-41da-8ad0-5df36cf67540',
end_user_id: '626715d7-222f-4087-bcce-2832135e4981',
payment_intent_id: '617207b3-a4d4-4413-ba1b-b8d32efd58a0',
Expand All @@ -202,7 +219,7 @@ describe('Lean SDK', () => {
});
});

describe('link with custom params', () => {
describe('link with customization params', () => {
const leanWithCustomization = new Lean({
appToken: config.appToken,
env: 'production',
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"main": "src/components/LinkSDK/index.js",
"name": "lean-react-native",
"version": "3.0.4",
"version": "3.0.5",
"description": "A React Native wrapper for Lean's LinkSDK",
"repository": {
"type": "git",
Expand Down
54 changes: 52 additions & 2 deletions src/components/LinkSDK/Lean.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ class Lean {
bank_identifier,
fail_redirect_url,
success_redirect_url,
access_token,
}) {
const permissionsParams = this.convertPermissionsToURLString(permissions);
const customizationParams = this.convertCustomizationToURLString();
Expand All @@ -118,6 +119,12 @@ class Lean {
);
}

if (access_token) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TOKEN}=${access_token}`,
);
}

if (fail_redirect_url) {
initializationURL = initializationURL.concat(
`&${Params.FAIL_REDIRECT_URL}=${fail_redirect_url}`,
Expand All @@ -144,6 +151,7 @@ class Lean {
success_redirect_url,
payment_destination_id,
account_type,
access_token,
}) {
const permissionsParams = this.convertPermissionsToURLString(permissions);
const customizationParams = this.convertCustomizationToURLString();
Expand Down Expand Up @@ -173,6 +181,12 @@ class Lean {
);
}

if (access_token) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TOKEN}=${access_token}`,
);
}

if (access_to) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TO}=${access_to}`,
Expand Down Expand Up @@ -206,13 +220,21 @@ class Lean {
return initializationURL;
}

reconnect({reconnect_id}) {
reconnect({reconnect_id, access_token}) {
const customizationParams = this.convertCustomizationToURLString();

return this.baseUrl
let initializationURL = this.baseUrl
.concat(`&method=${Methods.RECONNECT}`)
.concat(`&${Params.RECONNECT_ID}=${reconnect_id}`)
.concat(customizationParams);

if (access_token) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TOKEN}=${access_token}`,
);
}

return initializationURL;
}

createBeneficiary({
Expand All @@ -221,6 +243,7 @@ class Lean {
fail_redirect_url,
success_redirect_url,
payment_destination_id,
access_token,
}) {
const customizationParams = this.convertCustomizationToURLString();

Expand All @@ -242,6 +265,12 @@ class Lean {
);
}

if (access_token) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TOKEN}=${access_token}`,
);
}

if (payment_source_id) {
initializationURL = initializationURL.concat(
`&${Params.PAYMENT_SOURCE_ID}=${payment_source_id}`,
Expand All @@ -263,6 +292,7 @@ class Lean {
fail_redirect_url,
success_redirect_url,
payment_destination_id,
access_token,
}) {
const customizationParams = this.convertCustomizationToURLString();

Expand All @@ -278,6 +308,12 @@ class Lean {
);
}

if (access_token) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TOKEN}=${access_token}`,
);
}

if (payment_destination_id) {
initializationURL = initializationURL.concat(
`&${Params.PAYMENT_DESTINATION_ID}=${payment_destination_id}`,
Expand Down Expand Up @@ -306,6 +342,7 @@ class Lean {
fail_redirect_url,
success_redirect_url,
payment_destination_id,
access_token,
}) {
const customizationParams = this.convertCustomizationToURLString();

Expand All @@ -315,6 +352,12 @@ class Lean {
.concat(customizationParams);

// only include properties that are set
if (access_token) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TOKEN}=${access_token}`,
);
}

if (payment_destination_id) {
initializationURL = initializationURL.concat(
`&${Params.PAYMENT_DESTINATION_ID}=${payment_destination_id}`,
Expand Down Expand Up @@ -356,6 +399,7 @@ class Lean {
payment_intent_id,
success_redirect_url,
bulk_payment_intent_id,
access_token,
}) {
const customizationParams = this.convertCustomizationToURLString();

Expand All @@ -376,6 +420,12 @@ class Lean {
);
}

if (access_token) {
initializationURL = initializationURL.concat(
`&${Params.ACCESS_TOKEN}=${access_token}`,
);
}

if (account_id) {
initializationURL = initializationURL.concat(
`&${Params.ACCOUNT_ID}=${account_id}`,
Expand Down
1 change: 1 addition & 0 deletions src/components/LinkSDK/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export const Params = {
ACCOUNT_TYPE: 'account_type',
END_USER_ID: 'end_user_id',
ENTITY_ID: 'entity_id',
ACCESS_TOKEN: 'access_token',
};

export const Methods = {
Expand Down

0 comments on commit 264a4b9

Please sign in to comment.