@chipmobilesdk/rn-payment 0.5.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 (317) hide show
  1. package/CHANGELOG.md +172 -0
  2. package/README.md +47 -16
  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
  296. package/skills/sdk-rn-payment/SKILL.md +4 -4
  297. package/src/adapter/iap-adapter.ts +12 -216
  298. package/src/adapter/iapShapes.ts +232 -0
  299. package/src/config/types.ts +8 -0
  300. package/src/config/validate.ts +19 -4
  301. package/src/core/retry.ts +1 -58
  302. package/src/diagnostics/events.ts +1 -1
  303. package/src/engine/connection.ts +194 -0
  304. package/src/engine/engine.ts +140 -700
  305. package/src/engine/internals.ts +40 -0
  306. package/src/engine/products.ts +39 -17
  307. package/src/engine/purchase.ts +22 -130
  308. package/src/engine/purchaseFailure.ts +48 -0
  309. package/src/engine/receiptValidation.ts +101 -0
  310. package/src/engine/state.ts +253 -0
  311. package/src/engine/sync.ts +161 -0
  312. package/src/entitlements/aggregate.ts +3 -5
  313. package/src/entitlements/mapping.ts +0 -22
  314. package/src/persistence/mmkv-store.ts +10 -3
  315. package/src/persistence/snapshot.ts +102 -27
  316. package/src/react/PaymentProvider.tsx +73 -24
  317. package/src/react/hooks.ts +13 -3
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * What tests and diagnostics need from an engine, off its public type (PAY-11).
5
+ *
6
+ * Until 0.6.0 these were methods of `PaymentEngine`, so any consumer could commit
7
+ * a snapshot of its own and grant itself an entitlement the store never sold,
8
+ * and a hand-written engine double had to implement all of them. They live in a
9
+ * WeakMap keyed by the engine now, and this module is not exported from the
10
+ * package entrypoint.
11
+ */
12
+
13
+ const registry = new WeakMap();
14
+ export function attachEngineInternals(engine, internals) {
15
+ registry.set(engine, internals);
16
+ }
17
+
18
+ /** The internals of an engine `createEngine` made. Throws for any other object. */
19
+ export function engineInternals(engine) {
20
+ const internals = registry.get(engine);
21
+ if (!internals) {
22
+ throw new Error('engineInternals: this engine was not created by createEngine');
23
+ }
24
+ return internals;
25
+ }
26
+ //# sourceMappingURL=internals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["registry","WeakMap","attachEngineInternals","engine","internals","set","engineInternals","get","Error"],"sourceRoot":"../../../src","sources":["engine/internals.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkBA,MAAMA,QAAQ,GAAG,IAAIC,OAAO,CAAiC,CAAC;AAE9D,OAAO,SAASC,qBAAqBA,CAACC,MAAqB,EAAEC,SAA0B,EAAQ;EAC9FJ,QAAQ,CAACK,GAAG,CAACF,MAAM,EAAEC,SAAS,CAAC;AAChC;;AAEA;AACA,OAAO,SAASE,eAAeA,CAACH,MAAqB,EAAmB;EACvE,MAAMC,SAAS,GAAGJ,QAAQ,CAACO,GAAG,CAACJ,MAAM,CAAC;EACtC,IAAI,CAACC,SAAS,EAAE;IACf,MAAM,IAAII,KAAK,CAAC,8DAA8D,CAAC;EAChF;EACA,OAAOJ,SAAS;AACjB","ignoreList":[]}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The pending set, and how a pending purchase ends (FR-101 – FR-104), added in
5
+ * 0.2.0.
6
+ *
7
+ * 0.1.0 handled pending purchases correctly on the grant side — pending never
8
+ * grants, a settled one is granted at the next sync, an abandoned one is removed
9
+ * — but an app could only *see* one in the session it started in. The record
10
+ * was already persisted with a `pending` state; this module is the read side of
11
+ * it, and nothing more. It decides nothing about granting: that stays in
12
+ * `entitlements/aggregate.ts`, where pending is refused unconditionally.
13
+ *
14
+ * Pure: no provider, no I/O, no React. The engine calls it from `commit`.
15
+ */
16
+
17
+ import { snapshotCertainty } from "../entitlements/aggregate.js";
18
+ export const UNKNOWN_PENDING = {
19
+ status: 'unknown',
20
+ purchases: [],
21
+ isStale: false
22
+ };
23
+
24
+ /**
25
+ * Derives the pending set from the snapshot.
26
+ *
27
+ * Read from the persisted record, so it survives an app kill and an offline
28
+ * restart, and judged by the very staleness rule entitlements use (FR-103).
29
+ * Products no longer in the catalog are left out: an app cannot render a row,
30
+ * or withhold a Buy button, for a product key it no longer has.
31
+ */
32
+ export function derivePending(input) {
33
+ const {
34
+ config,
35
+ snapshot
36
+ } = input;
37
+ const {
38
+ isStale,
39
+ undetermined
40
+ } = snapshotCertainty(input);
41
+ const earliest = new Map();
42
+ for (const purchase of snapshot.purchases) {
43
+ if (purchase.state !== 'pending' || !config.entries.has(purchase.productKey)) {
44
+ continue;
45
+ }
46
+ const known = earliest.get(purchase.productKey);
47
+ if (known === undefined || purchase.purchasedAt < known) {
48
+ earliest.set(purchase.productKey, purchase.purchasedAt);
49
+ }
50
+ }
51
+ const purchases = [...earliest].map(([productKey, since]) => ({
52
+ productKey,
53
+ since
54
+ })).sort((a, b) => a.since - b.since || a.productKey.localeCompare(b.productKey));
55
+ return {
56
+ status: undetermined ? 'unknown' : 'known',
57
+ purchases,
58
+ isStale
59
+ };
60
+ }
61
+ /**
62
+ * Every pending transaction that stopped being pending between two snapshots.
63
+ *
64
+ * Computed from the commit itself rather than at each call site that might end
65
+ * a pending purchase — sync, a store push, a purchase — which is what makes
66
+ * "exactly once" structural (FR-104, FR-079). A store push and a sync racing on
67
+ * one settling purchase both commit, but only the first commit sees it leave
68
+ * the pending set.
69
+ *
70
+ * A record that disappeared ended without payment. Why is the store's to say;
71
+ * when it says nothing, `cancelled` (see `PendingResolution`).
72
+ */
73
+ export function pendingTransitions(previous, next, config, endReason) {
74
+ const transitions = [];
75
+ for (const before of previous.purchases) {
76
+ if (before.state !== 'pending' || !config.entries.has(before.productKey)) {
77
+ continue;
78
+ }
79
+ const after = next.purchases.find(p => p.transactionId === before.transactionId);
80
+ if (after?.state === 'pending') {
81
+ continue;
82
+ }
83
+ transitions.push({
84
+ productKey: before.productKey,
85
+ outcome: after ? 'settled' : endReason(before.transactionId) ?? 'cancelled'
86
+ });
87
+ }
88
+ return transitions;
89
+ }
90
+
91
+ /** Whether a listener has anything new to hear. */
92
+ export function samePending(a, b) {
93
+ return a.status === b.status && a.isStale === b.isStale && a.purchases.length === b.purchases.length && a.purchases.every((purchase, index) => purchase.productKey === b.purchases[index].productKey && purchase.since === b.purchases[index].since);
94
+ }
95
+ //# sourceMappingURL=pending.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["snapshotCertainty","UNKNOWN_PENDING","status","purchases","isStale","derivePending","input","config","snapshot","undetermined","earliest","Map","purchase","state","entries","has","productKey","known","get","undefined","purchasedAt","set","map","since","sort","a","b","localeCompare","pendingTransitions","previous","next","endReason","transitions","before","after","find","p","transactionId","push","outcome","samePending","length","every","index"],"sourceRoot":"../../../src","sources":["engine/pending.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA,SAASA,iBAAiB,QAAQ,8BAA2B;AAE7D,OAAO,MAAMC,eAAsC,GAAG;EACrDC,MAAM,EAAE,SAAS;EACjBC,SAAS,EAAE,EAAE;EACbC,OAAO,EAAE;AACV,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,KAK7B,EAAyB;EACzB,MAAM;IAAEC,MAAM;IAAEC;EAAS,CAAC,GAAGF,KAAK;EAClC,MAAM;IAAEF,OAAO;IAAEK;EAAa,CAAC,GAAGT,iBAAiB,CAACM,KAAK,CAAC;EAE1D,MAAMI,QAAQ,GAAG,IAAIC,GAAG,CAAqB,CAAC;EAC9C,KAAK,MAAMC,QAAQ,IAAIJ,QAAQ,CAACL,SAAS,EAAE;IAC1C,IAAIS,QAAQ,CAACC,KAAK,KAAK,SAAS,IAAI,CAACN,MAAM,CAACO,OAAO,CAACC,GAAG,CAACH,QAAQ,CAACI,UAAU,CAAC,EAAE;MAC7E;IACD;IACA,MAAMC,KAAK,GAAGP,QAAQ,CAACQ,GAAG,CAACN,QAAQ,CAACI,UAAU,CAAC;IAC/C,IAAIC,KAAK,KAAKE,SAAS,IAAIP,QAAQ,CAACQ,WAAW,GAAGH,KAAK,EAAE;MACxDP,QAAQ,CAACW,GAAG,CAACT,QAAQ,CAACI,UAAU,EAAEJ,QAAQ,CAACQ,WAAW,CAAC;IACxD;EACD;EAEA,MAAMjB,SAA4B,GAAG,CAAC,GAAGO,QAAQ,CAAC,CAChDY,GAAG,CAAC,CAAC,CAACN,UAAU,EAAEO,KAAK,CAAC,MAAM;IAAEP,UAAU;IAAEO;EAAM,CAAC,CAAC,CAAC,CACrDC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACF,KAAK,GAAGG,CAAC,CAACH,KAAK,IAAIE,CAAC,CAACT,UAAU,CAACW,aAAa,CAACD,CAAC,CAACV,UAAU,CAAC,CAAC;EAE/E,OAAO;IAAEd,MAAM,EAAEO,YAAY,GAAG,SAAS,GAAG,OAAO;IAAEN,SAAS;IAAEC;EAAQ,CAAC;AAC1E;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASwB,kBAAkBA,CACjCC,QAA2B,EAC3BC,IAAuB,EACvBvB,MAAsB,EACtBwB,SAAyE,EACnD;EACtB,MAAMC,WAAgC,GAAG,EAAE;EAC3C,KAAK,MAAMC,MAAM,IAAIJ,QAAQ,CAAC1B,SAAS,EAAE;IACxC,IAAI8B,MAAM,CAACpB,KAAK,KAAK,SAAS,IAAI,CAACN,MAAM,CAACO,OAAO,CAACC,GAAG,CAACkB,MAAM,CAACjB,UAAU,CAAC,EAAE;MACzE;IACD;IACA,MAAMkB,KAAK,GAAGJ,IAAI,CAAC3B,SAAS,CAACgC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,aAAa,KAAKJ,MAAM,CAACI,aAAa,CAAC;IAChF,IAAIH,KAAK,EAAErB,KAAK,KAAK,SAAS,EAAE;MAC/B;IACD;IACAmB,WAAW,CAACM,IAAI,CAAC;MAChBtB,UAAU,EAAEiB,MAAM,CAACjB,UAAU;MAC7BuB,OAAO,EAAEL,KAAK,GAAG,SAAS,GAAIH,SAAS,CAACE,MAAM,CAACI,aAAa,CAAC,IAAI;IAClE,CAAC,CAAC;EACH;EACA,OAAOL,WAAW;AACnB;;AAEA;AACA,OAAO,SAASQ,WAAWA,CAACf,CAAwB,EAAEC,CAAwB,EAAW;EACxF,OACCD,CAAC,CAACvB,MAAM,KAAKwB,CAAC,CAACxB,MAAM,IACrBuB,CAAC,CAACrB,OAAO,KAAKsB,CAAC,CAACtB,OAAO,IACvBqB,CAAC,CAACtB,SAAS,CAACsC,MAAM,KAAKf,CAAC,CAACvB,SAAS,CAACsC,MAAM,IACzChB,CAAC,CAACtB,SAAS,CAACuC,KAAK,CAChB,CAAC9B,QAAQ,EAAE+B,KAAK,KACf/B,QAAQ,CAACI,UAAU,KAAKU,CAAC,CAACvB,SAAS,CAACwC,KAAK,CAAC,CAAC3B,UAAU,IACrDJ,QAAQ,CAACW,KAAK,KAAKG,CAAC,CAACvB,SAAS,CAACwC,KAAK,CAAC,CAACpB,KACxC,CAAC;AAEH","ignoreList":[]}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Product query, normalization, and the in-memory price cache (US11).
5
+ *
6
+ * Two rules shape this module:
7
+ *
8
+ * - **Prices come from the store, formatted.** An app must never build a price
9
+ * string (FR-028): only the store knows the right currency symbol, its
10
+ * placement, the decimal separator, and the grouping for the user's locale. A
11
+ * hand-built "$9.99" is wrong in most of the world.
12
+ * - **Offer eligibility is reported, never computed.** The store decides who
13
+ * qualifies for a trial or an introductory price (FR-026). Guessing locally
14
+ * would promise a trial the store then refuses at checkout.
15
+ *
16
+ * The cache is in **memory only** and short-lived. Persisting prices would risk
17
+ * showing a stale one as current in a later session, and a paywall is exactly
18
+ * where that matters.
19
+ */
20
+
21
+ import { PaymentError } from "../diagnostics/errors.js";
22
+ import { withTimeout } from "../core/mutex.js";
23
+ import { storeIdForProductKey } from "../entitlements/mapping.js";
24
+
25
+ /** Why a requested product produced nothing, kept distinct from a network error. */
26
+
27
+ function normalize(raw, productKey, productType) {
28
+ return {
29
+ productKey,
30
+ productType,
31
+ title: raw.title,
32
+ description: raw.description,
33
+ formattedPrice: raw.formattedPrice,
34
+ currencyCode: raw.currencyCode,
35
+ priceAmountMicros: raw.priceAmountMicros,
36
+ offers: raw.offers.map(offer => ({
37
+ offerKey: offer.offerKey,
38
+ billingPeriod: offer.billingPeriod,
39
+ formattedPrice: offer.formattedPrice,
40
+ priceAmountMicros: offer.priceAmountMicros,
41
+ currencyCode: offer.currencyCode,
42
+ trialPeriod: offer.trialPeriod,
43
+ introductoryPrice: offer.introductoryPrice,
44
+ isEligible: offer.isEligible
45
+ }))
46
+ };
47
+ }
48
+ export function createProducts(deps) {
49
+ const {
50
+ resolved
51
+ } = deps;
52
+ const cache = new Map();
53
+ const isFresh = entry => deps.now() - entry.cachedAt < resolved.productCacheTtlMs;
54
+ const query = async (productKeys, useCache) => {
55
+ const missing = [];
56
+ const resolvedProducts = [];
57
+ const toFetch = [];
58
+ for (const productKey of productKeys) {
59
+ const entry = resolved.entries.get(productKey);
60
+ const storeProductId = storeIdForProductKey(resolved, productKey);
61
+ if (!entry || !storeProductId) {
62
+ // A configuration problem, not a store one. Distinguishing them tells a
63
+ // developer whether to fix the catalog or check Play Console.
64
+ missing.push({
65
+ productKey,
66
+ reason: 'not_in_catalog'
67
+ });
68
+ continue;
69
+ }
70
+ const cached = useCache ? cache.get(productKey) : undefined;
71
+ if (cached && isFresh(cached)) {
72
+ resolvedProducts.push(cached.product);
73
+ continue;
74
+ }
75
+ toFetch.push({
76
+ productKey,
77
+ storeProductId,
78
+ productType: entry.productType
79
+ });
80
+ }
81
+ if (toFetch.length === 0) {
82
+ deps.emit({
83
+ type: 'products_queried',
84
+ productKeys,
85
+ found: resolvedProducts.length,
86
+ missing: missing.map(m => m.productKey),
87
+ fromCache: true
88
+ });
89
+ return {
90
+ ok: true,
91
+ products: resolvedProducts,
92
+ missing,
93
+ fromCache: true
94
+ };
95
+ }
96
+
97
+ // Grouped by product type because the store queries in-app products and
98
+ // subscriptions through separate calls.
99
+ const byType = new Map();
100
+ for (const item of toFetch) {
101
+ const list = byType.get(item.productType) ?? [];
102
+ list.push(item);
103
+ byType.set(item.productType, list);
104
+ }
105
+ try {
106
+ // In parallel: a paywall offering a subscription and a one-time purchase
107
+ // used to wait for one store round-trip after the other (PAY-20).
108
+ const groups = await Promise.all([...byType].map(async ([productType, items]) => ({
109
+ items,
110
+ raw: await withTimeout(deps.provider.queryProducts(items.map(i => i.storeProductId), productType), resolved.timeouts.productQueryMs, () => new PaymentError({
111
+ code: 'PAYMENT_TIMEOUT',
112
+ message: 'Querying products timed out',
113
+ operation: 'getProducts',
114
+ retryable: true
115
+ }))
116
+ })));
117
+ for (const {
118
+ items,
119
+ raw
120
+ } of groups) {
121
+ const returned = new Map(raw.map(p => [p.storeProductId, p]));
122
+ for (const item of items) {
123
+ const found = returned.get(item.storeProductId);
124
+ if (!found) {
125
+ // The store knows the id but will not sell it here: unapproved, or
126
+ // not available in this country. Never conflated with a network
127
+ // failure (FR-027).
128
+ missing.push({
129
+ productKey: item.productKey,
130
+ reason: 'not_available_from_store'
131
+ });
132
+ continue;
133
+ }
134
+ const product = normalize(found, item.productKey, item.productType);
135
+ cache.set(item.productKey, {
136
+ product,
137
+ cachedAt: deps.now()
138
+ });
139
+ resolvedProducts.push(product);
140
+ }
141
+ }
142
+ } catch (error) {
143
+ const paymentError = error instanceof PaymentError ? error : new PaymentError({
144
+ code: 'PAYMENT_NETWORK_ERROR',
145
+ message: 'Could not reach the store to query products',
146
+ operation: 'getProducts',
147
+ retryable: true
148
+ });
149
+ deps.emit({
150
+ type: 'internal_error',
151
+ code: paymentError.code,
152
+ operation: 'getProducts'
153
+ });
154
+ return {
155
+ ok: false,
156
+ error: paymentError
157
+ };
158
+ }
159
+ deps.emit({
160
+ type: 'products_queried',
161
+ productKeys,
162
+ found: resolvedProducts.length,
163
+ missing: missing.map(m => m.productKey),
164
+ fromCache: false
165
+ });
166
+ return {
167
+ ok: true,
168
+ products: resolvedProducts,
169
+ missing,
170
+ fromCache: false
171
+ };
172
+ };
173
+
174
+ /**
175
+ * Identical requests in flight share one store call (PAY-20): several screens
176
+ * mounting `useProducts` for the same paywall ask once.
177
+ */
178
+ const flights = new Map();
179
+ const joined = (productKeys, useCache) => {
180
+ const key = `${useCache ? 'get' : 'refresh'}:${productKeys.join('|')}`;
181
+ const running = flights.get(key);
182
+ if (running) {
183
+ return running;
184
+ }
185
+ const promise = query(productKeys, useCache).finally(() => flights.delete(key));
186
+ flights.set(key, promise);
187
+ return promise;
188
+ };
189
+ return {
190
+ get: productKeys => joined(productKeys, true),
191
+ refresh: productKeys => joined(productKeys, false),
192
+ invalidate: () => cache.clear()
193
+ };
194
+ }
195
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PaymentError","withTimeout","storeIdForProductKey","normalize","raw","productKey","productType","title","description","formattedPrice","currencyCode","priceAmountMicros","offers","map","offer","offerKey","billingPeriod","trialPeriod","introductoryPrice","isEligible","createProducts","deps","resolved","cache","Map","isFresh","entry","now","cachedAt","productCacheTtlMs","query","productKeys","useCache","missing","resolvedProducts","toFetch","entries","get","storeProductId","push","reason","cached","undefined","product","length","emit","type","found","m","fromCache","ok","products","byType","item","list","set","groups","Promise","all","items","provider","queryProducts","i","timeouts","productQueryMs","code","message","operation","retryable","returned","p","error","paymentError","flights","joined","key","join","running","promise","finally","delete","refresh","invalidate","clear"],"sourceRoot":"../../../src","sources":["engine/products.ts"],"mappings":"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","ignoreList":[]}