@chipmobilesdk/rn-payment 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +111 -0
- package/README.md +1 -1
- package/lib/commonjs/adapter/createStoreProvider.js +110 -0
- package/lib/commonjs/adapter/createStoreProvider.js.map +1 -0
- package/lib/commonjs/adapter/iap-adapter.js +393 -0
- package/lib/commonjs/adapter/iap-adapter.js.map +1 -0
- package/lib/commonjs/adapter/iapShapes.js +169 -0
- package/lib/commonjs/adapter/iapShapes.js.map +1 -0
- package/lib/commonjs/adapter/port.js +6 -0
- package/lib/commonjs/adapter/port.js.map +1 -0
- package/lib/commonjs/config/types.js +2 -0
- package/lib/commonjs/config/types.js.map +1 -0
- package/lib/commonjs/config/validate.js +181 -0
- package/lib/commonjs/config/validate.js.map +1 -0
- package/lib/commonjs/core/mutex.js +31 -0
- package/lib/commonjs/core/mutex.js.map +1 -0
- package/lib/commonjs/core/retry.js +37 -0
- package/lib/commonjs/core/retry.js.map +1 -0
- package/lib/commonjs/core/timers.js +207 -0
- package/lib/commonjs/core/timers.js.map +1 -0
- package/lib/commonjs/diagnostics/errors.js +83 -0
- package/lib/commonjs/diagnostics/errors.js.map +1 -0
- package/lib/commonjs/diagnostics/events.js +126 -0
- package/lib/commonjs/diagnostics/events.js.map +1 -0
- package/lib/commonjs/diagnostics/messageKeys.js +70 -0
- package/lib/commonjs/diagnostics/messageKeys.js.map +1 -0
- package/lib/commonjs/engine/connection.js +189 -0
- package/lib/commonjs/engine/connection.js.map +1 -0
- package/lib/commonjs/engine/engine.js +279 -0
- package/lib/commonjs/engine/engine.js.map +1 -0
- package/lib/commonjs/engine/finalize.js +325 -0
- package/lib/commonjs/engine/finalize.js.map +1 -0
- package/lib/commonjs/engine/foreground.js +26 -0
- package/lib/commonjs/engine/foreground.js.map +1 -0
- package/lib/commonjs/engine/internals.js +31 -0
- package/lib/commonjs/engine/internals.js.map +1 -0
- package/lib/commonjs/engine/pending.js +102 -0
- package/lib/commonjs/engine/pending.js.map +1 -0
- package/lib/commonjs/engine/products.js +198 -0
- package/lib/commonjs/engine/products.js.map +1 -0
- package/lib/commonjs/engine/purchase.js +395 -0
- package/lib/commonjs/engine/purchase.js.map +1 -0
- package/lib/commonjs/engine/purchaseFailure.js +77 -0
- package/lib/commonjs/engine/purchaseFailure.js.map +1 -0
- package/lib/commonjs/engine/receiptValidation.js +90 -0
- package/lib/commonjs/engine/receiptValidation.js.map +1 -0
- package/lib/commonjs/engine/state.js +201 -0
- package/lib/commonjs/engine/state.js.map +1 -0
- package/lib/commonjs/engine/subscriptions.js +122 -0
- package/lib/commonjs/engine/subscriptions.js.map +1 -0
- package/lib/commonjs/engine/sync.js +163 -0
- package/lib/commonjs/engine/sync.js.map +1 -0
- package/lib/commonjs/entitlements/aggregate.js +212 -0
- package/lib/commonjs/entitlements/aggregate.js.map +1 -0
- package/lib/commonjs/entitlements/mapping.js +41 -0
- package/lib/commonjs/entitlements/mapping.js.map +1 -0
- package/lib/commonjs/entitlements/policy.js +110 -0
- package/lib/commonjs/entitlements/policy.js.map +1 -0
- package/lib/commonjs/index.js +266 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/persistence/mmkv-store.js +149 -0
- package/lib/commonjs/persistence/mmkv-store.js.map +1 -0
- package/lib/commonjs/persistence/snapshot.js +229 -0
- package/lib/commonjs/persistence/snapshot.js.map +1 -0
- package/lib/commonjs/react/PaymentProvider.js +96 -0
- package/lib/commonjs/react/PaymentProvider.js.map +1 -0
- package/lib/commonjs/react/hooks.js +202 -0
- package/lib/commonjs/react/hooks.js.map +1 -0
- package/lib/commonjs/testing/conformance.js +136 -0
- package/lib/commonjs/testing/conformance.js.map +1 -0
- package/lib/commonjs/testing/fakeStore.js +281 -0
- package/lib/commonjs/testing/fakeStore.js.map +1 -0
- package/lib/commonjs/testing/index.js +45 -0
- package/lib/commonjs/testing/index.js.map +1 -0
- package/lib/module/adapter/createStoreProvider.js +106 -0
- package/lib/module/adapter/createStoreProvider.js.map +1 -0
- package/lib/module/adapter/iap-adapter.js +383 -0
- package/lib/module/adapter/iap-adapter.js.map +1 -0
- package/lib/module/adapter/iapShapes.js +160 -0
- package/lib/module/adapter/iapShapes.js.map +1 -0
- package/lib/module/adapter/port.js +4 -0
- package/lib/module/adapter/port.js.map +1 -0
- package/lib/module/config/types.js +2 -0
- package/lib/module/config/types.js.map +1 -0
- package/lib/module/config/validate.js +175 -0
- package/lib/module/config/validate.js.map +1 -0
- package/lib/module/core/mutex.js +22 -0
- package/lib/module/core/mutex.js.map +1 -0
- package/lib/module/core/retry.js +33 -0
- package/lib/module/core/retry.js.map +1 -0
- package/lib/module/core/timers.js +198 -0
- package/lib/module/core/timers.js.map +1 -0
- package/lib/module/diagnostics/errors.js +76 -0
- package/lib/module/diagnostics/errors.js.map +1 -0
- package/lib/module/diagnostics/events.js +117 -0
- package/lib/module/diagnostics/events.js.map +1 -0
- package/lib/module/diagnostics/messageKeys.js +64 -0
- package/lib/module/diagnostics/messageKeys.js.map +1 -0
- package/lib/module/engine/connection.js +185 -0
- package/lib/module/engine/connection.js.map +1 -0
- package/lib/module/engine/engine.js +274 -0
- package/lib/module/engine/engine.js.map +1 -0
- package/lib/module/engine/finalize.js +322 -0
- package/lib/module/engine/finalize.js.map +1 -0
- package/lib/module/engine/foreground.js +21 -0
- package/lib/module/engine/foreground.js.map +1 -0
- package/lib/module/engine/internals.js +26 -0
- package/lib/module/engine/internals.js.map +1 -0
- package/lib/module/engine/pending.js +95 -0
- package/lib/module/engine/pending.js.map +1 -0
- package/lib/module/engine/products.js +195 -0
- package/lib/module/engine/products.js.map +1 -0
- package/lib/module/engine/purchase.js +390 -0
- package/lib/module/engine/purchase.js.map +1 -0
- package/lib/module/engine/purchaseFailure.js +72 -0
- package/lib/module/engine/purchaseFailure.js.map +1 -0
- package/lib/module/engine/receiptValidation.js +87 -0
- package/lib/module/engine/receiptValidation.js.map +1 -0
- package/lib/module/engine/state.js +196 -0
- package/lib/module/engine/state.js.map +1 -0
- package/lib/module/engine/subscriptions.js +119 -0
- package/lib/module/engine/subscriptions.js.map +1 -0
- package/lib/module/engine/sync.js +158 -0
- package/lib/module/engine/sync.js.map +1 -0
- package/lib/module/entitlements/aggregate.js +204 -0
- package/lib/module/entitlements/aggregate.js.map +1 -0
- package/lib/module/entitlements/mapping.js +35 -0
- package/lib/module/entitlements/mapping.js.map +1 -0
- package/lib/module/entitlements/policy.js +104 -0
- package/lib/module/entitlements/policy.js.map +1 -0
- package/lib/module/index.js +59 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/persistence/mmkv-store.js +144 -0
- package/lib/module/persistence/mmkv-store.js.map +1 -0
- package/lib/module/persistence/snapshot.js +221 -0
- package/lib/module/persistence/snapshot.js.map +1 -0
- package/lib/module/react/PaymentProvider.js +90 -0
- package/lib/module/react/PaymentProvider.js.map +1 -0
- package/lib/module/react/hooks.js +192 -0
- package/lib/module/react/hooks.js.map +1 -0
- package/lib/module/testing/conformance.js +130 -0
- package/lib/module/testing/conformance.js.map +1 -0
- package/lib/module/testing/fakeStore.js +276 -0
- package/lib/module/testing/fakeStore.js.map +1 -0
- package/lib/module/testing/index.js +13 -0
- package/lib/module/testing/index.js.map +1 -0
- package/lib/typescript/commonjs/adapter/createStoreProvider.d.ts +45 -0
- package/lib/typescript/commonjs/adapter/createStoreProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/iap-adapter.d.ts +80 -0
- package/lib/typescript/commonjs/adapter/iap-adapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/iapShapes.d.ts +94 -0
- package/lib/typescript/commonjs/adapter/iapShapes.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/port.d.ts +184 -0
- package/lib/typescript/commonjs/adapter/port.d.ts.map +1 -0
- package/lib/typescript/commonjs/config/types.d.ts +326 -0
- package/lib/typescript/commonjs/config/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/config/validate.d.ts +63 -0
- package/lib/typescript/commonjs/config/validate.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/mutex.d.ts +17 -0
- package/lib/typescript/commonjs/core/mutex.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/retry.d.ts +19 -0
- package/lib/typescript/commonjs/core/retry.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/timers.d.ts +142 -0
- package/lib/typescript/commonjs/core/timers.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/errors.d.ts +55 -0
- package/lib/typescript/commonjs/diagnostics/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/events.d.ts +158 -0
- package/lib/typescript/commonjs/diagnostics/events.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts +54 -0
- package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/connection.d.ts +30 -0
- package/lib/typescript/commonjs/engine/connection.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/engine.d.ts +93 -0
- package/lib/typescript/commonjs/engine/engine.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/finalize.d.ts +53 -0
- package/lib/typescript/commonjs/engine/finalize.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/foreground.d.ts +15 -0
- package/lib/typescript/commonjs/engine/foreground.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/internals.d.ts +28 -0
- package/lib/typescript/commonjs/engine/internals.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/pending.d.ts +51 -0
- package/lib/typescript/commonjs/engine/pending.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/products.d.ts +82 -0
- package/lib/typescript/commonjs/engine/products.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/purchase.d.ts +61 -0
- package/lib/typescript/commonjs/engine/purchase.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/purchaseFailure.d.ts +15 -0
- package/lib/typescript/commonjs/engine/purchaseFailure.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/receiptValidation.d.ts +42 -0
- package/lib/typescript/commonjs/engine/receiptValidation.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/state.d.ts +46 -0
- package/lib/typescript/commonjs/engine/state.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/subscriptions.d.ts +61 -0
- package/lib/typescript/commonjs/engine/subscriptions.d.ts.map +1 -0
- package/lib/typescript/commonjs/engine/sync.d.ts +36 -0
- package/lib/typescript/commonjs/engine/sync.d.ts.map +1 -0
- package/lib/typescript/commonjs/entitlements/aggregate.d.ts +97 -0
- package/lib/typescript/commonjs/entitlements/aggregate.d.ts.map +1 -0
- package/lib/typescript/commonjs/entitlements/mapping.d.ts +27 -0
- package/lib/typescript/commonjs/entitlements/mapping.d.ts.map +1 -0
- package/lib/typescript/commonjs/entitlements/policy.d.ts +75 -0
- package/lib/typescript/commonjs/entitlements/policy.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +44 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/persistence/mmkv-store.d.ts +45 -0
- package/lib/typescript/commonjs/persistence/mmkv-store.d.ts.map +1 -0
- package/lib/typescript/commonjs/persistence/snapshot.d.ts +106 -0
- package/lib/typescript/commonjs/persistence/snapshot.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/PaymentProvider.d.ts +57 -0
- package/lib/typescript/commonjs/react/PaymentProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/react/hooks.d.ts +80 -0
- package/lib/typescript/commonjs/react/hooks.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance.d.ts +41 -0
- package/lib/typescript/commonjs/testing/conformance.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/fakeStore.d.ts +69 -0
- package/lib/typescript/commonjs/testing/fakeStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/index.d.ts +12 -0
- package/lib/typescript/commonjs/testing/index.d.ts.map +1 -0
- package/lib/typescript/module/adapter/createStoreProvider.d.ts +45 -0
- package/lib/typescript/module/adapter/createStoreProvider.d.ts.map +1 -0
- package/lib/typescript/module/adapter/iap-adapter.d.ts +80 -0
- package/lib/typescript/module/adapter/iap-adapter.d.ts.map +1 -0
- package/lib/typescript/module/adapter/iapShapes.d.ts +94 -0
- package/lib/typescript/module/adapter/iapShapes.d.ts.map +1 -0
- package/lib/typescript/module/adapter/port.d.ts +184 -0
- package/lib/typescript/module/adapter/port.d.ts.map +1 -0
- package/lib/typescript/module/config/types.d.ts +326 -0
- package/lib/typescript/module/config/types.d.ts.map +1 -0
- package/lib/typescript/module/config/validate.d.ts +63 -0
- package/lib/typescript/module/config/validate.d.ts.map +1 -0
- package/lib/typescript/module/core/mutex.d.ts +17 -0
- package/lib/typescript/module/core/mutex.d.ts.map +1 -0
- package/lib/typescript/module/core/retry.d.ts +19 -0
- package/lib/typescript/module/core/retry.d.ts.map +1 -0
- package/lib/typescript/module/core/timers.d.ts +142 -0
- package/lib/typescript/module/core/timers.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/errors.d.ts +55 -0
- package/lib/typescript/module/diagnostics/errors.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/events.d.ts +158 -0
- package/lib/typescript/module/diagnostics/events.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/messageKeys.d.ts +54 -0
- package/lib/typescript/module/diagnostics/messageKeys.d.ts.map +1 -0
- package/lib/typescript/module/engine/connection.d.ts +30 -0
- package/lib/typescript/module/engine/connection.d.ts.map +1 -0
- package/lib/typescript/module/engine/engine.d.ts +93 -0
- package/lib/typescript/module/engine/engine.d.ts.map +1 -0
- package/lib/typescript/module/engine/finalize.d.ts +53 -0
- package/lib/typescript/module/engine/finalize.d.ts.map +1 -0
- package/lib/typescript/module/engine/foreground.d.ts +15 -0
- package/lib/typescript/module/engine/foreground.d.ts.map +1 -0
- package/lib/typescript/module/engine/internals.d.ts +28 -0
- package/lib/typescript/module/engine/internals.d.ts.map +1 -0
- package/lib/typescript/module/engine/pending.d.ts +51 -0
- package/lib/typescript/module/engine/pending.d.ts.map +1 -0
- package/lib/typescript/module/engine/products.d.ts +82 -0
- package/lib/typescript/module/engine/products.d.ts.map +1 -0
- package/lib/typescript/module/engine/purchase.d.ts +61 -0
- package/lib/typescript/module/engine/purchase.d.ts.map +1 -0
- package/lib/typescript/module/engine/purchaseFailure.d.ts +15 -0
- package/lib/typescript/module/engine/purchaseFailure.d.ts.map +1 -0
- package/lib/typescript/module/engine/receiptValidation.d.ts +42 -0
- package/lib/typescript/module/engine/receiptValidation.d.ts.map +1 -0
- package/lib/typescript/module/engine/state.d.ts +46 -0
- package/lib/typescript/module/engine/state.d.ts.map +1 -0
- package/lib/typescript/module/engine/subscriptions.d.ts +61 -0
- package/lib/typescript/module/engine/subscriptions.d.ts.map +1 -0
- package/lib/typescript/module/engine/sync.d.ts +36 -0
- package/lib/typescript/module/engine/sync.d.ts.map +1 -0
- package/lib/typescript/module/entitlements/aggregate.d.ts +97 -0
- package/lib/typescript/module/entitlements/aggregate.d.ts.map +1 -0
- package/lib/typescript/module/entitlements/mapping.d.ts +27 -0
- package/lib/typescript/module/entitlements/mapping.d.ts.map +1 -0
- package/lib/typescript/module/entitlements/policy.d.ts +75 -0
- package/lib/typescript/module/entitlements/policy.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +44 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/persistence/mmkv-store.d.ts +45 -0
- package/lib/typescript/module/persistence/mmkv-store.d.ts.map +1 -0
- package/lib/typescript/module/persistence/snapshot.d.ts +106 -0
- package/lib/typescript/module/persistence/snapshot.d.ts.map +1 -0
- package/lib/typescript/module/react/PaymentProvider.d.ts +57 -0
- package/lib/typescript/module/react/PaymentProvider.d.ts.map +1 -0
- package/lib/typescript/module/react/hooks.d.ts +80 -0
- package/lib/typescript/module/react/hooks.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance.d.ts +41 -0
- package/lib/typescript/module/testing/conformance.d.ts.map +1 -0
- package/lib/typescript/module/testing/fakeStore.d.ts +69 -0
- package/lib/typescript/module/testing/fakeStore.d.ts.map +1 -0
- package/lib/typescript/module/testing/index.d.ts +12 -0
- package/lib/typescript/module/testing/index.d.ts.map +1 -0
- package/package.json +49 -13
|
@@ -0,0 +1 @@
|
|
|
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":"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","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":[]}
|