@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 @@
1
+ {"version":3,"names":["createDiagnosticChannel","createEmitter","createCoreEmitter","channel","redact","onListenerError","dispatching","isDisposed","emitter","error","emit","eventType","type","event","previous","test","undefined","correlationId","subscribe","listener","dispose","listenerCount","disposed","FORBIDDEN_EVENT_FIELDS","createCorrelationId","counter","prefix","id","next","toString"],"sourceRoot":"../../../src","sources":["diagnostics/events.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACCA,uBAAuB,EACvBC,aAAa,IAAIC,iBAAiB,QAC5B,wBAAwB;;AAE/B;AACA,MAAMC,OAAO,GAAGH,uBAAuB,CACtC,YACD,CAAC;AAED,SAASI,MAAM,QAAsD,aAAU;;AAoI/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASH,aAAaA,CAC5BI,eAA+D,EAC9C;EACjB;EACA,IAAIC,WAAgC,GAAG,IAAI;EAC3C,IAAIC,UAAU,GAAG,KAAK;EACtB;EACA;EACA;EACA,MAAMC,OAAO,GAAGN,iBAAiB,CAAe;IAC/CG,eAAe,EAAEI,KAAK,IAAI;MACzB,IAAI,CAACH,WAAW,EAAE;MAClB,IAAI;QACHD,eAAe,GAAGI,KAAK,EAAEH,WAAW,CAAC;MACtC,CAAC,CAAC,MAAM;QACP;QACA;QACA;QACAH,OAAO,CAACO,IAAI,CAAC,0BAA0B,EAAE,OAAO,EAAE;UACjDC,SAAS,EAAEL,WAAW,CAACM;QACxB,CAAC,CAAC;MACH;IACD;EACD,CAAC,CAAC;EAEF,OAAO;IACNF,IAAIA,CAACG,KAAK,EAAE;MACX,IAAIN,UAAU,EAAE;QACf;MACD;MACA,MAAMO,QAAQ,GAAGR,WAAW;MAC5BA,WAAW,GAAGO,KAAK;MACnB,IAAI;QACH,IAAIL,OAAO,CAACE,IAAI,CAACG,KAAK,CAAC,EAAE;UACxB;UACA;UACAV,OAAO,CAACO,IAAI,CACXG,KAAK,CAACD,IAAI,EACV,uCAAuC,CAACG,IAAI,CAACF,KAAK,CAACD,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,EAC1EI,SAAS,EACTH,KAAK,CAACI,aACP,CAAC;QACF;MACD,CAAC,SAAS;QACTX,WAAW,GAAGQ,QAAQ;MACvB;IACD,CAAC;IACDI,SAASA,CAACC,QAA8B,EAAe;MACtD,OAAOZ,UAAU,GAAG,MAAMS,SAAS,GAAGR,OAAO,CAACU,SAAS,CAACC,QAAQ,CAAC;IAClE,CAAC;IACDC,OAAOA,CAAA,EAAS;MACfb,UAAU,GAAG,IAAI;MACjBC,OAAO,CAACY,OAAO,CAAC,CAAC;IAClB,CAAC;IACDC,aAAa,EAAEA,CAAA,KAAMb,OAAO,CAACa,aAAa,CAAC,CAAC;IAC5CC,QAAQ,EAAEA,CAAA,KAAMf;EACjB,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMgB,sBAAyC,GAAG,CACxD,qBAAqB,EACrB,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,OAAO,EACP,WAAW,CACX;;AAED;AACA,OAAO,SAASC,mBAAmBA,CAACC,OAAyB,EAAEC,MAAM,GAAG,IAAI,EAAU;EACrF,MAAMC,EAAE,GAAG,GAAGD,MAAM,IAAID,OAAO,CAACG,IAAI,CAACC,QAAQ,CAAC,EAAE,CAAC,EAAE;EACnDJ,OAAO,CAACG,IAAI,IAAI,CAAC;EACjB,OAAOD,EAAE;AACV;AAEA,SAASvB,MAAM","ignoreList":[]}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Stable, localizable message keys with English default copy (FR-084, FR-085).
5
+ *
6
+ * The package takes no i18n runtime dependency: consuming apps map these keys to
7
+ * localized strings through whatever i18n system they already run. This is plain
8
+ * data, and the package never resolves or renders it.
9
+ *
10
+ * Message keys are **public API**: renaming one is a breaking change, on the
11
+ * same footing as an error code (FR-078).
12
+ *
13
+ * User-actionable copy and developer/configuration copy are kept in separate
14
+ * maps so an app cannot accidentally show "Payment catalog is invalid" to a
15
+ * customer — a configuration fault is a developer's problem, not a user's.
16
+ */
17
+
18
+ /** Copy an end user may reasonably be shown. */
19
+ import { defineMessages } from '@chipmobilesdk/rn-core';
20
+
21
+ /** Copy for developers and operators. **Never** surfaced to an end user. */
22
+
23
+ export const DEFAULT_USER_MESSAGES = {
24
+ 'payment.state.pending': 'Waiting for your payment to complete',
25
+ 'payment.state.alreadyOwned': 'You already own this',
26
+ 'payment.action.restore': 'Restore purchases',
27
+ 'payment.restore.succeeded': 'Your purchases have been restored',
28
+ 'payment.restore.nothingFound': 'No previous purchases found',
29
+ 'payment.error.cancelled': 'Purchase cancelled',
30
+ 'payment.error.network': "Couldn't reach the store. Check your connection and try again.",
31
+ 'payment.error.unavailable': "Purchases aren't available on this device",
32
+ 'payment.error.disabled': 'Purchases are currently unavailable',
33
+ 'payment.subscription.grace': "There's a problem with your payment method",
34
+ 'payment.subscription.hold': 'Your subscription is paused until payment is updated'
35
+ };
36
+ export const DEFAULT_DEVELOPER_MESSAGES = {
37
+ 'payment.config.invalidCatalog': 'Payment catalog is invalid',
38
+ 'payment.config.missingStoreId': 'Product is missing a store identifier for this platform',
39
+ 'payment.config.productionInNonProductionBuild': 'Production payment configuration in a non-production build',
40
+ 'payment.config.storageUnavailable': 'Local storage unavailable; entitlements will not survive restart',
41
+ 'payment.config.environmentBlocked': 'Purchase blocked: this environment may not create a real transaction'
42
+ };
43
+
44
+ /**
45
+ * The catalog as an rn-core message set. Register `paymentMessages.user` with
46
+ * rn-i18n to translate it like app copy; the developer copy stays out of bundles.
47
+ */
48
+ export const paymentMessages = defineMessages({
49
+ user: DEFAULT_USER_MESSAGES,
50
+ developer: DEFAULT_DEVELOPER_MESSAGES
51
+ });
52
+ export const DEFAULT_MESSAGES = paymentMessages.defaults;
53
+
54
+ /** Every user-actionable key, for an app building its translation resource. */
55
+ export const USER_MESSAGE_KEYS = paymentMessages.userKeys;
56
+
57
+ /** Every developer-facing key, so an app can exclude them from user-visible bundles. */
58
+ export const DEVELOPER_MESSAGE_KEYS = paymentMessages.developerKeys;
59
+
60
+ /** True for keys safe to show an end user. Lets an app assert that at its boundary. */
61
+ export function isUserMessageKey(key) {
62
+ return paymentMessages.audienceOf(key) === 'user';
63
+ }
64
+ //# sourceMappingURL=messageKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defineMessages","DEFAULT_USER_MESSAGES","DEFAULT_DEVELOPER_MESSAGES","paymentMessages","user","developer","DEFAULT_MESSAGES","defaults","USER_MESSAGE_KEYS","userKeys","DEVELOPER_MESSAGE_KEYS","developerKeys","isUserMessageKey","key","audienceOf"],"sourceRoot":"../../../src","sources":["diagnostics/messageKeys.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASA,cAAc,QAAQ,wBAAwB;;AAgBvD;;AAeA,OAAO,MAAMC,qBAA4C,GAAG;EAC3D,uBAAuB,EAAE,sCAAsC;EAC/D,4BAA4B,EAAE,sBAAsB;EACpD,wBAAwB,EAAE,mBAAmB;EAC7C,2BAA2B,EAAE,mCAAmC;EAChE,8BAA8B,EAAE,6BAA6B;EAC7D,yBAAyB,EAAE,oBAAoB;EAC/C,uBAAuB,EAAE,gEAAgE;EACzF,2BAA2B,EAAE,2CAA2C;EACxE,wBAAwB,EAAE,qCAAqC;EAC/D,4BAA4B,EAAE,4CAA4C;EAC1E,2BAA2B,EAAE;AAC9B,CAAC;AAED,OAAO,MAAMC,0BAAsD,GAAG;EACrE,+BAA+B,EAAE,4BAA4B;EAC7D,+BAA+B,EAAE,yDAAyD;EAC1F,+CAA+C,EAC9C,4DAA4D;EAC7D,mCAAmC,EAClC,kEAAkE;EACnE,mCAAmC,EAClC;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAGH,cAAc,CAAC;EAC7CI,IAAI,EAAEH,qBAAqB;EAC3BI,SAAS,EAAEH;AACZ,CAAC,CAAC;AAEF,OAAO,MAAMI,gBAAmC,GAAGH,eAAe,CAACI,QAAQ;;AAE3E;AACA,OAAO,MAAMC,iBAAiB,GAAGL,eAAe,CAACM,QAAmC;;AAEpF;AACA,OAAO,MAAMC,sBAAsB,GAAGP,eAAe,CAACQ,aAA6C;;AAEnG;AACA,OAAO,SAASC,gBAAgBA,CAACC,GAAsB,EAAgC;EACtF,OAAOV,eAAe,CAACW,UAAU,CAACD,GAAG,CAAC,KAAK,MAAM;AAClD","ignoreList":[]}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The billing connection: connecting, watching it, and reconnecting with bounded
5
+ * backoff (FR-018 – FR-024, PAY-10).
6
+ *
7
+ * A reconnect is always a full teardown-then-connect cycle. The upstream
8
+ * binding's own `reconnect()` has reported success without rebuilding anything
9
+ * (openiap#408), so no shortcut is trusted here.
10
+ */
11
+
12
+ import { backoffDelayMs } from "../core/retry.js";
13
+ import { withTimeout } from "../core/mutex.js";
14
+ import { PaymentError } from "../diagnostics/errors.js";
15
+ export function createConnection(state, onPurchase) {
16
+ const {
17
+ provider,
18
+ resolved
19
+ } = state;
20
+ let connectionSub;
21
+ let purchaseSub;
22
+ let reconnectTimer;
23
+ let reconnectAttempts = 0;
24
+ /**
25
+ * Set once a connection succeeded. Recovery after an exhausted budget is only
26
+ * meaningful from there; a first connection that failed is the app's to retry
27
+ * through `initialize`.
28
+ */
29
+ let everConnected = false;
30
+ function scheduleReconnect() {
31
+ if (state.disposed) {
32
+ return;
33
+ }
34
+ if (reconnectAttempts >= resolved.retry.reconnect.maxAttempts) {
35
+ // Out of budget for now, not for good: a retryable failure rather than a
36
+ // `connecting` that promised a reconnect nobody was going to make.
37
+ state.setStatus({
38
+ kind: 'failed',
39
+ retryable: true,
40
+ reconnectAttempts
41
+ });
42
+ return;
43
+ }
44
+ const attempt = reconnectAttempts + 1;
45
+ reconnectTimer = setTimeout(() => {
46
+ reconnectTimer = undefined;
47
+ if (state.disposed) {
48
+ return;
49
+ }
50
+ reconnectAttempts = attempt;
51
+ state.setStatus({
52
+ kind: 'connecting',
53
+ reconnectAttempts
54
+ });
55
+ reconnectOnce().catch(() => undefined);
56
+ }, backoffDelayMs(attempt, resolved.retry.reconnect));
57
+ }
58
+ async function reconnectOnce() {
59
+ try {
60
+ await provider.disconnect();
61
+ } catch {
62
+ // Already down; nothing to tear down.
63
+ }
64
+ const outcome = await provider.connect();
65
+ if (state.disposed) {
66
+ return;
67
+ }
68
+ if (outcome.ok) {
69
+ reconnectAttempts = 0;
70
+ state.setStatus({
71
+ kind: 'ready',
72
+ reconnectAttempts: 0
73
+ });
74
+ } else {
75
+ scheduleReconnect();
76
+ }
77
+ }
78
+
79
+ /** Replaced, never stacked: a second subscription would hear everything twice. */
80
+ function watch() {
81
+ connectionSub?.();
82
+ connectionSub = provider.observeConnection((connected, reason) => {
83
+ if (state.disposed) {
84
+ return;
85
+ }
86
+ state.emit({
87
+ type: 'connection_changed',
88
+ connected,
89
+ reason,
90
+ attempt: reconnectAttempts
91
+ });
92
+ if (!connected && state.status.kind === 'ready') {
93
+ state.setStatus({
94
+ kind: 'connecting'
95
+ });
96
+ scheduleReconnect();
97
+ }
98
+ });
99
+ // Session-long: a pending purchase settling between sessions arrives here
100
+ // (FR-039), not only while a purchase is open.
101
+ purchaseSub?.();
102
+ purchaseSub = provider.observePurchases(purchase => {
103
+ if (!state.disposed) {
104
+ onPurchase(purchase);
105
+ }
106
+ });
107
+ }
108
+ return {
109
+ async connect() {
110
+ const outcome = await withTimeout(provider.connect(), resolved.timeouts.connectMs, () => new PaymentError({
111
+ code: 'PAYMENT_TIMEOUT',
112
+ message: 'Connecting to the billing service timed out',
113
+ operation: 'initialize',
114
+ retryable: true
115
+ })).catch(error => ({
116
+ ok: false,
117
+ reason: 'store_error',
118
+ retryable: error.retryable
119
+ }));
120
+ if (!outcome.ok) {
121
+ if (outcome.reason === 'store_error') {
122
+ state.setStatus({
123
+ kind: 'failed',
124
+ retryable: outcome.retryable
125
+ });
126
+ return {
127
+ ok: false,
128
+ error: new PaymentError({
129
+ code: 'PAYMENT_STORE_ERROR',
130
+ message: 'Could not connect to the billing service',
131
+ operation: 'initialize',
132
+ retryable: outcome.retryable
133
+ })
134
+ };
135
+ }
136
+ // No billing service, an outdated one, or an unsupported platform: each
137
+ // distinguishable, and none of them may break the host app (FR-021, FR-023).
138
+ state.setStatus({
139
+ kind: 'unavailable',
140
+ unavailableReason: outcome.reason,
141
+ retryable: outcome.retryable
142
+ });
143
+ return {
144
+ ok: false,
145
+ error: new PaymentError({
146
+ code: outcome.reason === 'platform_unsupported' ? 'PAYMENT_UNSUPPORTED_PLATFORM' : 'PAYMENT_UNAVAILABLE',
147
+ message: `Billing unavailable: ${outcome.reason}`,
148
+ operation: 'initialize',
149
+ retryable: outcome.retryable
150
+ })
151
+ };
152
+ }
153
+ watch();
154
+ everConnected = true;
155
+ state.setStatus({
156
+ kind: 'ready',
157
+ reconnectAttempts: 0
158
+ });
159
+ return {
160
+ ok: true
161
+ };
162
+ },
163
+ async recover() {
164
+ if (everConnected && !state.disposed && state.status.kind === 'failed' && reconnectTimer === undefined) {
165
+ reconnectAttempts = 0;
166
+ state.setStatus({
167
+ kind: 'connecting',
168
+ reconnectAttempts: 0
169
+ });
170
+ await reconnectOnce().catch(() => undefined);
171
+ }
172
+ },
173
+ dispose() {
174
+ connectionSub?.();
175
+ connectionSub = undefined;
176
+ purchaseSub?.();
177
+ purchaseSub = undefined;
178
+ if (reconnectTimer !== undefined) {
179
+ clearTimeout(reconnectTimer);
180
+ reconnectTimer = undefined;
181
+ }
182
+ }
183
+ };
184
+ }
185
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["backoffDelayMs","withTimeout","PaymentError","createConnection","state","onPurchase","provider","resolved","connectionSub","purchaseSub","reconnectTimer","reconnectAttempts","everConnected","scheduleReconnect","disposed","retry","reconnect","maxAttempts","setStatus","kind","retryable","attempt","setTimeout","undefined","reconnectOnce","catch","disconnect","outcome","connect","ok","watch","observeConnection","connected","reason","emit","type","status","observePurchases","purchase","timeouts","connectMs","code","message","operation","error","unavailableReason","recover","dispose","clearTimeout"],"sourceRoot":"../../../src","sources":["engine/connection.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,cAAc,QAAQ,kBAAe;AAC9C,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,YAAY,QAAQ,0BAAuB;AAiBpD,OAAO,SAASC,gBAAgBA,CAC/BC,KAAkB,EAClBC,UAAgD,EACnC;EACb,MAAM;IAAEC,QAAQ;IAAEC;EAAS,CAAC,GAAGH,KAAK;EACpC,IAAII,aAAsC;EAC1C,IAAIC,WAAoC;EACxC,IAAIC,cAAyD;EAC7D,IAAIC,iBAAiB,GAAG,CAAC;EACzB;AACD;AACA;AACA;AACA;EACC,IAAIC,aAAa,GAAG,KAAK;EAEzB,SAASC,iBAAiBA,CAAA,EAAS;IAClC,IAAIT,KAAK,CAACU,QAAQ,EAAE;MACnB;IACD;IACA,IAAIH,iBAAiB,IAAIJ,QAAQ,CAACQ,KAAK,CAACC,SAAS,CAACC,WAAW,EAAE;MAC9D;MACA;MACAb,KAAK,CAACc,SAAS,CAAC;QAAEC,IAAI,EAAE,QAAQ;QAAEC,SAAS,EAAE,IAAI;QAAET;MAAkB,CAAC,CAAC;MACvE;IACD;IACA,MAAMU,OAAO,GAAGV,iBAAiB,GAAG,CAAC;IACrCD,cAAc,GAAGY,UAAU,CAC1B,MAAM;MACLZ,cAAc,GAAGa,SAAS;MAC1B,IAAInB,KAAK,CAACU,QAAQ,EAAE;QACnB;MACD;MACAH,iBAAiB,GAAGU,OAAO;MAC3BjB,KAAK,CAACc,SAAS,CAAC;QAAEC,IAAI,EAAE,YAAY;QAAER;MAAkB,CAAC,CAAC;MAC1Da,aAAa,CAAC,CAAC,CAACC,KAAK,CAAC,MAAMF,SAAS,CAAC;IACvC,CAAC,EACDvB,cAAc,CAACqB,OAAO,EAAEd,QAAQ,CAACQ,KAAK,CAACC,SAAS,CACjD,CAAC;EACF;EAEA,eAAeQ,aAAaA,CAAA,EAAkB;IAC7C,IAAI;MACH,MAAMlB,QAAQ,CAACoB,UAAU,CAAC,CAAC;IAC5B,CAAC,CAAC,MAAM;MACP;IAAA;IAED,MAAMC,OAAO,GAAG,MAAMrB,QAAQ,CAACsB,OAAO,CAAC,CAAC;IACxC,IAAIxB,KAAK,CAACU,QAAQ,EAAE;MACnB;IACD;IACA,IAAIa,OAAO,CAACE,EAAE,EAAE;MACflB,iBAAiB,GAAG,CAAC;MACrBP,KAAK,CAACc,SAAS,CAAC;QAAEC,IAAI,EAAE,OAAO;QAAER,iBAAiB,EAAE;MAAE,CAAC,CAAC;IACzD,CAAC,MAAM;MACNE,iBAAiB,CAAC,CAAC;IACpB;EACD;;EAEA;EACA,SAASiB,KAAKA,CAAA,EAAS;IACtBtB,aAAa,GAAG,CAAC;IACjBA,aAAa,GAAGF,QAAQ,CAACyB,iBAAiB,CAAC,CAACC,SAAS,EAAEC,MAAM,KAAK;MACjE,IAAI7B,KAAK,CAACU,QAAQ,EAAE;QACnB;MACD;MACAV,KAAK,CAAC8B,IAAI,CAAC;QAAEC,IAAI,EAAE,oBAAoB;QAAEH,SAAS;QAAEC,MAAM;QAAEZ,OAAO,EAAEV;MAAkB,CAAC,CAAC;MACzF,IAAI,CAACqB,SAAS,IAAI5B,KAAK,CAACgC,MAAM,CAACjB,IAAI,KAAK,OAAO,EAAE;QAChDf,KAAK,CAACc,SAAS,CAAC;UAAEC,IAAI,EAAE;QAAa,CAAC,CAAC;QACvCN,iBAAiB,CAAC,CAAC;MACpB;IACD,CAAC,CAAC;IACF;IACA;IACAJ,WAAW,GAAG,CAAC;IACfA,WAAW,GAAGH,QAAQ,CAAC+B,gBAAgB,CAACC,QAAQ,IAAI;MACnD,IAAI,CAAClC,KAAK,CAACU,QAAQ,EAAE;QACpBT,UAAU,CAACiC,QAAQ,CAAC;MACrB;IACD,CAAC,CAAC;EACH;EAEA,OAAO;IACN,MAAMV,OAAOA,CAAA,EAAG;MACf,MAAMD,OAAO,GAAG,MAAM1B,WAAW,CAChCK,QAAQ,CAACsB,OAAO,CAAC,CAAC,EAClBrB,QAAQ,CAACgC,QAAQ,CAACC,SAAS,EAC3B,MACC,IAAItC,YAAY,CAAC;QAChBuC,IAAI,EAAE,iBAAiB;QACvBC,OAAO,EAAE,6CAA6C;QACtDC,SAAS,EAAE,YAAY;QACvBvB,SAAS,EAAE;MACZ,CAAC,CACH,CAAC,CAACK,KAAK,CAAEmB,KAAmB,KAAM;QACjCf,EAAE,EAAE,KAAc;QAClBI,MAAM,EAAE,aAAsB;QAC9Bb,SAAS,EAAEwB,KAAK,CAACxB;MAClB,CAAC,CAAC,CAAC;MAEH,IAAI,CAACO,OAAO,CAACE,EAAE,EAAE;QAChB,IAAIF,OAAO,CAACM,MAAM,KAAK,aAAa,EAAE;UACrC7B,KAAK,CAACc,SAAS,CAAC;YAAEC,IAAI,EAAE,QAAQ;YAAEC,SAAS,EAAEO,OAAO,CAACP;UAAU,CAAC,CAAC;UACjE,OAAO;YACNS,EAAE,EAAE,KAAK;YACTe,KAAK,EAAE,IAAI1C,YAAY,CAAC;cACvBuC,IAAI,EAAE,qBAAqB;cAC3BC,OAAO,EAAE,0CAA0C;cACnDC,SAAS,EAAE,YAAY;cACvBvB,SAAS,EAAEO,OAAO,CAACP;YACpB,CAAC;UACF,CAAC;QACF;QACA;QACA;QACAhB,KAAK,CAACc,SAAS,CAAC;UACfC,IAAI,EAAE,aAAa;UACnB0B,iBAAiB,EAAElB,OAAO,CAACM,MAAM;UACjCb,SAAS,EAAEO,OAAO,CAACP;QACpB,CAAC,CAAC;QACF,OAAO;UACNS,EAAE,EAAE,KAAK;UACTe,KAAK,EAAE,IAAI1C,YAAY,CAAC;YACvBuC,IAAI,EACHd,OAAO,CAACM,MAAM,KAAK,sBAAsB,GACtC,8BAA8B,GAC9B,qBAAqB;YACzBS,OAAO,EAAE,wBAAwBf,OAAO,CAACM,MAAM,EAAE;YACjDU,SAAS,EAAE,YAAY;YACvBvB,SAAS,EAAEO,OAAO,CAACP;UACpB,CAAC;QACF,CAAC;MACF;MAEAU,KAAK,CAAC,CAAC;MACPlB,aAAa,GAAG,IAAI;MACpBR,KAAK,CAACc,SAAS,CAAC;QAAEC,IAAI,EAAE,OAAO;QAAER,iBAAiB,EAAE;MAAE,CAAC,CAAC;MACxD,OAAO;QAAEkB,EAAE,EAAE;MAAK,CAAC;IACpB,CAAC;IAED,MAAMiB,OAAOA,CAAA,EAAG;MACf,IACClC,aAAa,IACb,CAACR,KAAK,CAACU,QAAQ,IACfV,KAAK,CAACgC,MAAM,CAACjB,IAAI,KAAK,QAAQ,IAC9BT,cAAc,KAAKa,SAAS,EAC3B;QACDZ,iBAAiB,GAAG,CAAC;QACrBP,KAAK,CAACc,SAAS,CAAC;UAAEC,IAAI,EAAE,YAAY;UAAER,iBAAiB,EAAE;QAAE,CAAC,CAAC;QAC7D,MAAMa,aAAa,CAAC,CAAC,CAACC,KAAK,CAAC,MAAMF,SAAS,CAAC;MAC7C;IACD,CAAC;IAEDwB,OAAOA,CAAA,EAAG;MACTvC,aAAa,GAAG,CAAC;MACjBA,aAAa,GAAGe,SAAS;MACzBd,WAAW,GAAG,CAAC;MACfA,WAAW,GAAGc,SAAS;MACvB,IAAIb,cAAc,KAAKa,SAAS,EAAE;QACjCyB,YAAY,CAACtC,cAAc,CAAC;QAC5BA,cAAc,GAAGa,SAAS;MAC3B;IACD;EACD,CAAC;AACF","ignoreList":[]}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The engine: status, initialization, entitlement reads, and sync.
5
+ *
6
+ * Owns the concurrency guarantees that make three requirements structurally true
7
+ * rather than hoped for — one connection under concurrent init (FR-018), one
8
+ * store request under concurrent sync (FR-063), and a rate-limited foreground
9
+ * sync (PERF-002).
10
+ *
11
+ * It never imports a store type. The only thing it talks to is `ProviderPort`,
12
+ * which is what keeps the binding replaceable and iOS additive (FR-002, FR-007).
13
+ *
14
+ * This file composes (PAY-10): state and its publication live in `state.ts`, the
15
+ * connection in `connection.ts`, sync in `sync.ts`, and the internals tests reach
16
+ * for in `internals.ts`, off the public type (PAY-11).
17
+ */
18
+
19
+ import { currentPlatform } from '@chipmobilesdk/rn-core';
20
+ import { assertEnvironmentSafe, mayCreateRealTransaction, validateConfig } from "../config/validate.js";
21
+ import { createExclusive, createSingleFlight } from "../core/mutex.js";
22
+ import { PaymentError } from "../diagnostics/errors.js";
23
+ import { createCorrelationId } from "../diagnostics/events.js";
24
+ import { createSnapshotStore } from "../persistence/mmkv-store.js";
25
+ import { createConnection } from "./connection.js";
26
+ import { createFinalizer } from "./finalize.js";
27
+ import { attachEngineInternals } from "./internals.js";
28
+ import { createProducts } from "./products.js";
29
+ import { createPurchaseFlow } from "./purchase.js";
30
+ import { createEngineState } from "./state.js";
31
+ import { createSubscriptions } from "./subscriptions.js";
32
+ import { createSync } from "./sync.js";
33
+ /** How many refused operations `status.blockedOperations` keeps. */
34
+ export const MAX_BLOCKED_OPERATIONS = 20;
35
+ export function createEngine(config, deps) {
36
+ // Both run before anything connects: a bad catalog or an unsafe environment
37
+ // must fail at configuration time, not when a user taps Buy.
38
+ assertEnvironmentSafe(config);
39
+ // rn-core's one platform source (CORE-09). Where neither OS applies, the store
40
+ // provider refuses everything as unsupported anyway.
41
+ const platform = deps.platform ?? (currentPlatform() === 'ios' ? 'ios' : 'android');
42
+ const resolved = validateConfig(config, platform);
43
+ const now = deps.now ?? (() => Date.now());
44
+ const provider = deps.provider;
45
+ const state = createEngineState(config, resolved, provider, deps.snapshotStore ?? createSnapshotStore(), now);
46
+ const {
47
+ emit,
48
+ commit
49
+ } = state;
50
+ const correlationCounter = {
51
+ next: 1
52
+ };
53
+ const nextCorrelationId = () => createCorrelationId(correlationCounter);
54
+ const initFlight = createSingleFlight();
55
+ // Exclusive rather than single-flight: a second purchase is refused, not joined
56
+ // onto the first, and never queued (FR-031).
57
+ const purchaseLock = createExclusive();
58
+
59
+ /** Written into status, not just logged, so a test can assert the block (FR-014). */
60
+ const recordBlockedOperation = productKey => {
61
+ const blocked = {
62
+ productKey,
63
+ environment: config.environment,
64
+ at: now()
65
+ };
66
+ // The most recent ones only: an app retrying a blocked purchase in a loop
67
+ // must not grow status without bound (PAY-20).
68
+ state.setStatus({
69
+ blockedOperations: [...state.status.blockedOperations, blocked].slice(-MAX_BLOCKED_OPERATIONS)
70
+ });
71
+ emit({
72
+ type: 'environment_blocked',
73
+ productKey,
74
+ environment: config.environment
75
+ });
76
+ };
77
+ const finalizer = createFinalizer({
78
+ provider,
79
+ retry: resolved.retry,
80
+ attemptTimeoutMs: resolved.timeouts.finalizeAttemptMs,
81
+ snapshot: () => state.snapshot,
82
+ commit,
83
+ emit,
84
+ now,
85
+ disposed: () => state.disposed
86
+ });
87
+ const products = createProducts({
88
+ resolved,
89
+ provider,
90
+ emit,
91
+ now
92
+ });
93
+ // Every sync also settles what an earlier session left owed, and re-asks the
94
+ // backend about grants it deferred (FR-039, FR-042, FR-072a).
95
+ const syncer = createSync(state, async () => {
96
+ await finalizer.drain();
97
+ await purchaseFlow.revalidate();
98
+ });
99
+ const purchaseFlow = createPurchaseFlow({
100
+ config,
101
+ resolved,
102
+ provider,
103
+ platform,
104
+ finalizer,
105
+ snapshot: () => state.snapshot,
106
+ commit,
107
+ emit,
108
+ now,
109
+ nextCorrelationId,
110
+ statusKind: () => state.status.kind,
111
+ mayCreateRealTransaction: () => mayCreateRealTransaction(config),
112
+ recordBlockedOperation,
113
+ // `already_owned` re-syncs rather than surfacing an error, which is how a
114
+ // reinstall repairs itself (FR-033); the entitlement arrives via the change
115
+ // signal.
116
+ requestSync: trigger => {
117
+ syncer.sync(trigger).catch(() => undefined);
118
+ },
119
+ runExclusive: operation => purchaseLock.run(operation)
120
+ });
121
+ const subscriptions = createSubscriptions({
122
+ resolved,
123
+ provider,
124
+ snapshot: () => state.snapshot,
125
+ purchase: (productKey, options) => purchaseFlow.purchase(productKey, options)
126
+ });
127
+ const connection = createConnection(state, purchase => {
128
+ purchaseFlow.ingest(purchase).catch(() => undefined);
129
+ });
130
+
131
+ /** A subscription that is a no-op once the engine is cleaned up. */
132
+ function subscriber(listeners) {
133
+ return listener => state.disposed ? () => undefined : listeners.add(listener);
134
+ }
135
+ const engine = {
136
+ async initialize() {
137
+ if (!resolved.enabled) {
138
+ // Selling is off, but entitlements already held stay readable (FR-012):
139
+ // hydration runs here too, or they would read `unknown` forever.
140
+ state.setStatus({
141
+ kind: 'disabled'
142
+ });
143
+ state.hydrate();
144
+ return {
145
+ ok: false,
146
+ error: new PaymentError({
147
+ code: 'PAYMENT_DISABLED',
148
+ message: 'Payments are disabled by configuration',
149
+ operation: 'initialize'
150
+ })
151
+ };
152
+ }
153
+ // Checked before the shortcut below: a cleaned-up engine that had been
154
+ // ready used to answer `ok` while nothing behind it worked any more.
155
+ if (state.disposed) {
156
+ return {
157
+ ok: false,
158
+ error: new PaymentError({
159
+ code: 'PAYMENT_NOT_CONFIGURED',
160
+ message: 'Engine has been cleaned up',
161
+ operation: 'initialize'
162
+ })
163
+ };
164
+ }
165
+ // Already up: answered without reconnecting, or a later sequential call
166
+ // would leave a second set of native listeners behind.
167
+ if (state.status.kind === 'ready') {
168
+ return {
169
+ ok: true
170
+ };
171
+ }
172
+ return initFlight.run(async () => {
173
+ state.setStatus({
174
+ kind: 'connecting'
175
+ });
176
+ // Before connecting, so a warm start answers from the last good sync
177
+ // while the network is still in flight (FR-053).
178
+ state.hydrate();
179
+ const connected = await connection.connect();
180
+ if (!connected.ok) {
181
+ return connected;
182
+ }
183
+ await syncer.sync('initialize');
184
+ // After syncing, so a transaction the store still reports owned has been
185
+ // re-queued first: this catches a purchase the previous session paid for
186
+ // but was killed before acknowledging (FR-042).
187
+ await finalizer.drain();
188
+ return {
189
+ ok: true
190
+ };
191
+ });
192
+ },
193
+ cleanup() {
194
+ state.disposed = true;
195
+ connection.dispose();
196
+ finalizer.dispose();
197
+ state.statusListeners.clear();
198
+ state.entitlementListeners.clear();
199
+ state.pendingListeners.clear();
200
+ // Disarmed last: after this nothing is emitted, and a late store callback
201
+ // is dropped safely (FR-082).
202
+ state.emitter.dispose();
203
+ provider.disconnect().catch(() => undefined);
204
+ },
205
+ getStatus: () => state.status,
206
+ subscribeStatus: subscriber(state.statusListeners),
207
+ /** Synchronous, in-memory, zero I/O — it is read on render paths (PERF-001). */
208
+ getEntitlement(key) {
209
+ return state.entitlements[key] ?? {
210
+ key,
211
+ status: 'unknown',
212
+ sources: [],
213
+ isStale: false
214
+ };
215
+ },
216
+ getAllEntitlements: () => state.entitlements,
217
+ subscribeEntitlements: subscriber(state.entitlementListeners),
218
+ getPendingPurchases: () => state.pending,
219
+ subscribePendingPurchases: subscriber(state.pendingListeners),
220
+ sync: trigger => syncer.sync(trigger),
221
+ async restore() {
222
+ const outcome = await syncer.sync('manual');
223
+ if (!outcome.ok) {
224
+ return {
225
+ ok: false,
226
+ error: outcome.error
227
+ };
228
+ }
229
+ const held = Object.values(state.entitlements).filter(e => e.status === 'entitled').map(e => e.key);
230
+ // "Nothing found" is a distinct success, so an app never claims to have
231
+ // restored purchases that do not exist (FR-061).
232
+ return held.length > 0 ? {
233
+ ok: true,
234
+ restored: true,
235
+ entitlements: held
236
+ } : {
237
+ ok: true,
238
+ restored: false
239
+ };
240
+ },
241
+ getLastSyncedAt: () => state.snapshot.lastSyncedAt,
242
+ async clearLocalData() {
243
+ state.forget();
244
+ // Prices are per account and storefront; a logout drops them too (PAY-12).
245
+ products.invalidate();
246
+ },
247
+ subscribeEvents: listener => state.emitter.subscribe(listener),
248
+ purchase: (productKey, options) => purchaseFlow.purchase(productKey, options),
249
+ consume: ref => finalizer.consume(ref),
250
+ getUnfinalized: () => finalizer.unfinalized(),
251
+ getProducts: productKeys => products.get(productKeys),
252
+ refreshProducts: productKeys => products.refresh(productKeys),
253
+ changePlan: (from, to, mode, options) => subscriptions.changePlan(from, to, mode, options),
254
+ openSubscriptionManagement: productKey => subscriptions.openManagement(productKey),
255
+ confirmPriceChange: productKey => subscriptions.confirmPriceChange(productKey),
256
+ async handleForeground() {
257
+ await connection.recover();
258
+ // Rate-limited inside sync: at most one request per interval however often
259
+ // the app calls this.
260
+ await syncer.sync('foreground');
261
+ }
262
+ };
263
+ attachEngineInternals(engine, {
264
+ resolvedConfig: () => resolved,
265
+ nextCorrelationId,
266
+ emitter: () => state.emitter,
267
+ snapshot: () => state.snapshot,
268
+ commitSnapshot: commit,
269
+ mayCreateRealTransaction: () => mayCreateRealTransaction(config),
270
+ recordBlockedOperation
271
+ });
272
+ return engine;
273
+ }
274
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["currentPlatform","assertEnvironmentSafe","mayCreateRealTransaction","validateConfig","createExclusive","createSingleFlight","PaymentError","createCorrelationId","createSnapshotStore","createConnection","createFinalizer","attachEngineInternals","createProducts","createPurchaseFlow","createEngineState","createSubscriptions","createSync","MAX_BLOCKED_OPERATIONS","createEngine","config","deps","platform","resolved","now","Date","provider","state","snapshotStore","emit","commit","correlationCounter","next","nextCorrelationId","initFlight","purchaseLock","recordBlockedOperation","productKey","blocked","environment","at","setStatus","blockedOperations","status","slice","type","finalizer","retry","attemptTimeoutMs","timeouts","finalizeAttemptMs","snapshot","disposed","products","syncer","drain","purchaseFlow","revalidate","statusKind","kind","requestSync","trigger","sync","catch","undefined","runExclusive","operation","run","subscriptions","purchase","options","connection","ingest","subscriber","listeners","listener","add","engine","initialize","enabled","hydrate","ok","error","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","resolvedConfig","commitSnapshot"],"sourceRoot":"../../../src","sources":["engine/engine.ts"],"mappings":"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","ignoreList":[]}