@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.
Files changed (295) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/README.md +1 -1
  3. package/lib/commonjs/adapter/createStoreProvider.js +110 -0
  4. package/lib/commonjs/adapter/createStoreProvider.js.map +1 -0
  5. package/lib/commonjs/adapter/iap-adapter.js +393 -0
  6. package/lib/commonjs/adapter/iap-adapter.js.map +1 -0
  7. package/lib/commonjs/adapter/iapShapes.js +169 -0
  8. package/lib/commonjs/adapter/iapShapes.js.map +1 -0
  9. package/lib/commonjs/adapter/port.js +6 -0
  10. package/lib/commonjs/adapter/port.js.map +1 -0
  11. package/lib/commonjs/config/types.js +2 -0
  12. package/lib/commonjs/config/types.js.map +1 -0
  13. package/lib/commonjs/config/validate.js +181 -0
  14. package/lib/commonjs/config/validate.js.map +1 -0
  15. package/lib/commonjs/core/mutex.js +31 -0
  16. package/lib/commonjs/core/mutex.js.map +1 -0
  17. package/lib/commonjs/core/retry.js +37 -0
  18. package/lib/commonjs/core/retry.js.map +1 -0
  19. package/lib/commonjs/core/timers.js +207 -0
  20. package/lib/commonjs/core/timers.js.map +1 -0
  21. package/lib/commonjs/diagnostics/errors.js +83 -0
  22. package/lib/commonjs/diagnostics/errors.js.map +1 -0
  23. package/lib/commonjs/diagnostics/events.js +126 -0
  24. package/lib/commonjs/diagnostics/events.js.map +1 -0
  25. package/lib/commonjs/diagnostics/messageKeys.js +70 -0
  26. package/lib/commonjs/diagnostics/messageKeys.js.map +1 -0
  27. package/lib/commonjs/engine/connection.js +189 -0
  28. package/lib/commonjs/engine/connection.js.map +1 -0
  29. package/lib/commonjs/engine/engine.js +279 -0
  30. package/lib/commonjs/engine/engine.js.map +1 -0
  31. package/lib/commonjs/engine/finalize.js +325 -0
  32. package/lib/commonjs/engine/finalize.js.map +1 -0
  33. package/lib/commonjs/engine/foreground.js +26 -0
  34. package/lib/commonjs/engine/foreground.js.map +1 -0
  35. package/lib/commonjs/engine/internals.js +31 -0
  36. package/lib/commonjs/engine/internals.js.map +1 -0
  37. package/lib/commonjs/engine/pending.js +102 -0
  38. package/lib/commonjs/engine/pending.js.map +1 -0
  39. package/lib/commonjs/engine/products.js +198 -0
  40. package/lib/commonjs/engine/products.js.map +1 -0
  41. package/lib/commonjs/engine/purchase.js +395 -0
  42. package/lib/commonjs/engine/purchase.js.map +1 -0
  43. package/lib/commonjs/engine/purchaseFailure.js +77 -0
  44. package/lib/commonjs/engine/purchaseFailure.js.map +1 -0
  45. package/lib/commonjs/engine/receiptValidation.js +90 -0
  46. package/lib/commonjs/engine/receiptValidation.js.map +1 -0
  47. package/lib/commonjs/engine/state.js +201 -0
  48. package/lib/commonjs/engine/state.js.map +1 -0
  49. package/lib/commonjs/engine/subscriptions.js +122 -0
  50. package/lib/commonjs/engine/subscriptions.js.map +1 -0
  51. package/lib/commonjs/engine/sync.js +163 -0
  52. package/lib/commonjs/engine/sync.js.map +1 -0
  53. package/lib/commonjs/entitlements/aggregate.js +212 -0
  54. package/lib/commonjs/entitlements/aggregate.js.map +1 -0
  55. package/lib/commonjs/entitlements/mapping.js +41 -0
  56. package/lib/commonjs/entitlements/mapping.js.map +1 -0
  57. package/lib/commonjs/entitlements/policy.js +110 -0
  58. package/lib/commonjs/entitlements/policy.js.map +1 -0
  59. package/lib/commonjs/index.js +266 -0
  60. package/lib/commonjs/index.js.map +1 -0
  61. package/lib/commonjs/package.json +1 -0
  62. package/lib/commonjs/persistence/mmkv-store.js +149 -0
  63. package/lib/commonjs/persistence/mmkv-store.js.map +1 -0
  64. package/lib/commonjs/persistence/snapshot.js +229 -0
  65. package/lib/commonjs/persistence/snapshot.js.map +1 -0
  66. package/lib/commonjs/react/PaymentProvider.js +96 -0
  67. package/lib/commonjs/react/PaymentProvider.js.map +1 -0
  68. package/lib/commonjs/react/hooks.js +202 -0
  69. package/lib/commonjs/react/hooks.js.map +1 -0
  70. package/lib/commonjs/testing/conformance.js +136 -0
  71. package/lib/commonjs/testing/conformance.js.map +1 -0
  72. package/lib/commonjs/testing/fakeStore.js +281 -0
  73. package/lib/commonjs/testing/fakeStore.js.map +1 -0
  74. package/lib/commonjs/testing/index.js +45 -0
  75. package/lib/commonjs/testing/index.js.map +1 -0
  76. package/lib/module/adapter/createStoreProvider.js +106 -0
  77. package/lib/module/adapter/createStoreProvider.js.map +1 -0
  78. package/lib/module/adapter/iap-adapter.js +383 -0
  79. package/lib/module/adapter/iap-adapter.js.map +1 -0
  80. package/lib/module/adapter/iapShapes.js +160 -0
  81. package/lib/module/adapter/iapShapes.js.map +1 -0
  82. package/lib/module/adapter/port.js +4 -0
  83. package/lib/module/adapter/port.js.map +1 -0
  84. package/lib/module/config/types.js +2 -0
  85. package/lib/module/config/types.js.map +1 -0
  86. package/lib/module/config/validate.js +175 -0
  87. package/lib/module/config/validate.js.map +1 -0
  88. package/lib/module/core/mutex.js +22 -0
  89. package/lib/module/core/mutex.js.map +1 -0
  90. package/lib/module/core/retry.js +33 -0
  91. package/lib/module/core/retry.js.map +1 -0
  92. package/lib/module/core/timers.js +198 -0
  93. package/lib/module/core/timers.js.map +1 -0
  94. package/lib/module/diagnostics/errors.js +76 -0
  95. package/lib/module/diagnostics/errors.js.map +1 -0
  96. package/lib/module/diagnostics/events.js +117 -0
  97. package/lib/module/diagnostics/events.js.map +1 -0
  98. package/lib/module/diagnostics/messageKeys.js +64 -0
  99. package/lib/module/diagnostics/messageKeys.js.map +1 -0
  100. package/lib/module/engine/connection.js +185 -0
  101. package/lib/module/engine/connection.js.map +1 -0
  102. package/lib/module/engine/engine.js +274 -0
  103. package/lib/module/engine/engine.js.map +1 -0
  104. package/lib/module/engine/finalize.js +322 -0
  105. package/lib/module/engine/finalize.js.map +1 -0
  106. package/lib/module/engine/foreground.js +21 -0
  107. package/lib/module/engine/foreground.js.map +1 -0
  108. package/lib/module/engine/internals.js +26 -0
  109. package/lib/module/engine/internals.js.map +1 -0
  110. package/lib/module/engine/pending.js +95 -0
  111. package/lib/module/engine/pending.js.map +1 -0
  112. package/lib/module/engine/products.js +195 -0
  113. package/lib/module/engine/products.js.map +1 -0
  114. package/lib/module/engine/purchase.js +390 -0
  115. package/lib/module/engine/purchase.js.map +1 -0
  116. package/lib/module/engine/purchaseFailure.js +72 -0
  117. package/lib/module/engine/purchaseFailure.js.map +1 -0
  118. package/lib/module/engine/receiptValidation.js +87 -0
  119. package/lib/module/engine/receiptValidation.js.map +1 -0
  120. package/lib/module/engine/state.js +196 -0
  121. package/lib/module/engine/state.js.map +1 -0
  122. package/lib/module/engine/subscriptions.js +119 -0
  123. package/lib/module/engine/subscriptions.js.map +1 -0
  124. package/lib/module/engine/sync.js +158 -0
  125. package/lib/module/engine/sync.js.map +1 -0
  126. package/lib/module/entitlements/aggregate.js +204 -0
  127. package/lib/module/entitlements/aggregate.js.map +1 -0
  128. package/lib/module/entitlements/mapping.js +35 -0
  129. package/lib/module/entitlements/mapping.js.map +1 -0
  130. package/lib/module/entitlements/policy.js +104 -0
  131. package/lib/module/entitlements/policy.js.map +1 -0
  132. package/lib/module/index.js +59 -0
  133. package/lib/module/index.js.map +1 -0
  134. package/lib/module/package.json +1 -0
  135. package/lib/module/persistence/mmkv-store.js +144 -0
  136. package/lib/module/persistence/mmkv-store.js.map +1 -0
  137. package/lib/module/persistence/snapshot.js +221 -0
  138. package/lib/module/persistence/snapshot.js.map +1 -0
  139. package/lib/module/react/PaymentProvider.js +90 -0
  140. package/lib/module/react/PaymentProvider.js.map +1 -0
  141. package/lib/module/react/hooks.js +192 -0
  142. package/lib/module/react/hooks.js.map +1 -0
  143. package/lib/module/testing/conformance.js +130 -0
  144. package/lib/module/testing/conformance.js.map +1 -0
  145. package/lib/module/testing/fakeStore.js +276 -0
  146. package/lib/module/testing/fakeStore.js.map +1 -0
  147. package/lib/module/testing/index.js +13 -0
  148. package/lib/module/testing/index.js.map +1 -0
  149. package/lib/typescript/commonjs/adapter/createStoreProvider.d.ts +45 -0
  150. package/lib/typescript/commonjs/adapter/createStoreProvider.d.ts.map +1 -0
  151. package/lib/typescript/commonjs/adapter/iap-adapter.d.ts +80 -0
  152. package/lib/typescript/commonjs/adapter/iap-adapter.d.ts.map +1 -0
  153. package/lib/typescript/commonjs/adapter/iapShapes.d.ts +94 -0
  154. package/lib/typescript/commonjs/adapter/iapShapes.d.ts.map +1 -0
  155. package/lib/typescript/commonjs/adapter/port.d.ts +184 -0
  156. package/lib/typescript/commonjs/adapter/port.d.ts.map +1 -0
  157. package/lib/typescript/commonjs/config/types.d.ts +326 -0
  158. package/lib/typescript/commonjs/config/types.d.ts.map +1 -0
  159. package/lib/typescript/commonjs/config/validate.d.ts +63 -0
  160. package/lib/typescript/commonjs/config/validate.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/core/mutex.d.ts +17 -0
  162. package/lib/typescript/commonjs/core/mutex.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/core/retry.d.ts +19 -0
  164. package/lib/typescript/commonjs/core/retry.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/core/timers.d.ts +142 -0
  166. package/lib/typescript/commonjs/core/timers.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/diagnostics/errors.d.ts +55 -0
  168. package/lib/typescript/commonjs/diagnostics/errors.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/diagnostics/events.d.ts +158 -0
  170. package/lib/typescript/commonjs/diagnostics/events.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts +54 -0
  172. package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/engine/connection.d.ts +30 -0
  174. package/lib/typescript/commonjs/engine/connection.d.ts.map +1 -0
  175. package/lib/typescript/commonjs/engine/engine.d.ts +93 -0
  176. package/lib/typescript/commonjs/engine/engine.d.ts.map +1 -0
  177. package/lib/typescript/commonjs/engine/finalize.d.ts +53 -0
  178. package/lib/typescript/commonjs/engine/finalize.d.ts.map +1 -0
  179. package/lib/typescript/commonjs/engine/foreground.d.ts +15 -0
  180. package/lib/typescript/commonjs/engine/foreground.d.ts.map +1 -0
  181. package/lib/typescript/commonjs/engine/internals.d.ts +28 -0
  182. package/lib/typescript/commonjs/engine/internals.d.ts.map +1 -0
  183. package/lib/typescript/commonjs/engine/pending.d.ts +51 -0
  184. package/lib/typescript/commonjs/engine/pending.d.ts.map +1 -0
  185. package/lib/typescript/commonjs/engine/products.d.ts +82 -0
  186. package/lib/typescript/commonjs/engine/products.d.ts.map +1 -0
  187. package/lib/typescript/commonjs/engine/purchase.d.ts +61 -0
  188. package/lib/typescript/commonjs/engine/purchase.d.ts.map +1 -0
  189. package/lib/typescript/commonjs/engine/purchaseFailure.d.ts +15 -0
  190. package/lib/typescript/commonjs/engine/purchaseFailure.d.ts.map +1 -0
  191. package/lib/typescript/commonjs/engine/receiptValidation.d.ts +42 -0
  192. package/lib/typescript/commonjs/engine/receiptValidation.d.ts.map +1 -0
  193. package/lib/typescript/commonjs/engine/state.d.ts +46 -0
  194. package/lib/typescript/commonjs/engine/state.d.ts.map +1 -0
  195. package/lib/typescript/commonjs/engine/subscriptions.d.ts +61 -0
  196. package/lib/typescript/commonjs/engine/subscriptions.d.ts.map +1 -0
  197. package/lib/typescript/commonjs/engine/sync.d.ts +36 -0
  198. package/lib/typescript/commonjs/engine/sync.d.ts.map +1 -0
  199. package/lib/typescript/commonjs/entitlements/aggregate.d.ts +97 -0
  200. package/lib/typescript/commonjs/entitlements/aggregate.d.ts.map +1 -0
  201. package/lib/typescript/commonjs/entitlements/mapping.d.ts +27 -0
  202. package/lib/typescript/commonjs/entitlements/mapping.d.ts.map +1 -0
  203. package/lib/typescript/commonjs/entitlements/policy.d.ts +75 -0
  204. package/lib/typescript/commonjs/entitlements/policy.d.ts.map +1 -0
  205. package/lib/typescript/commonjs/index.d.ts +44 -0
  206. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  207. package/lib/typescript/commonjs/package.json +1 -0
  208. package/lib/typescript/commonjs/persistence/mmkv-store.d.ts +45 -0
  209. package/lib/typescript/commonjs/persistence/mmkv-store.d.ts.map +1 -0
  210. package/lib/typescript/commonjs/persistence/snapshot.d.ts +106 -0
  211. package/lib/typescript/commonjs/persistence/snapshot.d.ts.map +1 -0
  212. package/lib/typescript/commonjs/react/PaymentProvider.d.ts +57 -0
  213. package/lib/typescript/commonjs/react/PaymentProvider.d.ts.map +1 -0
  214. package/lib/typescript/commonjs/react/hooks.d.ts +80 -0
  215. package/lib/typescript/commonjs/react/hooks.d.ts.map +1 -0
  216. package/lib/typescript/commonjs/testing/conformance.d.ts +41 -0
  217. package/lib/typescript/commonjs/testing/conformance.d.ts.map +1 -0
  218. package/lib/typescript/commonjs/testing/fakeStore.d.ts +69 -0
  219. package/lib/typescript/commonjs/testing/fakeStore.d.ts.map +1 -0
  220. package/lib/typescript/commonjs/testing/index.d.ts +12 -0
  221. package/lib/typescript/commonjs/testing/index.d.ts.map +1 -0
  222. package/lib/typescript/module/adapter/createStoreProvider.d.ts +45 -0
  223. package/lib/typescript/module/adapter/createStoreProvider.d.ts.map +1 -0
  224. package/lib/typescript/module/adapter/iap-adapter.d.ts +80 -0
  225. package/lib/typescript/module/adapter/iap-adapter.d.ts.map +1 -0
  226. package/lib/typescript/module/adapter/iapShapes.d.ts +94 -0
  227. package/lib/typescript/module/adapter/iapShapes.d.ts.map +1 -0
  228. package/lib/typescript/module/adapter/port.d.ts +184 -0
  229. package/lib/typescript/module/adapter/port.d.ts.map +1 -0
  230. package/lib/typescript/module/config/types.d.ts +326 -0
  231. package/lib/typescript/module/config/types.d.ts.map +1 -0
  232. package/lib/typescript/module/config/validate.d.ts +63 -0
  233. package/lib/typescript/module/config/validate.d.ts.map +1 -0
  234. package/lib/typescript/module/core/mutex.d.ts +17 -0
  235. package/lib/typescript/module/core/mutex.d.ts.map +1 -0
  236. package/lib/typescript/module/core/retry.d.ts +19 -0
  237. package/lib/typescript/module/core/retry.d.ts.map +1 -0
  238. package/lib/typescript/module/core/timers.d.ts +142 -0
  239. package/lib/typescript/module/core/timers.d.ts.map +1 -0
  240. package/lib/typescript/module/diagnostics/errors.d.ts +55 -0
  241. package/lib/typescript/module/diagnostics/errors.d.ts.map +1 -0
  242. package/lib/typescript/module/diagnostics/events.d.ts +158 -0
  243. package/lib/typescript/module/diagnostics/events.d.ts.map +1 -0
  244. package/lib/typescript/module/diagnostics/messageKeys.d.ts +54 -0
  245. package/lib/typescript/module/diagnostics/messageKeys.d.ts.map +1 -0
  246. package/lib/typescript/module/engine/connection.d.ts +30 -0
  247. package/lib/typescript/module/engine/connection.d.ts.map +1 -0
  248. package/lib/typescript/module/engine/engine.d.ts +93 -0
  249. package/lib/typescript/module/engine/engine.d.ts.map +1 -0
  250. package/lib/typescript/module/engine/finalize.d.ts +53 -0
  251. package/lib/typescript/module/engine/finalize.d.ts.map +1 -0
  252. package/lib/typescript/module/engine/foreground.d.ts +15 -0
  253. package/lib/typescript/module/engine/foreground.d.ts.map +1 -0
  254. package/lib/typescript/module/engine/internals.d.ts +28 -0
  255. package/lib/typescript/module/engine/internals.d.ts.map +1 -0
  256. package/lib/typescript/module/engine/pending.d.ts +51 -0
  257. package/lib/typescript/module/engine/pending.d.ts.map +1 -0
  258. package/lib/typescript/module/engine/products.d.ts +82 -0
  259. package/lib/typescript/module/engine/products.d.ts.map +1 -0
  260. package/lib/typescript/module/engine/purchase.d.ts +61 -0
  261. package/lib/typescript/module/engine/purchase.d.ts.map +1 -0
  262. package/lib/typescript/module/engine/purchaseFailure.d.ts +15 -0
  263. package/lib/typescript/module/engine/purchaseFailure.d.ts.map +1 -0
  264. package/lib/typescript/module/engine/receiptValidation.d.ts +42 -0
  265. package/lib/typescript/module/engine/receiptValidation.d.ts.map +1 -0
  266. package/lib/typescript/module/engine/state.d.ts +46 -0
  267. package/lib/typescript/module/engine/state.d.ts.map +1 -0
  268. package/lib/typescript/module/engine/subscriptions.d.ts +61 -0
  269. package/lib/typescript/module/engine/subscriptions.d.ts.map +1 -0
  270. package/lib/typescript/module/engine/sync.d.ts +36 -0
  271. package/lib/typescript/module/engine/sync.d.ts.map +1 -0
  272. package/lib/typescript/module/entitlements/aggregate.d.ts +97 -0
  273. package/lib/typescript/module/entitlements/aggregate.d.ts.map +1 -0
  274. package/lib/typescript/module/entitlements/mapping.d.ts +27 -0
  275. package/lib/typescript/module/entitlements/mapping.d.ts.map +1 -0
  276. package/lib/typescript/module/entitlements/policy.d.ts +75 -0
  277. package/lib/typescript/module/entitlements/policy.d.ts.map +1 -0
  278. package/lib/typescript/module/index.d.ts +44 -0
  279. package/lib/typescript/module/index.d.ts.map +1 -0
  280. package/lib/typescript/module/package.json +1 -0
  281. package/lib/typescript/module/persistence/mmkv-store.d.ts +45 -0
  282. package/lib/typescript/module/persistence/mmkv-store.d.ts.map +1 -0
  283. package/lib/typescript/module/persistence/snapshot.d.ts +106 -0
  284. package/lib/typescript/module/persistence/snapshot.d.ts.map +1 -0
  285. package/lib/typescript/module/react/PaymentProvider.d.ts +57 -0
  286. package/lib/typescript/module/react/PaymentProvider.d.ts.map +1 -0
  287. package/lib/typescript/module/react/hooks.d.ts +80 -0
  288. package/lib/typescript/module/react/hooks.d.ts.map +1 -0
  289. package/lib/typescript/module/testing/conformance.d.ts +41 -0
  290. package/lib/typescript/module/testing/conformance.d.ts.map +1 -0
  291. package/lib/typescript/module/testing/fakeStore.d.ts +69 -0
  292. package/lib/typescript/module/testing/fakeStore.d.ts.map +1 -0
  293. package/lib/typescript/module/testing/index.d.ts +12 -0
  294. package/lib/typescript/module/testing/index.d.ts.map +1 -0
  295. package/package.json +49 -13
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createConnection = createConnection;
7
+ var _retry = require("../core/retry.js");
8
+ var _mutex = require("../core/mutex.js");
9
+ var _errors = require("../diagnostics/errors.js");
10
+ /**
11
+ * The billing connection: connecting, watching it, and reconnecting with bounded
12
+ * backoff (FR-018 – FR-024, PAY-10).
13
+ *
14
+ * A reconnect is always a full teardown-then-connect cycle. The upstream
15
+ * binding's own `reconnect()` has reported success without rebuilding anything
16
+ * (openiap#408), so no shortcut is trusted here.
17
+ */
18
+
19
+ function createConnection(state, onPurchase) {
20
+ const {
21
+ provider,
22
+ resolved
23
+ } = state;
24
+ let connectionSub;
25
+ let purchaseSub;
26
+ let reconnectTimer;
27
+ let reconnectAttempts = 0;
28
+ /**
29
+ * Set once a connection succeeded. Recovery after an exhausted budget is only
30
+ * meaningful from there; a first connection that failed is the app's to retry
31
+ * through `initialize`.
32
+ */
33
+ let everConnected = false;
34
+ function scheduleReconnect() {
35
+ if (state.disposed) {
36
+ return;
37
+ }
38
+ if (reconnectAttempts >= resolved.retry.reconnect.maxAttempts) {
39
+ // Out of budget for now, not for good: a retryable failure rather than a
40
+ // `connecting` that promised a reconnect nobody was going to make.
41
+ state.setStatus({
42
+ kind: 'failed',
43
+ retryable: true,
44
+ reconnectAttempts
45
+ });
46
+ return;
47
+ }
48
+ const attempt = reconnectAttempts + 1;
49
+ reconnectTimer = setTimeout(() => {
50
+ reconnectTimer = undefined;
51
+ if (state.disposed) {
52
+ return;
53
+ }
54
+ reconnectAttempts = attempt;
55
+ state.setStatus({
56
+ kind: 'connecting',
57
+ reconnectAttempts
58
+ });
59
+ reconnectOnce().catch(() => undefined);
60
+ }, (0, _retry.backoffDelayMs)(attempt, resolved.retry.reconnect));
61
+ }
62
+ async function reconnectOnce() {
63
+ try {
64
+ await provider.disconnect();
65
+ } catch {
66
+ // Already down; nothing to tear down.
67
+ }
68
+ const outcome = await provider.connect();
69
+ if (state.disposed) {
70
+ return;
71
+ }
72
+ if (outcome.ok) {
73
+ reconnectAttempts = 0;
74
+ state.setStatus({
75
+ kind: 'ready',
76
+ reconnectAttempts: 0
77
+ });
78
+ } else {
79
+ scheduleReconnect();
80
+ }
81
+ }
82
+
83
+ /** Replaced, never stacked: a second subscription would hear everything twice. */
84
+ function watch() {
85
+ connectionSub?.();
86
+ connectionSub = provider.observeConnection((connected, reason) => {
87
+ if (state.disposed) {
88
+ return;
89
+ }
90
+ state.emit({
91
+ type: 'connection_changed',
92
+ connected,
93
+ reason,
94
+ attempt: reconnectAttempts
95
+ });
96
+ if (!connected && state.status.kind === 'ready') {
97
+ state.setStatus({
98
+ kind: 'connecting'
99
+ });
100
+ scheduleReconnect();
101
+ }
102
+ });
103
+ // Session-long: a pending purchase settling between sessions arrives here
104
+ // (FR-039), not only while a purchase is open.
105
+ purchaseSub?.();
106
+ purchaseSub = provider.observePurchases(purchase => {
107
+ if (!state.disposed) {
108
+ onPurchase(purchase);
109
+ }
110
+ });
111
+ }
112
+ return {
113
+ async connect() {
114
+ const outcome = await (0, _mutex.withTimeout)(provider.connect(), resolved.timeouts.connectMs, () => new _errors.PaymentError({
115
+ code: 'PAYMENT_TIMEOUT',
116
+ message: 'Connecting to the billing service timed out',
117
+ operation: 'initialize',
118
+ retryable: true
119
+ })).catch(error => ({
120
+ ok: false,
121
+ reason: 'store_error',
122
+ retryable: error.retryable
123
+ }));
124
+ if (!outcome.ok) {
125
+ if (outcome.reason === 'store_error') {
126
+ state.setStatus({
127
+ kind: 'failed',
128
+ retryable: outcome.retryable
129
+ });
130
+ return {
131
+ ok: false,
132
+ error: new _errors.PaymentError({
133
+ code: 'PAYMENT_STORE_ERROR',
134
+ message: 'Could not connect to the billing service',
135
+ operation: 'initialize',
136
+ retryable: outcome.retryable
137
+ })
138
+ };
139
+ }
140
+ // No billing service, an outdated one, or an unsupported platform: each
141
+ // distinguishable, and none of them may break the host app (FR-021, FR-023).
142
+ state.setStatus({
143
+ kind: 'unavailable',
144
+ unavailableReason: outcome.reason,
145
+ retryable: outcome.retryable
146
+ });
147
+ return {
148
+ ok: false,
149
+ error: new _errors.PaymentError({
150
+ code: outcome.reason === 'platform_unsupported' ? 'PAYMENT_UNSUPPORTED_PLATFORM' : 'PAYMENT_UNAVAILABLE',
151
+ message: `Billing unavailable: ${outcome.reason}`,
152
+ operation: 'initialize',
153
+ retryable: outcome.retryable
154
+ })
155
+ };
156
+ }
157
+ watch();
158
+ everConnected = true;
159
+ state.setStatus({
160
+ kind: 'ready',
161
+ reconnectAttempts: 0
162
+ });
163
+ return {
164
+ ok: true
165
+ };
166
+ },
167
+ async recover() {
168
+ if (everConnected && !state.disposed && state.status.kind === 'failed' && reconnectTimer === undefined) {
169
+ reconnectAttempts = 0;
170
+ state.setStatus({
171
+ kind: 'connecting',
172
+ reconnectAttempts: 0
173
+ });
174
+ await reconnectOnce().catch(() => undefined);
175
+ }
176
+ },
177
+ dispose() {
178
+ connectionSub?.();
179
+ connectionSub = undefined;
180
+ purchaseSub?.();
181
+ purchaseSub = undefined;
182
+ if (reconnectTimer !== undefined) {
183
+ clearTimeout(reconnectTimer);
184
+ reconnectTimer = undefined;
185
+ }
186
+ }
187
+ };
188
+ }
189
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_retry","require","_mutex","_errors","createConnection","state","onPurchase","provider","resolved","connectionSub","purchaseSub","reconnectTimer","reconnectAttempts","everConnected","scheduleReconnect","disposed","retry","reconnect","maxAttempts","setStatus","kind","retryable","attempt","setTimeout","undefined","reconnectOnce","catch","backoffDelayMs","disconnect","outcome","connect","ok","watch","observeConnection","connected","reason","emit","type","status","observePurchases","purchase","withTimeout","timeouts","connectMs","PaymentError","code","message","operation","error","unavailableReason","recover","dispose","clearTimeout"],"sourceRoot":"../../../src","sources":["engine/connection.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MAX_BLOCKED_OPERATIONS = void 0;
7
+ exports.createEngine = createEngine;
8
+ var _rnCore = require("@chipmobilesdk/rn-core");
9
+ var _validate = require("../config/validate.js");
10
+ var _mutex = require("../core/mutex.js");
11
+ var _errors = require("../diagnostics/errors.js");
12
+ var _events = require("../diagnostics/events.js");
13
+ var _mmkvStore = require("../persistence/mmkv-store.js");
14
+ var _connection = require("./connection.js");
15
+ var _finalize = require("./finalize.js");
16
+ var _internals = require("./internals.js");
17
+ var _products = require("./products.js");
18
+ var _purchase = require("./purchase.js");
19
+ var _state = require("./state.js");
20
+ var _subscriptions = require("./subscriptions.js");
21
+ var _sync = require("./sync.js");
22
+ /**
23
+ * The engine: status, initialization, entitlement reads, and sync.
24
+ *
25
+ * Owns the concurrency guarantees that make three requirements structurally true
26
+ * rather than hoped for — one connection under concurrent init (FR-018), one
27
+ * store request under concurrent sync (FR-063), and a rate-limited foreground
28
+ * sync (PERF-002).
29
+ *
30
+ * It never imports a store type. The only thing it talks to is `ProviderPort`,
31
+ * which is what keeps the binding replaceable and iOS additive (FR-002, FR-007).
32
+ *
33
+ * This file composes (PAY-10): state and its publication live in `state.ts`, the
34
+ * connection in `connection.ts`, sync in `sync.ts`, and the internals tests reach
35
+ * for in `internals.ts`, off the public type (PAY-11).
36
+ */
37
+
38
+ /** How many refused operations `status.blockedOperations` keeps. */
39
+ const MAX_BLOCKED_OPERATIONS = exports.MAX_BLOCKED_OPERATIONS = 20;
40
+ function createEngine(config, deps) {
41
+ // Both run before anything connects: a bad catalog or an unsafe environment
42
+ // must fail at configuration time, not when a user taps Buy.
43
+ (0, _validate.assertEnvironmentSafe)(config);
44
+ // rn-core's one platform source (CORE-09). Where neither OS applies, the store
45
+ // provider refuses everything as unsupported anyway.
46
+ const platform = deps.platform ?? ((0, _rnCore.currentPlatform)() === 'ios' ? 'ios' : 'android');
47
+ const resolved = (0, _validate.validateConfig)(config, platform);
48
+ const now = deps.now ?? (() => Date.now());
49
+ const provider = deps.provider;
50
+ const state = (0, _state.createEngineState)(config, resolved, provider, deps.snapshotStore ?? (0, _mmkvStore.createSnapshotStore)(), now);
51
+ const {
52
+ emit,
53
+ commit
54
+ } = state;
55
+ const correlationCounter = {
56
+ next: 1
57
+ };
58
+ const nextCorrelationId = () => (0, _events.createCorrelationId)(correlationCounter);
59
+ const initFlight = (0, _mutex.createSingleFlight)();
60
+ // Exclusive rather than single-flight: a second purchase is refused, not joined
61
+ // onto the first, and never queued (FR-031).
62
+ const purchaseLock = (0, _mutex.createExclusive)();
63
+
64
+ /** Written into status, not just logged, so a test can assert the block (FR-014). */
65
+ const recordBlockedOperation = productKey => {
66
+ const blocked = {
67
+ productKey,
68
+ environment: config.environment,
69
+ at: now()
70
+ };
71
+ // The most recent ones only: an app retrying a blocked purchase in a loop
72
+ // must not grow status without bound (PAY-20).
73
+ state.setStatus({
74
+ blockedOperations: [...state.status.blockedOperations, blocked].slice(-MAX_BLOCKED_OPERATIONS)
75
+ });
76
+ emit({
77
+ type: 'environment_blocked',
78
+ productKey,
79
+ environment: config.environment
80
+ });
81
+ };
82
+ const finalizer = (0, _finalize.createFinalizer)({
83
+ provider,
84
+ retry: resolved.retry,
85
+ attemptTimeoutMs: resolved.timeouts.finalizeAttemptMs,
86
+ snapshot: () => state.snapshot,
87
+ commit,
88
+ emit,
89
+ now,
90
+ disposed: () => state.disposed
91
+ });
92
+ const products = (0, _products.createProducts)({
93
+ resolved,
94
+ provider,
95
+ emit,
96
+ now
97
+ });
98
+ // Every sync also settles what an earlier session left owed, and re-asks the
99
+ // backend about grants it deferred (FR-039, FR-042, FR-072a).
100
+ const syncer = (0, _sync.createSync)(state, async () => {
101
+ await finalizer.drain();
102
+ await purchaseFlow.revalidate();
103
+ });
104
+ const purchaseFlow = (0, _purchase.createPurchaseFlow)({
105
+ config,
106
+ resolved,
107
+ provider,
108
+ platform,
109
+ finalizer,
110
+ snapshot: () => state.snapshot,
111
+ commit,
112
+ emit,
113
+ now,
114
+ nextCorrelationId,
115
+ statusKind: () => state.status.kind,
116
+ mayCreateRealTransaction: () => (0, _validate.mayCreateRealTransaction)(config),
117
+ recordBlockedOperation,
118
+ // `already_owned` re-syncs rather than surfacing an error, which is how a
119
+ // reinstall repairs itself (FR-033); the entitlement arrives via the change
120
+ // signal.
121
+ requestSync: trigger => {
122
+ syncer.sync(trigger).catch(() => undefined);
123
+ },
124
+ runExclusive: operation => purchaseLock.run(operation)
125
+ });
126
+ const subscriptions = (0, _subscriptions.createSubscriptions)({
127
+ resolved,
128
+ provider,
129
+ snapshot: () => state.snapshot,
130
+ purchase: (productKey, options) => purchaseFlow.purchase(productKey, options)
131
+ });
132
+ const connection = (0, _connection.createConnection)(state, purchase => {
133
+ purchaseFlow.ingest(purchase).catch(() => undefined);
134
+ });
135
+
136
+ /** A subscription that is a no-op once the engine is cleaned up. */
137
+ function subscriber(listeners) {
138
+ return listener => state.disposed ? () => undefined : listeners.add(listener);
139
+ }
140
+ const engine = {
141
+ async initialize() {
142
+ if (!resolved.enabled) {
143
+ // Selling is off, but entitlements already held stay readable (FR-012):
144
+ // hydration runs here too, or they would read `unknown` forever.
145
+ state.setStatus({
146
+ kind: 'disabled'
147
+ });
148
+ state.hydrate();
149
+ return {
150
+ ok: false,
151
+ error: new _errors.PaymentError({
152
+ code: 'PAYMENT_DISABLED',
153
+ message: 'Payments are disabled by configuration',
154
+ operation: 'initialize'
155
+ })
156
+ };
157
+ }
158
+ // Checked before the shortcut below: a cleaned-up engine that had been
159
+ // ready used to answer `ok` while nothing behind it worked any more.
160
+ if (state.disposed) {
161
+ return {
162
+ ok: false,
163
+ error: new _errors.PaymentError({
164
+ code: 'PAYMENT_NOT_CONFIGURED',
165
+ message: 'Engine has been cleaned up',
166
+ operation: 'initialize'
167
+ })
168
+ };
169
+ }
170
+ // Already up: answered without reconnecting, or a later sequential call
171
+ // would leave a second set of native listeners behind.
172
+ if (state.status.kind === 'ready') {
173
+ return {
174
+ ok: true
175
+ };
176
+ }
177
+ return initFlight.run(async () => {
178
+ state.setStatus({
179
+ kind: 'connecting'
180
+ });
181
+ // Before connecting, so a warm start answers from the last good sync
182
+ // while the network is still in flight (FR-053).
183
+ state.hydrate();
184
+ const connected = await connection.connect();
185
+ if (!connected.ok) {
186
+ return connected;
187
+ }
188
+ await syncer.sync('initialize');
189
+ // After syncing, so a transaction the store still reports owned has been
190
+ // re-queued first: this catches a purchase the previous session paid for
191
+ // but was killed before acknowledging (FR-042).
192
+ await finalizer.drain();
193
+ return {
194
+ ok: true
195
+ };
196
+ });
197
+ },
198
+ cleanup() {
199
+ state.disposed = true;
200
+ connection.dispose();
201
+ finalizer.dispose();
202
+ state.statusListeners.clear();
203
+ state.entitlementListeners.clear();
204
+ state.pendingListeners.clear();
205
+ // Disarmed last: after this nothing is emitted, and a late store callback
206
+ // is dropped safely (FR-082).
207
+ state.emitter.dispose();
208
+ provider.disconnect().catch(() => undefined);
209
+ },
210
+ getStatus: () => state.status,
211
+ subscribeStatus: subscriber(state.statusListeners),
212
+ /** Synchronous, in-memory, zero I/O — it is read on render paths (PERF-001). */
213
+ getEntitlement(key) {
214
+ return state.entitlements[key] ?? {
215
+ key,
216
+ status: 'unknown',
217
+ sources: [],
218
+ isStale: false
219
+ };
220
+ },
221
+ getAllEntitlements: () => state.entitlements,
222
+ subscribeEntitlements: subscriber(state.entitlementListeners),
223
+ getPendingPurchases: () => state.pending,
224
+ subscribePendingPurchases: subscriber(state.pendingListeners),
225
+ sync: trigger => syncer.sync(trigger),
226
+ async restore() {
227
+ const outcome = await syncer.sync('manual');
228
+ if (!outcome.ok) {
229
+ return {
230
+ ok: false,
231
+ error: outcome.error
232
+ };
233
+ }
234
+ const held = Object.values(state.entitlements).filter(e => e.status === 'entitled').map(e => e.key);
235
+ // "Nothing found" is a distinct success, so an app never claims to have
236
+ // restored purchases that do not exist (FR-061).
237
+ return held.length > 0 ? {
238
+ ok: true,
239
+ restored: true,
240
+ entitlements: held
241
+ } : {
242
+ ok: true,
243
+ restored: false
244
+ };
245
+ },
246
+ getLastSyncedAt: () => state.snapshot.lastSyncedAt,
247
+ async clearLocalData() {
248
+ state.forget();
249
+ // Prices are per account and storefront; a logout drops them too (PAY-12).
250
+ products.invalidate();
251
+ },
252
+ subscribeEvents: listener => state.emitter.subscribe(listener),
253
+ purchase: (productKey, options) => purchaseFlow.purchase(productKey, options),
254
+ consume: ref => finalizer.consume(ref),
255
+ getUnfinalized: () => finalizer.unfinalized(),
256
+ getProducts: productKeys => products.get(productKeys),
257
+ refreshProducts: productKeys => products.refresh(productKeys),
258
+ changePlan: (from, to, mode, options) => subscriptions.changePlan(from, to, mode, options),
259
+ openSubscriptionManagement: productKey => subscriptions.openManagement(productKey),
260
+ confirmPriceChange: productKey => subscriptions.confirmPriceChange(productKey),
261
+ async handleForeground() {
262
+ await connection.recover();
263
+ // Rate-limited inside sync: at most one request per interval however often
264
+ // the app calls this.
265
+ await syncer.sync('foreground');
266
+ }
267
+ };
268
+ (0, _internals.attachEngineInternals)(engine, {
269
+ resolvedConfig: () => resolved,
270
+ nextCorrelationId,
271
+ emitter: () => state.emitter,
272
+ snapshot: () => state.snapshot,
273
+ commitSnapshot: commit,
274
+ mayCreateRealTransaction: () => (0, _validate.mayCreateRealTransaction)(config),
275
+ recordBlockedOperation
276
+ });
277
+ return engine;
278
+ }
279
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_rnCore","require","_validate","_mutex","_errors","_events","_mmkvStore","_connection","_finalize","_internals","_products","_purchase","_state","_subscriptions","_sync","MAX_BLOCKED_OPERATIONS","exports","createEngine","config","deps","assertEnvironmentSafe","platform","currentPlatform","resolved","validateConfig","now","Date","provider","state","createEngineState","snapshotStore","createSnapshotStore","emit","commit","correlationCounter","next","nextCorrelationId","createCorrelationId","initFlight","createSingleFlight","purchaseLock","createExclusive","recordBlockedOperation","productKey","blocked","environment","at","setStatus","blockedOperations","status","slice","type","finalizer","createFinalizer","retry","attemptTimeoutMs","timeouts","finalizeAttemptMs","snapshot","disposed","products","createProducts","syncer","createSync","drain","purchaseFlow","revalidate","createPurchaseFlow","statusKind","kind","mayCreateRealTransaction","requestSync","trigger","sync","catch","undefined","runExclusive","operation","run","subscriptions","createSubscriptions","purchase","options","connection","createConnection","ingest","subscriber","listeners","listener","add","engine","initialize","enabled","hydrate","ok","error","PaymentError","code","message","connected","connect","cleanup","dispose","statusListeners","clear","entitlementListeners","pendingListeners","emitter","disconnect","getStatus","subscribeStatus","getEntitlement","key","entitlements","sources","isStale","getAllEntitlements","subscribeEntitlements","getPendingPurchases","pending","subscribePendingPurchases","restore","outcome","held","Object","values","filter","e","map","length","restored","getLastSyncedAt","lastSyncedAt","clearLocalData","forget","invalidate","subscribeEvents","subscribe","consume","ref","getUnfinalized","unfinalized","getProducts","productKeys","get","refreshProducts","refresh","changePlan","from","to","mode","openSubscriptionManagement","openManagement","confirmPriceChange","handleForeground","recover","attachEngineInternals","resolvedConfig","commitSnapshot"],"sourceRoot":"../../../src","sources":["engine/engine.ts"],"mappings":";;;;;;;AAgBA,IAAAA,OAAA,GAAAC,OAAA;AAGA,IAAAC,SAAA,GAAAD,OAAA;AAoBA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAMA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,SAAA,GAAAP,OAAA;AACA,IAAAQ,UAAA,GAAAR,OAAA;AACA,IAAAS,SAAA,GAAAT,OAAA;AACA,IAAAU,SAAA,GAAAV,OAAA;AACA,IAAAW,MAAA,GAAAX,OAAA;AACA,IAAAY,cAAA,GAAAZ,OAAA;AACA,IAAAa,KAAA,GAAAb,OAAA;AAvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAwHA;AACO,MAAMc,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAAG,EAAE;AAEjC,SAASE,YAAYA,CAACC,MAAqB,EAAEC,IAAgB,EAAiB;EACpF;EACA;EACA,IAAAC,+BAAqB,EAACF,MAAM,CAAC;EAC7B;EACA;EACA,MAAMG,QAAQ,GAAGF,IAAI,CAACE,QAAQ,KAAK,IAAAC,uBAAe,EAAC,CAAC,KAAK,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;EACnF,MAAMC,QAAQ,GAAG,IAAAC,wBAAc,EAACN,MAAM,EAAEG,QAAQ,CAAC;EACjD,MAAMI,GAAG,GAAGN,IAAI,CAACM,GAAG,KAAK,MAAMC,IAAI,CAACD,GAAG,CAAC,CAAC,CAAC;EAC1C,MAAME,QAAQ,GAAGR,IAAI,CAACQ,QAAQ;EAC9B,MAAMC,KAAK,GAAG,IAAAC,wBAAiB,EAC9BX,MAAM,EACNK,QAAQ,EACRI,QAAQ,EACRR,IAAI,CAACW,aAAa,IAAI,IAAAC,8BAAmB,EAAC,CAAC,EAC3CN,GACD,CAAC;EACD,MAAM;IAAEO,IAAI;IAAEC;EAAO,CAAC,GAAGL,KAAK;EAC9B,MAAMM,kBAAkB,GAAG;IAAEC,IAAI,EAAE;EAAE,CAAC;EACtC,MAAMC,iBAAiB,GAAGA,CAAA,KAAM,IAAAC,2BAAmB,EAACH,kBAAkB,CAAC;EACvE,MAAMI,UAAU,GAAG,IAAAC,yBAAkB,EAAc,CAAC;EACpD;EACA;EACA,MAAMC,YAAY,GAAG,IAAAC,sBAAe,EAAC,CAAC;;EAEtC;EACA,MAAMC,sBAAsB,GAAIC,UAAsB,IAAW;IAChE,MAAMC,OAAyB,GAAG;MAAED,UAAU;MAAEE,WAAW,EAAE3B,MAAM,CAAC2B,WAAW;MAAEC,EAAE,EAAErB,GAAG,CAAC;IAAE,CAAC;IAC5F;IACA;IACAG,KAAK,CAACmB,SAAS,CAAC;MACfC,iBAAiB,EAAE,CAAC,GAAGpB,KAAK,CAACqB,MAAM,CAACD,iBAAiB,EAAEJ,OAAO,CAAC,CAACM,KAAK,CACpE,CAACnC,sBACF;IACD,CAAC,CAAC;IACFiB,IAAI,CAAC;MAAEmB,IAAI,EAAE,qBAAqB;MAAER,UAAU;MAAEE,WAAW,EAAE3B,MAAM,CAAC2B;IAAY,CAAC,CAAC;EACnF,CAAC;EAED,MAAMO,SAAS,GAAG,IAAAC,yBAAe,EAAC;IACjC1B,QAAQ;IACR2B,KAAK,EAAE/B,QAAQ,CAAC+B,KAAK;IACrBC,gBAAgB,EAAEhC,QAAQ,CAACiC,QAAQ,CAACC,iBAAiB;IACrDC,QAAQ,EAAEA,CAAA,KAAM9B,KAAK,CAAC8B,QAAQ;IAC9BzB,MAAM;IACND,IAAI;IACJP,GAAG;IACHkC,QAAQ,EAAEA,CAAA,KAAM/B,KAAK,CAAC+B;EACvB,CAAC,CAAC;EACF,MAAMC,QAAQ,GAAG,IAAAC,wBAAc,EAAC;IAAEtC,QAAQ;IAAEI,QAAQ;IAAEK,IAAI;IAAEP;EAAI,CAAC,CAAC;EAClE;EACA;EACA,MAAMqC,MAAM,GAAG,IAAAC,gBAAU,EAACnC,KAAK,EAAE,YAAY;IAC5C,MAAMwB,SAAS,CAACY,KAAK,CAAC,CAAC;IACvB,MAAMC,YAAY,CAACC,UAAU,CAAC,CAAC;EAChC,CAAC,CAAC;EACF,MAAMD,YAAY,GAAG,IAAAE,4BAAkB,EAAC;IACvCjD,MAAM;IACNK,QAAQ;IACRI,QAAQ;IACRN,QAAQ;IACR+B,SAAS;IACTM,QAAQ,EAAEA,CAAA,KAAM9B,KAAK,CAAC8B,QAAQ;IAC9BzB,MAAM;IACND,IAAI;IACJP,GAAG;IACHW,iBAAiB;IACjBgC,UAAU,EAAEA,CAAA,KAAMxC,KAAK,CAACqB,MAAM,CAACoB,IAAI;IACnCC,wBAAwB,EAAEA,CAAA,KAAM,IAAAA,kCAAwB,EAACpD,MAAM,CAAC;IAChEwB,sBAAsB;IACtB;IACA;IACA;IACA6B,WAAW,EAAEC,OAAO,IAAI;MACvBV,MAAM,CAACW,IAAI,CAACD,OAAO,CAAC,CAACE,KAAK,CAAC,MAAMC,SAAS,CAAC;IAC5C,CAAC;IACDC,YAAY,EAAEC,SAAS,IAAIrC,YAAY,CAACsC,GAAG,CAACD,SAAS;EACtD,CAAC,CAAC;EACF,MAAME,aAAa,GAAG,IAAAC,kCAAmB,EAAC;IACzCzD,QAAQ;IACRI,QAAQ;IACR+B,QAAQ,EAAEA,CAAA,KAAM9B,KAAK,CAAC8B,QAAQ;IAC9BuB,QAAQ,EAAEA,CAACtC,UAAU,EAAEuC,OAAO,KAAKjB,YAAY,CAACgB,QAAQ,CAACtC,UAAU,EAAEuC,OAAO;EAC7E,CAAC,CAAC;EACF,MAAMC,UAAU,GAAG,IAAAC,4BAAgB,EAACxD,KAAK,EAAEqD,QAAQ,IAAI;IACtDhB,YAAY,CAACoB,MAAM,CAACJ,QAAQ,CAAC,CAACP,KAAK,CAAC,MAAMC,SAAS,CAAC;EACrD,CAAC,CAAC;;EAEF;EACA,SAASW,UAAUA,CAAIC,SAA6D,EAAE;IACrF,OAAQC,QAA4B,IACnC5D,KAAK,CAAC+B,QAAQ,GAAG,MAAMgB,SAAS,GAAGY,SAAS,CAACE,GAAG,CAACD,QAAQ,CAAC;EAC5D;EAEA,MAAME,MAAqB,GAAG;IAC7B,MAAMC,UAAUA,CAAA,EAAyB;MACxC,IAAI,CAACpE,QAAQ,CAACqE,OAAO,EAAE;QACtB;QACA;QACAhE,KAAK,CAACmB,SAAS,CAAC;UAAEsB,IAAI,EAAE;QAAW,CAAC,CAAC;QACrCzC,KAAK,CAACiE,OAAO,CAAC,CAAC;QACf,OAAO;UACNC,EAAE,EAAE,KAAK;UACTC,KAAK,EAAE,IAAIC,oBAAY,CAAC;YACvBC,IAAI,EAAE,kBAAkB;YACxBC,OAAO,EAAE,wCAAwC;YACjDrB,SAAS,EAAE;UACZ,CAAC;QACF,CAAC;MACF;MACA;MACA;MACA,IAAIjD,KAAK,CAAC+B,QAAQ,EAAE;QACnB,OAAO;UACNmC,EAAE,EAAE,KAAK;UACTC,KAAK,EAAE,IAAIC,oBAAY,CAAC;YACvBC,IAAI,EAAE,wBAAwB;YAC9BC,OAAO,EAAE,4BAA4B;YACrCrB,SAAS,EAAE;UACZ,CAAC;QACF,CAAC;MACF;MACA;MACA;MACA,IAAIjD,KAAK,CAACqB,MAAM,CAACoB,IAAI,KAAK,OAAO,EAAE;QAClC,OAAO;UAAEyB,EAAE,EAAE;QAAK,CAAC;MACpB;MACA,OAAOxD,UAAU,CAACwC,GAAG,CAAC,YAAY;QACjClD,KAAK,CAACmB,SAAS,CAAC;UAAEsB,IAAI,EAAE;QAAa,CAAC,CAAC;QACvC;QACA;QACAzC,KAAK,CAACiE,OAAO,CAAC,CAAC;QACf,MAAMM,SAAS,GAAG,MAAMhB,UAAU,CAACiB,OAAO,CAAC,CAAC;QAC5C,IAAI,CAACD,SAAS,CAACL,EAAE,EAAE;UAClB,OAAOK,SAAS;QACjB;QACA,MAAMrC,MAAM,CAACW,IAAI,CAAC,YAAY,CAAC;QAC/B;QACA;QACA;QACA,MAAMrB,SAAS,CAACY,KAAK,CAAC,CAAC;QACvB,OAAO;UAAE8B,EAAE,EAAE;QAAc,CAAC;MAC7B,CAAC,CAAC;IACH,CAAC;IAEDO,OAAOA,CAAA,EAAS;MACfzE,KAAK,CAAC+B,QAAQ,GAAG,IAAI;MACrBwB,UAAU,CAACmB,OAAO,CAAC,CAAC;MACpBlD,SAAS,CAACkD,OAAO,CAAC,CAAC;MACnB1E,KAAK,CAAC2E,eAAe,CAACC,KAAK,CAAC,CAAC;MAC7B5E,KAAK,CAAC6E,oBAAoB,CAACD,KAAK,CAAC,CAAC;MAClC5E,KAAK,CAAC8E,gBAAgB,CAACF,KAAK,CAAC,CAAC;MAC9B;MACA;MACA5E,KAAK,CAAC+E,OAAO,CAACL,OAAO,CAAC,CAAC;MACvB3E,QAAQ,CAACiF,UAAU,CAAC,CAAC,CAAClC,KAAK,CAAC,MAAMC,SAAS,CAAC;IAC7C,CAAC;IAEDkC,SAAS,EAAEA,CAAA,KAAMjF,KAAK,CAACqB,MAAM;IAC7B6D,eAAe,EAAExB,UAAU,CAAgB1D,KAAK,CAAC2E,eAAe,CAAC;IAEjE;IACAQ,cAAcA,CAACC,GAAG,EAAoB;MACrC,OAAOpF,KAAK,CAACqF,YAAY,CAACD,GAAG,CAAC,IAAI;QAAEA,GAAG;QAAE/D,MAAM,EAAE,SAAS;QAAEiE,OAAO,EAAE,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;IAC1F,CAAC;IACDC,kBAAkB,EAAEA,CAAA,KAAMxF,KAAK,CAACqF,YAAY;IAC5CI,qBAAqB,EAAE/B,UAAU,CAAiB1D,KAAK,CAAC6E,oBAAoB,CAAC;IAC7Ea,mBAAmB,EAAEA,CAAA,KAAM1F,KAAK,CAAC2F,OAAO;IACxCC,yBAAyB,EAAElC,UAAU,CAAwB1D,KAAK,CAAC8E,gBAAgB,CAAC;IAEpFjC,IAAI,EAAED,OAAO,IAAIV,MAAM,CAACW,IAAI,CAACD,OAAO,CAAC;IAErC,MAAMiD,OAAOA,CAAA,EAA4B;MACxC,MAAMC,OAAO,GAAG,MAAM5D,MAAM,CAACW,IAAI,CAAC,QAAQ,CAAC;MAC3C,IAAI,CAACiD,OAAO,CAAC5B,EAAE,EAAE;QAChB,OAAO;UAAEA,EAAE,EAAE,KAAK;UAAEC,KAAK,EAAE2B,OAAO,CAAC3B;QAAM,CAAC;MAC3C;MACA,MAAM4B,IAAI,GAAGC,MAAM,CAACC,MAAM,CAACjG,KAAK,CAACqF,YAAY,CAAC,CAC5Ca,MAAM,CAACC,CAAC,IAAIA,CAAC,CAAC9E,MAAM,KAAK,UAAU,CAAC,CACpC+E,GAAG,CAACD,CAAC,IAAIA,CAAC,CAACf,GAAG,CAAC;MACjB;MACA;MACA,OAAOW,IAAI,CAACM,MAAM,GAAG,CAAC,GACnB;QAAEnC,EAAE,EAAE,IAAI;QAAEoC,QAAQ,EAAE,IAAI;QAAEjB,YAAY,EAAEU;MAAK,CAAC,GAChD;QAAE7B,EAAE,EAAE,IAAI;QAAEoC,QAAQ,EAAE;MAAM,CAAC;IACjC,CAAC;IAEDC,eAAe,EAAEA,CAAA,KAAMvG,KAAK,CAAC8B,QAAQ,CAAC0E,YAAY;IAElD,MAAMC,cAAcA,CAAA,EAAkB;MACrCzG,KAAK,CAAC0G,MAAM,CAAC,CAAC;MACd;MACA1E,QAAQ,CAAC2E,UAAU,CAAC,CAAC;IACtB,CAAC;IAEDC,eAAe,EAAEhD,QAAQ,IAAI5D,KAAK,CAAC+E,OAAO,CAAC8B,SAAS,CAACjD,QAAQ,CAAC;IAE9DP,QAAQ,EAAEA,CAACtC,UAAU,EAAEuC,OAAO,KAAKjB,YAAY,CAACgB,QAAQ,CAACtC,UAAU,EAAEuC,OAAO,CAAC;IAC7EwD,OAAO,EAAEC,GAAG,IAAIvF,SAAS,CAACsF,OAAO,CAACC,GAAG,CAAC;IACtCC,cAAc,EAAEA,CAAA,KAAMxF,SAAS,CAACyF,WAAW,CAAC,CAAC;IAC7CC,WAAW,EAAEC,WAAW,IAAInF,QAAQ,CAACoF,GAAG,CAACD,WAAW,CAAC;IACrDE,eAAe,EAAEF,WAAW,IAAInF,QAAQ,CAACsF,OAAO,CAACH,WAAW,CAAC;IAC7DI,UAAU,EAAEA,CAACC,IAAI,EAAEC,EAAE,EAAEC,IAAI,EAAEpE,OAAO,KAAKH,aAAa,CAACoE,UAAU,CAACC,IAAI,EAAEC,EAAE,EAAEC,IAAI,EAAEpE,OAAO,CAAC;IAC1FqE,0BAA0B,EAAE5G,UAAU,IAAIoC,aAAa,CAACyE,cAAc,CAAC7G,UAAU,CAAC;IAClF8G,kBAAkB,EAAE9G,UAAU,IAAIoC,aAAa,CAAC0E,kBAAkB,CAAC9G,UAAU,CAAC;IAE9E,MAAM+G,gBAAgBA,CAAA,EAAkB;MACvC,MAAMvE,UAAU,CAACwE,OAAO,CAAC,CAAC;MAC1B;MACA;MACA,MAAM7F,MAAM,CAACW,IAAI,CAAC,YAAY,CAAC;IAChC;EACD,CAAC;EAED,IAAAmF,gCAAqB,EAAClE,MAAM,EAAE;IAC7BmE,cAAc,EAAEA,CAAA,KAAMtI,QAAQ;IAC9Ba,iBAAiB;IACjBuE,OAAO,EAAEA,CAAA,KAAM/E,KAAK,CAAC+E,OAAO;IAC5BjD,QAAQ,EAAEA,CAAA,KAAM9B,KAAK,CAAC8B,QAAQ;IAC9BoG,cAAc,EAAE7H,MAAM;IACtBqC,wBAAwB,EAAEA,CAAA,KAAM,IAAAA,kCAAwB,EAACpD,MAAM,CAAC;IAChEwB;EACD,CAAC,CAAC;EACF,OAAOgD,MAAM;AACd","ignoreList":[]}