@chipmobilesdk/rn-payment 0.6.0 → 0.7.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/CHANGELOG.md +111 -0
- package/README.md +1 -1
- package/lib/commonjs/adapter/createStoreProvider.js +110 -0
- package/lib/commonjs/adapter/createStoreProvider.js.map +1 -0
- package/lib/commonjs/adapter/iap-adapter.js +393 -0
- package/lib/commonjs/adapter/iap-adapter.js.map +1 -0
- package/lib/commonjs/adapter/iapShapes.js +169 -0
- package/lib/commonjs/adapter/iapShapes.js.map +1 -0
- package/lib/commonjs/adapter/port.js +6 -0
- package/lib/commonjs/adapter/port.js.map +1 -0
- package/lib/commonjs/config/types.js +2 -0
- package/lib/commonjs/config/types.js.map +1 -0
- package/lib/commonjs/config/validate.js +181 -0
- package/lib/commonjs/config/validate.js.map +1 -0
- package/lib/commonjs/core/mutex.js +31 -0
- package/lib/commonjs/core/mutex.js.map +1 -0
- package/lib/commonjs/core/retry.js +37 -0
- package/lib/commonjs/core/retry.js.map +1 -0
- package/lib/commonjs/core/timers.js +207 -0
- package/lib/commonjs/core/timers.js.map +1 -0
- package/lib/commonjs/diagnostics/errors.js +83 -0
- package/lib/commonjs/diagnostics/errors.js.map +1 -0
- package/lib/commonjs/diagnostics/events.js +126 -0
- package/lib/commonjs/diagnostics/events.js.map +1 -0
- package/lib/commonjs/diagnostics/messageKeys.js +70 -0
- package/lib/commonjs/diagnostics/messageKeys.js.map +1 -0
- package/lib/commonjs/engine/connection.js +189 -0
- package/lib/commonjs/engine/connection.js.map +1 -0
- package/lib/commonjs/engine/engine.js +279 -0
- package/lib/commonjs/engine/engine.js.map +1 -0
- package/lib/commonjs/engine/finalize.js +325 -0
- package/lib/commonjs/engine/finalize.js.map +1 -0
- package/lib/commonjs/engine/foreground.js +26 -0
- package/lib/commonjs/engine/foreground.js.map +1 -0
- package/lib/commonjs/engine/internals.js +31 -0
- package/lib/commonjs/engine/internals.js.map +1 -0
- package/lib/commonjs/engine/pending.js +102 -0
- package/lib/commonjs/engine/pending.js.map +1 -0
- package/lib/commonjs/engine/products.js +198 -0
- package/lib/commonjs/engine/products.js.map +1 -0
- package/lib/commonjs/engine/purchase.js +395 -0
- package/lib/commonjs/engine/purchase.js.map +1 -0
- package/lib/commonjs/engine/purchaseFailure.js +77 -0
- package/lib/commonjs/engine/purchaseFailure.js.map +1 -0
- package/lib/commonjs/engine/receiptValidation.js +90 -0
- package/lib/commonjs/engine/receiptValidation.js.map +1 -0
- package/lib/commonjs/engine/state.js +201 -0
- package/lib/commonjs/engine/state.js.map +1 -0
- package/lib/commonjs/engine/subscriptions.js +122 -0
- package/lib/commonjs/engine/subscriptions.js.map +1 -0
- package/lib/commonjs/engine/sync.js +163 -0
- package/lib/commonjs/engine/sync.js.map +1 -0
- package/lib/commonjs/entitlements/aggregate.js +212 -0
- package/lib/commonjs/entitlements/aggregate.js.map +1 -0
- package/lib/commonjs/entitlements/mapping.js +41 -0
- package/lib/commonjs/entitlements/mapping.js.map +1 -0
- package/lib/commonjs/entitlements/policy.js +110 -0
- package/lib/commonjs/entitlements/policy.js.map +1 -0
- package/lib/commonjs/index.js +266 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/persistence/mmkv-store.js +149 -0
- package/lib/commonjs/persistence/mmkv-store.js.map +1 -0
- package/lib/commonjs/persistence/snapshot.js +229 -0
- package/lib/commonjs/persistence/snapshot.js.map +1 -0
- package/lib/commonjs/react/PaymentProvider.js +96 -0
- package/lib/commonjs/react/PaymentProvider.js.map +1 -0
- package/lib/commonjs/react/hooks.js +202 -0
- package/lib/commonjs/react/hooks.js.map +1 -0
- package/lib/commonjs/testing/conformance.js +136 -0
- package/lib/commonjs/testing/conformance.js.map +1 -0
- package/lib/commonjs/testing/fakeStore.js +281 -0
- package/lib/commonjs/testing/fakeStore.js.map +1 -0
- package/lib/commonjs/testing/index.js +45 -0
- package/lib/commonjs/testing/index.js.map +1 -0
- package/lib/module/adapter/createStoreProvider.js +106 -0
- package/lib/module/adapter/createStoreProvider.js.map +1 -0
- package/lib/module/adapter/iap-adapter.js +383 -0
- package/lib/module/adapter/iap-adapter.js.map +1 -0
- package/lib/module/adapter/iapShapes.js +160 -0
- package/lib/module/adapter/iapShapes.js.map +1 -0
- package/lib/module/adapter/port.js +4 -0
- package/lib/module/adapter/port.js.map +1 -0
- package/lib/module/config/types.js +2 -0
- package/lib/module/config/types.js.map +1 -0
- package/lib/module/config/validate.js +175 -0
- package/lib/module/config/validate.js.map +1 -0
- package/lib/module/core/mutex.js +22 -0
- package/lib/module/core/mutex.js.map +1 -0
- package/lib/module/core/retry.js +33 -0
- package/lib/module/core/retry.js.map +1 -0
- package/lib/module/core/timers.js +198 -0
- package/lib/module/core/timers.js.map +1 -0
- package/lib/module/diagnostics/errors.js +76 -0
- package/lib/module/diagnostics/errors.js.map +1 -0
- package/lib/module/diagnostics/events.js +117 -0
- package/lib/module/diagnostics/events.js.map +1 -0
- package/lib/module/diagnostics/messageKeys.js +64 -0
- package/lib/module/diagnostics/messageKeys.js.map +1 -0
- package/lib/module/engine/connection.js +185 -0
- package/lib/module/engine/connection.js.map +1 -0
- package/lib/module/engine/engine.js +274 -0
- package/lib/module/engine/engine.js.map +1 -0
- package/lib/module/engine/finalize.js +322 -0
- package/lib/module/engine/finalize.js.map +1 -0
- package/lib/module/engine/foreground.js +21 -0
- package/lib/module/engine/foreground.js.map +1 -0
- package/lib/module/engine/internals.js +26 -0
- package/lib/module/engine/internals.js.map +1 -0
- package/lib/module/engine/pending.js +95 -0
- package/lib/module/engine/pending.js.map +1 -0
- package/lib/module/engine/products.js +195 -0
- package/lib/module/engine/products.js.map +1 -0
- package/lib/module/engine/purchase.js +390 -0
- package/lib/module/engine/purchase.js.map +1 -0
- package/lib/module/engine/purchaseFailure.js +72 -0
- package/lib/module/engine/purchaseFailure.js.map +1 -0
- package/lib/module/engine/receiptValidation.js +87 -0
- package/lib/module/engine/receiptValidation.js.map +1 -0
- package/lib/module/engine/state.js +196 -0
- package/lib/module/engine/state.js.map +1 -0
- package/lib/module/engine/subscriptions.js +119 -0
- package/lib/module/engine/subscriptions.js.map +1 -0
- package/lib/module/engine/sync.js +158 -0
- package/lib/module/engine/sync.js.map +1 -0
- package/lib/module/entitlements/aggregate.js +204 -0
- package/lib/module/entitlements/aggregate.js.map +1 -0
- package/lib/module/entitlements/mapping.js +35 -0
- package/lib/module/entitlements/mapping.js.map +1 -0
- package/lib/module/entitlements/policy.js +104 -0
- package/lib/module/entitlements/policy.js.map +1 -0
- package/lib/module/index.js +59 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/persistence/mmkv-store.js +144 -0
- package/lib/module/persistence/mmkv-store.js.map +1 -0
- package/lib/module/persistence/snapshot.js +221 -0
- package/lib/module/persistence/snapshot.js.map +1 -0
- package/lib/module/react/PaymentProvider.js +90 -0
- package/lib/module/react/PaymentProvider.js.map +1 -0
- package/lib/module/react/hooks.js +192 -0
- package/lib/module/react/hooks.js.map +1 -0
- package/lib/module/testing/conformance.js +130 -0
- package/lib/module/testing/conformance.js.map +1 -0
- package/lib/module/testing/fakeStore.js +276 -0
- package/lib/module/testing/fakeStore.js.map +1 -0
- package/lib/module/testing/index.js +13 -0
- package/lib/module/testing/index.js.map +1 -0
- package/lib/typescript/commonjs/adapter/createStoreProvider.d.ts +45 -0
- package/lib/typescript/commonjs/adapter/createStoreProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/iap-adapter.d.ts +80 -0
- package/lib/typescript/commonjs/adapter/iap-adapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/iapShapes.d.ts +94 -0
- package/lib/typescript/commonjs/adapter/iapShapes.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/port.d.ts +184 -0
- package/lib/typescript/commonjs/adapter/port.d.ts.map +1 -0
- package/lib/typescript/commonjs/config/types.d.ts +326 -0
- package/lib/typescript/commonjs/config/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/config/validate.d.ts +63 -0
- package/lib/typescript/commonjs/config/validate.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/mutex.d.ts +17 -0
- package/lib/typescript/commonjs/core/mutex.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/retry.d.ts +19 -0
- package/lib/typescript/commonjs/core/retry.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/timers.d.ts +142 -0
- package/lib/typescript/commonjs/core/timers.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/errors.d.ts +55 -0
- package/lib/typescript/commonjs/diagnostics/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/events.d.ts +158 -0
- package/lib/typescript/commonjs/diagnostics/events.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts +54 -0
- package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/connection.d.ts +30 -0
- package/lib/typescript/commonjs/engine/connection.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/engine.d.ts +93 -0
- package/lib/typescript/commonjs/engine/engine.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/finalize.d.ts +53 -0
- package/lib/typescript/commonjs/engine/finalize.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/foreground.d.ts +15 -0
- package/lib/typescript/commonjs/engine/foreground.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/internals.d.ts +28 -0
- package/lib/typescript/commonjs/engine/internals.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/pending.d.ts +51 -0
- package/lib/typescript/commonjs/engine/pending.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/products.d.ts +82 -0
- package/lib/typescript/commonjs/engine/products.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/purchase.d.ts +61 -0
- package/lib/typescript/commonjs/engine/purchase.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/purchaseFailure.d.ts +15 -0
- package/lib/typescript/commonjs/engine/purchaseFailure.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/receiptValidation.d.ts +42 -0
- package/lib/typescript/commonjs/engine/receiptValidation.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/state.d.ts +46 -0
- package/lib/typescript/commonjs/engine/state.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/subscriptions.d.ts +61 -0
- package/lib/typescript/commonjs/engine/subscriptions.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/sync.d.ts +36 -0
- package/lib/typescript/commonjs/engine/sync.d.ts.map +1 -0
- package/lib/typescript/commonjs/entitlements/aggregate.d.ts +97 -0
- package/lib/typescript/commonjs/entitlements/aggregate.d.ts.map +1 -0
- package/lib/typescript/commonjs/entitlements/mapping.d.ts +27 -0
- package/lib/typescript/commonjs/entitlements/mapping.d.ts.map +1 -0
- package/lib/typescript/commonjs/entitlements/policy.d.ts +75 -0
- package/lib/typescript/commonjs/entitlements/policy.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +44 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/persistence/mmkv-store.d.ts +45 -0
- package/lib/typescript/commonjs/persistence/mmkv-store.d.ts.map +1 -0
- package/lib/typescript/commonjs/persistence/snapshot.d.ts +106 -0
- package/lib/typescript/commonjs/persistence/snapshot.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/PaymentProvider.d.ts +57 -0
- package/lib/typescript/commonjs/react/PaymentProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/hooks.d.ts +80 -0
- package/lib/typescript/commonjs/react/hooks.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance.d.ts +41 -0
- package/lib/typescript/commonjs/testing/conformance.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/fakeStore.d.ts +69 -0
- package/lib/typescript/commonjs/testing/fakeStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/index.d.ts +12 -0
- package/lib/typescript/commonjs/testing/index.d.ts.map +1 -0
- package/lib/typescript/module/adapter/createStoreProvider.d.ts +45 -0
- package/lib/typescript/module/adapter/createStoreProvider.d.ts.map +1 -0
- package/lib/typescript/module/adapter/iap-adapter.d.ts +80 -0
- package/lib/typescript/module/adapter/iap-adapter.d.ts.map +1 -0
- package/lib/typescript/module/adapter/iapShapes.d.ts +94 -0
- package/lib/typescript/module/adapter/iapShapes.d.ts.map +1 -0
- package/lib/typescript/module/adapter/port.d.ts +184 -0
- package/lib/typescript/module/adapter/port.d.ts.map +1 -0
- package/lib/typescript/module/config/types.d.ts +326 -0
- package/lib/typescript/module/config/types.d.ts.map +1 -0
- package/lib/typescript/module/config/validate.d.ts +63 -0
- package/lib/typescript/module/config/validate.d.ts.map +1 -0
- package/lib/typescript/module/core/mutex.d.ts +17 -0
- package/lib/typescript/module/core/mutex.d.ts.map +1 -0
- package/lib/typescript/module/core/retry.d.ts +19 -0
- package/lib/typescript/module/core/retry.d.ts.map +1 -0
- package/lib/typescript/module/core/timers.d.ts +142 -0
- package/lib/typescript/module/core/timers.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/errors.d.ts +55 -0
- package/lib/typescript/module/diagnostics/errors.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/events.d.ts +158 -0
- package/lib/typescript/module/diagnostics/events.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/messageKeys.d.ts +54 -0
- package/lib/typescript/module/diagnostics/messageKeys.d.ts.map +1 -0
- package/lib/typescript/module/engine/connection.d.ts +30 -0
- package/lib/typescript/module/engine/connection.d.ts.map +1 -0
- package/lib/typescript/module/engine/engine.d.ts +93 -0
- package/lib/typescript/module/engine/engine.d.ts.map +1 -0
- package/lib/typescript/module/engine/finalize.d.ts +53 -0
- package/lib/typescript/module/engine/finalize.d.ts.map +1 -0
- package/lib/typescript/module/engine/foreground.d.ts +15 -0
- package/lib/typescript/module/engine/foreground.d.ts.map +1 -0
- package/lib/typescript/module/engine/internals.d.ts +28 -0
- package/lib/typescript/module/engine/internals.d.ts.map +1 -0
- package/lib/typescript/module/engine/pending.d.ts +51 -0
- package/lib/typescript/module/engine/pending.d.ts.map +1 -0
- package/lib/typescript/module/engine/products.d.ts +82 -0
- package/lib/typescript/module/engine/products.d.ts.map +1 -0
- package/lib/typescript/module/engine/purchase.d.ts +61 -0
- package/lib/typescript/module/engine/purchase.d.ts.map +1 -0
- package/lib/typescript/module/engine/purchaseFailure.d.ts +15 -0
- package/lib/typescript/module/engine/purchaseFailure.d.ts.map +1 -0
- package/lib/typescript/module/engine/receiptValidation.d.ts +42 -0
- package/lib/typescript/module/engine/receiptValidation.d.ts.map +1 -0
- package/lib/typescript/module/engine/state.d.ts +46 -0
- package/lib/typescript/module/engine/state.d.ts.map +1 -0
- package/lib/typescript/module/engine/subscriptions.d.ts +61 -0
- package/lib/typescript/module/engine/subscriptions.d.ts.map +1 -0
- package/lib/typescript/module/engine/sync.d.ts +36 -0
- package/lib/typescript/module/engine/sync.d.ts.map +1 -0
- package/lib/typescript/module/entitlements/aggregate.d.ts +97 -0
- package/lib/typescript/module/entitlements/aggregate.d.ts.map +1 -0
- package/lib/typescript/module/entitlements/mapping.d.ts +27 -0
- package/lib/typescript/module/entitlements/mapping.d.ts.map +1 -0
- package/lib/typescript/module/entitlements/policy.d.ts +75 -0
- package/lib/typescript/module/entitlements/policy.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +44 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/persistence/mmkv-store.d.ts +45 -0
- package/lib/typescript/module/persistence/mmkv-store.d.ts.map +1 -0
- package/lib/typescript/module/persistence/snapshot.d.ts +106 -0
- package/lib/typescript/module/persistence/snapshot.d.ts.map +1 -0
- package/lib/typescript/module/react/PaymentProvider.d.ts +57 -0
- package/lib/typescript/module/react/PaymentProvider.d.ts.map +1 -0
- package/lib/typescript/module/react/hooks.d.ts +80 -0
- package/lib/typescript/module/react/hooks.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance.d.ts +41 -0
- package/lib/typescript/module/testing/conformance.d.ts.map +1 -0
- package/lib/typescript/module/testing/fakeStore.d.ts +69 -0
- package/lib/typescript/module/testing/fakeStore.d.ts.map +1 -0
- package/lib/typescript/module/testing/index.d.ts +12 -0
- package/lib/typescript/module/testing/index.d.ts.map +1 -0
- package/package.json +49 -13
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "BACKOFF_ATTEMPT_BOUNDS", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _timers.BACKOFF_ATTEMPT_BOUNDS;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "BACKOFF_MAX_DELAY_BOUNDS", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _timers.BACKOFF_MAX_DELAY_BOUNDS;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "CONNECT_TIMEOUT_BOUNDS", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _timers.CONNECT_TIMEOUT_BOUNDS;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "DEFAULT_CONNECT_TIMEOUT_MS", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _timers.DEFAULT_CONNECT_TIMEOUT_MS;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "DEFAULT_DEVELOPER_MESSAGES", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _messageKeys.DEFAULT_DEVELOPER_MESSAGES;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "DEFAULT_FINALIZE_ATTEMPT_TIMEOUT_MS", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _timers.DEFAULT_FINALIZE_ATTEMPT_TIMEOUT_MS;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "DEFAULT_FINALIZE_BACKOFF", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _timers.DEFAULT_FINALIZE_BACKOFF;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "DEFAULT_FOREGROUND_SYNC_MIN_INTERVAL_MS", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _timers.DEFAULT_FOREGROUND_SYNC_MIN_INTERVAL_MS;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "DEFAULT_MESSAGES", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _messageKeys.DEFAULT_MESSAGES;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "DEFAULT_PRODUCT_CACHE_TTL_MS", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _timers.DEFAULT_PRODUCT_CACHE_TTL_MS;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(exports, "DEFAULT_PRODUCT_QUERY_TIMEOUT_MS", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function () {
|
|
69
|
+
return _timers.DEFAULT_PRODUCT_QUERY_TIMEOUT_MS;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
Object.defineProperty(exports, "DEFAULT_PURCHASE_LAUNCH_TIMEOUT_MS", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function () {
|
|
75
|
+
return _timers.DEFAULT_PURCHASE_LAUNCH_TIMEOUT_MS;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(exports, "DEFAULT_RECONNECT_BACKOFF", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return _timers.DEFAULT_RECONNECT_BACKOFF;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(exports, "DEFAULT_STALE_AFTER_MS", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function () {
|
|
87
|
+
return _timers.DEFAULT_STALE_AFTER_MS;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
Object.defineProperty(exports, "DEFAULT_SYNC_TIMEOUT_MS", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function () {
|
|
93
|
+
return _timers.DEFAULT_SYNC_TIMEOUT_MS;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
Object.defineProperty(exports, "DEFAULT_USER_MESSAGES", {
|
|
97
|
+
enumerable: true,
|
|
98
|
+
get: function () {
|
|
99
|
+
return _messageKeys.DEFAULT_USER_MESSAGES;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
Object.defineProperty(exports, "DEVELOPER_MESSAGE_KEYS", {
|
|
103
|
+
enumerable: true,
|
|
104
|
+
get: function () {
|
|
105
|
+
return _messageKeys.DEVELOPER_MESSAGE_KEYS;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
Object.defineProperty(exports, "FINALIZE_ATTEMPT_TIMEOUT_BOUNDS", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function () {
|
|
111
|
+
return _timers.FINALIZE_ATTEMPT_TIMEOUT_BOUNDS;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
Object.defineProperty(exports, "FOREGROUND_SYNC_MIN_INTERVAL_BOUNDS", {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
get: function () {
|
|
117
|
+
return _timers.FOREGROUND_SYNC_MIN_INTERVAL_BOUNDS;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(exports, "PAYMENT_ERROR_CODES", {
|
|
121
|
+
enumerable: true,
|
|
122
|
+
get: function () {
|
|
123
|
+
return _errors.PAYMENT_ERROR_CODES;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
Object.defineProperty(exports, "PRODUCT_CACHE_TTL_BOUNDS", {
|
|
127
|
+
enumerable: true,
|
|
128
|
+
get: function () {
|
|
129
|
+
return _timers.PRODUCT_CACHE_TTL_BOUNDS;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
Object.defineProperty(exports, "PRODUCT_QUERY_TIMEOUT_BOUNDS", {
|
|
133
|
+
enumerable: true,
|
|
134
|
+
get: function () {
|
|
135
|
+
return _timers.PRODUCT_QUERY_TIMEOUT_BOUNDS;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
Object.defineProperty(exports, "PURCHASE_LAUNCH_TIMEOUT_BOUNDS", {
|
|
139
|
+
enumerable: true,
|
|
140
|
+
get: function () {
|
|
141
|
+
return _timers.PURCHASE_LAUNCH_TIMEOUT_BOUNDS;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
Object.defineProperty(exports, "PaymentConfigError", {
|
|
145
|
+
enumerable: true,
|
|
146
|
+
get: function () {
|
|
147
|
+
return _errors.PaymentConfigError;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
Object.defineProperty(exports, "PaymentError", {
|
|
151
|
+
enumerable: true,
|
|
152
|
+
get: function () {
|
|
153
|
+
return _errors.PaymentError;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
Object.defineProperty(exports, "PaymentProvider", {
|
|
157
|
+
enumerable: true,
|
|
158
|
+
get: function () {
|
|
159
|
+
return _PaymentProvider.PaymentProvider;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
Object.defineProperty(exports, "STALE_AFTER_BOUNDS", {
|
|
163
|
+
enumerable: true,
|
|
164
|
+
get: function () {
|
|
165
|
+
return _timers.STALE_AFTER_BOUNDS;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
Object.defineProperty(exports, "SYNC_TIMEOUT_BOUNDS", {
|
|
169
|
+
enumerable: true,
|
|
170
|
+
get: function () {
|
|
171
|
+
return _timers.SYNC_TIMEOUT_BOUNDS;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
Object.defineProperty(exports, "USER_MESSAGE_KEYS", {
|
|
175
|
+
enumerable: true,
|
|
176
|
+
get: function () {
|
|
177
|
+
return _messageKeys.USER_MESSAGE_KEYS;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
Object.defineProperty(exports, "createEngine", {
|
|
181
|
+
enumerable: true,
|
|
182
|
+
get: function () {
|
|
183
|
+
return _engine.createEngine;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
Object.defineProperty(exports, "createStoreProvider", {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
get: function () {
|
|
189
|
+
return _createStoreProvider.createStoreProvider;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
Object.defineProperty(exports, "isUserMessageKey", {
|
|
193
|
+
enumerable: true,
|
|
194
|
+
get: function () {
|
|
195
|
+
return _messageKeys.isUserMessageKey;
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
Object.defineProperty(exports, "paymentMessages", {
|
|
199
|
+
enumerable: true,
|
|
200
|
+
get: function () {
|
|
201
|
+
return _messageKeys.paymentMessages;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
Object.defineProperty(exports, "syncOnForeground", {
|
|
205
|
+
enumerable: true,
|
|
206
|
+
get: function () {
|
|
207
|
+
return _foreground.syncOnForeground;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
Object.defineProperty(exports, "useEntitlement", {
|
|
211
|
+
enumerable: true,
|
|
212
|
+
get: function () {
|
|
213
|
+
return _hooks.useEntitlement;
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
Object.defineProperty(exports, "useEntitlements", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
get: function () {
|
|
219
|
+
return _hooks.useEntitlements;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
Object.defineProperty(exports, "usePaymentEngine", {
|
|
223
|
+
enumerable: true,
|
|
224
|
+
get: function () {
|
|
225
|
+
return _PaymentProvider.usePaymentEngine;
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
Object.defineProperty(exports, "usePaymentStatus", {
|
|
229
|
+
enumerable: true,
|
|
230
|
+
get: function () {
|
|
231
|
+
return _hooks.usePaymentStatus;
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
Object.defineProperty(exports, "usePendingPurchases", {
|
|
235
|
+
enumerable: true,
|
|
236
|
+
get: function () {
|
|
237
|
+
return _hooks.usePendingPurchases;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
Object.defineProperty(exports, "useProducts", {
|
|
241
|
+
enumerable: true,
|
|
242
|
+
get: function () {
|
|
243
|
+
return _hooks.useProducts;
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
Object.defineProperty(exports, "usePurchase", {
|
|
247
|
+
enumerable: true,
|
|
248
|
+
get: function () {
|
|
249
|
+
return _hooks.usePurchase;
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
Object.defineProperty(exports, "useSync", {
|
|
253
|
+
enumerable: true,
|
|
254
|
+
get: function () {
|
|
255
|
+
return _hooks.useSync;
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
var _timers = require("./core/timers.js");
|
|
259
|
+
var _createStoreProvider = require("./adapter/createStoreProvider.js");
|
|
260
|
+
var _engine = require("./engine/engine.js");
|
|
261
|
+
var _foreground = require("./engine/foreground.js");
|
|
262
|
+
var _PaymentProvider = require("./react/PaymentProvider.js");
|
|
263
|
+
var _hooks = require("./react/hooks.js");
|
|
264
|
+
var _errors = require("./diagnostics/errors.js");
|
|
265
|
+
var _messageKeys = require("./diagnostics/messageKeys.js");
|
|
266
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_timers","require","_createStoreProvider","_engine","_foreground","_PaymentProvider","_hooks","_errors","_messageKeys"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,IAAAA,OAAA,GAAAC,OAAA;AAiDA,IAAAC,oBAAA,GAAAD,OAAA;AAIA,IAAAE,OAAA,GAAAF,OAAA;AASA,IAAAG,WAAA,GAAAH,OAAA;AAGA,IAAAI,gBAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AAYA,IAAAM,OAAA,GAAAN,OAAA;AAYA,IAAAO,YAAA,GAAAP,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createMemorySnapshotStore = createMemorySnapshotStore;
|
|
7
|
+
exports.createSnapshotStore = createSnapshotStore;
|
|
8
|
+
var _rnCore = require("@chipmobilesdk/rn-core");
|
|
9
|
+
var _snapshot = require("./snapshot.js");
|
|
10
|
+
/**
|
|
11
|
+
* MMKV-backed snapshot store.
|
|
12
|
+
*
|
|
13
|
+
* Every MMKV import is confined to this file, so the rest of the package stays
|
|
14
|
+
* testable without a native module.
|
|
15
|
+
*
|
|
16
|
+
* MMKV is chosen because it is **synchronous**, which is what lets
|
|
17
|
+
* `getEntitlement` be an in-memory read with no I/O on render paths (PERF-001).
|
|
18
|
+
* An async store would force either an async entitlement read or a hidden
|
|
19
|
+
* hydration race on every call.
|
|
20
|
+
*
|
|
21
|
+
* Records are partitioned by cache-scope token (FR-057a). The token is a
|
|
22
|
+
* partition key and nothing more: never interpreted, never transmitted, never
|
|
23
|
+
* attached to a transaction.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const INSTANCE_ID = 'chipmobilesdk.payment';
|
|
27
|
+
const KEY_PREFIX = 'snapshot';
|
|
28
|
+
const mmkv = (0, _rnCore.lazyPeer)('react-native-mmkv', () => {
|
|
29
|
+
// Inside `try`, so Metro bundles an app that leaves this optional peer out.
|
|
30
|
+
try {
|
|
31
|
+
return require('react-native-mmkv');
|
|
32
|
+
} catch (cause) {
|
|
33
|
+
throw cause;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
function scopeKey(scopeToken) {
|
|
37
|
+
// An explicit sentinel rather than an empty segment, so the unscoped record
|
|
38
|
+
// can never collide with a scope whose token happens to be empty.
|
|
39
|
+
return `${KEY_PREFIX}:${scopeToken ?? '__default__'}`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Opens the MMKV instance through v4's `createMMKV`.
|
|
44
|
+
*
|
|
45
|
+
* Up to 0.2.0 this called `new MMKV()`, the v3 constructor. In v4 — the only
|
|
46
|
+
* major the peer range allows — `MMKV` is a type, not a value, so the call threw
|
|
47
|
+
* and the store fell back to memory on every device: entitlements read `unknown`
|
|
48
|
+
* after each cold start, and a pending purchase was forgotten after an app kill.
|
|
49
|
+
* Tests could not see it, because the test double still exported a v3 class.
|
|
50
|
+
*/
|
|
51
|
+
function resolveBacking() {
|
|
52
|
+
// rn-core's port: MMKV when it opens, otherwise memory with `durable: false`.
|
|
53
|
+
const port = (0, _rnCore.openDurable)(() => mmkv.require(peer => new Error(`${peer} is not installed`)).createMMKV({
|
|
54
|
+
id: INSTANCE_ID
|
|
55
|
+
}));
|
|
56
|
+
return {
|
|
57
|
+
backing: {
|
|
58
|
+
getString: key => port.getString(key),
|
|
59
|
+
set: (key, value) => port.set(key, value),
|
|
60
|
+
remove: key => port.remove(key),
|
|
61
|
+
clearAll: () => port.clearAll(),
|
|
62
|
+
getAllKeys: () => port.keys()
|
|
63
|
+
},
|
|
64
|
+
durable: port.durable
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Creates the store.
|
|
70
|
+
*
|
|
71
|
+
* The memory fallback is a **documented degradation**, not a silent one: without
|
|
72
|
+
* MMKV the snapshot does not survive a cold start, so entitlements read `unknown`
|
|
73
|
+
* until the first sync. That is safe by construction — `unknown`, never
|
|
74
|
+
* `not_entitled` (FR-047) — and FR-059's startup sync repairs it. `isDurable()`
|
|
75
|
+
* lets the engine warn, so the condition is visible rather than mysterious.
|
|
76
|
+
*/
|
|
77
|
+
function createSnapshotStore(injected) {
|
|
78
|
+
const {
|
|
79
|
+
backing,
|
|
80
|
+
durable
|
|
81
|
+
} = injected ?? resolveBacking();
|
|
82
|
+
return {
|
|
83
|
+
load(scopeToken) {
|
|
84
|
+
const raw = backing.getString(scopeKey(scopeToken));
|
|
85
|
+
if (raw === undefined) {
|
|
86
|
+
return (0, _snapshot.emptySnapshot)(scopeToken);
|
|
87
|
+
}
|
|
88
|
+
let parsed;
|
|
89
|
+
try {
|
|
90
|
+
parsed = JSON.parse(raw);
|
|
91
|
+
} catch {
|
|
92
|
+
// Corrupt JSON is discarded rather than repaired: the store is the
|
|
93
|
+
// authoritative source and the next sync rebuilds from it.
|
|
94
|
+
return (0, _snapshot.emptySnapshot)(scopeToken);
|
|
95
|
+
}
|
|
96
|
+
const outcome = (0, _snapshot.migrateSnapshot)(parsed);
|
|
97
|
+
if (!outcome.ok) {
|
|
98
|
+
return (0, _snapshot.emptySnapshot)(scopeToken);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// A record whose stored token disagrees with the requested scope must not
|
|
102
|
+
// be served: that is precisely the account-switch inheritance FR-057a
|
|
103
|
+
// exists to prevent.
|
|
104
|
+
if (outcome.snapshot.scopeToken !== scopeToken) {
|
|
105
|
+
return (0, _snapshot.emptySnapshot)(scopeToken);
|
|
106
|
+
}
|
|
107
|
+
return outcome.snapshot;
|
|
108
|
+
},
|
|
109
|
+
save(snapshot) {
|
|
110
|
+
try {
|
|
111
|
+
backing.set(scopeKey(snapshot.scopeToken), JSON.stringify(snapshot));
|
|
112
|
+
return true;
|
|
113
|
+
} catch {
|
|
114
|
+
// A failed write must never take down a purchase flow. The in-memory
|
|
115
|
+
// state stays correct for this session and the next sync re-derives it;
|
|
116
|
+
// the engine reports it (PAY-13).
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
clearAll() {
|
|
121
|
+
try {
|
|
122
|
+
for (const key of backing.getAllKeys()) {
|
|
123
|
+
if (key.startsWith(`${KEY_PREFIX}:`)) {
|
|
124
|
+
backing.remove(key);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
} catch {
|
|
128
|
+
// Best effort; a failure here must not throw into a logout flow.
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
isDurable: () => durable
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Test seam for driving the store without the native module. */
|
|
136
|
+
function createMemorySnapshotStore() {
|
|
137
|
+
const memory = (0, _rnCore.createMemoryKeyValue)();
|
|
138
|
+
return createSnapshotStore({
|
|
139
|
+
backing: {
|
|
140
|
+
getString: key => memory.getString(key),
|
|
141
|
+
set: (key, value) => memory.set(key, value),
|
|
142
|
+
remove: key => memory.remove(key),
|
|
143
|
+
clearAll: () => memory.clearAll(),
|
|
144
|
+
getAllKeys: () => memory.keys()
|
|
145
|
+
},
|
|
146
|
+
durable: false
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=mmkv-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_rnCore","require","_snapshot","INSTANCE_ID","KEY_PREFIX","mmkv","lazyPeer","cause","scopeKey","scopeToken","resolveBacking","port","openDurable","peer","Error","createMMKV","id","backing","getString","key","set","value","remove","clearAll","getAllKeys","keys","durable","createSnapshotStore","injected","load","raw","undefined","emptySnapshot","parsed","JSON","parse","outcome","migrateSnapshot","ok","snapshot","save","stringify","startsWith","isDurable","createMemorySnapshotStore","memory","createMemoryKeyValue"],"sourceRoot":"../../../src","sources":["persistence/mmkv-store.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SNAPSHOT_SCHEMA_VERSION = exports.SNAPSHOT_MIGRATIONS = void 0;
|
|
7
|
+
exports.emptySnapshot = emptySnapshot;
|
|
8
|
+
exports.migrateSnapshot = migrateSnapshot;
|
|
9
|
+
exports.pendingFinalizations = pendingFinalizations;
|
|
10
|
+
exports.resolveFinalizeState = resolveFinalizeState;
|
|
11
|
+
/**
|
|
12
|
+
* The persisted snapshot: schema, versioning, and migration.
|
|
13
|
+
*
|
|
14
|
+
* What is stored here is **exhaustively** what the package keeps on the device,
|
|
15
|
+
* and the README repeats this list so an app owner can complete a Data safety
|
|
16
|
+
* declaration accurately (FR-056, POL-002).
|
|
17
|
+
*
|
|
18
|
+
* Deliberately absent: payment details, card data, billing address, user
|
|
19
|
+
* identity, raw receipts, verification payloads, and backend tokens.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 2 since 0.6.0: the never-written `entitlements` map and `finalized` state are
|
|
24
|
+
* gone (PAY-12). Entitlements are always derived from purchases, never stored.
|
|
25
|
+
*/
|
|
26
|
+
const SNAPSHOT_SCHEMA_VERSION = exports.SNAPSHOT_SCHEMA_VERSION = 2;
|
|
27
|
+
|
|
28
|
+
/** Where a transaction stands with the store. */
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Where a transaction stands in the finalization queue.
|
|
32
|
+
*
|
|
33
|
+
* `queued` is the load-bearing value: it is written **before** the store call is
|
|
34
|
+
* attempted, so an app killed mid-finalize leaves a recoverable record rather
|
|
35
|
+
* than a paid purchase that Google will auto-refund (FR-041, FR-042).
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/** Whether the app's backend has ruled on this transaction (FR-072a). */
|
|
39
|
+
|
|
40
|
+
function emptySnapshot(scopeToken) {
|
|
41
|
+
return {
|
|
42
|
+
schemaVersion: SNAPSHOT_SCHEMA_VERSION,
|
|
43
|
+
scopeToken,
|
|
44
|
+
purchases: [],
|
|
45
|
+
lastSyncedAt: undefined
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A migration from one schema version to the next.
|
|
51
|
+
*
|
|
52
|
+
* Kept as an ordered chain rather than a switch so each step stays small and
|
|
53
|
+
* independently testable, and so a device several versions behind is carried
|
|
54
|
+
* forward one hop at a time (NFR-009).
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/** Registered migrations, one hop each. */
|
|
58
|
+
const SNAPSHOT_MIGRATIONS = exports.SNAPSHOT_MIGRATIONS = [{
|
|
59
|
+
// v1 stored an `entitlements` map nothing ever wrote to, and a `finalized`
|
|
60
|
+
// purchase state nothing ever set (PAY-12). Both go; a `finalized` record,
|
|
61
|
+
// should one exist, is a purchased one whose finalize progress is kept.
|
|
62
|
+
from: 1,
|
|
63
|
+
to: 2,
|
|
64
|
+
migrate(input) {
|
|
65
|
+
const rest = {
|
|
66
|
+
...input
|
|
67
|
+
};
|
|
68
|
+
delete rest.entitlements;
|
|
69
|
+
const purchases = Array.isArray(rest.purchases) ? rest.purchases.map(record => typeof record === 'object' && record !== null && record.state === 'finalized' ? {
|
|
70
|
+
...record,
|
|
71
|
+
state: 'purchased'
|
|
72
|
+
} : record) : rest.purchases;
|
|
73
|
+
return {
|
|
74
|
+
...rest,
|
|
75
|
+
schemaVersion: 2,
|
|
76
|
+
purchases
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}];
|
|
80
|
+
function migrateSnapshot(raw) {
|
|
81
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
82
|
+
return {
|
|
83
|
+
ok: false,
|
|
84
|
+
reason: 'unreadable'
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
let working = {
|
|
88
|
+
...raw
|
|
89
|
+
};
|
|
90
|
+
const version = working.schemaVersion;
|
|
91
|
+
if (typeof version !== 'number' || !Number.isInteger(version) || version < 1) {
|
|
92
|
+
return {
|
|
93
|
+
ok: false,
|
|
94
|
+
reason: 'unreadable'
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (version > SNAPSHOT_SCHEMA_VERSION) {
|
|
98
|
+
// A newer app version wrote this. Downgrading cannot know what was added,
|
|
99
|
+
// so refuse rather than silently drop fields.
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
reason: 'unsupported_version'
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
let current = version;
|
|
106
|
+
let migrated = false;
|
|
107
|
+
while (current < SNAPSHOT_SCHEMA_VERSION) {
|
|
108
|
+
const step = SNAPSHOT_MIGRATIONS.find(m => m.from === current);
|
|
109
|
+
if (!step) {
|
|
110
|
+
return {
|
|
111
|
+
ok: false,
|
|
112
|
+
reason: 'unsupported_version'
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
working = step.migrate(working);
|
|
116
|
+
current = step.to;
|
|
117
|
+
migrated = true;
|
|
118
|
+
}
|
|
119
|
+
const snapshot = coerceSnapshot(working);
|
|
120
|
+
return snapshot ? {
|
|
121
|
+
ok: true,
|
|
122
|
+
snapshot,
|
|
123
|
+
migrated
|
|
124
|
+
} : {
|
|
125
|
+
ok: false,
|
|
126
|
+
reason: 'unreadable'
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Validates shape after migration.
|
|
132
|
+
*
|
|
133
|
+
* Runs even on a non-migrated record because the bytes came off a device where
|
|
134
|
+
* anything could have happened to them — a partial write, a rooted user, a
|
|
135
|
+
* truncated file.
|
|
136
|
+
*/
|
|
137
|
+
function coerceSnapshot(input) {
|
|
138
|
+
const purchases = input.purchases;
|
|
139
|
+
if (!Array.isArray(purchases)) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const lastSyncedAt = typeof input.lastSyncedAt === 'number' ? input.lastSyncedAt : undefined;
|
|
143
|
+
const scopeToken = typeof input.scopeToken === 'string' ? input.scopeToken : undefined;
|
|
144
|
+
return {
|
|
145
|
+
schemaVersion: SNAPSHOT_SCHEMA_VERSION,
|
|
146
|
+
scopeToken,
|
|
147
|
+
// Record by record: one damaged entry is dropped, not trusted and not
|
|
148
|
+
// allowed to discard the rest (PAY-13). A dropped record comes back with the
|
|
149
|
+
// next sync, if the store still reports it.
|
|
150
|
+
purchases: purchases.flatMap(record => {
|
|
151
|
+
const valid = coercePurchase(record);
|
|
152
|
+
return valid ? [valid] : [];
|
|
153
|
+
}),
|
|
154
|
+
lastSyncedAt
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const PURCHASE_STATES = new Set(['pending', 'purchased', 'consumed', 'revoked']);
|
|
158
|
+
const FINALIZE_STATES = new Set(['not_required', 'queued', 'in_flight', 'done', 'failed']);
|
|
159
|
+
const VALIDATION_STATES = new Set(['not_required', 'approved', 'rejected', 'queued_for_revalidation']);
|
|
160
|
+
const PRODUCT_TYPES = new Set(['one_time_permanent', 'one_time_consumable', 'subscription']);
|
|
161
|
+
|
|
162
|
+
/** A persisted purchase with every field checked, or null when any is wrong. */
|
|
163
|
+
function coercePurchase(input) {
|
|
164
|
+
if (typeof input !== 'object' || input === null) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
const record = input;
|
|
168
|
+
const text = value => typeof value === 'string' && value !== '';
|
|
169
|
+
const count = value => typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
170
|
+
if (!text(record.transactionId) || !text(record.productKey) || !text(record.token) || !PRODUCT_TYPES.has(record.productType) || !PURCHASE_STATES.has(record.state) || !FINALIZE_STATES.has(record.finalizeState) || !VALIDATION_STATES.has(record.validationState) || !count(record.purchasedAt) || !count(record.attempts) || record.expiresAt !== undefined && !count(record.expiresAt) || record.willAutoRenew !== undefined && typeof record.willAutoRenew !== 'boolean') {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
transactionId: record.transactionId,
|
|
175
|
+
productKey: record.productKey,
|
|
176
|
+
productType: record.productType,
|
|
177
|
+
token: record.token,
|
|
178
|
+
state: record.state,
|
|
179
|
+
purchasedAt: record.purchasedAt,
|
|
180
|
+
finalizeState: record.finalizeState,
|
|
181
|
+
attempts: record.attempts,
|
|
182
|
+
validationState: record.validationState,
|
|
183
|
+
expiresAt: record.expiresAt,
|
|
184
|
+
willAutoRenew: record.willAutoRenew
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Decides a purchase's finalization state from the store's view plus what we
|
|
190
|
+
* already knew.
|
|
191
|
+
*
|
|
192
|
+
* Shared by the sync path and the purchase path so they cannot drift — and they
|
|
193
|
+
* must not, because a disagreement here is how a paid transaction goes
|
|
194
|
+
* unacknowledged and gets auto-refunded three days later.
|
|
195
|
+
*
|
|
196
|
+
* The subtle case is a **pending purchase that settles**. Its record was written
|
|
197
|
+
* with `not_required`, which was correct while the money had not arrived. Once the
|
|
198
|
+
* store reports it `purchased`, that value must be re-evaluated rather than
|
|
199
|
+
* preserved — otherwise the transaction is never queued, never acknowledged, and
|
|
200
|
+
* Google revokes it. Progress is preserved only for a transaction that was
|
|
201
|
+
* already in the queue.
|
|
202
|
+
*/
|
|
203
|
+
function resolveFinalizeState(incoming, existing) {
|
|
204
|
+
if (incoming.state === 'pending') {
|
|
205
|
+
// Nothing to settle: there is no entitlement to report as delivered.
|
|
206
|
+
return 'not_required';
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Already settled at the store, whatever we thought locally.
|
|
210
|
+
if (incoming.isAcknowledged) {
|
|
211
|
+
return 'done';
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Genuine in-queue progress is preserved, so a sync cannot reset an attempt
|
|
215
|
+
// count or lose an in-flight finalize.
|
|
216
|
+
if (existing && existing.finalizeState !== 'not_required' && existing.finalizeState !== 'done') {
|
|
217
|
+
return existing.finalizeState;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Covers both a brand-new purchase and a previously-pending one that just
|
|
221
|
+
// settled. Either way it is now owed a finalize call.
|
|
222
|
+
return 'queued';
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** Transactions still owed a finalize call, drained at startup and on foreground (FR-042). */
|
|
226
|
+
function pendingFinalizations(snapshot) {
|
|
227
|
+
return snapshot.purchases.filter(p => (p.finalizeState === 'queued' || p.finalizeState === 'in_flight' || p.finalizeState === 'failed') && p.state !== 'revoked');
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SNAPSHOT_SCHEMA_VERSION","exports","emptySnapshot","scopeToken","schemaVersion","purchases","lastSyncedAt","undefined","SNAPSHOT_MIGRATIONS","from","to","migrate","input","rest","entitlements","Array","isArray","map","record","state","migrateSnapshot","raw","ok","reason","working","version","Number","isInteger","current","migrated","step","find","m","snapshot","coerceSnapshot","flatMap","valid","coercePurchase","PURCHASE_STATES","Set","FINALIZE_STATES","VALIDATION_STATES","PRODUCT_TYPES","text","value","count","isFinite","transactionId","productKey","token","has","productType","finalizeState","validationState","purchasedAt","attempts","expiresAt","willAutoRenew","resolveFinalizeState","incoming","existing","isAcknowledged","pendingFinalizations","filter","p"],"sourceRoot":"../../../src","sources":["persistence/snapshot.ts"],"mappings":"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","ignoreList":[]}
|