@spare-technologies/spare-link 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/internal/bank-redirect.js +20 -9
- package/lib/commonjs/internal/bank-redirect.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/internal/bank-redirect.js +20 -9
- package/lib/module/internal/bank-redirect.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/internal/bank-redirect.d.ts.map +1 -1
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/internal/bank-redirect.d.ts.map +1 -1
- package/lib/typescript/module/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/internal/bank-redirect.ts +23 -9
- package/src/version.ts +1 -1
|
@@ -14,9 +14,15 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
14
14
|
* 1. If `mobileAppUrl` is provided (e.g. `altareq://authorize?...`), try
|
|
15
15
|
* `Linking.openURL` after checking `canOpenURL` — this launches the
|
|
16
16
|
* bank's app directly without a browser tab.
|
|
17
|
-
* 2. Otherwise (or if step 1 fails)
|
|
18
|
-
* `
|
|
19
|
-
*
|
|
17
|
+
* 2. Otherwise (or if step 1 fails) hand `authorizationUrl` to the OS with
|
|
18
|
+
* `Linking.openURL`, so the bank's app opens it where one claims the URL.
|
|
19
|
+
* 3. Only if that throws, retry in `expo-web-browser`'s in-app browser tab.
|
|
20
|
+
*
|
|
21
|
+
* Steps 2 and 3 are in that order because the redirection guide requires it:
|
|
22
|
+
* https://nebras-open-finance.com/tech/tpp-standards/security/fapi/opening-the-redirect
|
|
23
|
+
* An in-app browser tab is a permitted fallback — it is a real browser surface,
|
|
24
|
+
* not an embedded webview — but it takes the routing decision away from the OS,
|
|
25
|
+
* so preferring it means app-to-app redirection never gets the chance to happen.
|
|
20
26
|
*/
|
|
21
27
|
const log = (0, _logger.createLogger)('BankRedirect');
|
|
22
28
|
async function loadWebBrowser() {
|
|
@@ -41,13 +47,18 @@ async function launchBankRedirect(args) {
|
|
|
41
47
|
log.warning(`launch: mobile deep link failed (${e instanceof Error ? e.message : String(e)}) — falling back`);
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
log.info('launch:
|
|
47
|
-
await wb.openBrowserAsync(args.authorizationUrl);
|
|
50
|
+
try {
|
|
51
|
+
await _reactNative.Linking.openURL(args.authorizationUrl);
|
|
52
|
+
log.info('launch: authorization URL handed to the OS');
|
|
48
53
|
return;
|
|
54
|
+
} catch (e) {
|
|
55
|
+
log.warning(`launch: OS could not open the authorization URL (${e instanceof Error ? e.message : String(e)}) — retrying in an in-app browser tab`);
|
|
56
|
+
}
|
|
57
|
+
const wb = await loadWebBrowser();
|
|
58
|
+
if (!wb?.openBrowserAsync) {
|
|
59
|
+
throw new Error('Unable to open bank authorization URL');
|
|
49
60
|
}
|
|
50
|
-
log.info('launch: opening authorization URL in
|
|
51
|
-
await
|
|
61
|
+
log.info('launch: opening authorization URL in in-app browser tab');
|
|
62
|
+
await wb.openBrowserAsync(args.authorizationUrl);
|
|
52
63
|
}
|
|
53
64
|
//# sourceMappingURL=bank-redirect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_logger","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","log","createLogger","loadWebBrowser","Promise","resolve","then","launchBankRedirect","args","mobileAppUrl","info","can","Linking","canOpenURL","openURL","warning","Error","message","String","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_logger","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","log","createLogger","loadWebBrowser","Promise","resolve","then","launchBankRedirect","args","mobileAppUrl","info","can","Linking","canOpenURL","openURL","warning","Error","message","String","authorizationUrl","wb","openBrowserAsync"],"sourceRoot":"../../../src","sources":["internal/bank-redirect.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -12,5 +12,5 @@ exports.SDK_VERSION = void 0;
|
|
|
12
12
|
* `changeset version`). The src/index.ts smoke test asserts this matches
|
|
13
13
|
* package.json's version.
|
|
14
14
|
*/
|
|
15
|
-
const SDK_VERSION = exports.SDK_VERSION = '1.0.
|
|
15
|
+
const SDK_VERSION = exports.SDK_VERSION = '1.0.1';
|
|
16
16
|
//# sourceMappingURL=version.js.map
|
|
@@ -8,9 +8,15 @@
|
|
|
8
8
|
* 1. If `mobileAppUrl` is provided (e.g. `altareq://authorize?...`), try
|
|
9
9
|
* `Linking.openURL` after checking `canOpenURL` — this launches the
|
|
10
10
|
* bank's app directly without a browser tab.
|
|
11
|
-
* 2. Otherwise (or if step 1 fails)
|
|
12
|
-
* `
|
|
13
|
-
*
|
|
11
|
+
* 2. Otherwise (or if step 1 fails) hand `authorizationUrl` to the OS with
|
|
12
|
+
* `Linking.openURL`, so the bank's app opens it where one claims the URL.
|
|
13
|
+
* 3. Only if that throws, retry in `expo-web-browser`'s in-app browser tab.
|
|
14
|
+
*
|
|
15
|
+
* Steps 2 and 3 are in that order because the redirection guide requires it:
|
|
16
|
+
* https://nebras-open-finance.com/tech/tpp-standards/security/fapi/opening-the-redirect
|
|
17
|
+
* An in-app browser tab is a permitted fallback — it is a real browser surface,
|
|
18
|
+
* not an embedded webview — but it takes the routing decision away from the OS,
|
|
19
|
+
* so preferring it means app-to-app redirection never gets the chance to happen.
|
|
14
20
|
*/
|
|
15
21
|
import { Linking } from 'react-native';
|
|
16
22
|
import { createLogger } from "./logger.js";
|
|
@@ -37,13 +43,18 @@ export async function launchBankRedirect(args) {
|
|
|
37
43
|
log.warning(`launch: mobile deep link failed (${e instanceof Error ? e.message : String(e)}) — falling back`);
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
log.info('launch:
|
|
43
|
-
await wb.openBrowserAsync(args.authorizationUrl);
|
|
46
|
+
try {
|
|
47
|
+
await Linking.openURL(args.authorizationUrl);
|
|
48
|
+
log.info('launch: authorization URL handed to the OS');
|
|
44
49
|
return;
|
|
50
|
+
} catch (e) {
|
|
51
|
+
log.warning(`launch: OS could not open the authorization URL (${e instanceof Error ? e.message : String(e)}) — retrying in an in-app browser tab`);
|
|
52
|
+
}
|
|
53
|
+
const wb = await loadWebBrowser();
|
|
54
|
+
if (!wb?.openBrowserAsync) {
|
|
55
|
+
throw new Error('Unable to open bank authorization URL');
|
|
45
56
|
}
|
|
46
|
-
log.info('launch: opening authorization URL in
|
|
47
|
-
await
|
|
57
|
+
log.info('launch: opening authorization URL in in-app browser tab');
|
|
58
|
+
await wb.openBrowserAsync(args.authorizationUrl);
|
|
48
59
|
}
|
|
49
60
|
//# sourceMappingURL=bank-redirect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Linking","createLogger","log","loadWebBrowser","launchBankRedirect","args","mobileAppUrl","info","can","canOpenURL","openURL","warning","e","Error","message","String","
|
|
1
|
+
{"version":3,"names":["Linking","createLogger","log","loadWebBrowser","launchBankRedirect","args","mobileAppUrl","info","can","canOpenURL","openURL","warning","e","Error","message","String","authorizationUrl","wb","openBrowserAsync"],"sourceRoot":"../../../src","sources":["internal/bank-redirect.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,cAAc;AACtC,SAASC,YAAY,QAAQ,aAAU;AAEvC,MAAMC,GAAG,GAAGD,YAAY,CAAC,cAAc,CAAC;AAWxC,eAAeE,cAAcA,CAAA,EAAmC;EAC9D,IAAI;IACF,OAAQ,MAAM,MAAM,CAAC,kBAAkB,CAAC;EAC1C,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEA,OAAO,eAAeC,kBAAkBA,CAACC,IAAsB,EAAiB;EAC9E,IAAIA,IAAI,CAACC,YAAY,EAAE;IACrBJ,GAAG,CAACK,IAAI,CAAC,qCAAqC,CAAC;IAC/C,IAAI;MACF,MAAMC,GAAG,GAAG,MAAMR,OAAO,CAACS,UAAU,CAACJ,IAAI,CAACC,YAAY,CAAC;MACvD,IAAIE,GAAG,EAAE;QACP,MAAMR,OAAO,CAACU,OAAO,CAACL,IAAI,CAACC,YAAY,CAAC;QACxCJ,GAAG,CAACK,IAAI,CAAC,wCAAwC,CAAC;QAClD;MACF;MACAL,GAAG,CAACS,OAAO,CAAC,gEAAgE,CAAC;IAC/E,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVV,GAAG,CAACS,OAAO,CACT,oCAAoCC,CAAC,YAAYC,KAAK,GAAGD,CAAC,CAACE,OAAO,GAAGC,MAAM,CAACH,CAAC,CAAC,kBAChF,CAAC;IACH;EACF;EAEA,IAAI;IACF,MAAMZ,OAAO,CAACU,OAAO,CAACL,IAAI,CAACW,gBAAgB,CAAC;IAC5Cd,GAAG,CAACK,IAAI,CAAC,4CAA4C,CAAC;IACtD;EACF,CAAC,CAAC,OAAOK,CAAC,EAAE;IACVV,GAAG,CAACS,OAAO,CACT,oDAAoDC,CAAC,YAAYC,KAAK,GAAGD,CAAC,CAACE,OAAO,GAAGC,MAAM,CAACH,CAAC,CAAC,uCAChG,CAAC;EACH;EAEA,MAAMK,EAAE,GAAG,MAAMd,cAAc,CAAC,CAAC;EACjC,IAAI,CAACc,EAAE,EAAEC,gBAAgB,EAAE;IACzB,MAAM,IAAIL,KAAK,CAAC,uCAAuC,CAAC;EAC1D;EACAX,GAAG,CAACK,IAAI,CAAC,yDAAyD,CAAC;EACnE,MAAMU,EAAE,CAACC,gBAAgB,CAACb,IAAI,CAACW,gBAAgB,CAAC;AAClD","ignoreList":[]}
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bank-redirect.d.ts","sourceRoot":"","sources":["../../../../src/internal/bank-redirect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bank-redirect.d.ts","sourceRoot":"","sources":["../../../../src/internal/bank-redirect.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bank-redirect.d.ts","sourceRoot":"","sources":["../../../../src/internal/bank-redirect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bank-redirect.d.ts","sourceRoot":"","sources":["../../../../src/internal/bank-redirect.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC9E"}
|
package/package.json
CHANGED
|
@@ -6,9 +6,15 @@
|
|
|
6
6
|
* 1. If `mobileAppUrl` is provided (e.g. `altareq://authorize?...`), try
|
|
7
7
|
* `Linking.openURL` after checking `canOpenURL` — this launches the
|
|
8
8
|
* bank's app directly without a browser tab.
|
|
9
|
-
* 2. Otherwise (or if step 1 fails)
|
|
10
|
-
* `
|
|
11
|
-
*
|
|
9
|
+
* 2. Otherwise (or if step 1 fails) hand `authorizationUrl` to the OS with
|
|
10
|
+
* `Linking.openURL`, so the bank's app opens it where one claims the URL.
|
|
11
|
+
* 3. Only if that throws, retry in `expo-web-browser`'s in-app browser tab.
|
|
12
|
+
*
|
|
13
|
+
* Steps 2 and 3 are in that order because the redirection guide requires it:
|
|
14
|
+
* https://nebras-open-finance.com/tech/tpp-standards/security/fapi/opening-the-redirect
|
|
15
|
+
* An in-app browser tab is a permitted fallback — it is a real browser surface,
|
|
16
|
+
* not an embedded webview — but it takes the routing decision away from the OS,
|
|
17
|
+
* so preferring it means app-to-app redirection never gets the chance to happen.
|
|
12
18
|
*/
|
|
13
19
|
import { Linking } from 'react-native';
|
|
14
20
|
import { createLogger } from './logger';
|
|
@@ -50,12 +56,20 @@ export async function launchBankRedirect(args: BankRedirectArgs): Promise<void>
|
|
|
50
56
|
}
|
|
51
57
|
}
|
|
52
58
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
log.info('launch:
|
|
56
|
-
await wb.openBrowserAsync(args.authorizationUrl);
|
|
59
|
+
try {
|
|
60
|
+
await Linking.openURL(args.authorizationUrl);
|
|
61
|
+
log.info('launch: authorization URL handed to the OS');
|
|
57
62
|
return;
|
|
63
|
+
} catch (e) {
|
|
64
|
+
log.warning(
|
|
65
|
+
`launch: OS could not open the authorization URL (${e instanceof Error ? e.message : String(e)}) — retrying in an in-app browser tab`,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const wb = await loadWebBrowser();
|
|
70
|
+
if (!wb?.openBrowserAsync) {
|
|
71
|
+
throw new Error('Unable to open bank authorization URL');
|
|
58
72
|
}
|
|
59
|
-
log.info('launch: opening authorization URL in
|
|
60
|
-
await
|
|
73
|
+
log.info('launch: opening authorization URL in in-app browser tab');
|
|
74
|
+
await wb.openBrowserAsync(args.authorizationUrl);
|
|
61
75
|
}
|
package/src/version.ts
CHANGED