react-native-timacare 3.3.37 → 3.3.39
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/screens/liveness-v2/index.js +1 -1
- package/lib/commonjs/screens/liveness-v2/index.js.flow +2 -2
- package/lib/commonjs/screens/sign-tima/ViewContract.js +1 -1
- package/lib/commonjs/screens/sign-tima/ViewContract.js.flow +1 -0
- package/lib/commonjs/screens/sign-tima/ViewContract.js.map +1 -1
- package/lib/commonjs/sdkConfig.js.flow +21 -0
- package/lib/commonjs/sdkConfig.js.map +1 -1
- package/lib/commonjs/services/api/api.js +1 -1
- package/lib/commonjs/services/api/api.js.flow +173 -0
- package/lib/commonjs/services/api/api.js.map +1 -1
- package/lib/module/screens/liveness-v2/index.js +1 -1
- package/lib/module/screens/sign-tima/ViewContract.js +1 -1
- package/lib/module/screens/sign-tima/ViewContract.js.map +1 -1
- package/lib/module/sdkConfig.js.map +1 -1
- package/lib/module/services/api/api.js +1 -1
- package/lib/module/services/api/api.js.map +1 -1
- package/lib/typescript/screens/sign-tima/ViewContract.d.ts.map +1 -1
- package/lib/typescript/sdkConfig.d.ts +22 -0
- package/lib/typescript/sdkConfig.d.ts.map +1 -1
- package/lib/typescript/services/api/api.d.ts +27 -0
- package/lib/typescript/services/api/api.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/screens/liveness-v2/index.tsx +2 -2
- package/src/screens/sign-tima/ViewContract.tsx +1 -0
- package/src/sdkConfig.ts +21 -0
- package/src/services/api/api.ts +173 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewContract.d.ts","sourceRoot":"","sources":["../../../../src/screens/sign-tima/ViewContract.tsx"],"names":[],"mappings":"AAqBA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"ViewContract.d.ts","sourceRoot":"","sources":["../../../../src/screens/sign-tima/ViewContract.tsx"],"names":[],"mappings":"AAqBA,eAAO,MAAM,YAAY,KA2IvB,CAAC"}
|
|
@@ -1,8 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal shape of the @react-native-community/netinfo module.
|
|
3
|
+
* Injected by the host app so the SDK can detect offline state without
|
|
4
|
+
* taking a hard native dependency. Optional — when omitted, the SDK simply
|
|
5
|
+
* skips fast-fail offline handling and relies on request timeouts + retries.
|
|
6
|
+
*/
|
|
7
|
+
export type NetInfoLike = {
|
|
8
|
+
fetch: () => Promise<{
|
|
9
|
+
isConnected: boolean | null;
|
|
10
|
+
}>;
|
|
11
|
+
addEventListener: (listener: (state: {
|
|
12
|
+
isConnected: boolean | null;
|
|
13
|
+
}) => void) => () => void;
|
|
14
|
+
};
|
|
1
15
|
export type SDKConfig = {
|
|
2
16
|
baseUrl: string;
|
|
3
17
|
token?: string;
|
|
4
18
|
timeout?: number;
|
|
5
19
|
logout?: () => void;
|
|
20
|
+
/**
|
|
21
|
+
* Optional NetInfo module (pass the default export of
|
|
22
|
+
* '@react-native-community/netinfo'). Enables instant "no connection"
|
|
23
|
+
* failures instead of waiting for a timeout on weak networks.
|
|
24
|
+
*/
|
|
25
|
+
netInfo?: NetInfoLike;
|
|
26
|
+
/** Timeout (ms) for idempotent GET requests. Defaults to 30000. */
|
|
27
|
+
getTimeout?: number;
|
|
6
28
|
};
|
|
7
29
|
export declare const initSDK: (options: SDKConfig) => void;
|
|
8
30
|
export declare const getSDKConfig: () => SDKConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkConfig.d.ts","sourceRoot":"","sources":["../../src/sdkConfig.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,OAAO,YAAa,SAAS,SAMzC,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,SAK/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"sdkConfig.d.ts","sourceRoot":"","sources":["../../src/sdkConfig.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtD,gBAAgB,EAAE,CAChB,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,KACvD,MAAM,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,OAAO,YAAa,SAAS,SAMzC,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,SAK/B,CAAC"}
|
|
@@ -14,6 +14,14 @@ export declare class Api {
|
|
|
14
14
|
* one will trigger logout.
|
|
15
15
|
*/
|
|
16
16
|
private isLoggingOut;
|
|
17
|
+
/**
|
|
18
|
+
* Last known network connectivity, driven by the injected NetInfo module.
|
|
19
|
+
* Defaults to true (optimistic) so requests are never blocked when NetInfo
|
|
20
|
+
* is not provided or its first event hasn't arrived yet.
|
|
21
|
+
*/
|
|
22
|
+
private isConnected;
|
|
23
|
+
/** Unsubscribe handle for the NetInfo listener, cleared on re-setup. */
|
|
24
|
+
private netInfoUnsubscribe?;
|
|
17
25
|
/**
|
|
18
26
|
* Configurable options.
|
|
19
27
|
*/
|
|
@@ -35,6 +43,25 @@ export declare class Api {
|
|
|
35
43
|
*/
|
|
36
44
|
resetLogoutState(): void;
|
|
37
45
|
setup(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Subscribes to the injected NetInfo module (if any) to track connectivity.
|
|
48
|
+
* Safe to call repeatedly — the previous listener is torn down first.
|
|
49
|
+
*/
|
|
50
|
+
private subscribeNetInfo;
|
|
51
|
+
/**
|
|
52
|
+
* Attaches a request interceptor that:
|
|
53
|
+
* 1. Fast-fails when the device is known to be offline (avoids waiting for
|
|
54
|
+
* a long timeout before the user sees an error).
|
|
55
|
+
* 2. Shortens the timeout for idempotent GETs on the main instance so reads
|
|
56
|
+
* fail fast and hand off to the retry interceptor.
|
|
57
|
+
*/
|
|
58
|
+
private attachRequestGuards;
|
|
59
|
+
/**
|
|
60
|
+
* Attaches an exponential-backoff retry interceptor to an apisauce
|
|
61
|
+
* instance's axios layer. Only idempotent requests with transient
|
|
62
|
+
* errors are replayed, up to MAX_RETRIES times.
|
|
63
|
+
*/
|
|
64
|
+
private attachRetryInterceptor;
|
|
38
65
|
/**
|
|
39
66
|
* Login
|
|
40
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/services/api/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,UAAU,CAAC;AAOjE,OAAO,EAAgB,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/services/api/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,UAAU,CAAC;AAOjE,OAAO,EAAgB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAuC1D;;GAEG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAM;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC;IAElB;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAkB;IAEtC;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAAiB;IAEpC,wEAAwE;IACxE,OAAO,CAAC,kBAAkB,CAAC,CAAa;IAExC;;OAEG;IAEH;;;;OAIG;gBACS,MAAM,GAAE,SAA0B;WAKhC,WAAW,IAAI,GAAG;IAiBhC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CA6BxB;IAEF;;OAEG;IACI,gBAAgB;IAIjB,KAAK;IAsDX;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;OAEG;IAEG,KAAK,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBlB;;OAEG;IAEG,QAAQ,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAsBrB;;OAEG;IAEG,QAAQ,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAsBrB;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAsBvB;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAsBvB;;OAEG;IAEG,WAAW,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBxB;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBvB;;OAEG;IAEG,YAAY,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBzB;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBvB;;OAEG;IAEG,WAAW,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBxB;;OAEG;IAEG,YAAY;;;;;;;;;;;;;;;;IAqBlB;;OAEG;IAEG,YAAY,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAsBzB;;OAEG;IAEG,UAAU,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAsBrB;;OAEG;IAEG,WAAW,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBtB;;OAEG;IAEG,gBAAgB;;;;;;;;;;;;;;;;IAoBtB;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBvB;;OAEG;IAEG,uBAAuB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBlC;;OAEG;IAEG,QAAQ,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBrB;;OAEG;IAEG,eAAe,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoB5B;;OAEG;IAEG,gBAAgB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB7B;;OAEG;IAEG,YAAY,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBzB;;OAEG;IAEG,eAAe,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB5B;;OAEG;IAEG,eAAe,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB5B;;OAEG;IAEG,kBAAkB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB/B;;OAEG;IAEG,YAAY,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBzB;;OAEG;IAEG,iBAAiB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB9B;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;IAsCvB;;OAEG;IAEG,MAAM,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAsBnB;;OAEG;IAEG,QAAQ,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBrB;;OAEG;IAEG,SAAS,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IA2CtB;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBvB;;OAEG;IAEG,YAAY,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAmBzB;;OAEG;IAEG,YAAY,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAmBrB;;OAEG;IAEG,QAAQ,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAmBrB;;OAEG;IAEG,WAAW,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBxB;;OAEG;IAEG,OAAO,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBpB;;OAEG;IAEG,WAAW,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBxB;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBvB;;OAEG;IAEG,QAAQ,CAAC,MAAM,KAAA,EAAE,WAAW,KAAA;;;;;;;;;;;;;;;;IAoBlC;;OAEG;IAEG,gBAAgB,CAAC,MAAM,KAAA,EAAE,WAAW,KAAA;;;;;;;;;;;;;;;;IA0B1C;;OAEG;IAEG,aAAa,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB1B;;OAEG;IAEG,cAAc,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB3B;;OAEG;IAEG,UAAU,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBvB;;OAEG;IAEG,QAAQ,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBrB;;OAEG;IAEG,0BAA0B,CAAC,QAAQ,KAAA;;;;;;;;;;;;;;;;IAwBzC;;OAEG;IAEG,sBAAsB,CAAC,QAAQ,KAAA,EAAE,KAAK,KAAA;;;;;;;;;;;;;;;;IAwB5C;;OAEG;IAEG,wBAAwB,CAAC,QAAQ,KAAA,EAAE,KAAK,KAAA;;;;;;;;;;;;;;;;IA+B9C;;OAEG;IAEG,eAAe,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB5B;;OAEG;IAEG,uBAAuB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBpC;;OAEG;IAEG,8BAA8B,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB3C;;OAEG;IAEG,kBAAkB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqB/B;;OAEG;IAEG,YAAY,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBzB;;OAEG;IAEG,SAAS,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBtB;;OAEG;IAEG,WAAW,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IA0BtB;;OAEG;IAEG,cAAc,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoC3B;;OAEG;IAEG,gBAAgB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBvB,gBAAgB,CAAC,MAAM,KAAA,EAAE,WAAW,KAAA;;;;;;;;;;;;;;;;IAuBpC,WAAW,CAAC,WAAW,KAAA,EAAE,IAAI,KAAA;;;;;;;;;;;;;;;;IAqB7B,cAAc,CAAC,WAAW,KAAA;;;;;;;;;;;;;;;;IAqB1B,uBAAuB,CAAC,WAAW,KAAA;;;;;;;;;;;;;;;;IAoBnC,sBAAsB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoB3B,QAAQ,CAAC,KAAK,KAAA,EAAE,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBpB,WAAW,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBhB,aAAa,CAAC,KAAK,KAAA,EAAE,QAAQ,KAAA;;;;;;;;;;;;;;;;IAmB7B,aAAa,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBlB,WAAW,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBhB,QAAQ;;;;;;;;;;;;;;;;IAoBR,eAAe;;;;;;;;;;;;;;;;IAoBf,aAAa,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBhB,eAAe;;;;;;;;;;;;;;;;IAoBf,YAAY,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBf,cAAc,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBjB,eAAe,CAAC,EAAE,KAAA,EAAE,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBxB,WAAW,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBhB,WAAW,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBd,cAAc,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAsBnB,gBAAgB;;;;;;;;;;;;;;;;IAoBhB,aAAa;;;;;;;;;;;;;;;;IAoBb,WAAW;;;;;;;;;;;;;;;;IAoBX,aAAa;;;;;;;;;;;;;;;;IAoBb,UAAU;;;;;;;;;;;;;;;;IAmBV,eAAe;;;;;;;;;;;;;;;;IAmBf,aAAa;;;;;;;;;;;;;;;;IAmBb,gBAAgB;;;;;;;;;;;;;;;;IAoBhB,mBAAmB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBtB,UAAU,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBf,kBAAkB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBrB,WAAW,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBd,sBAAsB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBzB,oBAAoB,CAAC,EAAE,KAAA,EAAE,IAAI,KAAA;;;;;;;;;;;;;;;;IAoB7B,eAAe;;;;;;;;;;;;;;;;IAoBf,WAAW,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBd,cAAc;;;;;;;;;;;;;;;;IAoBd,WAAW;;;;;;;;;;;;;;;;IAoBX,OAAO;;;;;;;;;;;;;;;;IAoBP,WAAW,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBlB,eAAe,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBpB,UAAU,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBf,MAAM;;;;;;;;;;;;;;;;IAoBN,YAAY,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAoBnB,gBAAgB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBrB,gBAAgB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAqBvB,cAAc,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAsBrB,kBAAkB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBrB,UAAU;;;;;;;;;;;;;;;;IAiBV,qBAAqB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkCxB,kBAAkB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBvB,sBAAsB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBzB,WAAW,CAAC,OAAO,KAAA;;;;;;;;;;;;;;;;IAuBnB,UAAU,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;IAoBpB,cAAc,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;IAoBxB,eAAe,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;IAoBzB,UAAU,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;IAoBpB,iBAAiB;;;;;;;;;;;;;;;;IAmBjB,iBAAiB;;;;;;;;;;;;;;;;IAkBjB,YAAY;;;;;;;;;;;;;;;;IAkBZ,eAAe,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAkBtB,kBAAkB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;;;IAkBzB,YAAY,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBjB,kBAAkB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAmBrB,cAAc;;;;;;;;;;;;;;;;IAmBd,cAAc;;;;;;;;;;;;;;;;IAmBd,iBAAiB;;;;;;;;;;;;;;;;IAmBjB,mBAAmB;;;;;;;;;;;;;;;;IAmBnB,kBAAkB,CAAC,EAAE,KAAA,EAAE,IAAI,KAAA;;;;;;;;;;;;;;;;IAmB3B,gBAAgB,CACpB,EAAE,KAAA,EACF,UAAU,KAAA,EACV,QAAQ,KAAA,EACR,UAAU,KAAA,EACV,qBAAqB,KAAA,EACrB,qBAAqB,KAAA;;;;;;;;;;;;;;;;IAoBjB,eAAe,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBpB,gBAAgB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAqBnB,cAAc,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBnB,WAAW,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBhB,eAAe,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAmBlB,iBAAiB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAoBpB,kBAAkB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAqBvB,oBAAoB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBzB,WAAW,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBd,iBAAiB,CACrB,EAAE,KAAA,EACF,UAAU,KAAA,EACV,QAAQ,KAAA,EACR,UAAU,KAAA,EACV,qBAAqB,KAAA,EACrB,qBAAqB,KAAA;;;;;;;;;;;;;;;;IAoBjB,WAAW;;;;;;;;;;;;;;;;IAkBX,UAAU,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAkBf,UAAU,CAAC,IAAI,KAAA,EAAE,IAAI,KAAA;;;;;;;;;;;;;;;;IAkBrB,cAAc,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBnB,gBAAgB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBrB,UAAU,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAmBb,YAAY,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBf,aAAa,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBlB,eAAe,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBpB,eAAe;;;;;;;;;;;;;;;;IAkBf,cAAc,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBjB,cAAc,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBnB,kBAAkB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBrB,oBAAoB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBvB,UAAU,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBf,mBAAmB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBtB,mBAAmB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBxB,iBAAiB,CAAC,UAAU,KAAA,EAAE,QAAQ,KAAA;;;;;;;;;;;;;;;;IAkBtC,yBAAyB,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;IAmBvD,8BAA8B,CAAC,IAAI,EAAE;QACzC,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,OAAO,CAAC;KAC/B;;;;;;;;;;;;;;;;IAmBK,iBAAiB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAoBtB,cAAc,CAAC,EAAE,EAAE,GAAG;;;;;;;;;;;;;;;;IAkBtB,kBAAkB,CAAC,EAAE,EAAE,GAAG;;;;;;;;;;;;;;;;IAkB1B,iBAAiB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;IAmB3B,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;IAmB/B,mBAAmB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBtB,iBAAiB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBpB,iBAAiB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBtB,qBAAqB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmB1B,YAAY,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBf,sBAAsB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBzB,wBAAwB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmB7B,uBAAuB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmB5B,iBAAiB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBpB,mBAAmB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBtB,oBAAoB,CAAC,EAAE,KAAA;;;;;;;;;;;;;;;;IAkBvB,sBAAsB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmB3B,uBAAuB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmB5B,UAAU,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;IAmBf,kBAAkB;;;;;;;;;;;;;;;;IAkBlB,wBAAwB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;CAkBpC"}
|
package/package.json
CHANGED
|
@@ -60,9 +60,9 @@ export const LivenessV2 = observer(function LivenessV2(props: any) {
|
|
|
60
60
|
case 'blink':
|
|
61
61
|
return 'Nhắm mắt trong 3 giây';
|
|
62
62
|
case 'right':
|
|
63
|
-
return 'Quay sang phải 3 giây';
|
|
64
|
-
case 'left':
|
|
65
63
|
return 'Quay sang trái 3 giây';
|
|
64
|
+
case 'left':
|
|
65
|
+
return 'Quay sang phải 3 giây';
|
|
66
66
|
case 'up':
|
|
67
67
|
return 'Nhìn lên trên 3 giây';
|
|
68
68
|
case 'down':
|
|
@@ -38,6 +38,7 @@ export const ViewContract = observer(function ViewContract(props: any) {
|
|
|
38
38
|
loanBriefId: props.route.params.loan.id,
|
|
39
39
|
isTermesEtConditions: true,
|
|
40
40
|
});
|
|
41
|
+
|
|
41
42
|
if (response.kind === 'ok' && response.data?.meta?.errorCode === 200) {
|
|
42
43
|
navigation.push(ScreenNames.MySignViettel, {
|
|
43
44
|
url: response?.data?.data,
|
package/src/sdkConfig.ts
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import appStore from './AppStore';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Minimal shape of the @react-native-community/netinfo module.
|
|
5
|
+
* Injected by the host app so the SDK can detect offline state without
|
|
6
|
+
* taking a hard native dependency. Optional — when omitted, the SDK simply
|
|
7
|
+
* skips fast-fail offline handling and relies on request timeouts + retries.
|
|
8
|
+
*/
|
|
9
|
+
export type NetInfoLike = {
|
|
10
|
+
fetch: () => Promise<{ isConnected: boolean | null }>;
|
|
11
|
+
addEventListener: (
|
|
12
|
+
listener: (state: { isConnected: boolean | null }) => void
|
|
13
|
+
) => () => void;
|
|
14
|
+
};
|
|
15
|
+
|
|
3
16
|
export type SDKConfig = {
|
|
4
17
|
baseUrl: string;
|
|
5
18
|
token?: string;
|
|
6
19
|
timeout?: number;
|
|
7
20
|
logout?: () => void;
|
|
21
|
+
/**
|
|
22
|
+
* Optional NetInfo module (pass the default export of
|
|
23
|
+
* '@react-native-community/netinfo'). Enables instant "no connection"
|
|
24
|
+
* failures instead of waiting for a timeout on weak networks.
|
|
25
|
+
*/
|
|
26
|
+
netInfo?: NetInfoLike;
|
|
27
|
+
/** Timeout (ms) for idempotent GET requests. Defaults to 30000. */
|
|
28
|
+
getTimeout?: number;
|
|
8
29
|
};
|
|
9
30
|
let config: SDKConfig | null = null;
|
|
10
31
|
|
package/src/services/api/api.ts
CHANGED
|
@@ -9,6 +9,42 @@ import { load } from '../../utils/storage';
|
|
|
9
9
|
import { getSDKConfig, SDKConfig } from '../../sdkConfig';
|
|
10
10
|
import { Alert } from 'react-native';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Retry tuning for weak / unstable networks.
|
|
14
|
+
* Only transient failures on idempotent requests are retried.
|
|
15
|
+
*/
|
|
16
|
+
const MAX_RETRIES = 3;
|
|
17
|
+
const RETRY_BASE_DELAY = 1000; // ms, grows exponentially: 1s, 2s, 4s (+ jitter)
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Default timeout for idempotent GET requests. Kept short so reads fail fast
|
|
21
|
+
* on a weak network and let the retry interceptor take over, instead of
|
|
22
|
+
* hanging for the much longer upload/write timeout. Overridable via
|
|
23
|
+
* SDKConfig.getTimeout.
|
|
24
|
+
*/
|
|
25
|
+
const DEFAULT_GET_TIMEOUT = 30000; // 30s
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A failure is transient (worth retrying) when there is no response
|
|
29
|
+
* (timeout / connection drop) or the server is overloaded (5xx / 429).
|
|
30
|
+
*/
|
|
31
|
+
const isRetryableError = (error: any): boolean => {
|
|
32
|
+
if (!error || error.config?.__skipRetry) return false;
|
|
33
|
+
// No response object => network error or timeout (ECONNABORTED)
|
|
34
|
+
if (!error.response) return true;
|
|
35
|
+
const status = error.response.status;
|
|
36
|
+
return status >= 500 || status === 429;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* GET/HEAD/OPTIONS are safe to replay. POST/PUT/etc. are NOT retried
|
|
41
|
+
* automatically to avoid duplicate side effects (double loan submit, double OTP).
|
|
42
|
+
*/
|
|
43
|
+
const isIdempotent = (method?: string): boolean => {
|
|
44
|
+
const m = (method || 'get').toLowerCase();
|
|
45
|
+
return m === 'get' || m === 'head' || m === 'options';
|
|
46
|
+
};
|
|
47
|
+
|
|
12
48
|
/**
|
|
13
49
|
* Manages all requests to the API.
|
|
14
50
|
*/
|
|
@@ -25,6 +61,16 @@ export class Api {
|
|
|
25
61
|
*/
|
|
26
62
|
private isLoggingOut: boolean = false;
|
|
27
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Last known network connectivity, driven by the injected NetInfo module.
|
|
66
|
+
* Defaults to true (optimistic) so requests are never blocked when NetInfo
|
|
67
|
+
* is not provided or its first event hasn't arrived yet.
|
|
68
|
+
*/
|
|
69
|
+
private isConnected: boolean = true;
|
|
70
|
+
|
|
71
|
+
/** Unsubscribe handle for the NetInfo listener, cleared on re-setup. */
|
|
72
|
+
private netInfoUnsubscribe?: () => void;
|
|
73
|
+
|
|
28
74
|
/**
|
|
29
75
|
* Configurable options.
|
|
30
76
|
*/
|
|
@@ -136,6 +182,133 @@ export class Api {
|
|
|
136
182
|
|
|
137
183
|
this.apisauce.addMonitor(unauthorizedMonitor);
|
|
138
184
|
this.apisauceFormData.addMonitor(unauthorizedMonitor);
|
|
185
|
+
|
|
186
|
+
// Subscribe to connectivity changes (no-op if NetInfo isn't injected).
|
|
187
|
+
this.subscribeNetInfo();
|
|
188
|
+
|
|
189
|
+
// Request-side guards: fast-fail when offline + shorten GET timeouts.
|
|
190
|
+
// GET-timeout splitting only applies to the main instance; the form-data
|
|
191
|
+
// instance is used for uploads which legitimately need the long timeout.
|
|
192
|
+
this.attachRequestGuards(this.apisauce, true);
|
|
193
|
+
this.attachRequestGuards(this.apisauceFormData, false);
|
|
194
|
+
|
|
195
|
+
// Auto-retry transient failures on weak networks (timeouts, dropped
|
|
196
|
+
// connections, 5xx, 429). Applied to the underlying axios instance so
|
|
197
|
+
// apisauce still sees the final (successful or exhausted) response.
|
|
198
|
+
this.attachRetryInterceptor(this.apisauce);
|
|
199
|
+
this.attachRetryInterceptor(this.apisauceFormData);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Subscribes to the injected NetInfo module (if any) to track connectivity.
|
|
204
|
+
* Safe to call repeatedly — the previous listener is torn down first.
|
|
205
|
+
*/
|
|
206
|
+
private subscribeNetInfo() {
|
|
207
|
+
if (this.netInfoUnsubscribe) {
|
|
208
|
+
try {
|
|
209
|
+
this.netInfoUnsubscribe();
|
|
210
|
+
} catch (e) {
|
|
211
|
+
myLog('[API] NetInfo unsubscribe error:', e);
|
|
212
|
+
}
|
|
213
|
+
this.netInfoUnsubscribe = undefined;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const netInfo = this.config.netInfo;
|
|
217
|
+
if (!netInfo) {
|
|
218
|
+
this.isConnected = true; // no NetInfo => never block on connectivity
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Seed current state, then listen for changes.
|
|
223
|
+
netInfo
|
|
224
|
+
.fetch()
|
|
225
|
+
.then(state => {
|
|
226
|
+
this.isConnected = state.isConnected !== false;
|
|
227
|
+
})
|
|
228
|
+
.catch(() => {
|
|
229
|
+
this.isConnected = true;
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
this.netInfoUnsubscribe = netInfo.addEventListener(state => {
|
|
233
|
+
this.isConnected = state.isConnected !== false;
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Attaches a request interceptor that:
|
|
239
|
+
* 1. Fast-fails when the device is known to be offline (avoids waiting for
|
|
240
|
+
* a long timeout before the user sees an error).
|
|
241
|
+
* 2. Shortens the timeout for idempotent GETs on the main instance so reads
|
|
242
|
+
* fail fast and hand off to the retry interceptor.
|
|
243
|
+
*/
|
|
244
|
+
private attachRequestGuards(instance: ApisauceInstance, splitGetTimeout: boolean) {
|
|
245
|
+
const getTimeout = this.config.getTimeout || DEFAULT_GET_TIMEOUT;
|
|
246
|
+
|
|
247
|
+
instance.axiosInstance.interceptors.request.use((config: any) => {
|
|
248
|
+
// Offline fast-fail. apisauce converts this rejection into a normal
|
|
249
|
+
// CANNOT_CONNECT / NETWORK_ERROR problem, same as a timeout but instant.
|
|
250
|
+
if (this.config.netInfo && this.isConnected === false) {
|
|
251
|
+
myLog(`[API] Offline - skipping request: ${config.url}`);
|
|
252
|
+
return Promise.reject({
|
|
253
|
+
config,
|
|
254
|
+
message: 'Network offline',
|
|
255
|
+
__offline: true,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Shorten GET timeouts unless the caller passed an explicit override.
|
|
260
|
+
if (
|
|
261
|
+
splitGetTimeout &&
|
|
262
|
+
isIdempotent(config.method) &&
|
|
263
|
+
config.timeout === this.config.timeout
|
|
264
|
+
) {
|
|
265
|
+
config.timeout = getTimeout;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return config;
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Attaches an exponential-backoff retry interceptor to an apisauce
|
|
274
|
+
* instance's axios layer. Only idempotent requests with transient
|
|
275
|
+
* errors are replayed, up to MAX_RETRIES times.
|
|
276
|
+
*/
|
|
277
|
+
private attachRetryInterceptor(instance: ApisauceInstance) {
|
|
278
|
+
instance.axiosInstance.interceptors.response.use(
|
|
279
|
+
response => response,
|
|
280
|
+
async (error: any) => {
|
|
281
|
+
const config = error?.config;
|
|
282
|
+
|
|
283
|
+
if (
|
|
284
|
+
!config ||
|
|
285
|
+
!isIdempotent(config.method) ||
|
|
286
|
+
!isRetryableError(error)
|
|
287
|
+
) {
|
|
288
|
+
return Promise.reject(error);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
config.__retryCount = config.__retryCount || 0;
|
|
292
|
+
if (config.__retryCount >= MAX_RETRIES) {
|
|
293
|
+
myLog(`[API] Retry exhausted (${MAX_RETRIES}) for ${config.url}`);
|
|
294
|
+
return Promise.reject(error);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
config.__retryCount += 1;
|
|
298
|
+
|
|
299
|
+
// Exponential backoff with jitter: 1s, 2s, 4s (+ up to 300ms)
|
|
300
|
+
const delay =
|
|
301
|
+
RETRY_BASE_DELAY * Math.pow(2, config.__retryCount - 1) +
|
|
302
|
+
Math.floor(Math.random() * 300);
|
|
303
|
+
|
|
304
|
+
myLog(
|
|
305
|
+
`[API] Retry ${config.__retryCount}/${MAX_RETRIES} in ${delay}ms: ${config.url}`
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
309
|
+
return instance.axiosInstance(config);
|
|
310
|
+
}
|
|
311
|
+
);
|
|
139
312
|
}
|
|
140
313
|
|
|
141
314
|
/**
|