@spare-technologies/spare-link 1.0.0 → 1.1.0
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/README.md +34 -5
- package/lib/commonjs/core/services/hosted-flow-controller.js +5 -0
- package/lib/commonjs/core/services/hosted-flow-controller.js.map +1 -1
- package/lib/commonjs/internal/bank-redirect.js +20 -9
- package/lib/commonjs/internal/bank-redirect.js.map +1 -1
- package/lib/commonjs/internal/hosted/bridge-message.js +13 -0
- package/lib/commonjs/internal/hosted/bridge-message.js.map +1 -1
- package/lib/commonjs/internal/telemetry/native-telemetry-reply.js +59 -0
- package/lib/commonjs/internal/telemetry/native-telemetry-reply.js.map +1 -0
- package/lib/commonjs/internal/telemetry/risk-telemetry-collector.js +99 -0
- package/lib/commonjs/internal/telemetry/risk-telemetry-collector.js.map +1 -0
- package/lib/commonjs/internal/telemetry/risk-telemetry-probes.js +134 -0
- package/lib/commonjs/internal/telemetry/risk-telemetry-probes.js.map +1 -0
- package/lib/commonjs/ui/hosted/hosted-payment-page.js +8 -0
- package/lib/commonjs/ui/hosted/hosted-payment-page.js.map +1 -1
- package/lib/commonjs/ui/hosted/hosted-payment-webview.js +31 -2
- package/lib/commonjs/ui/hosted/hosted-payment-webview.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/core/services/hosted-flow-controller.js +5 -0
- package/lib/module/core/services/hosted-flow-controller.js.map +1 -1
- package/lib/module/internal/bank-redirect.js +20 -9
- package/lib/module/internal/bank-redirect.js.map +1 -1
- package/lib/module/internal/hosted/bridge-message.js +13 -0
- package/lib/module/internal/hosted/bridge-message.js.map +1 -1
- package/lib/module/internal/telemetry/native-telemetry-reply.js +53 -0
- package/lib/module/internal/telemetry/native-telemetry-reply.js.map +1 -0
- package/lib/module/internal/telemetry/risk-telemetry-collector.js +94 -0
- package/lib/module/internal/telemetry/risk-telemetry-collector.js.map +1 -0
- package/lib/module/internal/telemetry/risk-telemetry-probes.js +129 -0
- package/lib/module/internal/telemetry/risk-telemetry-probes.js.map +1 -0
- package/lib/module/ui/hosted/hosted-payment-page.js +8 -0
- package/lib/module/ui/hosted/hosted-payment-page.js.map +1 -1
- package/lib/module/ui/hosted/hosted-payment-webview.js +32 -3
- package/lib/module/ui/hosted/hosted-payment-webview.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/bank-redirect.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts +12 -1
- package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/telemetry/native-telemetry-reply.d.ts +33 -0
- package/lib/typescript/commonjs/internal/telemetry/native-telemetry-reply.d.ts.map +1 -0
- package/lib/typescript/commonjs/internal/telemetry/risk-telemetry-collector.d.ts +47 -0
- package/lib/typescript/commonjs/internal/telemetry/risk-telemetry-collector.d.ts.map +1 -0
- package/lib/typescript/commonjs/internal/telemetry/risk-telemetry-probes.d.ts +19 -0
- package/lib/typescript/commonjs/internal/telemetry/risk-telemetry-probes.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts +9 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts.map +1 -1
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/core/services/hosted-flow-controller.d.ts.map +1 -1
- package/lib/typescript/module/internal/bank-redirect.d.ts.map +1 -1
- package/lib/typescript/module/internal/hosted/bridge-message.d.ts +12 -1
- package/lib/typescript/module/internal/hosted/bridge-message.d.ts.map +1 -1
- package/lib/typescript/module/internal/telemetry/native-telemetry-reply.d.ts +33 -0
- package/lib/typescript/module/internal/telemetry/native-telemetry-reply.d.ts.map +1 -0
- package/lib/typescript/module/internal/telemetry/risk-telemetry-collector.d.ts +47 -0
- package/lib/typescript/module/internal/telemetry/risk-telemetry-collector.d.ts.map +1 -0
- package/lib/typescript/module/internal/telemetry/risk-telemetry-probes.d.ts +19 -0
- package/lib/typescript/module/internal/telemetry/risk-telemetry-probes.d.ts.map +1 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts.map +1 -1
- package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts +9 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts.map +1 -1
- package/lib/typescript/module/version.d.ts +1 -1
- package/package.json +24 -4
- package/plugins/with-spare-link.js +78 -5
- package/src/core/services/hosted-flow-controller.ts +5 -0
- package/src/internal/bank-redirect.ts +23 -9
- package/src/internal/hosted/bridge-message.ts +20 -1
- package/src/internal/telemetry/native-telemetry-reply.ts +59 -0
- package/src/internal/telemetry/risk-telemetry-collector.ts +128 -0
- package/src/internal/telemetry/risk-telemetry-probes.ts +159 -0
- package/src/ui/hosted/hosted-payment-page.tsx +8 -0
- package/src/ui/hosted/hosted-payment-webview.tsx +42 -4
- package/src/version.ts +1 -1
|
@@ -8,8 +8,10 @@ exports.shouldAllowHostedNavigation = shouldAllowHostedNavigation;
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _reactNative = require("react-native");
|
|
10
10
|
var _reactNativeWebview = require("react-native-webview");
|
|
11
|
+
var _bridgeMessage = require("../../internal/hosted/bridge-message.js");
|
|
11
12
|
var _hostedUrl = require("../../internal/hosted/hosted-url.js");
|
|
12
13
|
var _logger = require("../../internal/logger.js");
|
|
14
|
+
var _nativeTelemetryReply = require("../../internal/telemetry/native-telemetry-reply.js");
|
|
13
15
|
var _urlParts = require("../../internal/url-parts.js");
|
|
14
16
|
var _index = require("../theme/index.js");
|
|
15
17
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -52,6 +54,7 @@ function HostedPaymentWebView(props) {
|
|
|
52
54
|
baseUrl,
|
|
53
55
|
reference,
|
|
54
56
|
onBridgeMessage,
|
|
57
|
+
onTelemetryRequest,
|
|
55
58
|
onLoadFailure,
|
|
56
59
|
onMounted
|
|
57
60
|
} = props;
|
|
@@ -59,6 +62,7 @@ function HostedPaymentWebView(props) {
|
|
|
59
62
|
baseUrl,
|
|
60
63
|
reference
|
|
61
64
|
});
|
|
65
|
+
const webViewRef = (0, _react.useRef)(null);
|
|
62
66
|
|
|
63
67
|
// This reports that *this* webview exists, and a retry mounts a fresh instance
|
|
64
68
|
// which reports itself anew. Re-running on a new callback identity would
|
|
@@ -68,8 +72,21 @@ function HostedPaymentWebView(props) {
|
|
|
68
72
|
onMounted?.();
|
|
69
73
|
}, []);
|
|
70
74
|
const handleMessage = (0, _react.useCallback)(event => {
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
const raw = event.nativeEvent.data;
|
|
76
|
+
|
|
77
|
+
// The telemetry request is answered here, where the webview reference
|
|
78
|
+
// lives, because the reply is delivered by injecting script — a channel
|
|
79
|
+
// only this component holds. Everything else stays the caller's.
|
|
80
|
+
if (onTelemetryRequest && (0, _bridgeMessage.parseHostedBridgeMessage)(raw)?.type === 'telemetryRequest') {
|
|
81
|
+
const respond = (0, _nativeTelemetryReply.createTelemetryRequestHandler)({
|
|
82
|
+
collect: onTelemetryRequest,
|
|
83
|
+
inject: script => webViewRef.current?.injectJavaScript(script)
|
|
84
|
+
});
|
|
85
|
+
void respond();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
onBridgeMessage(raw);
|
|
89
|
+
}, [onBridgeMessage, onTelemetryRequest]);
|
|
73
90
|
|
|
74
91
|
// Every navigation is routed through here rather than through `originWhitelist`.
|
|
75
92
|
// A URL that fails the whitelist is handed to `Linking.openURL` by
|
|
@@ -93,6 +110,7 @@ function HostedPaymentWebView(props) {
|
|
|
93
110
|
style: styles.container,
|
|
94
111
|
testID: "hosted-payment-webview",
|
|
95
112
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeWebview.WebView, {
|
|
113
|
+
ref: webViewRef,
|
|
96
114
|
source: {
|
|
97
115
|
uri
|
|
98
116
|
},
|
|
@@ -138,6 +156,17 @@ function HostedPaymentWebView(props) {
|
|
|
138
156
|
style: styles.webview,
|
|
139
157
|
javaScriptEnabled: true,
|
|
140
158
|
domStorageEnabled: true
|
|
159
|
+
// Lets the page's consent screen ask for a coarse location fix, which it
|
|
160
|
+
// attaches to the payment as a risk signal. Android only; iOS raises its
|
|
161
|
+
// own per-origin system prompt, gated by the host app's usage-description
|
|
162
|
+
// entry. This toggle is frame-wide — the platform offers no per-origin
|
|
163
|
+
// answer here — so the scope rests on `handleShouldStartLoad` above
|
|
164
|
+
// refusing every off-origin document in this frame. The toggle alone also
|
|
165
|
+
// reveals nothing: the host application must hold the user-facing location
|
|
166
|
+
// permission, and without it the page's request fails and the payment
|
|
167
|
+
// proceeds without the signal.
|
|
168
|
+
,
|
|
169
|
+
geolocationEnabled: true
|
|
141
170
|
// The page holds a payment in progress and nothing else should share its
|
|
142
171
|
// storage, on this device or between payers on it.
|
|
143
172
|
,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_reactNativeWebview","_hostedUrl","_logger","_urlParts","_index","_jsxRuntime","log","createLogger","safeOrigin","url","parts","parseUrlParts","scheme","host","shouldAllowHostedNavigation","args","isHostedOriginUrl","HostedPaymentWebView","props","baseUrl","reference","onBridgeMessage","onLoadFailure","onMounted","uri","buildHostedPaymentUrl","useEffect","handleMessage","useCallback","event","nativeEvent","data","handleShouldStartLoad","jsx","View","style","styles","container","testID","children","WebView","source","onMessage","originWhitelist","ALLOW_ALL_ORIGINS","onShouldStartLoadWithRequest","onError","severe","description","code","onHttpError","statusCode","onContentProcessDidTerminate","onRenderProcessGone","didCrash","webview","javaScriptEnabled","domStorageEnabled","incognito","setSupportMultipleWindows","allowFileAccess","allowUniversalAccessFromFileURLs","allowFileAccessFromFileURLs","StyleSheet","create","flex","backgroundColor","Colors","surfacePage"],"sourceRoot":"../../../../src","sources":["ui/hosted/hosted-payment-webview.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeWebview","_bridgeMessage","_hostedUrl","_logger","_nativeTelemetryReply","_urlParts","_index","_jsxRuntime","log","createLogger","safeOrigin","url","parts","parseUrlParts","scheme","host","shouldAllowHostedNavigation","args","isHostedOriginUrl","HostedPaymentWebView","props","baseUrl","reference","onBridgeMessage","onTelemetryRequest","onLoadFailure","onMounted","uri","buildHostedPaymentUrl","webViewRef","useRef","useEffect","handleMessage","useCallback","event","raw","nativeEvent","data","parseHostedBridgeMessage","type","respond","createTelemetryRequestHandler","collect","inject","script","current","injectJavaScript","handleShouldStartLoad","jsx","View","style","styles","container","testID","children","WebView","ref","source","onMessage","originWhitelist","ALLOW_ALL_ORIGINS","onShouldStartLoadWithRequest","onError","severe","description","code","onHttpError","statusCode","onContentProcessDidTerminate","onRenderProcessGone","didCrash","webview","javaScriptEnabled","domStorageEnabled","geolocationEnabled","incognito","setSupportMultipleWindows","allowFileAccess","allowUniversalAccessFromFileURLs","allowFileAccessFromFileURLs","StyleSheet","create","flex","backgroundColor","Colors","surfacePage"],"sourceRoot":"../../../../src","sources":["ui/hosted/hosted-payment-webview.tsx"],"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.
|
|
15
|
+
const SDK_VERSION = exports.SDK_VERSION = '1.1.0';
|
|
16
16
|
//# sourceMappingURL=version.js.map
|
|
@@ -109,6 +109,11 @@ export class HostedFlowController {
|
|
|
109
109
|
attempt: this.currentState.attempt
|
|
110
110
|
}));
|
|
111
111
|
break;
|
|
112
|
+
case 'telemetryRequest':
|
|
113
|
+
// Answered by the webview layer, which owns the injection channel the
|
|
114
|
+
// reply travels back on. Reaching here means no telemetry handler was
|
|
115
|
+
// wired, and the page's own timeout settles the request.
|
|
116
|
+
break;
|
|
112
117
|
}
|
|
113
118
|
return true;
|
|
114
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["launchBankRedirect","defaultLaunchBankRedirect","parseHostedBridgeMessage","createLogger","readPaymentReturn","HostedFlowStates","isTerminalPhase","log","DEFAULT_READY_TIMEOUT_MS","HostedFlowController","listeners","Set","constructor","options","reference","bankLauncher","url","authorizationUrl","readyTimeoutMs","currentState","loading","reportPageMounted","phase","watchForReadiness","state","subscribe","listener","add","delete","handleBridgeMessage","raw","message","info","isPagePresented","type","stopWatchingForReadiness","moveTo","hosted","attempt","openBank","cancelled","failed","errorCode","code","handleReturn","uri","outcome","report","undefined","warning","succeeded","abandoned","failToLoad","severe","unreachable","retry","giveUp","abandon","dispose","clear","readyTimer","setTimeout","clearTimeout","redirecting","awaitingCallback","next"],"sourceRoot":"../../../../src","sources":["core/services/hosted-flow-controller.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["launchBankRedirect","defaultLaunchBankRedirect","parseHostedBridgeMessage","createLogger","readPaymentReturn","HostedFlowStates","isTerminalPhase","log","DEFAULT_READY_TIMEOUT_MS","HostedFlowController","listeners","Set","constructor","options","reference","bankLauncher","url","authorizationUrl","readyTimeoutMs","currentState","loading","reportPageMounted","phase","watchForReadiness","state","subscribe","listener","add","delete","handleBridgeMessage","raw","message","info","isPagePresented","type","stopWatchingForReadiness","moveTo","hosted","attempt","openBank","cancelled","failed","errorCode","code","handleReturn","uri","outcome","report","undefined","warning","succeeded","abandoned","failToLoad","severe","unreachable","retry","giveUp","abandon","dispose","clear","readyTimer","setTimeout","clearTimeout","redirecting","awaitingCallback","next"],"sourceRoot":"../../../../src","sources":["core/services/hosted-flow-controller.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -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":[]}
|
|
@@ -27,6 +27,15 @@ import { parseUrlParts } from "../url-parts.js";
|
|
|
27
27
|
|
|
28
28
|
/** The flow cannot continue. [code] is the key the page itself renders. */
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The page is asking for this device's native risk facts.
|
|
32
|
+
*
|
|
33
|
+
* The one message that expects an answer — not over this channel, which cannot
|
|
34
|
+
* reply, but through the `window.__spareLinkNativeTelemetry` callback the page
|
|
35
|
+
* exposes and the shell invokes by injecting script. A shell that stays silent
|
|
36
|
+
* costs the page one bounded timeout and nothing else.
|
|
37
|
+
*/
|
|
38
|
+
|
|
30
39
|
/**
|
|
31
40
|
* Parses a message posted by the hosted page.
|
|
32
41
|
*
|
|
@@ -57,6 +66,10 @@ export function parseHostedBridgeMessage(raw) {
|
|
|
57
66
|
return {
|
|
58
67
|
type: 'cancel'
|
|
59
68
|
};
|
|
69
|
+
case 'spare.telemetry_request':
|
|
70
|
+
return {
|
|
71
|
+
type: 'telemetryRequest'
|
|
72
|
+
};
|
|
60
73
|
case 'spare.error':
|
|
61
74
|
{
|
|
62
75
|
const code = message.code;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["parseUrlParts","parseHostedBridgeMessage","raw","message","asRecord","type","url","isHttpsUrl","code","trim","length","JSON","parse","Array","isArray","parts","scheme","host"],"sourceRoot":"../../../../src","sources":["internal/hosted/bridge-message.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,iBAAc;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["parseUrlParts","parseHostedBridgeMessage","raw","message","asRecord","type","url","isHttpsUrl","code","trim","length","JSON","parse","Array","isArray","parts","scheme","host"],"sourceRoot":"../../../../src","sources":["internal/hosted/bridge-message.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,iBAAc;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;;AAKA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,GAAY,EAA8B;EACjF,MAAMC,OAAO,GAAGC,QAAQ,CAACF,GAAG,CAAC;EAC7B,IAAI,CAACC,OAAO,EAAE,OAAO,IAAI;EAEzB,MAAME,IAAI,GAAGF,OAAO,CAACE,IAAI;EACzB,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI;EAEzC,QAAQA,IAAI;IACV,KAAK,aAAa;MAChB,OAAO;QAAEA,IAAI,EAAE;MAAQ,CAAC;IAC1B,KAAK,gBAAgB;MAAE;QACrB,MAAMC,GAAG,GAAGH,OAAO,CAACG,GAAG;QACvB,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAI,CAACC,UAAU,CAACD,GAAG,CAAC,EAAE,OAAO,IAAI;QAC5D,OAAO;UAAED,IAAI,EAAE,SAAS;UAAEC;QAAI,CAAC;MACjC;IACA,KAAK,cAAc;MACjB,OAAO;QAAED,IAAI,EAAE;MAAS,CAAC;IAC3B,KAAK,yBAAyB;MAC5B,OAAO;QAAEA,IAAI,EAAE;MAAmB,CAAC;IACrC,KAAK,aAAa;MAAE;QAClB,MAAMG,IAAI,GAAGL,OAAO,CAACK,IAAI;QACzB,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAIA,IAAI,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;QACrE,OAAO;UAAEL,IAAI,EAAE,OAAO;UAAEG;QAAK,CAAC;MAChC;IACA;MACE,OAAO,IAAI;EACf;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASJ,QAAQA,CAACF,GAAY,EAAkC;EAC9D,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IAC3B,IAAI;MACF,OAAOE,QAAQ,CAACO,IAAI,CAACC,KAAK,CAACV,GAAG,CAAY,CAAC;IAC7C,CAAC,CAAC,MAAM;MACN,OAAO,IAAI;IACb;EACF;EACA,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,IAAIW,KAAK,CAACC,OAAO,CAACZ,GAAG,CAAC,EAAE,OAAO,IAAI;EAC9E,OAAOA,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASK,UAAUA,CAACD,GAAW,EAAW;EACxC,MAAMS,KAAK,GAAGf,aAAa,CAACM,GAAG,CAAC;EAChC,OAAOS,KAAK,KAAK,IAAI,IAAIA,KAAK,CAACC,MAAM,KAAK,OAAO,IAAID,KAAK,CAACE,IAAI,CAACP,MAAM,GAAG,CAAC;AAC5E","ignoreList":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Delivers a telemetry reply into the hosted page.
|
|
5
|
+
*
|
|
6
|
+
* The WebView message channel is one-way, so the reply travels the other way:
|
|
7
|
+
* the page exposes `window.__spareLinkNativeTelemetry` before it asks, and the
|
|
8
|
+
* shell answers by injecting a call to it. A page without the callback — an
|
|
9
|
+
* older page, or one that already gave up waiting — receives nothing and the
|
|
10
|
+
* injected chunk evaluates to a harmless literal.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Page-exposed global the shell invokes with its telemetry reply. */
|
|
14
|
+
export const NATIVE_TELEMETRY_CALLBACK_NAME = '__spareLinkNativeTelemetry';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Builds the script that hands [payload] to the page's telemetry callback.
|
|
18
|
+
*
|
|
19
|
+
* The payload is embedded as a JSON literal. U+2028 and U+2029 are legal inside
|
|
20
|
+
* a JSON string but terminate a statement when evaluated as script, so they are
|
|
21
|
+
* escaped; the result is a single expression that is inert on a page without
|
|
22
|
+
* the callback.
|
|
23
|
+
*/
|
|
24
|
+
export function buildNativeTelemetryReplyScript(payload) {
|
|
25
|
+
const literal = JSON.stringify(payload).replaceAll('\u2028', '\\u2028').replaceAll('\u2029', '\\u2029');
|
|
26
|
+
return `window.${NATIVE_TELEMETRY_CALLBACK_NAME} && ` + `window.${NATIVE_TELEMETRY_CALLBACK_NAME}(${literal}); true;`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Builds the handler the webview runs when the page asks for telemetry.
|
|
31
|
+
*
|
|
32
|
+
* Collection and injection are injected so the handler is a pure seam: the
|
|
33
|
+
* component wires the real collector and the WebView reference into it. A
|
|
34
|
+
* collector that answers nothing, or throws, injects nothing — the page's own
|
|
35
|
+
* timeout settles the request.
|
|
36
|
+
*/
|
|
37
|
+
export function createTelemetryRequestHandler(deps) {
|
|
38
|
+
return async () => {
|
|
39
|
+
let payload;
|
|
40
|
+
try {
|
|
41
|
+
payload = await deps.collect();
|
|
42
|
+
} catch {
|
|
43
|
+
payload = null;
|
|
44
|
+
}
|
|
45
|
+
if (payload == null) return;
|
|
46
|
+
try {
|
|
47
|
+
deps.inject(buildNativeTelemetryReplyScript(payload));
|
|
48
|
+
} catch {
|
|
49
|
+
// A torn-down webview cannot be injected into; the page's timeout answers.
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=native-telemetry-reply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NATIVE_TELEMETRY_CALLBACK_NAME","buildNativeTelemetryReplyScript","payload","literal","JSON","stringify","replaceAll","createTelemetryRequestHandler","deps","collect","inject"],"sourceRoot":"../../../../src","sources":["internal/telemetry/native-telemetry-reply.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMA,8BAA8B,GAAG,4BAA4B;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAACC,OAAgC,EAAU;EACxF,MAAMC,OAAO,GAAGC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC,CACpCI,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAC/BA,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;EAClC,OACE,UAAUN,8BAA8B,MAAM,GAC9C,UAAUA,8BAA8B,IAAIG,OAAO,UAAU;AAEjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,6BAA6BA,CAACC,IAG7C,EAAuB;EACtB,OAAO,YAAY;IACjB,IAAIN,OAAuC;IAC3C,IAAI;MACFA,OAAO,GAAG,MAAMM,IAAI,CAACC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,MAAM;MACNP,OAAO,GAAG,IAAI;IAChB;IACA,IAAIA,OAAO,IAAI,IAAI,EAAE;IAErB,IAAI;MACFM,IAAI,CAACE,MAAM,CAACT,+BAA+B,CAACC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Collects this device's native risk facts for the hosted payment page.
|
|
5
|
+
*
|
|
6
|
+
* Every probe is injected, so the collector runs under Jest with fakes and the
|
|
7
|
+
* module wiring lives in `risk-telemetry-probes`. Every probe is also allowed to
|
|
8
|
+
* fail or hang: a throwing or slow reading leaves its fact absent, because a risk
|
|
9
|
+
* reading must never delay or break a payment.
|
|
10
|
+
*
|
|
11
|
+
* The payload mirrors the page's own risk contract: camelCase keys under a
|
|
12
|
+
* `deviceInformation` block, facts only, nothing fabricated.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/** How long any single probe may take before its fact is given up on. */
|
|
16
|
+
export const TELEMETRY_PROBE_BUDGET_MS = 800;
|
|
17
|
+
|
|
18
|
+
/** Identity and build facts read from the platform. */
|
|
19
|
+
|
|
20
|
+
/** A battery reading, with the level as a 0 to 1 fraction. */
|
|
21
|
+
|
|
22
|
+
/** The network medium classes the risk payload distinguishes. */
|
|
23
|
+
|
|
24
|
+
/** The probes the collector runs. Each may answer null, throw, or hang. */
|
|
25
|
+
|
|
26
|
+
const CONNECTION_LABELS = {
|
|
27
|
+
wifi: 'WiFi',
|
|
28
|
+
cellular: 'Cellular',
|
|
29
|
+
other: 'Other'
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/** Runs a probe under the budget, yielding null on failure or timeout. */
|
|
33
|
+
async function guarded(probe) {
|
|
34
|
+
try {
|
|
35
|
+
return await Promise.race([probe(), new Promise(resolve => setTimeout(() => resolve(null), TELEMETRY_PROBE_BUDGET_MS))]);
|
|
36
|
+
} catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function read(reader) {
|
|
41
|
+
try {
|
|
42
|
+
return reader();
|
|
43
|
+
} catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Collects whatever the device answered within the per-probe budget.
|
|
50
|
+
*
|
|
51
|
+
* Returns null when nothing answered, so a caller hands the page nothing rather
|
|
52
|
+
* than an empty block.
|
|
53
|
+
*/
|
|
54
|
+
export async function collectRiskTelemetry(probes) {
|
|
55
|
+
const [snapshot, battery, connection] = await Promise.all([guarded(probes.loadDeviceSnapshot), guarded(probes.loadBattery), guarded(probes.loadConnection)]);
|
|
56
|
+
const localeTag = read(probes.localeTag);
|
|
57
|
+
const localDateTime = read(probes.localDateTime);
|
|
58
|
+
const deviceInformation = {};
|
|
59
|
+
if (snapshot?.operatingSystem != null) {
|
|
60
|
+
deviceInformation.deviceOperatingSystem = snapshot.operatingSystem;
|
|
61
|
+
}
|
|
62
|
+
if (snapshot?.operatingSystemVersion != null) {
|
|
63
|
+
deviceInformation.deviceOperatingSystemVersion = snapshot.operatingSystemVersion;
|
|
64
|
+
}
|
|
65
|
+
const manufacturer = {};
|
|
66
|
+
if (snapshot?.model != null) manufacturer.model = snapshot.model;
|
|
67
|
+
if (snapshot?.manufacturer != null) manufacturer.manufacturer = snapshot.manufacturer;
|
|
68
|
+
if (Object.keys(manufacturer).length > 0) {
|
|
69
|
+
deviceInformation.deviceManufacturer = manufacturer;
|
|
70
|
+
}
|
|
71
|
+
if (snapshot?.vendorIdentifier != null) {
|
|
72
|
+
deviceInformation.alternativeDeviceId = snapshot.vendorIdentifier;
|
|
73
|
+
}
|
|
74
|
+
if (localeTag != null) deviceInformation.deviceLanguage = localeTag;
|
|
75
|
+
if (localDateTime != null) deviceInformation.deviceLocalDateTime = localDateTime;
|
|
76
|
+
if (connection != null) deviceInformation.connectionType = CONNECTION_LABELS[connection];
|
|
77
|
+
const batteryStatus = {};
|
|
78
|
+
const level = battery?.levelFraction;
|
|
79
|
+
if (level != null && level >= 0 && level <= 1) batteryStatus.level = level;
|
|
80
|
+
if (battery?.isCharging != null) batteryStatus.isCharging = battery.isCharging;
|
|
81
|
+
if (Object.keys(batteryStatus).length > 0) {
|
|
82
|
+
deviceInformation.batteryStatus = batteryStatus;
|
|
83
|
+
}
|
|
84
|
+
const environmentContext = [];
|
|
85
|
+
if (snapshot?.isPhysicalDevice === false) environmentContext.push('EmulatorDetected');
|
|
86
|
+
if (environmentContext.length > 0) {
|
|
87
|
+
deviceInformation.deviceEnvironmentContext = environmentContext;
|
|
88
|
+
}
|
|
89
|
+
if (Object.keys(deviceInformation).length === 0) return null;
|
|
90
|
+
return {
|
|
91
|
+
deviceInformation
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=risk-telemetry-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TELEMETRY_PROBE_BUDGET_MS","CONNECTION_LABELS","wifi","cellular","other","guarded","probe","Promise","race","resolve","setTimeout","read","reader","collectRiskTelemetry","probes","snapshot","battery","connection","all","loadDeviceSnapshot","loadBattery","loadConnection","localeTag","localDateTime","deviceInformation","operatingSystem","deviceOperatingSystem","operatingSystemVersion","deviceOperatingSystemVersion","manufacturer","model","Object","keys","length","deviceManufacturer","vendorIdentifier","alternativeDeviceId","deviceLanguage","deviceLocalDateTime","connectionType","batteryStatus","level","levelFraction","isCharging","environmentContext","isPhysicalDevice","push","deviceEnvironmentContext"],"sourceRoot":"../../../../src","sources":["internal/telemetry/risk-telemetry-collector.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The real device probes behind `collectRiskTelemetry`.
|
|
5
|
+
*
|
|
6
|
+
* Every expo module here is an optional peer, loaded lazily inside a try/catch:
|
|
7
|
+
* a host app that ships without one simply reports that fact as absent, and no
|
|
8
|
+
* import of this file can throw for want of a native module. Structural `*Like`
|
|
9
|
+
* types keep this file honest about how little of each module it relies on.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { Platform } from 'react-native';
|
|
13
|
+
function load(moduleName) {
|
|
14
|
+
try {
|
|
15
|
+
// Resolved at call time so a host app without the optional peer never pays
|
|
16
|
+
// for it — bundlers keep the require because the name is static.
|
|
17
|
+
switch (moduleName) {
|
|
18
|
+
case 'expo-device':
|
|
19
|
+
return require('expo-device');
|
|
20
|
+
case 'expo-battery':
|
|
21
|
+
return require('expo-battery');
|
|
22
|
+
case 'expo-network':
|
|
23
|
+
return require('expo-network');
|
|
24
|
+
case 'expo-application':
|
|
25
|
+
return require('expo-application');
|
|
26
|
+
default:
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
} catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function loadDeviceSnapshot() {
|
|
34
|
+
const device = load('expo-device');
|
|
35
|
+
if (device == null) return null;
|
|
36
|
+
|
|
37
|
+
// The vendor identifier is iOS-only by design: Android offers no equivalent
|
|
38
|
+
// scoped identifier worth persisting against a payment.
|
|
39
|
+
let vendorIdentifier = null;
|
|
40
|
+
if (Platform.OS === 'ios') {
|
|
41
|
+
const application = load('expo-application');
|
|
42
|
+
if (application != null) {
|
|
43
|
+
try {
|
|
44
|
+
vendorIdentifier = await application.getIosIdForVendorAsync();
|
|
45
|
+
} catch {
|
|
46
|
+
vendorIdentifier = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
operatingSystem: Platform.OS === 'ios' ? 'iOS' : 'Android',
|
|
52
|
+
operatingSystemVersion: device.osVersion ?? null,
|
|
53
|
+
model: device.modelName ?? null,
|
|
54
|
+
manufacturer: device.manufacturer ?? null,
|
|
55
|
+
vendorIdentifier,
|
|
56
|
+
isPhysicalDevice: typeof device.isDevice === 'boolean' ? device.isDevice : null
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function loadBattery() {
|
|
60
|
+
const battery = load('expo-battery');
|
|
61
|
+
if (battery == null) return null;
|
|
62
|
+
const level = await battery.getBatteryLevelAsync();
|
|
63
|
+
const state = await battery.getBatteryStateAsync();
|
|
64
|
+
const charging = battery.BatteryState?.CHARGING;
|
|
65
|
+
const full = battery.BatteryState?.FULL;
|
|
66
|
+
return {
|
|
67
|
+
// The module reports -1 when the level cannot be read; the collector's 0..1
|
|
68
|
+
// bound would drop it anyway, made explicit here.
|
|
69
|
+
levelFraction: level >= 0 && level <= 1 ? level : null,
|
|
70
|
+
isCharging: charging != null ? state === charging || state === full : null
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function loadConnection() {
|
|
74
|
+
const network = load('expo-network');
|
|
75
|
+
if (network == null) return null;
|
|
76
|
+
const state = await network.getNetworkStateAsync();
|
|
77
|
+
const type = state.type?.toUpperCase() ?? null;
|
|
78
|
+
if (type == null || type === 'NONE' || type === 'UNKNOWN') return null;
|
|
79
|
+
if (type === 'WIFI') return 'wifi';
|
|
80
|
+
if (type === 'CELLULAR') return 'cellular';
|
|
81
|
+
return 'other';
|
|
82
|
+
}
|
|
83
|
+
function localeTag() {
|
|
84
|
+
try {
|
|
85
|
+
const tag = Intl.DateTimeFormat().resolvedOptions().locale;
|
|
86
|
+
return typeof tag === 'string' && tag.length > 0 ? tag : null;
|
|
87
|
+
} catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Formats a date as local-time ISO 8601 with a numeric UTC offset, e.g.
|
|
94
|
+
* `2026-08-25T10:45:46.319+05:30` — never the UTC `Z` form. This keeps the
|
|
95
|
+
* timestamp on the payer's own clock so it reads the same as the device shows,
|
|
96
|
+
* and matches the Flutter SDK's `deviceLocalDateTime`.
|
|
97
|
+
*/
|
|
98
|
+
export function formatLocalIsoWithOffset(date) {
|
|
99
|
+
const pad = (value, width = 2) => String(value).padStart(width, '0');
|
|
100
|
+
|
|
101
|
+
// getTimezoneOffset is minutes behind UTC, so east-of-UTC zones are negative;
|
|
102
|
+
// flip the sign to render the conventional offset.
|
|
103
|
+
const offsetMinutes = -date.getTimezoneOffset();
|
|
104
|
+
const sign = offsetMinutes >= 0 ? '+' : '-';
|
|
105
|
+
const absOffset = Math.abs(offsetMinutes);
|
|
106
|
+
const localDate = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
|
|
107
|
+
const localTime = `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}.${pad(date.getMilliseconds(), 3)}`;
|
|
108
|
+
const offset = `${sign}${pad(Math.floor(absOffset / 60))}:${pad(absOffset % 60)}`;
|
|
109
|
+
return `${localDate}T${localTime}${offset}`;
|
|
110
|
+
}
|
|
111
|
+
function localDateTime() {
|
|
112
|
+
try {
|
|
113
|
+
return formatLocalIsoWithOffset(new Date());
|
|
114
|
+
} catch {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** The production probe set, ready for `collectRiskTelemetry`. */
|
|
120
|
+
export function createRiskTelemetryProbes() {
|
|
121
|
+
return {
|
|
122
|
+
loadDeviceSnapshot,
|
|
123
|
+
loadBattery,
|
|
124
|
+
loadConnection,
|
|
125
|
+
localeTag,
|
|
126
|
+
localDateTime
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=risk-telemetry-probes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","load","moduleName","require","loadDeviceSnapshot","device","vendorIdentifier","OS","application","getIosIdForVendorAsync","operatingSystem","operatingSystemVersion","osVersion","model","modelName","manufacturer","isPhysicalDevice","isDevice","loadBattery","battery","level","getBatteryLevelAsync","state","getBatteryStateAsync","charging","BatteryState","CHARGING","full","FULL","levelFraction","isCharging","loadConnection","network","getNetworkStateAsync","type","toUpperCase","localeTag","tag","Intl","DateTimeFormat","resolvedOptions","locale","length","formatLocalIsoWithOffset","date","pad","value","width","String","padStart","offsetMinutes","getTimezoneOffset","sign","absOffset","Math","abs","localDate","getFullYear","getMonth","getDate","localTime","getHours","getMinutes","getSeconds","getMilliseconds","offset","floor","localDateTime","Date","createRiskTelemetryProbes"],"sourceRoot":"../../../../src","sources":["internal/telemetry/risk-telemetry-probes.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
import { useCallback, useEffect, useRef } from 'react';
|
|
4
4
|
import { ActivityIndicator, StyleSheet, Text, View } from 'react-native';
|
|
5
5
|
import { isTerminalPhase } from "../../core/services/hosted-flow-state.js";
|
|
6
|
+
import { collectRiskTelemetry } from "../../internal/telemetry/risk-telemetry-collector.js";
|
|
7
|
+
import { createRiskTelemetryProbes } from "../../internal/telemetry/risk-telemetry-probes.js";
|
|
6
8
|
import { useHostedFlowState } from "../hooks/use-hosted-flow-state.js";
|
|
7
9
|
import { PageUnavailableScreen } from "../screens/page-unavailable-screen.js";
|
|
8
10
|
import { RedirectHandoffScreen } from "../screens/redirect-handoff-screen.js";
|
|
@@ -62,6 +64,11 @@ export function HostedPaymentPage(props) {
|
|
|
62
64
|
const handleBridgeMessage = useCallback(message => {
|
|
63
65
|
void controller.handleBridgeMessage(message);
|
|
64
66
|
}, [controller]);
|
|
67
|
+
|
|
68
|
+
// One probe set for the page's lifetime; collection itself runs per request.
|
|
69
|
+
const handleTelemetryRequest = useCallback(() => {
|
|
70
|
+
return collectRiskTelemetry(createRiskTelemetryProbes());
|
|
71
|
+
}, []);
|
|
65
72
|
const handleLoadFailure = useCallback(() => {
|
|
66
73
|
controller.failToLoad();
|
|
67
74
|
}, [controller]);
|
|
@@ -93,6 +100,7 @@ export function HostedPaymentPage(props) {
|
|
|
93
100
|
baseUrl: baseUrl,
|
|
94
101
|
reference: controller.reference,
|
|
95
102
|
onBridgeMessage: handleBridgeMessage,
|
|
103
|
+
onTelemetryRequest: handleTelemetryRequest,
|
|
96
104
|
onLoadFailure: handleLoadFailure,
|
|
97
105
|
onMounted: handlePageMounted
|
|
98
106
|
}, state.attempt)
|