@metamask/ramps-controller 20.3.0 → 22.0.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 +42 -1
- package/dist/{NeoBankService-method-action-types.d.mts → NeoBankService-method-action-types.d.ts} +2 -2
- package/dist/NeoBankService-method-action-types.d.ts.map +1 -0
- package/dist/{NeoBankService-method-action-types.mjs → NeoBankService-method-action-types.js} +1 -1
- package/dist/NeoBankService-method-action-types.js.map +1 -0
- package/dist/{NeoBankService.d.cts → NeoBankService.d.ts} +8 -8
- package/dist/NeoBankService.d.ts.map +1 -0
- package/dist/NeoBankService.js +380 -0
- package/dist/NeoBankService.js.map +1 -0
- package/dist/{RampsController-method-action-types.d.mts → RampsController-method-action-types.d.ts} +18 -3
- package/dist/RampsController-method-action-types.d.ts.map +1 -0
- package/dist/{TransakService-method-action-types.mjs → RampsController-method-action-types.js} +1 -1
- package/dist/RampsController-method-action-types.js.map +1 -0
- package/dist/{RampsController.d.mts → RampsController.d.ts} +86 -23
- package/dist/RampsController.d.ts.map +1 -0
- package/dist/{RampsController.mjs → RampsController.js} +976 -634
- package/dist/RampsController.js.map +1 -0
- package/dist/{RampsService-method-action-types.d.cts → RampsService-method-action-types.d.ts} +2 -2
- package/dist/RampsService-method-action-types.d.ts.map +1 -0
- package/dist/{RampsService-method-action-types.mjs → RampsService-method-action-types.js} +1 -1
- package/dist/RampsService-method-action-types.js.map +1 -0
- package/dist/{RampsService.d.mts → RampsService.d.ts} +11 -5
- package/dist/RampsService.d.ts.map +1 -0
- package/dist/{RampsService.mjs → RampsService.js} +159 -147
- package/dist/RampsService.js.map +1 -0
- package/dist/{RequestCache.d.mts → RequestCache.d.ts} +3 -3
- package/dist/RequestCache.d.ts.map +1 -0
- package/dist/{RequestCache.mjs → RequestCache.js} +1 -1
- package/dist/RequestCache.js.map +1 -0
- package/dist/{TransakService-method-action-types.d.cts → TransakService-method-action-types.d.ts} +2 -2
- package/dist/TransakService-method-action-types.d.ts.map +1 -0
- package/dist/{RampsController-method-action-types.mjs → TransakService-method-action-types.js} +1 -1
- package/dist/TransakService-method-action-types.js.map +1 -0
- package/dist/{TransakService.d.cts → TransakService.d.ts} +6 -6
- package/dist/TransakService.d.ts.map +1 -0
- package/dist/TransakService.js +746 -0
- package/dist/TransakService.js.map +1 -0
- package/dist/{autoramp-types.d.cts → autoramp-types.d.ts} +1 -1
- package/dist/autoramp-types.d.ts.map +1 -0
- package/dist/autoramp-types.js +2 -0
- package/dist/autoramp-types.js.map +1 -0
- package/dist/{autorampAccount.d.mts → autorampAccount.d.ts} +3 -3
- package/dist/autorampAccount.d.ts.map +1 -0
- package/dist/{autorampAccount.mjs → autorampAccount.js} +1 -1
- package/dist/autorampAccount.js.map +1 -0
- package/dist/{client-identity.d.mts → client-identity.d.ts} +1 -1
- package/dist/client-identity.d.ts.map +1 -0
- package/dist/{client-identity.mjs → client-identity.js} +1 -1
- package/dist/client-identity.js.map +1 -0
- package/dist/{errorNormalization.d.mts → errorNormalization.d.ts} +1 -1
- package/dist/errorNormalization.d.ts.map +1 -0
- package/dist/{errorNormalization.mjs → errorNormalization.js} +1 -1
- package/dist/errorNormalization.js.map +1 -0
- package/dist/{featureFlags.d.mts → featureFlags.d.ts} +2 -2
- package/dist/featureFlags.d.ts.map +1 -0
- package/dist/{featureFlags.mjs → featureFlags.js} +1 -1
- package/dist/featureFlags.js.map +1 -0
- package/dist/{index.d.mts → index.d.ts} +37 -35
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/order-syncing/constants.d.ts +23 -0
- package/dist/order-syncing/constants.d.ts.map +1 -0
- package/dist/order-syncing/constants.js +23 -0
- package/dist/order-syncing/constants.js.map +1 -0
- package/dist/order-syncing/controller-integration.d.ts +91 -0
- package/dist/order-syncing/controller-integration.d.ts.map +1 -0
- package/dist/order-syncing/controller-integration.js +364 -0
- package/dist/order-syncing/controller-integration.js.map +1 -0
- package/dist/order-syncing/index.d.ts +7 -0
- package/dist/order-syncing/index.d.ts.map +1 -0
- package/dist/order-syncing/index.js +5 -0
- package/dist/order-syncing/index.js.map +1 -0
- package/dist/order-syncing/sync-utils.d.ts +9 -0
- package/dist/order-syncing/sync-utils.d.ts.map +1 -0
- package/dist/order-syncing/sync-utils.js +27 -0
- package/dist/order-syncing/sync-utils.js.map +1 -0
- package/dist/order-syncing/types.d.ts +66 -0
- package/dist/order-syncing/types.d.ts.map +1 -0
- package/dist/order-syncing/types.js +2 -0
- package/dist/order-syncing/types.js.map +1 -0
- package/dist/order-syncing/utils.d.ts +83 -0
- package/dist/order-syncing/utils.d.ts.map +1 -0
- package/dist/order-syncing/utils.js +144 -0
- package/dist/order-syncing/utils.js.map +1 -0
- package/dist/{orderStatus.d.mts → orderStatus.d.ts} +2 -2
- package/dist/orderStatus.d.ts.map +1 -0
- package/dist/{orderStatus.mjs → orderStatus.js} +2 -2
- package/dist/orderStatus.js.map +1 -0
- package/dist/{ownership-message.d.cts → ownership-message.d.ts} +1 -1
- package/dist/ownership-message.d.ts.map +1 -0
- package/dist/{ownership-message.mjs → ownership-message.js} +1 -1
- package/dist/ownership-message.js.map +1 -0
- package/dist/{paymentMethodMerge.d.cts → paymentMethodMerge.d.ts} +2 -2
- package/dist/paymentMethodMerge.d.ts.map +1 -0
- package/dist/{paymentMethodMerge.mjs → paymentMethodMerge.js} +1 -1
- package/dist/paymentMethodMerge.js.map +1 -0
- package/dist/{providerAvailability.d.cts → providerAvailability.d.ts} +2 -2
- package/dist/providerAvailability.d.ts.map +1 -0
- package/dist/{providerAvailability.mjs → providerAvailability.js} +1 -1
- package/dist/providerAvailability.js.map +1 -0
- package/dist/{quoteClassification.d.cts → quoteClassification.d.ts} +2 -2
- package/dist/quoteClassification.d.ts.map +1 -0
- package/dist/{quoteClassification.mjs → quoteClassification.js} +1 -1
- package/dist/quoteClassification.js.map +1 -0
- package/dist/{rampsErrorCodes.d.cts → rampsErrorCodes.d.ts} +2 -2
- package/dist/rampsErrorCodes.d.ts.map +1 -0
- package/dist/{rampsErrorCodes.mjs → rampsErrorCodes.js} +1 -1
- package/dist/rampsErrorCodes.js.map +1 -0
- package/dist/{selectors.d.mts → selectors.d.ts} +3 -3
- package/dist/selectors.d.ts.map +1 -0
- package/dist/{selectors.mjs → selectors.js} +2 -2
- package/dist/selectors.js.map +1 -0
- package/dist/{transakApiErrorUtils.d.cts → transakApiErrorUtils.d.ts} +1 -1
- package/dist/transakApiErrorUtils.d.ts.map +1 -0
- package/dist/{transakApiErrorUtils.mjs → transakApiErrorUtils.js} +3 -3
- package/dist/transakApiErrorUtils.js.map +1 -0
- package/dist/{transakErrorCodes.d.cts → transakErrorCodes.d.ts} +3 -3
- package/dist/transakErrorCodes.d.ts.map +1 -0
- package/dist/{transakErrorCodes.mjs → transakErrorCodes.js} +1 -1
- package/dist/transakErrorCodes.js.map +1 -0
- package/dist/{wallet-registration-machine.d.cts → wallet-registration-machine.d.ts} +1 -1
- package/dist/wallet-registration-machine.d.ts.map +1 -0
- package/dist/{wallet-registration-machine.mjs → wallet-registration-machine.js} +1 -1
- package/dist/wallet-registration-machine.js.map +1 -0
- package/dist/{wallet-registration-service.d.cts → wallet-registration-service.d.ts} +1 -1
- package/dist/wallet-registration-service.d.ts.map +1 -0
- package/dist/{wallet-registration-service.mjs → wallet-registration-service.js} +60 -69
- package/dist/wallet-registration-service.js.map +1 -0
- package/package.json +18 -21
- package/dist/NeoBankService-method-action-types.cjs +0 -7
- package/dist/NeoBankService-method-action-types.cjs.map +0 -1
- package/dist/NeoBankService-method-action-types.d.cts +0 -126
- package/dist/NeoBankService-method-action-types.d.cts.map +0 -1
- package/dist/NeoBankService-method-action-types.d.mts.map +0 -1
- package/dist/NeoBankService-method-action-types.mjs.map +0 -1
- package/dist/NeoBankService.cjs +0 -387
- package/dist/NeoBankService.cjs.map +0 -1
- package/dist/NeoBankService.d.cts.map +0 -1
- package/dist/NeoBankService.d.mts +0 -191
- package/dist/NeoBankService.d.mts.map +0 -1
- package/dist/NeoBankService.mjs +0 -379
- package/dist/NeoBankService.mjs.map +0 -1
- package/dist/RampsController-method-action-types.cjs +0 -7
- package/dist/RampsController-method-action-types.cjs.map +0 -1
- package/dist/RampsController-method-action-types.d.cts +0 -758
- package/dist/RampsController-method-action-types.d.cts.map +0 -1
- package/dist/RampsController-method-action-types.d.mts.map +0 -1
- package/dist/RampsController-method-action-types.mjs.map +0 -1
- package/dist/RampsController.cjs +0 -2799
- package/dist/RampsController.cjs.map +0 -1
- package/dist/RampsController.d.cts +0 -968
- package/dist/RampsController.d.cts.map +0 -1
- package/dist/RampsController.d.mts.map +0 -1
- package/dist/RampsController.mjs.map +0 -1
- package/dist/RampsService-method-action-types.cjs +0 -7
- package/dist/RampsService-method-action-types.cjs.map +0 -1
- package/dist/RampsService-method-action-types.d.cts.map +0 -1
- package/dist/RampsService-method-action-types.d.mts +0 -171
- package/dist/RampsService-method-action-types.d.mts.map +0 -1
- package/dist/RampsService-method-action-types.mjs.map +0 -1
- package/dist/RampsService.cjs +0 -708
- package/dist/RampsService.cjs.map +0 -1
- package/dist/RampsService.d.cts +0 -944
- package/dist/RampsService.d.cts.map +0 -1
- package/dist/RampsService.d.mts.map +0 -1
- package/dist/RampsService.mjs.map +0 -1
- package/dist/RequestCache.cjs +0 -103
- package/dist/RequestCache.cjs.map +0 -1
- package/dist/RequestCache.d.cts +0 -110
- package/dist/RequestCache.d.cts.map +0 -1
- package/dist/RequestCache.d.mts.map +0 -1
- package/dist/RequestCache.mjs.map +0 -1
- package/dist/TransakService-method-action-types.cjs +0 -7
- package/dist/TransakService-method-action-types.cjs.map +0 -1
- package/dist/TransakService-method-action-types.d.cts.map +0 -1
- package/dist/TransakService-method-action-types.d.mts +0 -140
- package/dist/TransakService-method-action-types.d.mts.map +0 -1
- package/dist/TransakService-method-action-types.mjs.map +0 -1
- package/dist/TransakService.cjs +0 -743
- package/dist/TransakService.cjs.map +0 -1
- package/dist/TransakService.d.cts.map +0 -1
- package/dist/TransakService.d.mts +0 -370
- package/dist/TransakService.d.mts.map +0 -1
- package/dist/TransakService.mjs +0 -734
- package/dist/TransakService.mjs.map +0 -1
- package/dist/autoramp-types.cjs +0 -3
- package/dist/autoramp-types.cjs.map +0 -1
- package/dist/autoramp-types.d.cts.map +0 -1
- package/dist/autoramp-types.d.mts +0 -22
- package/dist/autoramp-types.d.mts.map +0 -1
- package/dist/autoramp-types.mjs +0 -2
- package/dist/autoramp-types.mjs.map +0 -1
- package/dist/autorampAccount.cjs +0 -155
- package/dist/autorampAccount.cjs.map +0 -1
- package/dist/autorampAccount.d.cts +0 -126
- package/dist/autorampAccount.d.cts.map +0 -1
- package/dist/autorampAccount.d.mts.map +0 -1
- package/dist/autorampAccount.mjs.map +0 -1
- package/dist/client-identity.cjs +0 -28
- package/dist/client-identity.cjs.map +0 -1
- package/dist/client-identity.d.cts +0 -24
- package/dist/client-identity.d.cts.map +0 -1
- package/dist/client-identity.d.mts.map +0 -1
- package/dist/client-identity.mjs.map +0 -1
- package/dist/errorNormalization.cjs +0 -84
- package/dist/errorNormalization.cjs.map +0 -1
- package/dist/errorNormalization.d.cts +0 -56
- package/dist/errorNormalization.d.cts.map +0 -1
- package/dist/errorNormalization.d.mts.map +0 -1
- package/dist/errorNormalization.mjs.map +0 -1
- package/dist/featureFlags.cjs +0 -144
- package/dist/featureFlags.cjs.map +0 -1
- package/dist/featureFlags.d.cts +0 -82
- package/dist/featureFlags.d.cts.map +0 -1
- package/dist/featureFlags.d.mts.map +0 -1
- package/dist/featureFlags.mjs.map +0 -1
- package/dist/index.cjs +0 -82
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -35
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs +0 -18
- package/dist/index.mjs.map +0 -1
- package/dist/orderStatus.cjs +0 -34
- package/dist/orderStatus.cjs.map +0 -1
- package/dist/orderStatus.d.cts +0 -18
- package/dist/orderStatus.d.cts.map +0 -1
- package/dist/orderStatus.d.mts.map +0 -1
- package/dist/orderStatus.mjs.map +0 -1
- package/dist/ownership-message.cjs +0 -26
- package/dist/ownership-message.cjs.map +0 -1
- package/dist/ownership-message.d.cts.map +0 -1
- package/dist/ownership-message.d.mts +0 -22
- package/dist/ownership-message.d.mts.map +0 -1
- package/dist/ownership-message.mjs.map +0 -1
- package/dist/paymentMethodMerge.cjs +0 -51
- package/dist/paymentMethodMerge.cjs.map +0 -1
- package/dist/paymentMethodMerge.d.cts.map +0 -1
- package/dist/paymentMethodMerge.d.mts +0 -26
- package/dist/paymentMethodMerge.d.mts.map +0 -1
- package/dist/paymentMethodMerge.mjs.map +0 -1
- package/dist/providerAvailability.cjs +0 -134
- package/dist/providerAvailability.cjs.map +0 -1
- package/dist/providerAvailability.d.cts.map +0 -1
- package/dist/providerAvailability.d.mts +0 -101
- package/dist/providerAvailability.d.mts.map +0 -1
- package/dist/providerAvailability.mjs.map +0 -1
- package/dist/quoteClassification.cjs +0 -44
- package/dist/quoteClassification.cjs.map +0 -1
- package/dist/quoteClassification.d.cts.map +0 -1
- package/dist/quoteClassification.d.mts +0 -33
- package/dist/quoteClassification.d.mts.map +0 -1
- package/dist/quoteClassification.mjs.map +0 -1
- package/dist/rampsErrorCodes.cjs +0 -11
- package/dist/rampsErrorCodes.cjs.map +0 -1
- package/dist/rampsErrorCodes.d.cts.map +0 -1
- package/dist/rampsErrorCodes.d.mts +0 -9
- package/dist/rampsErrorCodes.d.mts.map +0 -1
- package/dist/rampsErrorCodes.mjs.map +0 -1
- package/dist/selectors.cjs +0 -85
- package/dist/selectors.cjs.map +0 -1
- package/dist/selectors.d.cts +0 -78
- package/dist/selectors.d.cts.map +0 -1
- package/dist/selectors.d.mts.map +0 -1
- package/dist/selectors.mjs.map +0 -1
- package/dist/transakApiErrorUtils.cjs +0 -15
- package/dist/transakApiErrorUtils.cjs.map +0 -1
- package/dist/transakApiErrorUtils.d.cts.map +0 -1
- package/dist/transakApiErrorUtils.d.mts +0 -3
- package/dist/transakApiErrorUtils.d.mts.map +0 -1
- package/dist/transakApiErrorUtils.mjs.map +0 -1
- package/dist/transakErrorCodes.cjs +0 -14
- package/dist/transakErrorCodes.cjs.map +0 -1
- package/dist/transakErrorCodes.d.cts.map +0 -1
- package/dist/transakErrorCodes.d.mts +0 -12
- package/dist/transakErrorCodes.d.mts.map +0 -1
- package/dist/transakErrorCodes.mjs.map +0 -1
- package/dist/wallet-registration-machine.cjs +0 -144
- package/dist/wallet-registration-machine.cjs.map +0 -1
- package/dist/wallet-registration-machine.d.cts.map +0 -1
- package/dist/wallet-registration-machine.d.mts +0 -81
- package/dist/wallet-registration-machine.d.mts.map +0 -1
- package/dist/wallet-registration-machine.mjs.map +0 -1
- package/dist/wallet-registration-service.cjs +0 -351
- package/dist/wallet-registration-service.cjs.map +0 -1
- package/dist/wallet-registration-service.d.cts.map +0 -1
- package/dist/wallet-registration-service.d.mts +0 -144
- package/dist/wallet-registration-service.d.mts.map +0 -1
- package/dist/wallet-registration-service.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/order-syncing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;OAEG;IACH,CAAC,wBAAwB,CAAC,EAAE,OAAO,oBAAoB,CAAC;IACxD;;OAEG;IACH,CAAC,EAAE,UAAU,CAAC;IACd;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE;QAAE,MAAM,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IACpC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,2BAA2B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,6BAA6B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C;;OAEG;IACH,uBAAuB,EAAE,MAAM,UAAU,EAAE,CAAC;IAC5C;;OAEG;IACH,+BAA+B,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;CACjE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;IACzD,YAAY,EAAE,MAAM,wBAAwB,CAAC;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/order-syncing/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TraceCallback } from '@metamask/controller-utils';\n\nimport type { RampsControllerMessenger } from '../RampsController.js';\nimport type { RampsOrder } from '../RampsService.js';\nimport type {\n USER_STORAGE_VERSION,\n USER_STORAGE_VERSION_KEY,\n} from './constants.js';\n\n/**\n * Compact User Storage entry wrapping a full {@link RampsOrder}.\n */\nexport type UserStorageRampsOrderEntry = {\n /**\n * Schema version — allows upgrade/downgrade handling in the future.\n */\n [USER_STORAGE_VERSION_KEY]: typeof USER_STORAGE_VERSION;\n /**\n * Full V2 ramps order payload.\n */\n o: RampsOrder;\n /**\n * Last-updated timestamp used for conflict resolution.\n */\n lu?: number;\n /**\n * Soft-delete tombstone timestamp. When set, the order should be removed locally.\n */\n dt?: number;\n};\n\n/**\n * {@link RampsOrder} extended with sync metadata used for conflict resolution.\n *\n * `lastUpdatedAt` is persisted on local controller orders so last-write-wins can\n * compare against remote `lu` after local edits. `deletedAt` is remote-only and\n * must be stripped before writing into {@link RampsController} state.\n */\nexport type SyncRampsOrder = RampsOrder & {\n lastUpdatedAt?: number;\n deletedAt?: number;\n};\n\n/**\n * Minimal controller surface required by order syncing.\n */\nexport type OrderSyncingController = {\n state: { orders: SyncRampsOrder[] };\n readonly isOrderSyncingInProgress: boolean;\n setIsOrderSyncingInProgress: (value: boolean) => void;\n setIsApplyingOrderSyncChanges: (value: boolean) => void;\n addOrder: (order: RampsOrder) => void;\n removeOrder: (providerOrderId: string) => void;\n /**\n * Returns orders deleted locally while a full sync held the semaphore.\n */\n getPendingRemoteDeletes: () => RampsOrder[];\n /**\n * Clears pending deletes after their remote tombstones are persisted.\n */\n acknowledgePendingRemoteDeletes: (orders: RampsOrder[]) => void;\n};\n\n/**\n * Options for ramps order syncing operations.\n */\nexport type OrderSyncingOptions = {\n getRampsControllerInstance: () => OrderSyncingController;\n getMessenger: () => RampsControllerMessenger;\n trace?: TraceCallback;\n};\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { RampsOrder } from '../RampsService.js';
|
|
2
|
+
import type { SyncRampsOrder, UserStorageRampsOrderEntry } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Converts persisted ramps timestamps to epoch milliseconds.
|
|
5
|
+
*
|
|
6
|
+
* Portfolio and older clients may persist ISO strings or numeric strings even
|
|
7
|
+
* though the controller's public order type uses numbers.
|
|
8
|
+
*
|
|
9
|
+
* @param value - A timestamp from a local or remote order.
|
|
10
|
+
* @returns Epoch milliseconds, or zero when the value is invalid.
|
|
11
|
+
*/
|
|
12
|
+
export declare function normalizeCreatedAt(value: unknown): number;
|
|
13
|
+
/**
|
|
14
|
+
* Creates a unique storage key for a ramps order.
|
|
15
|
+
* Mirrors {@link getInternalOrderCode} without importing the controller module
|
|
16
|
+
* (avoids circular dependencies).
|
|
17
|
+
*
|
|
18
|
+
* Prefers a non-empty `/orders/<code>` suffix; otherwise falls back to a trimmed
|
|
19
|
+
* `providerOrderId`. An empty `/orders/` segment does not win over a real
|
|
20
|
+
* provider order id.
|
|
21
|
+
*
|
|
22
|
+
* @param order - Order fields used to derive the internal order code.
|
|
23
|
+
* @returns Storage entry key under the rampsOrders feature.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createOrderStorageKey(order: Pick<RampsOrder, 'id' | 'providerOrderId'>): string;
|
|
26
|
+
/**
|
|
27
|
+
* Whether an order has the minimum fields required for syncing.
|
|
28
|
+
*
|
|
29
|
+
* @param order - The order to validate.
|
|
30
|
+
* @returns True when the order can be synced.
|
|
31
|
+
*/
|
|
32
|
+
export declare function isSyncableOrder(order: Pick<RampsOrder, 'id' | 'providerOrderId'>): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Strips bank-transfer / PII-heavy payment details before persisting to User
|
|
35
|
+
* Storage. Local controller state may still keep `paymentDetails`.
|
|
36
|
+
*
|
|
37
|
+
* @param order - Order that may include payment details.
|
|
38
|
+
* @returns Order body safe for remote sync payloads.
|
|
39
|
+
*/
|
|
40
|
+
export declare function stripPaymentDetailsForRemoteStorage(order: RampsOrder): RampsOrder;
|
|
41
|
+
/**
|
|
42
|
+
* Maps a ramps order (with optional sync metadata) to a User Storage entry.
|
|
43
|
+
*
|
|
44
|
+
* @param order - The order to map.
|
|
45
|
+
* @returns A User Storage entry ready to be JSON-stringified.
|
|
46
|
+
*/
|
|
47
|
+
export declare function mapRampsOrderToUserStorageEntry(order: SyncRampsOrder): UserStorageRampsOrderEntry;
|
|
48
|
+
/**
|
|
49
|
+
* Maps a User Storage entry back to a sync-aware ramps order.
|
|
50
|
+
*
|
|
51
|
+
* @param entry - The User Storage entry.
|
|
52
|
+
* @returns A {@link SyncRampsOrder} for merge logic.
|
|
53
|
+
*/
|
|
54
|
+
export declare function mapUserStorageEntryToRampsOrder(entry: UserStorageRampsOrderEntry): SyncRampsOrder;
|
|
55
|
+
/**
|
|
56
|
+
* Strips sync metadata for equality checks and remote payload shaping.
|
|
57
|
+
*
|
|
58
|
+
* @param order - Order that may include sync metadata.
|
|
59
|
+
* @returns A plain {@link RampsOrder} without sync fields.
|
|
60
|
+
*/
|
|
61
|
+
export declare function stripSyncMetadata(order: SyncRampsOrder): RampsOrder;
|
|
62
|
+
/**
|
|
63
|
+
* Strips remote tombstone metadata while preserving `lastUpdatedAt` so local
|
|
64
|
+
* controller state can participate in last-write-wins conflict resolution.
|
|
65
|
+
*
|
|
66
|
+
* @param order - Order that may include sync metadata.
|
|
67
|
+
* @returns Order safe to persist locally (no `deletedAt`).
|
|
68
|
+
*/
|
|
69
|
+
export declare function stripDeletedAt(order: SyncRampsOrder): SyncRampsOrder;
|
|
70
|
+
/**
|
|
71
|
+
* Deep-compares two ramps orders by their syncable bodies. Sync metadata
|
|
72
|
+
* (`lastUpdatedAt` / `deletedAt`) and local-only `paymentDetails` are excluded:
|
|
73
|
+
* `paymentDetails` is never persisted remotely, so a local order that carries
|
|
74
|
+
* it must still compare equal to its remote copy. Otherwise such orders would
|
|
75
|
+
* look changed on every sync and, with local-wins-on-tie conflict resolution,
|
|
76
|
+
* be re-uploaded indefinitely.
|
|
77
|
+
*
|
|
78
|
+
* @param a - First order.
|
|
79
|
+
* @param b - Second order.
|
|
80
|
+
* @returns True when the syncable order payloads are equal.
|
|
81
|
+
*/
|
|
82
|
+
export declare function areOrdersEqual(a: SyncRampsOrder | RampsOrder, b: SyncRampsOrder | RampsOrder): boolean;
|
|
83
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/order-syncing/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgBzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,iBAAiB,CAAC,GAChD,MAAM,CASR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,iBAAiB,CAAC,GAChD,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,UAAU,GAChB,UAAU,CAGZ;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,cAAc,GACpB,0BAA0B,CAa5B;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,0BAA0B,GAChC,cAAc,CAOhB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAOnE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAGpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,cAAc,GAAG,UAAU,EAC9B,CAAC,EAAE,cAAc,GAAG,UAAU,GAC7B,OAAO,CAYT"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import deepEqual from 'fast-deep-equal';
|
|
2
|
+
import { USER_STORAGE_VERSION, USER_STORAGE_VERSION_KEY } from './constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Converts persisted ramps timestamps to epoch milliseconds.
|
|
5
|
+
*
|
|
6
|
+
* Portfolio and older clients may persist ISO strings or numeric strings even
|
|
7
|
+
* though the controller's public order type uses numbers.
|
|
8
|
+
*
|
|
9
|
+
* @param value - A timestamp from a local or remote order.
|
|
10
|
+
* @returns Epoch milliseconds, or zero when the value is invalid.
|
|
11
|
+
*/
|
|
12
|
+
export function normalizeCreatedAt(value) {
|
|
13
|
+
if (typeof value === 'number') {
|
|
14
|
+
return Number.isFinite(value) ? value : 0;
|
|
15
|
+
}
|
|
16
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
const numericValue = Number(value);
|
|
20
|
+
if (Number.isFinite(numericValue)) {
|
|
21
|
+
return numericValue;
|
|
22
|
+
}
|
|
23
|
+
const parsedValue = Date.parse(value);
|
|
24
|
+
return Number.isNaN(parsedValue) ? 0 : parsedValue;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Creates a unique storage key for a ramps order.
|
|
28
|
+
* Mirrors {@link getInternalOrderCode} without importing the controller module
|
|
29
|
+
* (avoids circular dependencies).
|
|
30
|
+
*
|
|
31
|
+
* Prefers a non-empty `/orders/<code>` suffix; otherwise falls back to a trimmed
|
|
32
|
+
* `providerOrderId`. An empty `/orders/` segment does not win over a real
|
|
33
|
+
* provider order id.
|
|
34
|
+
*
|
|
35
|
+
* @param order - Order fields used to derive the internal order code.
|
|
36
|
+
* @returns Storage entry key under the rampsOrders feature.
|
|
37
|
+
*/
|
|
38
|
+
export function createOrderStorageKey(order) {
|
|
39
|
+
const { id, providerOrderId } = order;
|
|
40
|
+
if (id?.includes('/orders/')) {
|
|
41
|
+
const code = id.split('/orders/')[1]?.trim();
|
|
42
|
+
if (code) {
|
|
43
|
+
return code;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return providerOrderId?.trim() ?? '';
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Whether an order has the minimum fields required for syncing.
|
|
50
|
+
*
|
|
51
|
+
* @param order - The order to validate.
|
|
52
|
+
* @returns True when the order can be synced.
|
|
53
|
+
*/
|
|
54
|
+
export function isSyncableOrder(order) {
|
|
55
|
+
return createOrderStorageKey(order).length > 0;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Strips bank-transfer / PII-heavy payment details before persisting to User
|
|
59
|
+
* Storage. Local controller state may still keep `paymentDetails`.
|
|
60
|
+
*
|
|
61
|
+
* @param order - Order that may include payment details.
|
|
62
|
+
* @returns Order body safe for remote sync payloads.
|
|
63
|
+
*/
|
|
64
|
+
export function stripPaymentDetailsForRemoteStorage(order) {
|
|
65
|
+
const { paymentDetails: _paymentDetails, ...safeOrder } = order;
|
|
66
|
+
return safeOrder;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Maps a ramps order (with optional sync metadata) to a User Storage entry.
|
|
70
|
+
*
|
|
71
|
+
* @param order - The order to map.
|
|
72
|
+
* @returns A User Storage entry ready to be JSON-stringified.
|
|
73
|
+
*/
|
|
74
|
+
export function mapRampsOrderToUserStorageEntry(order) {
|
|
75
|
+
const { lastUpdatedAt, deletedAt, ...rampsOrder } = order;
|
|
76
|
+
const now = Date.now();
|
|
77
|
+
return {
|
|
78
|
+
[USER_STORAGE_VERSION_KEY]: USER_STORAGE_VERSION,
|
|
79
|
+
o: {
|
|
80
|
+
...stripPaymentDetailsForRemoteStorage(rampsOrder),
|
|
81
|
+
createdAt: normalizeCreatedAt(rampsOrder.createdAt),
|
|
82
|
+
},
|
|
83
|
+
lu: lastUpdatedAt ?? now,
|
|
84
|
+
...(deletedAt ? { dt: deletedAt } : {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Maps a User Storage entry back to a sync-aware ramps order.
|
|
89
|
+
*
|
|
90
|
+
* @param entry - The User Storage entry.
|
|
91
|
+
* @returns A {@link SyncRampsOrder} for merge logic.
|
|
92
|
+
*/
|
|
93
|
+
export function mapUserStorageEntryToRampsOrder(entry) {
|
|
94
|
+
return {
|
|
95
|
+
...entry.o,
|
|
96
|
+
createdAt: normalizeCreatedAt(entry.o.createdAt),
|
|
97
|
+
...(entry.lu ? { lastUpdatedAt: entry.lu } : {}),
|
|
98
|
+
...(entry.dt ? { deletedAt: entry.dt } : {}),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Strips sync metadata for equality checks and remote payload shaping.
|
|
103
|
+
*
|
|
104
|
+
* @param order - Order that may include sync metadata.
|
|
105
|
+
* @returns A plain {@link RampsOrder} without sync fields.
|
|
106
|
+
*/
|
|
107
|
+
export function stripSyncMetadata(order) {
|
|
108
|
+
const { lastUpdatedAt: _lastUpdatedAt, deletedAt: _deletedAt, ...rampsOrder } = order;
|
|
109
|
+
return rampsOrder;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Strips remote tombstone metadata while preserving `lastUpdatedAt` so local
|
|
113
|
+
* controller state can participate in last-write-wins conflict resolution.
|
|
114
|
+
*
|
|
115
|
+
* @param order - Order that may include sync metadata.
|
|
116
|
+
* @returns Order safe to persist locally (no `deletedAt`).
|
|
117
|
+
*/
|
|
118
|
+
export function stripDeletedAt(order) {
|
|
119
|
+
const { deletedAt: _deletedAt, ...rampsOrder } = order;
|
|
120
|
+
return rampsOrder;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Deep-compares two ramps orders by their syncable bodies. Sync metadata
|
|
124
|
+
* (`lastUpdatedAt` / `deletedAt`) and local-only `paymentDetails` are excluded:
|
|
125
|
+
* `paymentDetails` is never persisted remotely, so a local order that carries
|
|
126
|
+
* it must still compare equal to its remote copy. Otherwise such orders would
|
|
127
|
+
* look changed on every sync and, with local-wins-on-tie conflict resolution,
|
|
128
|
+
* be re-uploaded indefinitely.
|
|
129
|
+
*
|
|
130
|
+
* @param a - First order.
|
|
131
|
+
* @param b - Second order.
|
|
132
|
+
* @returns True when the syncable order payloads are equal.
|
|
133
|
+
*/
|
|
134
|
+
export function areOrdersEqual(a, b) {
|
|
135
|
+
const normalizeOrder = (order) => {
|
|
136
|
+
const syncableOrder = stripPaymentDetailsForRemoteStorage(stripSyncMetadata(order));
|
|
137
|
+
return {
|
|
138
|
+
...syncableOrder,
|
|
139
|
+
createdAt: normalizeCreatedAt(syncableOrder.createdAt),
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
return deepEqual(normalizeOrder(a), normalizeOrder(b));
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/order-syncing/utils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAGhF;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAiD;IAEjD,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IACtC,IAAI,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC7C,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAiD;IAEjD,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mCAAmC,CACjD,KAAiB;IAEjB,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAChE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAAqB;IAErB,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,OAAO;QACL,CAAC,wBAAwB,CAAC,EAAE,oBAAoB;QAChD,CAAC,EAAE;YACD,GAAG,mCAAmC,CAAC,UAAU,CAAC;YAClD,SAAS,EAAE,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC;SACpD;QACD,EAAE,EAAE,aAAa,IAAI,GAAG;QACxB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAAiC;IAEjC,OAAO;QACL,GAAG,KAAK,CAAC,CAAC;QACV,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAChD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAqB;IACrD,MAAM,EACJ,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,UAAU,EACrB,GAAG,UAAU,EACd,GAAG,KAAK,CAAC;IACV,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAqB;IAClD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;IACvD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,CAA8B,EAC9B,CAA8B;IAE9B,MAAM,cAAc,GAAG,CAAC,KAAkC,EAAc,EAAE;QACxE,MAAM,aAAa,GAAG,mCAAmC,CACvD,iBAAiB,CAAC,KAAuB,CAAC,CAC3C,CAAC;QACF,OAAO;YACL,GAAG,aAAa;YAChB,SAAS,EAAE,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC;SACvD,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import deepEqual from 'fast-deep-equal';\n\nimport type { RampsOrder } from '../RampsService.js';\nimport { USER_STORAGE_VERSION, USER_STORAGE_VERSION_KEY } from './constants.js';\nimport type { SyncRampsOrder, UserStorageRampsOrderEntry } from './types.js';\n\n/**\n * Converts persisted ramps timestamps to epoch milliseconds.\n *\n * Portfolio and older clients may persist ISO strings or numeric strings even\n * though the controller's public order type uses numbers.\n *\n * @param value - A timestamp from a local or remote order.\n * @returns Epoch milliseconds, or zero when the value is invalid.\n */\nexport function normalizeCreatedAt(value: unknown): number {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : 0;\n }\n\n if (typeof value !== 'string' || value.trim() === '') {\n return 0;\n }\n\n const numericValue = Number(value);\n if (Number.isFinite(numericValue)) {\n return numericValue;\n }\n\n const parsedValue = Date.parse(value);\n return Number.isNaN(parsedValue) ? 0 : parsedValue;\n}\n\n/**\n * Creates a unique storage key for a ramps order.\n * Mirrors {@link getInternalOrderCode} without importing the controller module\n * (avoids circular dependencies).\n *\n * Prefers a non-empty `/orders/<code>` suffix; otherwise falls back to a trimmed\n * `providerOrderId`. An empty `/orders/` segment does not win over a real\n * provider order id.\n *\n * @param order - Order fields used to derive the internal order code.\n * @returns Storage entry key under the rampsOrders feature.\n */\nexport function createOrderStorageKey(\n order: Pick<RampsOrder, 'id' | 'providerOrderId'>,\n): string {\n const { id, providerOrderId } = order;\n if (id?.includes('/orders/')) {\n const code = id.split('/orders/')[1]?.trim();\n if (code) {\n return code;\n }\n }\n return providerOrderId?.trim() ?? '';\n}\n\n/**\n * Whether an order has the minimum fields required for syncing.\n *\n * @param order - The order to validate.\n * @returns True when the order can be synced.\n */\nexport function isSyncableOrder(\n order: Pick<RampsOrder, 'id' | 'providerOrderId'>,\n): boolean {\n return createOrderStorageKey(order).length > 0;\n}\n\n/**\n * Strips bank-transfer / PII-heavy payment details before persisting to User\n * Storage. Local controller state may still keep `paymentDetails`.\n *\n * @param order - Order that may include payment details.\n * @returns Order body safe for remote sync payloads.\n */\nexport function stripPaymentDetailsForRemoteStorage(\n order: RampsOrder,\n): RampsOrder {\n const { paymentDetails: _paymentDetails, ...safeOrder } = order;\n return safeOrder;\n}\n\n/**\n * Maps a ramps order (with optional sync metadata) to a User Storage entry.\n *\n * @param order - The order to map.\n * @returns A User Storage entry ready to be JSON-stringified.\n */\nexport function mapRampsOrderToUserStorageEntry(\n order: SyncRampsOrder,\n): UserStorageRampsOrderEntry {\n const { lastUpdatedAt, deletedAt, ...rampsOrder } = order;\n const now = Date.now();\n\n return {\n [USER_STORAGE_VERSION_KEY]: USER_STORAGE_VERSION,\n o: {\n ...stripPaymentDetailsForRemoteStorage(rampsOrder),\n createdAt: normalizeCreatedAt(rampsOrder.createdAt),\n },\n lu: lastUpdatedAt ?? now,\n ...(deletedAt ? { dt: deletedAt } : {}),\n };\n}\n\n/**\n * Maps a User Storage entry back to a sync-aware ramps order.\n *\n * @param entry - The User Storage entry.\n * @returns A {@link SyncRampsOrder} for merge logic.\n */\nexport function mapUserStorageEntryToRampsOrder(\n entry: UserStorageRampsOrderEntry,\n): SyncRampsOrder {\n return {\n ...entry.o,\n createdAt: normalizeCreatedAt(entry.o.createdAt),\n ...(entry.lu ? { lastUpdatedAt: entry.lu } : {}),\n ...(entry.dt ? { deletedAt: entry.dt } : {}),\n };\n}\n\n/**\n * Strips sync metadata for equality checks and remote payload shaping.\n *\n * @param order - Order that may include sync metadata.\n * @returns A plain {@link RampsOrder} without sync fields.\n */\nexport function stripSyncMetadata(order: SyncRampsOrder): RampsOrder {\n const {\n lastUpdatedAt: _lastUpdatedAt,\n deletedAt: _deletedAt,\n ...rampsOrder\n } = order;\n return rampsOrder;\n}\n\n/**\n * Strips remote tombstone metadata while preserving `lastUpdatedAt` so local\n * controller state can participate in last-write-wins conflict resolution.\n *\n * @param order - Order that may include sync metadata.\n * @returns Order safe to persist locally (no `deletedAt`).\n */\nexport function stripDeletedAt(order: SyncRampsOrder): SyncRampsOrder {\n const { deletedAt: _deletedAt, ...rampsOrder } = order;\n return rampsOrder;\n}\n\n/**\n * Deep-compares two ramps orders by their syncable bodies. Sync metadata\n * (`lastUpdatedAt` / `deletedAt`) and local-only `paymentDetails` are excluded:\n * `paymentDetails` is never persisted remotely, so a local order that carries\n * it must still compare equal to its remote copy. Otherwise such orders would\n * look changed on every sync and, with local-wins-on-tie conflict resolution,\n * be re-uploaded indefinitely.\n *\n * @param a - First order.\n * @param b - Second order.\n * @returns True when the syncable order payloads are equal.\n */\nexport function areOrdersEqual(\n a: SyncRampsOrder | RampsOrder,\n b: SyncRampsOrder | RampsOrder,\n): boolean {\n const normalizeOrder = (order: SyncRampsOrder | RampsOrder): RampsOrder => {\n const syncableOrder = stripPaymentDetailsForRemoteStorage(\n stripSyncMetadata(order as SyncRampsOrder),\n );\n return {\n ...syncableOrder,\n createdAt: normalizeCreatedAt(syncableOrder.createdAt),\n };\n };\n\n return deepEqual(normalizeOrder(a), normalizeOrder(b));\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RampsOrderStatus } from
|
|
1
|
+
import { RampsOrderStatus } from './RampsService.js';
|
|
2
2
|
/**
|
|
3
3
|
* Order statuses that no longer require polling or in-flow navigation.
|
|
4
4
|
* Shared by the controller and consuming clients so terminal checks stay in sync.
|
|
@@ -15,4 +15,4 @@ export declare function isTerminalOrderStatus(status: RampsOrderStatus): boolean
|
|
|
15
15
|
* Order statuses that are still in progress and may be polled.
|
|
16
16
|
*/
|
|
17
17
|
export declare const PENDING_ORDER_STATUSES: ReadonlySet<RampsOrderStatus>;
|
|
18
|
-
//# sourceMappingURL=orderStatus.d.
|
|
18
|
+
//# sourceMappingURL=orderStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderStatus.d.ts","sourceRoot":"","sources":["../src/orderStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,gBAAgB,CAKhE,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAEvE;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,gBAAgB,CAK/D,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RampsOrderStatus } from
|
|
1
|
+
import { RampsOrderStatus } from './RampsService.js';
|
|
2
2
|
/**
|
|
3
3
|
* Order statuses that no longer require polling or in-flow navigation.
|
|
4
4
|
* Shared by the controller and consuming clients so terminal checks stay in sync.
|
|
@@ -27,4 +27,4 @@ export const PENDING_ORDER_STATUSES = new Set([
|
|
|
27
27
|
RampsOrderStatus.Unknown,
|
|
28
28
|
RampsOrderStatus.Precreated,
|
|
29
29
|
]);
|
|
30
|
-
//# sourceMappingURL=orderStatus.
|
|
30
|
+
//# sourceMappingURL=orderStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderStatus.js","sourceRoot":"","sources":["../src/orderStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAkC,IAAI,GAAG,CAAC;IAC5E,gBAAgB,CAAC,SAAS;IAC1B,gBAAgB,CAAC,MAAM;IACvB,gBAAgB,CAAC,SAAS;IAC1B,gBAAgB,CAAC,SAAS;CAC3B,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC5D,OAAO,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkC,IAAI,GAAG,CAAC;IAC3E,gBAAgB,CAAC,OAAO;IACxB,gBAAgB,CAAC,OAAO;IACxB,gBAAgB,CAAC,OAAO;IACxB,gBAAgB,CAAC,UAAU;CAC5B,CAAC,CAAC","sourcesContent":["import { RampsOrderStatus } from './RampsService.js';\n\n/**\n * Order statuses that no longer require polling or in-flow navigation.\n * Shared by the controller and consuming clients so terminal checks stay in sync.\n */\nexport const TERMINAL_ORDER_STATUSES: ReadonlySet<RampsOrderStatus> = new Set([\n RampsOrderStatus.Completed,\n RampsOrderStatus.Failed,\n RampsOrderStatus.Cancelled,\n RampsOrderStatus.IdExpired,\n]);\n\n/**\n * Whether a ramps order has reached a terminal status.\n *\n * @param status - The order status to test.\n * @returns Whether the status is terminal.\n */\nexport function isTerminalOrderStatus(status: RampsOrderStatus): boolean {\n return TERMINAL_ORDER_STATUSES.has(status);\n}\n\n/**\n * Order statuses that are still in progress and may be polled.\n */\nexport const PENDING_ORDER_STATUSES: ReadonlySet<RampsOrderStatus> = new Set([\n RampsOrderStatus.Pending,\n RampsOrderStatus.Created,\n RampsOrderStatus.Unknown,\n RampsOrderStatus.Precreated,\n]);\n"]}
|
|
@@ -19,4 +19,4 @@ export type BuildOwnershipMessageRequest = {
|
|
|
19
19
|
* @returns The exact message to sign and submit.
|
|
20
20
|
*/
|
|
21
21
|
export declare function buildOwnershipMessage({ address, customerId, now, }: BuildOwnershipMessageRequest): string;
|
|
22
|
-
//# sourceMappingURL=ownership-message.d.
|
|
22
|
+
//# sourceMappingURL=ownership-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownership-message.d.ts","sourceRoot":"","sources":["../src/ownership-message.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,UAAU,EACV,GAAG,GACJ,EAAE,4BAA4B,GAAG,MAAM,CAMvC"}
|
|
@@ -19,4 +19,4 @@ export function buildOwnershipMessage({ address, customerId, now, }) {
|
|
|
19
19
|
const year = now.getUTCFullYear();
|
|
20
20
|
return `I am verifying ownership of the wallet address ${address} as customer ${customerId}. This message was signed on ${day}/${month}/${year} to confirm my control over this wallet.`;
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=ownership-message.
|
|
22
|
+
//# sourceMappingURL=ownership-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownership-message.js","sourceRoot":"","sources":["../src/ownership-message.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,OAAO,EACP,UAAU,EACV,GAAG,GAC0B;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IAElC,OAAO,kDAAkD,OAAO,gBAAgB,UAAU,gCAAgC,GAAG,IAAI,KAAK,IAAI,IAAI,0CAA0C,CAAC;AAC3L,CAAC","sourcesContent":["export type BuildOwnershipMessageRequest = {\n address: string;\n customerId: string;\n now: Date;\n};\n\n/**\n * Builds the proof-of-ownership message required to register a self-hosted\n * wallet with MoonPay Iron (`POST /addresses/crypto/selfhosted`).\n *\n * The returned string is the exact sentence that must be both signed (EIP-191\n * `personal_sign`) and sent, byte-for-byte, in the registration request body.\n * The date is always formatted as `DD/MM/YYYY` in UTC so a signature produced\n * just before UTC midnight is not reused with a stale date after rollover.\n *\n * @param request - Values embedded in the ownership message.\n * @param request.address - Wallet address, kept verbatim (no re-casing).\n * @param request.customerId - Iron customer id; must match the request body.\n * @param request.now - Reference time used to derive the UTC calendar date.\n * @returns The exact message to sign and submit.\n */\nexport function buildOwnershipMessage({\n address,\n customerId,\n now,\n}: BuildOwnershipMessageRequest): string {\n const day = String(now.getUTCDate()).padStart(2, '0');\n const month = String(now.getUTCMonth() + 1).padStart(2, '0');\n const year = now.getUTCFullYear();\n\n return `I am verifying ownership of the wallet address ${address} as customer ${customerId}. This message was signed on ${day}/${month}/${year} to confirm my control over this wallet.`;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PaymentMethod } from
|
|
1
|
+
import type { PaymentMethod } from './RampsService.js';
|
|
2
2
|
/**
|
|
3
3
|
* Merges payment-method lists from multiple providers into one list keyed by
|
|
4
4
|
* canonical payment method `id`.
|
|
@@ -23,4 +23,4 @@ import type { PaymentMethod } from "./RampsService.cjs";
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function pickPaymentMethod(methods: PaymentMethod[], preferredIds: (string | undefined)[]): PaymentMethod | null;
|
|
25
25
|
export declare function mergePaymentMethodsById(lists: PaymentMethod[][]): PaymentMethod[];
|
|
26
|
-
//# sourceMappingURL=paymentMethodMerge.d.
|
|
26
|
+
//# sourceMappingURL=paymentMethodMerge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymentMethodMerge.d.ts","sourceRoot":"","sources":["../src/paymentMethodMerge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EAAE,EACxB,YAAY,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GACnC,aAAa,GAAG,IAAI,CAQtB;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EAAE,EAAE,GACvB,aAAa,EAAE,CAgBjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymentMethodMerge.js","sourceRoot":"","sources":["../src/paymentMethodMerge.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAwB,EACxB,YAAoC;IAEpC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAwB;IAExB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import type { PaymentMethod } from './RampsService.js';\n\n/**\n * Merges payment-method lists from multiple providers into one list keyed by\n * canonical payment method `id`.\n *\n * First seen wins on collision. Payment metadata is provider-invariant: the\n * API serves it from a per-region catalog and the `provider` query narrows\n * that catalog by id-set membership without rewriting fields, so colliding\n * entries carry identical values.\n *\n * Encounter order of first-seen ids is preserved (provider fan-out order).\n *\n * @param lists - Payment method arrays in provider contribution order.\n * @returns Deduped payment methods.\n */\n/**\n * Picks the payment method to select: the first `preferredIds` entry still\n * present in `methods`, otherwise the first method.\n *\n * @param methods - Candidate payment methods, in display order.\n * @param preferredIds - Preferred ids in priority order; falsy ids are skipped.\n * @returns The selection, or null when `methods` is empty.\n */\nexport function pickPaymentMethod(\n methods: PaymentMethod[],\n preferredIds: (string | undefined)[],\n): PaymentMethod | null {\n for (const id of preferredIds) {\n const match = id ? methods.find((method) => method.id === id) : undefined;\n if (match) {\n return match;\n }\n }\n return methods[0] ?? null;\n}\n\nexport function mergePaymentMethodsById(\n lists: PaymentMethod[][],\n): PaymentMethod[] {\n if (lists.length === 1) {\n return lists[0];\n }\n\n const byId = new Map<string, PaymentMethod>();\n\n for (const list of lists) {\n for (const method of list) {\n if (!byId.has(method.id)) {\n byId.set(method.id, { ...method });\n }\n }\n }\n\n return [...byId.values()];\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Provider } from
|
|
1
|
+
import type { Provider } from './RampsService.js';
|
|
2
2
|
/**
|
|
3
3
|
* Canonicalizes a CAIP-19 asset id for comparison against Ramps API values.
|
|
4
4
|
*
|
|
@@ -98,4 +98,4 @@ export declare function isFiatDepositAvailable({ providers, selectedProvider, al
|
|
|
98
98
|
selectedProvider?: Provider | null;
|
|
99
99
|
allProvidersEnabled: boolean;
|
|
100
100
|
}): boolean;
|
|
101
|
-
//# sourceMappingURL=providerAvailability.d.
|
|
101
|
+
//# sourceMappingURL=providerAvailability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerAvailability.d.ts","sourceRoot":"","sources":["../src/providerAvailability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAST;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,EAAE,MAAM,GACd,QAAQ,EAAE,CAEZ;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,OAAO,EACP,mBAAmB,GACpB,EAAE;IACD,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAYV;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,gBAAgB,EAChB,mBAAmB,GACpB,EAAE;IACD,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAQV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerAvailability.js","sourceRoot":"","sources":["../src/providerAvailability.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QACtC,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE;QAC9B,CAAC,CAAC,cAAc,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAkB,EAClB,OAAe;IAEf,MAAM,GAAG,GAAG,QAAQ,EAAE,yBAAyB,CAAC;IAChD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1B,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAqB,EACrB,OAAe;IAEf,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,SAAS,EACT,OAAO,EACP,mBAAmB,GAKpB;IACC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,SAAS,EACT,gBAAgB,EAChB,mBAAmB,GAKpB;IACC,IAAI,gBAAgB,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import type { Provider } from './RampsService.js';\n\n/**\n * Canonicalizes a CAIP-19 asset id for comparison against Ramps API values.\n *\n * CAIP-19 does not constrain the case of the asset reference, and the Ramps API\n * is not consistent about it. Every `eip155` key in `regions/{region}/providers`\n * `supportedCryptoCurrencies` is lowercase, while `regions/{region}/topTokens`\n * returns four mainnet `assetId` values EIP-55 checksummed (USDT, USDC, WBTC,\n * LINK) in both its `topTokens` and `allTokens` lists, with no lowercase\n * duplicate. Callers also supply checksummed ids of their own from other\n * controllers, so the two sides of a comparison can disagree on case for the\n * same asset.\n *\n * Non-EVM references are case-sensitive (Solana base58, Tron base58, bitcoin\n * bech32), so lowercasing is restricted to `eip155` rather than applied to the\n * whole string. This is a tightening: for EVM ids a plain `toLowerCase()` on\n * both sides already matched. Current API data carries non-EVM ids in identical\n * case on both endpoints, so the passthrough guards against future drift rather\n * than fixing an observed mismatch.\n *\n * The namespace itself is matched case-insensitively, so an `EIP155:` prefix\n * is treated as EVM even though CAIP-19 defines namespaces as lowercase.\n *\n * @param assetId - CAIP-19 asset id, in either case form.\n * @returns The asset id in the form the Ramps API uses.\n */\nexport function normalizeRampsAssetId(assetId: string): string {\n const trimmedAssetId = assetId.trim();\n return /^eip155:/iu.test(trimmedAssetId)\n ? trimmedAssetId.toLowerCase()\n : trimmedAssetId;\n}\n\n/**\n * Whether a provider serves the given deposit asset.\n *\n * Mirrors the region-provider matching the controller performs internally: a\n * provider serves the asset when its `supportedCryptoCurrencies` map (keyed by\n * CAIP-19 asset id) contains the asset id. Both sides are canonicalized with\n * {@link normalizeRampsAssetId}, so EVM ids match regardless of checksum\n * casing while non-EVM references stay case-sensitive. A provider without a\n * `supportedCryptoCurrencies` map is treated as not serving the asset.\n *\n * @param provider - The provider to test.\n * @param assetId - CAIP-19 asset id of the deposit asset.\n * @returns Whether the provider serves the asset.\n */\nexport function providerServesAsset(\n provider: Provider,\n assetId: string,\n): boolean {\n const map = provider?.supportedCryptoCurrencies;\n if (!map) {\n return false;\n }\n const target = normalizeRampsAssetId(assetId);\n return Object.keys(map).some(\n (key) => normalizeRampsAssetId(key) === target && map[key],\n );\n}\n\n/**\n * Filters a provider list down to those serving the given deposit asset.\n *\n * @param providers - The providers to filter.\n * @param assetId - CAIP-19 asset id of the deposit asset.\n * @returns The subset of providers serving the asset.\n */\nexport function getProvidersServingAsset(\n providers: Provider[],\n assetId: string,\n): Provider[] {\n return providers.filter((provider) => providerServesAsset(provider, assetId));\n}\n\n/**\n * Whether a region offers a usable on-ramp provider that serves the given\n * deposit asset, under the all-providers feature flag. This is the pure,\n * asset-aware region gate shared between the controller and headless-buy\n * consumers so the two never disagree about eligibility.\n *\n * With `allProvidersEnabled` false the gate is native-only: the region must\n * offer a native provider (e.g. Transak Native) that serves the asset. With\n * `allProvidersEnabled` true the region is supported when any provider\n * (native or aggregator) serves the asset; the controller's flag-aware\n * `getQuotes` performs the precise provider selection at quote time. Fails\n * closed: an empty or missing `assetId` returns `false`.\n *\n * @param options - The options.\n * @param options.providers - The region's providers (native and aggregator).\n * @param options.assetId - CAIP-19 asset id of the deposit asset.\n * @param options.allProvidersEnabled - Whether the all-providers feature flag\n * is enabled (see `isHeadlessAllProvidersEnabled`).\n * @returns Whether the region has a provider serving the asset.\n */\nexport function regionHasProviderForAsset({\n providers,\n assetId,\n allProvidersEnabled,\n}: {\n providers: Provider[];\n assetId: string;\n allProvidersEnabled: boolean;\n}): boolean {\n if (!assetId) {\n return false;\n }\n const serving = getProvidersServingAsset(providers, assetId);\n if (serving.some((provider) => provider.type === 'native')) {\n return true;\n }\n if (!allProvidersEnabled) {\n return false;\n }\n return serving.length > 0;\n}\n\n/**\n * Whether headless fiat deposit is available for the current region, under\n * the all-providers feature flag. Flag-aware and independent of which single\n * provider is currently selected once widened, so the availability gate\n * cannot disagree with the controller's own flag-aware provider pick.\n *\n * With `allProvidersEnabled` false the check keeps the native-only behaviour:\n * a native provider must be the currently selected (preferred) one, since the\n * controller resolves the selected provider first and an aggregator preferred\n * provider would otherwise run a non-native deposit. With\n * `allProvidersEnabled` true the flow is available whenever the region has\n * any provider.\n *\n * @param options - The options.\n * @param options.providers - The region's providers.\n * @param options.selectedProvider - The currently selected provider, if any.\n * @param options.allProvidersEnabled - Whether the all-providers feature flag\n * is enabled (see `isHeadlessAllProvidersEnabled`).\n * @returns Whether headless fiat deposit is available.\n */\nexport function isFiatDepositAvailable({\n providers,\n selectedProvider,\n allProvidersEnabled,\n}: {\n providers: Provider[];\n selectedProvider?: Provider | null;\n allProvidersEnabled: boolean;\n}): boolean {\n if (selectedProvider?.type === 'native') {\n return true;\n }\n if (!allProvidersEnabled) {\n return false;\n }\n return providers.length > 0;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Quote } from
|
|
1
|
+
import type { Quote } from './RampsService.js';
|
|
2
2
|
/**
|
|
3
3
|
* Whether a quote's checkout runs in an external / system browser rather than
|
|
4
4
|
* an in-app WebView. Decided by the per-quote `buyWidget.browser` hint from the
|
|
@@ -30,4 +30,4 @@ export declare function isCustomActionQuote(quote: Quote): boolean;
|
|
|
30
30
|
* @returns Whether the quote is an in-app WebView quote.
|
|
31
31
|
*/
|
|
32
32
|
export declare function isInAppOnlyQuote(quote: Quote): boolean;
|
|
33
|
-
//# sourceMappingURL=quoteClassification.d.
|
|
33
|
+
//# sourceMappingURL=quoteClassification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quoteClassification.d.ts","sourceRoot":"","sources":["../src/quoteClassification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEtD"}
|
|
@@ -35,4 +35,4 @@ export function isCustomActionQuote(quote) {
|
|
|
35
35
|
export function isInAppOnlyQuote(quote) {
|
|
36
36
|
return !isCustomActionQuote(quote) && !isExternalBrowserQuote(quote);
|
|
37
37
|
}
|
|
38
|
-
//# sourceMappingURL=quoteClassification.
|
|
38
|
+
//# sourceMappingURL=quoteClassification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quoteClassification.js","sourceRoot":"","sources":["../src/quoteClassification.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,OAAO,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,KAAK,mBAAmB,CAAC;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,OAAQ,KAAK,CAAC,KAAsC,EAAE,cAAc,KAAK,IAAI,CAAC;AAChF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import type { Quote } from './RampsService.js';\n\n/**\n * Whether a quote's checkout runs in an external / system browser rather than\n * an in-app WebView. Decided by the per-quote `buyWidget.browser` hint from the\n * quotes API. When the hint is absent the quote is treated as in-app (the\n * caller is responsible for the in-app WebView fail-safe).\n *\n * This is the pure classification only: it deliberately knows nothing about\n * host redirect URLs or deeplink schemes, which stay in the consuming client.\n *\n * @param quote - The quote to classify.\n * @returns Whether the quote uses an external browser.\n */\nexport function isExternalBrowserQuote(quote: Quote): boolean {\n return quote.quote?.buyWidget?.browser === 'IN_APP_OS_BROWSER';\n}\n\n/**\n * Whether a quote is a custom-action (\"checkout outside of MetaMask\") quote,\n * e.g. PayPal or Robinhood. Reads the inline `isCustomAction` flag, which the\n * wire may carry even though it is absent from the published `Quote` type.\n *\n * @param quote - The quote to classify.\n * @returns Whether the quote is a custom-action quote.\n */\nexport function isCustomActionQuote(quote: Quote): boolean {\n return (quote.quote as { isCustomAction?: boolean })?.isCustomAction === true;\n}\n\n/**\n * Whether a quote continues inside an in-app WebView, i.e. it is neither a\n * custom-action quote nor an external-browser quote. This is the Phase 1\n * in-app-only inclusion test.\n *\n * @param quote - The quote to classify.\n * @returns Whether the quote is an in-app WebView quote.\n */\nexport function isInAppOnlyQuote(quote: Quote): boolean {\n return !isCustomActionQuote(quote) && !isExternalBrowserQuote(quote);\n}\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* These codes are returned to the UI layer for translation.
|
|
4
4
|
*/
|
|
5
5
|
export declare const RAMPS_ERROR_CODES: {
|
|
6
|
-
readonly CIRCUIT_BREAKER_OPEN:
|
|
6
|
+
readonly CIRCUIT_BREAKER_OPEN: 'CIRCUIT_BREAKER_OPEN';
|
|
7
7
|
};
|
|
8
8
|
export type RampsErrorCode = (typeof RAMPS_ERROR_CODES)[keyof typeof RAMPS_ERROR_CODES];
|
|
9
|
-
//# sourceMappingURL=rampsErrorCodes.d.
|
|
9
|
+
//# sourceMappingURL=rampsErrorCodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rampsErrorCodes.d.ts","sourceRoot":"","sources":["../src/rampsErrorCodes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,iBAAiB;aAC5B,oBAAoB,EAAE,sBAAsB;CACpC,CAAC;AAEX,MAAM,MAAM,cAAc,GACxB,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rampsErrorCodes.js","sourceRoot":"","sources":["../src/rampsErrorCodes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,oBAAoB,EAAE,sBAAsB;CACpC,CAAC","sourcesContent":["/**\n * Error codes for RampsController.\n * These codes are returned to the UI layer for translation.\n */\nexport const RAMPS_ERROR_CODES = {\n CIRCUIT_BREAKER_OPEN: 'CIRCUIT_BREAKER_OPEN',\n} as const;\n\nexport type RampsErrorCode =\n (typeof RAMPS_ERROR_CODES)[keyof typeof RAMPS_ERROR_CODES];\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { RampsControllerState } from
|
|
2
|
-
import type { RampsErrorCode } from
|
|
1
|
+
import type { RampsControllerState } from './RampsController.js';
|
|
2
|
+
import type { RampsErrorCode } from './rampsErrorCodes.js';
|
|
3
3
|
/**
|
|
4
4
|
* Result shape returned by request selectors.
|
|
5
5
|
*
|
|
@@ -75,4 +75,4 @@ export type RequestSelectorResult<TData> = {
|
|
|
75
75
|
* ```
|
|
76
76
|
*/
|
|
77
77
|
export declare function createRequestSelector<TRootState, TData>(getState: (rootState: TRootState) => RampsControllerState | undefined, method: string, params: unknown[]): (state: TRootState) => RequestSelectorResult<TData>;
|
|
78
|
-
//# sourceMappingURL=selectors.d.
|
|
78
|
+
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,CAAC,KAAK,IAAI;IACzC,+EAA+E;IAC/E,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,uFAAuF;IACvF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,KAAK,EACrD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,oBAAoB,GAAG,SAAS,EACrE,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EAAE,GAChB,CAAC,KAAK,EAAE,UAAU,KAAK,qBAAqB,CAAC,KAAK,CAAC,CA4BrD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RequestStatus, createCacheKey } from
|
|
1
|
+
import { RequestStatus, createCacheKey } from './RequestCache.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates a memoized selector for a controller method's request state.
|
|
4
4
|
*
|
|
@@ -78,4 +78,4 @@ export function createRequestSelector(getState, method, params) {
|
|
|
78
78
|
return lastResult;
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
|
-
//# sourceMappingURL=selectors.
|
|
81
|
+
//# sourceMappingURL=selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAoBlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAqE,EACrE,MAAc,EACd,MAAiB;IAEjB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD,IAAI,WAAqC,CAAC;IAC1C,IAAI,UAAU,GAAwC,IAAI,CAAC;IAE3D,OAAO,CAAC,KAAiB,EAAgC,EAAE;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,OAAO,KAAK,WAAW,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACnD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,WAAW,GAAG,OAAO,CAAC;QACtB,MAAM,UAAU,GAAiC;YAC/C,IAAI,EAAG,OAAO,EAAE,IAAc,IAAI,IAAI;YACtC,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,aAAa,CAAC,OAAO;YACrD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;SAC9B,CAAC;QAEF,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACzC,CAAC;QAED,UAAU,GAAG,UAAU,CAAC;QAExB,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { RampsControllerState } from './RampsController.js';\nimport type { RampsErrorCode } from './rampsErrorCodes.js';\nimport type { RequestState } from './RequestCache.js';\nimport { RequestStatus, createCacheKey } from './RequestCache.js';\n\n/**\n * Result shape returned by request selectors.\n *\n * This object is memoized - the same reference is returned when the underlying\n * request state hasn't changed, making it safe to use with React Redux's\n * `useSelector` without `shallowEqual`.\n */\nexport type RequestSelectorResult<TData> = {\n /** The data returned by the request, or null if not yet loaded or on error. */\n data: TData | null;\n /** Whether the request is currently in progress. */\n isFetching: boolean;\n /** Error message if the request failed, or null if successful or not yet attempted. */\n error: string | null;\n /** Stable error key for client-side localization, if available. */\n errorKey?: RampsErrorCode | null;\n};\n\n/**\n * Creates a memoized selector for a controller method's request state.\n *\n * This selector tracks the loading, error, and data state for a specific\n * controller method call. It's optimized for use with React Redux's `useSelector`\n * hook - the selector returns the same object reference when the underlying\n * request state hasn't changed, so no `shallowEqual` is needed.\n *\n * The selector uses reference equality on the request object itself, so it\n * works correctly with arrays and objects without expensive deep equality checks.\n *\n * @param getState - Function that extracts RampsControllerState from the root state.\n * Typically a reselect selector like `selectRampsControllerState`.\n * @param method - The controller method name (e.g., 'updateUserRegion').\n * @param params - The parameters passed to the method, used to generate the cache key.\n * Must match the params used when calling the controller method.\n * @returns A selector function that returns `{ data, isFetching, error }`.\n *\n * @example\n * ```ts\n * // In selectors file - create once at module level\n * import { createRequestSelector } from '@metamask/ramps-controller';\n * import { createSelector } from 'reselect';\n *\n * const selectRampsControllerState = createSelector(\n * (state: RootState) => state.engine.backgroundState.RampsController,\n * (rampsControllerState) => rampsControllerState,\n * );\n *\n * export const selectUserRegionRequest = createRequestSelector<\n * RootState,\n * string\n * >(selectRampsControllerState, 'updateUserRegion', []);\n *\n * // In hook - use directly with useSelector, no shallowEqual needed\n * export function useRampsUserRegion() {\n * const { isFetching, error } = useSelector(selectUserRegionRequest);\n * // ... rest of hook\n * }\n * ```\n *\n * @example\n * ```ts\n * // For methods with parameters\n * export const selectCryptoCurrenciesRequest = (region: string) =>\n * createRequestSelector<RootState, CryptoCurrency[]>(\n * selectRampsControllerState,\n * 'getCryptoCurrencies',\n * [region],\n * );\n *\n * // In component\n * const { data, isFetching, error } = useSelector(\n * selectCryptoCurrenciesRequest('US')\n * );\n * ```\n */\nexport function createRequestSelector<TRootState, TData>(\n getState: (rootState: TRootState) => RampsControllerState | undefined,\n method: string,\n params: unknown[],\n): (state: TRootState) => RequestSelectorResult<TData> {\n const cacheKey = createCacheKey(method, params);\n\n let lastRequest: RequestState | undefined;\n let lastResult: RequestSelectorResult<TData> | null = null;\n\n return (state: TRootState): RequestSelectorResult<TData> => {\n const request = getState(state)?.requests?.[cacheKey];\n\n if (request === lastRequest && lastResult !== null) {\n return lastResult;\n }\n\n lastRequest = request;\n const nextResult: RequestSelectorResult<TData> = {\n data: (request?.data as TData) ?? null,\n isFetching: request?.status === RequestStatus.LOADING,\n error: request?.error ?? null,\n };\n\n if (request?.errorKey) {\n nextResult.errorKey = request.errorKey;\n }\n\n lastResult = nextResult;\n\n return lastResult;\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transakApiErrorUtils.d.ts","sourceRoot":"","sources":["../src/transakApiErrorUtils.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEvE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKrE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TRANSAK_ERROR_CODES } from
|
|
2
|
-
import { TransakApiError } from
|
|
1
|
+
import { TRANSAK_ERROR_CODES } from './transakErrorCodes.js';
|
|
2
|
+
import { TransakApiError } from './TransakService.js';
|
|
3
3
|
export function getTransakApiMessage(error) {
|
|
4
4
|
return error instanceof TransakApiError ? error.apiMessage : undefined;
|
|
5
5
|
}
|
|
@@ -7,4 +7,4 @@ export function isTransakPhoneRegisteredError(error) {
|
|
|
7
7
|
return (error instanceof TransakApiError &&
|
|
8
8
|
error.errorCode === TRANSAK_ERROR_CODES.PHONE_ALREADY_REGISTERED);
|
|
9
9
|
}
|
|
10
|
-
//# sourceMappingURL=transakApiErrorUtils.
|
|
10
|
+
//# sourceMappingURL=transakApiErrorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transakApiErrorUtils.js","sourceRoot":"","sources":["../src/transakApiErrorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,KAAK,YAAY,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,OAAO,CACL,KAAK,YAAY,eAAe;QAChC,KAAK,CAAC,SAAS,KAAK,mBAAmB,CAAC,wBAAwB,CACjE,CAAC;AACJ,CAAC","sourcesContent":["import { TRANSAK_ERROR_CODES } from './transakErrorCodes.js';\nimport { TransakApiError } from './TransakService.js';\n\nexport function getTransakApiMessage(error: unknown): string | undefined {\n return error instanceof TransakApiError ? error.apiMessage : undefined;\n}\n\nexport function isTransakPhoneRegisteredError(error: unknown): boolean {\n return (\n error instanceof TransakApiError &&\n error.errorCode === TRANSAK_ERROR_CODES.PHONE_ALREADY_REGISTERED\n );\n}\n"]}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* codes when parsing API responses.
|
|
6
6
|
*/
|
|
7
7
|
export declare const TRANSAK_ERROR_CODES: {
|
|
8
|
-
readonly ORDER_EXISTS:
|
|
9
|
-
readonly PHONE_ALREADY_REGISTERED:
|
|
8
|
+
readonly ORDER_EXISTS: '4005';
|
|
9
|
+
readonly PHONE_ALREADY_REGISTERED: '2020';
|
|
10
10
|
};
|
|
11
11
|
export type TransakErrorCode = (typeof TRANSAK_ERROR_CODES)[keyof typeof TRANSAK_ERROR_CODES];
|
|
12
|
-
//# sourceMappingURL=transakErrorCodes.d.
|
|
12
|
+
//# sourceMappingURL=transakErrorCodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transakErrorCodes.d.ts","sourceRoot":"","sources":["../src/transakErrorCodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;aAC9B,YAAY,EAAE,MAAM;aACpB,wBAAwB,EAAE,MAAM;CACxB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transakErrorCodes.js","sourceRoot":"","sources":["../src/transakErrorCodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,MAAM;IACpB,wBAAwB,EAAE,MAAM;CACxB,CAAC","sourcesContent":["/**\n * Known Transak API error codes surfaced by {@link TransakApiError}.\n *\n * Values are normalized to strings because TransakService stringifies numeric\n * codes when parsing API responses.\n */\nexport const TRANSAK_ERROR_CODES = {\n ORDER_EXISTS: '4005',\n PHONE_ALREADY_REGISTERED: '2020',\n} as const;\n\nexport type TransakErrorCode =\n (typeof TRANSAK_ERROR_CODES)[keyof typeof TRANSAK_ERROR_CODES];\n"]}
|
|
@@ -78,4 +78,4 @@ export declare function createInitialState(maxAttempts?: number): WalletRegistra
|
|
|
78
78
|
* @returns The next state (or the same state for unhandled events).
|
|
79
79
|
*/
|
|
80
80
|
export declare function transition(state: WalletRegistrationState, event: WalletRegistrationEvent): WalletRegistrationState;
|
|
81
|
-
//# sourceMappingURL=wallet-registration-machine.d.
|
|
81
|
+
//# sourceMappingURL=wallet-registration-machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-registration-machine.d.ts","sourceRoot":"","sources":["../src/wallet-registration-machine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,uCAAuC;AACvC,MAAM,MAAM,wBAAwB,GAChC,MAAM,GACN,WAAW,GACX,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,YAAY,GACZ,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,WAAW,CAAC;AAEhB,kDAAkD;AAClD,MAAM,MAAM,yBAAyB,GAAG;IACtC,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,EAAE,yBAAyB,CAAC;CACpC,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAWvB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,GAAE,MAA6B,GACzC,uBAAuB,CAEzB;AA4HD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,uBAAuB,GAC7B,uBAAuB,CAGzB"}
|
|
@@ -136,4 +136,4 @@ export function transition(state, event) {
|
|
|
136
136
|
const handler = TABLE[state.status]?.[event.type];
|
|
137
137
|
return handler ? handler(state, event) : state;
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=wallet-registration-machine.
|
|
139
|
+
//# sourceMappingURL=wallet-registration-machine.js.map
|