@metamask/subscription-controller 8.1.0 → 9.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 +19 -1
- package/dist/{SubscriptionController-method-action-types.d.mts → SubscriptionController-method-action-types.d.ts} +2 -2
- package/dist/SubscriptionController-method-action-types.d.ts.map +1 -0
- package/dist/{SubscriptionController-method-action-types.mjs → SubscriptionController-method-action-types.js} +1 -1
- package/dist/SubscriptionController-method-action-types.js.map +1 -0
- package/dist/{SubscriptionController.d.mts → SubscriptionController.d.ts} +18 -18
- package/dist/SubscriptionController.d.ts.map +1 -0
- package/dist/{SubscriptionController.mjs → SubscriptionController.js} +371 -274
- package/dist/SubscriptionController.js.map +1 -0
- package/dist/{SubscriptionService-method-action-types.d.cts → SubscriptionService-method-action-types.d.ts} +2 -2
- package/dist/SubscriptionService-method-action-types.d.ts.map +1 -0
- package/dist/{SubscriptionService-method-action-types.mjs → SubscriptionService-method-action-types.js} +1 -1
- package/dist/SubscriptionService-method-action-types.js.map +1 -0
- package/dist/{SubscriptionService-structs.d.cts → SubscriptionService-structs.d.ts} +164 -164
- package/dist/SubscriptionService-structs.d.ts.map +1 -0
- package/dist/{SubscriptionService-structs.mjs → SubscriptionService-structs.js} +4 -4
- package/dist/SubscriptionService-structs.js.map +1 -0
- package/dist/{SubscriptionService.d.cts → SubscriptionService.d.ts} +10 -10
- package/dist/SubscriptionService.d.ts.map +1 -0
- package/dist/{SubscriptionService.mjs → SubscriptionService.js} +141 -143
- package/dist/SubscriptionService.js.map +1 -0
- package/dist/{constants.d.cts → constants.d.ts} +1 -1
- package/dist/constants.d.ts.map +1 -0
- package/dist/{constants.mjs → constants.js} +3 -3
- package/dist/constants.js.map +1 -0
- package/dist/{errors.d.cts → errors.d.ts} +2 -2
- package/dist/errors.d.ts.map +1 -0
- package/dist/{errors.mjs → errors.js} +5 -1
- package/dist/errors.js.map +1 -0
- package/dist/{index.d.cts → index.d.ts} +12 -12
- package/dist/index.d.ts.map +1 -0
- package/dist/{index.mjs → index.js} +7 -7
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +5 -0
- package/dist/logger.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/{types.d.mts → types.d.ts} +47 -47
- package/dist/types.d.ts.map +1 -0
- package/dist/{types.mjs → types.js} +1 -1
- package/dist/types.js.map +1 -0
- package/package.json +19 -23
- package/dist/SubscriptionController-method-action-types.cjs +0 -7
- package/dist/SubscriptionController-method-action-types.cjs.map +0 -1
- package/dist/SubscriptionController-method-action-types.d.cts +0 -261
- package/dist/SubscriptionController-method-action-types.d.cts.map +0 -1
- package/dist/SubscriptionController-method-action-types.d.mts.map +0 -1
- package/dist/SubscriptionController-method-action-types.mjs.map +0 -1
- package/dist/SubscriptionController.cjs +0 -844
- package/dist/SubscriptionController.cjs.map +0 -1
- package/dist/SubscriptionController.d.cts +0 -268
- package/dist/SubscriptionController.d.cts.map +0 -1
- package/dist/SubscriptionController.d.mts.map +0 -1
- package/dist/SubscriptionController.mjs.map +0 -1
- package/dist/SubscriptionService-method-action-types.cjs +0 -7
- package/dist/SubscriptionService-method-action-types.cjs.map +0 -1
- package/dist/SubscriptionService-method-action-types.d.cts.map +0 -1
- package/dist/SubscriptionService-method-action-types.d.mts +0 -164
- package/dist/SubscriptionService-method-action-types.d.mts.map +0 -1
- package/dist/SubscriptionService-method-action-types.mjs.map +0 -1
- package/dist/SubscriptionService-structs.cjs +0 -209
- package/dist/SubscriptionService-structs.cjs.map +0 -1
- package/dist/SubscriptionService-structs.d.cts.map +0 -1
- package/dist/SubscriptionService-structs.d.mts +0 -889
- package/dist/SubscriptionService-structs.d.mts.map +0 -1
- package/dist/SubscriptionService-structs.mjs.map +0 -1
- package/dist/SubscriptionService.cjs +0 -497
- package/dist/SubscriptionService.cjs.map +0 -1
- package/dist/SubscriptionService.d.cts.map +0 -1
- package/dist/SubscriptionService.d.mts +0 -155
- package/dist/SubscriptionService.d.mts.map +0 -1
- package/dist/SubscriptionService.mjs.map +0 -1
- package/dist/constants.cjs +0 -74
- package/dist/constants.cjs.map +0 -1
- package/dist/constants.d.cts.map +0 -1
- package/dist/constants.d.mts +0 -50
- package/dist/constants.d.mts.map +0 -1
- package/dist/constants.mjs.map +0 -1
- package/dist/errors.cjs +0 -72
- package/dist/errors.cjs.map +0 -1
- package/dist/errors.d.cts.map +0 -1
- package/dist/errors.d.mts +0 -34
- package/dist/errors.d.mts.map +0 -1
- package/dist/errors.mjs.map +0 -1
- package/dist/index.cjs +0 -35
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts +0 -12
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/logger.cjs +0 -8
- package/dist/logger.cjs.map +0 -1
- package/dist/logger.d.cts +0 -5
- package/dist/logger.d.cts.map +0 -1
- package/dist/logger.d.mts +0 -5
- package/dist/logger.d.mts.map +0 -1
- package/dist/logger.mjs +0 -5
- package/dist/logger.mjs.map +0 -1
- package/dist/selectors.cjs +0 -52
- package/dist/selectors.cjs.map +0 -1
- package/dist/selectors.d.cts +0 -38
- 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/types.cjs +0 -100
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts +0 -645
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts.map +0 -1
- package/dist/types.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionService-structs.d.ts","sourceRoot":"","sources":["../src/SubscriptionService-structs.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAcpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiEnD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB7B,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOzC,CAAC;AA2BH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ7C,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;EAE1C,CAAC;AAEH,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;EAGhD,CAAC;AAEH,eAAO,MAAM,qCAAqC;;;;EAEhD,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;EAEtC,CAAC;AAEH,eAAO,MAAM,oCAAoC;;;;;;EAG/C,CAAC;AAgEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGhC,CAAC;AASH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASxC,CAAC;AAEH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE9C,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { array, boolean, enums, lazy, literal, nullable, number, object, optional, string, type, union } from
|
|
2
|
-
import { StrictHexStruct, CaipAccountIdStruct } from
|
|
3
|
-
import { CANCEL_TYPES, CRYPTO_AUTH_METHODS, CRYPTO_PAYMENT_METHOD_ERRORS, PAYMENT_TYPES, PRODUCT_TYPES, RECURRING_INTERVALS, MoneyAccountFeature, ShieldFeature, SUBSCRIPTION_STATUSES } from
|
|
1
|
+
import { array, boolean, enums, lazy, literal, nullable, number, object, optional, string, type, union, } from '@metamask/superstruct';
|
|
2
|
+
import { StrictHexStruct, CaipAccountIdStruct } from '@metamask/utils';
|
|
3
|
+
import { CANCEL_TYPES, CRYPTO_AUTH_METHODS, CRYPTO_PAYMENT_METHOD_ERRORS, PAYMENT_TYPES, PRODUCT_TYPES, RECURRING_INTERVALS, MoneyAccountFeature, ShieldFeature, SUBSCRIPTION_STATUSES, } from './types.js';
|
|
4
4
|
const ProductTypeStruct = enums(Object.values(PRODUCT_TYPES));
|
|
5
5
|
const CryptoAuthMethodStruct = enums(Object.values(CRYPTO_AUTH_METHODS));
|
|
6
6
|
const ShieldEntitlementsStruct = type({
|
|
@@ -203,4 +203,4 @@ export const SubscriptionEligibilityStruct = type({
|
|
|
203
203
|
hasAssignedCohortExpired: optional(boolean()),
|
|
204
204
|
});
|
|
205
205
|
export const SubscriptionEligibilityArrayStruct = array(SubscriptionEligibilityStruct);
|
|
206
|
-
//# sourceMappingURL=SubscriptionService-structs.
|
|
206
|
+
//# sourceMappingURL=SubscriptionService-structs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionService-structs.js","sourceRoot":"","sources":["../src/SubscriptionService-structs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,KAAK,GACN,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,4BAA4B,EAC5B,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AAC9D,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACzE,MAAM,wBAAwB,GAAG,IAAI,CAAC;IACpC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE;IACtC,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE;CAC3C,CAAC,CAAC;AACH,MAAM,8BAA8B,GAAG,IAAI,CAAC;IAC1C,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE;IAC9C,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE;IAC/C,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE;IAC9C,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;CAC5C,CAAC,CAAC;AACH,MAAM,yBAAyB,GAAG,IAAI,CAAC;IACrC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,QAAQ,CAC9B,IAAI,CAAC;QACH,YAAY,EAAE,wBAAwB;KACvC,CAAC,CACH;IACD,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAC1C,IAAI,CAAC;QACH,IAAI,EAAE,MAAM,EAAE;QACd,YAAY,EAAE,8BAA8B;KAC7C,CAAC,CACH;CACF,CAAC,CAAC;AACH,MAAM,uBAAuB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC1E,MAAM,wBAAwB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC7E,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5D,MAAM,8BAA8B,GAAG,KAAK,CAC1C,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAC5C,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE;IACpB,YAAY,EAAE,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,mCAAmC,GAAG,IAAI,CAAC;IAC/C,IAAI,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,EAAE,IAAI,CAAC;QACT,KAAK,EAAE,MAAM,EAAE;QACf,YAAY,EAAE,MAAM,EAAE;QACtB,KAAK,EAAE,MAAM,EAAE;KAChB,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,qCAAqC,GAAG,IAAI,CAAC;IACjD,IAAI,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,EAAE,IAAI,CAAC;QACX,YAAY,EAAE,eAAe;QAC7B,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,MAAM,EAAE;QACrB,KAAK,EAAE,QAAQ,CAAC,8BAA8B,CAAC;KAChD,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,+BAA+B,GAAG,KAAK,CAAC;IAC5C,mCAAmC;IACnC,qCAAqC;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACrC,EAAE,EAAE,MAAM,EAAE;IACZ,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;IAC9B,kBAAkB,EAAE,MAAM,EAAE;IAC5B,gBAAgB,EAAE,MAAM,EAAE;IAC1B,iBAAiB,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,EAAE,wBAAwB;IAChC,QAAQ,EAAE,uBAAuB;IACjC,aAAa,EAAE,+BAA+B;IAC9C,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,gBAAgB;IAC5B,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,oBAAoB,EAAE,OAAO,EAAE;IAC/B,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC;IACjD,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC,kBAAkB,CAAC;IACxC,eAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACzC,mBAAmB,EAAE,QAAQ,CAAC,yBAAyB,CAAC;IACxD,gBAAgB,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAC9C,eAAe,EAAE,QAAQ,CAAC,mBAAmB,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC/B,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAClC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC/B,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,IAAI,CAAC;IACrC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACnC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpC,SAAS,EAAE,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,CAAC;IACrD,QAAQ,EAAE,OAAO,EAAE;IACnB,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACnC,QAAQ,EAAE,IAAI,CAAC;QACb,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,yBAAyB;KACnC,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC;IAClD,kBAAkB,EAAE,MAAM,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qCAAqC,GAAG,IAAI,CAAC;IACxD,cAAc,EAAE,MAAM,EAAE;IACxB,MAAM,EAAE,wBAAwB;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qCAAqC,GAAG,IAAI,CAAC;IACxD,WAAW,EAAE,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;IAC9C,GAAG,EAAE,MAAM,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oCAAoC,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,OAAO,EAAE;IAClB,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,uBAAuB;IACjC,UAAU,EAAE,MAAM,EAAE;IACpB,YAAY,EAAE,MAAM,EAAE;IACtB,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE;IACzB,gBAAgB,EAAE,MAAM,EAAE;IAC1B,0BAA0B,EAAE,MAAM,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE,KAAK,CAAC,kBAAkB,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,oCAAoC,GAAG,IAAI,CAAC;IAChD,GAAG,EAAE,MAAM,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAA6B,IAAI,CAAC,GAAG,EAAE,CACjE,KAAK,CAAC;IACJ,MAAM,CAAC;QACL,MAAM,EAAE,MAAM,EAAE;QAChB,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,MAAM,EAAE;QAClB,cAAc,EAAE,QAAQ,CAAC,oCAAoC,CAAC;QAC9D,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;QAC3B,iBAAiB,EAAE,eAAe;QAClC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACjD,CAAC;IACF,MAAM,CAAC;QACL,MAAM,EAAE,MAAM,EAAE;QAChB,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,MAAM,EAAE;QAClB,cAAc,EAAE,QAAQ,CAAC,oCAAoC,CAAC;QAC9D,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACjD,CAAC;CACH,CAAC,CACyB,CAAC;AAE9B,MAAM,sBAAsB,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,eAAe;IACxB,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC;IAC1C,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC;IACrC,sBAAsB,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,KAAK,CAAC;IACvC,MAAM,CAAC;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;KAC7C,CAAC;IACF,MAAM,CAAC;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrC,gBAAgB,EAAE,QAAQ,CAAC,sBAAsB,CAAC;QAClD,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5C,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;KAChD,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC;IACrC,cAAc,EAAE,KAAK,CAAC,0BAA0B,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE;IAChB,eAAe,EAAE,MAAM,EAAE;IACzB,QAAQ,EAAE,MAAM,EAAE;IAClB,QAAQ,EAAE,OAAO,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;IAChD,OAAO,EAAE,iBAAiB;IAC1B,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,iBAAiB,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACtC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,wBAAwB,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,CACrD,6BAA6B,CAC9B,CAAC","sourcesContent":["import {\n array,\n boolean,\n enums,\n lazy,\n literal,\n nullable,\n number,\n object,\n optional,\n string,\n type,\n union,\n} from '@metamask/superstruct';\nimport type { Struct } from '@metamask/superstruct';\nimport { StrictHexStruct, CaipAccountIdStruct } from '@metamask/utils';\n\nimport {\n CANCEL_TYPES,\n CRYPTO_AUTH_METHODS,\n CRYPTO_PAYMENT_METHOD_ERRORS,\n PAYMENT_TYPES,\n PRODUCT_TYPES,\n RECURRING_INTERVALS,\n MoneyAccountFeature,\n ShieldFeature,\n SUBSCRIPTION_STATUSES,\n} from './types.js';\nimport type { TokenPaymentInfo } from './types.js';\n\nconst ProductTypeStruct = enums(Object.values(PRODUCT_TYPES));\nconst CryptoAuthMethodStruct = enums(Object.values(CRYPTO_AUTH_METHODS));\nconst ShieldEntitlementsStruct = type({\n [ShieldFeature.ShieldClaim]: boolean(),\n [ShieldFeature.PrioritySupport]: boolean(),\n});\nconst MoneyAccountEntitlementsStruct = type({\n [MoneyAccountFeature.SwapFeeWaiver]: boolean(),\n [MoneyAccountFeature.PerpsFeeWaiver]: boolean(),\n [MoneyAccountFeature.PredictFreeTx]: boolean(),\n [MoneyAccountFeature.PremiumApy]: boolean(),\n});\nconst ProductEntitlementsStruct = type({\n [PRODUCT_TYPES.SHIELD]: optional(\n type({\n entitlements: ShieldEntitlementsStruct,\n }),\n ),\n [PRODUCT_TYPES.MONEY_ACCOUNT_PLUS]: optional(\n type({\n plan: string(),\n entitlements: MoneyAccountEntitlementsStruct,\n }),\n ),\n});\nconst RecurringIntervalStruct = enums(Object.values(RECURRING_INTERVALS));\nconst SubscriptionStatusStruct = enums(Object.values(SUBSCRIPTION_STATUSES));\nconst CancelTypeStruct = enums(Object.values(CANCEL_TYPES));\nconst CryptoPaymentMethodErrorStruct = enums(\n Object.values(CRYPTO_PAYMENT_METHOD_ERRORS),\n);\n\nconst ProductStruct = type({\n name: ProductTypeStruct,\n currency: enums(['usd']),\n unitAmount: number(),\n unitDecimals: number(),\n});\n\nconst SubscriptionCardPaymentMethodStruct = type({\n type: enums([PAYMENT_TYPES.byCard]),\n card: type({\n brand: string(),\n displayBrand: string(),\n last4: string(),\n }),\n});\n\nconst SubscriptionCryptoPaymentMethodStruct = type({\n type: enums([PAYMENT_TYPES.byCrypto]),\n crypto: type({\n payerAddress: StrictHexStruct,\n chainId: StrictHexStruct,\n tokenSymbol: string(),\n error: optional(CryptoPaymentMethodErrorStruct),\n }),\n});\n\nconst SubscriptionPaymentMethodStruct = union([\n SubscriptionCardPaymentMethodStruct,\n SubscriptionCryptoPaymentMethodStruct,\n]);\n\nexport const SubscriptionStruct = type({\n id: string(),\n products: array(ProductStruct),\n currentPeriodStart: string(),\n currentPeriodEnd: string(),\n cancelAtPeriodEnd: optional(boolean()),\n status: SubscriptionStatusStruct,\n interval: RecurringIntervalStruct,\n paymentMethod: SubscriptionPaymentMethodStruct,\n trialPeriodDays: optional(number()),\n trialStart: optional(string()),\n trialEnd: optional(string()),\n endDate: optional(string()),\n canceledAt: optional(string()),\n cancelType: CancelTypeStruct,\n inactiveAt: optional(string()),\n isEligibleForSupport: boolean(),\n billingCycles: optional(number()),\n});\n\nexport const GetSubscriptionsResponseStruct = type({\n customerId: optional(string()),\n subscriptions: array(SubscriptionStruct),\n trialedProducts: array(ProductTypeStruct),\n productEntitlements: optional(ProductEntitlementsStruct),\n lastSubscription: optional(SubscriptionStruct),\n rewardAccountId: optional(CaipAccountIdStruct),\n});\n\nconst SwapsBenefitUsageStruct = type({\n feeBips: nullable(string()),\n capMicroUsd: optional(number()),\n consumedMicroUsd: optional(number()),\n remainingMicroUsd: nullable(number()),\n exhausted: boolean(),\n});\n\nconst PerpsBenefitUsageStruct = type({\n builderFeeBips: nullable(string()),\n builderCode: nullable(string()),\n capMicroUsd: optional(number()),\n consumedMicroUsd: optional(number()),\n remainingMicroUsd: nullable(number()),\n exhausted: boolean(),\n});\n\nconst PredictBenefitUsageStruct = type({\n builderCode: nullable(string()),\n capTxCount: optional(number()),\n consumedTxCount: optional(number()),\n remainingTxCount: nullable(number()),\n exhausted: boolean(),\n});\n\nexport const SubscriptionBenefitsResponseStruct = type({\n eligible: boolean(),\n billingPeriodId: nullable(string()),\n products: type({\n swaps: SwapsBenefitUsageStruct,\n perps: PerpsBenefitUsageStruct,\n predict: PredictBenefitUsageStruct,\n }),\n});\n\nexport const StartSubscriptionResponseStruct = type({\n checkoutSessionUrl: string(),\n});\n\nexport const StartCryptoSubscriptionResponseStruct = type({\n subscriptionId: string(),\n status: SubscriptionStatusStruct,\n});\n\nexport const UpdatePaymentMethodCardResponseStruct = type({\n redirectUrl: string(),\n});\n\nexport const BillingPortalResponseStruct = type({\n url: string(),\n});\n\nexport const SubscriptionApiGeneralResponseStruct = type({\n success: boolean(),\n message: optional(string()),\n});\n\nconst ProductPriceStruct = type({\n interval: RecurringIntervalStruct,\n unitAmount: number(),\n unitDecimals: number(),\n currency: enums(['usd']),\n trialPeriodDays: number(),\n minBillingCycles: number(),\n minBillingCyclesForBalance: number(),\n});\n\nconst ProductPricingStruct = type({\n name: ProductTypeStruct,\n prices: array(ProductPriceStruct),\n});\n\nconst TokenPaymentInfoConversionRateStruct = type({\n usd: string(),\n});\n\nconst TokenPaymentInfoStruct: Struct<TokenPaymentInfo> = lazy(() =>\n union([\n object({\n symbol: string(),\n address: StrictHexStruct,\n decimals: number(),\n conversionRate: optional(TokenPaymentInfoConversionRateStruct),\n isVaultShare: literal(true),\n accountantAddress: StrictHexStruct,\n sources: optional(array(TokenPaymentInfoStruct)),\n }),\n object({\n symbol: string(),\n address: StrictHexStruct,\n decimals: number(),\n conversionRate: optional(TokenPaymentInfoConversionRateStruct),\n isVaultShare: optional(literal(false)),\n sources: optional(array(TokenPaymentInfoStruct)),\n }),\n ]),\n) as Struct<TokenPaymentInfo>;\n\nconst ChainPaymentInfoStruct = type({\n chainId: StrictHexStruct,\n paymentAddress: StrictHexStruct,\n delegateAddress: optional(StrictHexStruct),\n tokens: array(TokenPaymentInfoStruct),\n isSponsorshipSupported: optional(boolean()),\n});\n\nconst PricingPaymentMethodStruct = union([\n object({\n type: enums([PAYMENT_TYPES.byCard]),\n products: optional(array(ProductTypeStruct)),\n }),\n object({\n type: enums([PAYMENT_TYPES.byCrypto]),\n cryptoAuthMethod: optional(CryptoAuthMethodStruct),\n products: optional(array(ProductTypeStruct)),\n chains: optional(array(ChainPaymentInfoStruct)),\n }),\n]);\n\nexport const PricingResponseStruct = type({\n products: array(ProductPricingStruct),\n paymentMethods: array(PricingPaymentMethodStruct),\n});\n\nconst CohortStruct = type({\n cohort: string(),\n eligibilityRate: number(),\n priority: number(),\n eligible: boolean(),\n});\n\nexport const SubscriptionEligibilityStruct = type({\n product: ProductTypeStruct,\n canSubscribe: optional(boolean()),\n canViewEntryModal: optional(boolean()),\n modalType: optional(enums(['A', 'B'])),\n cohorts: optional(array(CohortStruct)),\n assignedCohort: optional(nullable(string())),\n assignedAt: optional(string()),\n hasAssignedCohortExpired: optional(boolean()),\n});\n\nexport const SubscriptionEligibilityArrayStruct = array(\n SubscriptionEligibilityStruct,\n);\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { DataServiceCacheUpdatedEvent, DataServiceGranularCacheUpdatedEvent, DataServiceInvalidateQueriesAction } from
|
|
2
|
-
import { BaseDataService } from
|
|
3
|
-
import type { CreateServicePolicyOptions } from
|
|
4
|
-
import type { Messenger } from
|
|
5
|
-
import type { AuthenticationController } from
|
|
6
|
-
import type { QueryClientConfig } from
|
|
7
|
-
import { Env } from
|
|
8
|
-
import type { SubscriptionServiceMethodActions } from
|
|
9
|
-
import type { AssignCohortRequest, BillingPortalResponse, CancelSubscriptionRequest, GetSubscriptionsEligibilitiesRequest, GetSubscriptionsResponse, LinkRewardsRequest, PricingResponse, StartCryptoSubscriptionRequest, StartCryptoSubscriptionResponse, StartSubscriptionRequest, StartSubscriptionResponse, SubmitSponsorshipIntentsRequest, SubmitUserEventRequest, Subscription, SubscriptionApiGeneralResponse, SubscriptionBenefitsResponse, SubscriptionEligibility, UpdatePaymentMethodCardRequest, UpdatePaymentMethodCardResponse, UpdatePaymentMethodCryptoRequest } from
|
|
1
|
+
import type { DataServiceCacheUpdatedEvent, DataServiceGranularCacheUpdatedEvent, DataServiceInvalidateQueriesAction } from '@metamask/base-data-service';
|
|
2
|
+
import { BaseDataService } from '@metamask/base-data-service';
|
|
3
|
+
import type { CreateServicePolicyOptions } from '@metamask/controller-utils';
|
|
4
|
+
import type { Messenger } from '@metamask/messenger';
|
|
5
|
+
import type { AuthenticationController } from '@metamask/profile-sync-controller';
|
|
6
|
+
import type { QueryClientConfig } from '@tanstack/query-core';
|
|
7
|
+
import { Env } from './constants.js';
|
|
8
|
+
import type { SubscriptionServiceMethodActions } from './SubscriptionService-method-action-types.js';
|
|
9
|
+
import type { AssignCohortRequest, BillingPortalResponse, CancelSubscriptionRequest, GetSubscriptionsEligibilitiesRequest, GetSubscriptionsResponse, LinkRewardsRequest, PricingResponse, StartCryptoSubscriptionRequest, StartCryptoSubscriptionResponse, StartSubscriptionRequest, StartSubscriptionResponse, SubmitSponsorshipIntentsRequest, SubmitUserEventRequest, Subscription, SubscriptionApiGeneralResponse, SubscriptionBenefitsResponse, SubscriptionEligibility, UpdatePaymentMethodCardRequest, UpdatePaymentMethodCardResponse, UpdatePaymentMethodCryptoRequest } from './types.js';
|
|
10
10
|
export declare const serviceName = "SubscriptionService";
|
|
11
11
|
export declare const SUBSCRIPTION_URL: (env: Env, path: string) => string;
|
|
12
12
|
export type SubscriptionServiceInvalidateQueriesAction = DataServiceInvalidateQueriesAction<typeof serviceName>;
|
|
@@ -152,4 +152,4 @@ export declare class SubscriptionService extends BaseDataService<typeof serviceN
|
|
|
152
152
|
getBillingPortalUrl(): Promise<BillingPortalResponse>;
|
|
153
153
|
}
|
|
154
154
|
export {};
|
|
155
|
-
//# sourceMappingURL=SubscriptionService.d.
|
|
155
|
+
//# sourceMappingURL=SubscriptionService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionService.d.ts","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _SubscriptionService_instances, _SubscriptionService_env, _SubscriptionService_fetch, _SubscriptionService_captureException, _SubscriptionService_fetchJson, _SubscriptionService_assertValidCryptoAuthCombo, _SubscriptionService_getAuthenticatedContext, _SubscriptionService_headersForToken, _SubscriptionService_getSubscriptionApiUrl;
|
|
13
|
-
import { BaseDataService } from "@metamask/base-data-service";
|
|
14
|
-
import { handleWhen, HttpError } from "@metamask/controller-utils";
|
|
15
|
-
import { create } from "@metamask/superstruct";
|
|
16
|
-
import { Env, getEnvUrls, SubscriptionControllerErrorMessage, SubscriptionServiceErrorMessage } from "./constants.mjs";
|
|
17
|
-
import { createSentryError, getSubscriptionErrorFromResponse, SubscriptionServiceError } from "./errors.mjs";
|
|
18
|
-
import { createModuleLogger, projectLogger } from "./logger.mjs";
|
|
19
|
-
import { BillingPortalResponseStruct, GetSubscriptionsResponseStruct, PricingResponseStruct, StartCryptoSubscriptionResponseStruct, StartSubscriptionResponseStruct, SubscriptionApiGeneralResponseStruct, SubscriptionBenefitsResponseStruct, SubscriptionEligibilityArrayStruct, SubscriptionStruct, UpdatePaymentMethodCardResponseStruct } from "./SubscriptionService-structs.mjs";
|
|
20
|
-
import { CRYPTO_AUTH_METHODS } from "./types.mjs";
|
|
1
|
+
import { BaseDataService } from '@metamask/base-data-service';
|
|
2
|
+
import { handleWhen, HttpError } from '@metamask/controller-utils';
|
|
3
|
+
import { create } from '@metamask/superstruct';
|
|
4
|
+
import { Env, getEnvUrls, SubscriptionControllerErrorMessage, SubscriptionServiceErrorMessage, } from './constants.js';
|
|
5
|
+
import { createSentryError, getSubscriptionErrorFromResponse, SubscriptionServiceError, } from './errors.js';
|
|
6
|
+
import { createModuleLogger, projectLogger } from './logger.js';
|
|
7
|
+
import { BillingPortalResponseStruct, GetSubscriptionsResponseStruct, PricingResponseStruct, StartCryptoSubscriptionResponseStruct, StartSubscriptionResponseStruct, SubscriptionApiGeneralResponseStruct, SubscriptionBenefitsResponseStruct, SubscriptionEligibilityArrayStruct, SubscriptionStruct, UpdatePaymentMethodCardResponseStruct, } from './SubscriptionService-structs.js';
|
|
8
|
+
import { CRYPTO_AUTH_METHODS } from './types.js';
|
|
21
9
|
export const serviceName = 'SubscriptionService';
|
|
22
10
|
export const SUBSCRIPTION_URL = (env, path) => `${getEnvUrls(env).subscriptionApiUrl}/v1/${path}`;
|
|
23
11
|
const MESSENGER_EXPOSED_METHODS = [
|
|
@@ -59,6 +47,9 @@ const DEFAULT_POLICY_OPTIONS = {
|
|
|
59
47
|
* `AuthenticationController:getSessionProfile`.
|
|
60
48
|
*/
|
|
61
49
|
export class SubscriptionService extends BaseDataService {
|
|
50
|
+
#env;
|
|
51
|
+
#fetch;
|
|
52
|
+
#captureException;
|
|
62
53
|
constructor({ messenger, fetchFunction = globalThis.fetch, env = Env.PRD, captureException, queryClientConfig = {}, policyOptions = {}, }) {
|
|
63
54
|
super({
|
|
64
55
|
name: serviceName,
|
|
@@ -66,13 +57,9 @@ export class SubscriptionService extends BaseDataService {
|
|
|
66
57
|
queryClientConfig,
|
|
67
58
|
policyOptions: { ...DEFAULT_POLICY_OPTIONS, ...policyOptions },
|
|
68
59
|
});
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
_SubscriptionService_captureException.set(this, void 0);
|
|
73
|
-
__classPrivateFieldSet(this, _SubscriptionService_env, env, "f");
|
|
74
|
-
__classPrivateFieldSet(this, _SubscriptionService_fetch, fetchFunction, "f");
|
|
75
|
-
__classPrivateFieldSet(this, _SubscriptionService_captureException, captureException, "f");
|
|
60
|
+
this.#env = env;
|
|
61
|
+
this.#fetch = fetchFunction;
|
|
62
|
+
this.#captureException = captureException;
|
|
76
63
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
77
64
|
}
|
|
78
65
|
/**
|
|
@@ -81,8 +68,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
81
68
|
* @returns The subscriptions response.
|
|
82
69
|
*/
|
|
83
70
|
async getSubscriptions() {
|
|
84
|
-
const { profileKey, bearerToken } = await
|
|
85
|
-
const jsonResponse = await
|
|
71
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
72
|
+
const jsonResponse = await this.#fetchJson({
|
|
86
73
|
profileKey,
|
|
87
74
|
bearerToken,
|
|
88
75
|
methodName: 'getSubscriptions',
|
|
@@ -98,8 +85,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
98
85
|
* @returns The benefits response.
|
|
99
86
|
*/
|
|
100
87
|
async getBenefits() {
|
|
101
|
-
const { profileKey, bearerToken } = await
|
|
102
|
-
const jsonResponse = await
|
|
88
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
89
|
+
const jsonResponse = await this.#fetchJson({
|
|
103
90
|
profileKey,
|
|
104
91
|
bearerToken,
|
|
105
92
|
methodName: 'getBenefits',
|
|
@@ -118,9 +105,9 @@ export class SubscriptionService extends BaseDataService {
|
|
|
118
105
|
* @returns The updated subscription.
|
|
119
106
|
*/
|
|
120
107
|
async cancelSubscription(params) {
|
|
121
|
-
const { profileKey, bearerToken } = await
|
|
108
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
122
109
|
const path = `subscriptions/${params.subscriptionId}/cancel`;
|
|
123
|
-
const jsonResponse = await
|
|
110
|
+
const jsonResponse = await this.#fetchJson({
|
|
124
111
|
profileKey,
|
|
125
112
|
bearerToken,
|
|
126
113
|
methodName: 'cancelSubscription',
|
|
@@ -142,9 +129,9 @@ export class SubscriptionService extends BaseDataService {
|
|
|
142
129
|
* @returns The updated subscription.
|
|
143
130
|
*/
|
|
144
131
|
async unCancelSubscription(params) {
|
|
145
|
-
const { profileKey, bearerToken } = await
|
|
132
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
146
133
|
const path = `subscriptions/${params.subscriptionId}/uncancel`;
|
|
147
|
-
const jsonResponse = await
|
|
134
|
+
const jsonResponse = await this.#fetchJson({
|
|
148
135
|
profileKey,
|
|
149
136
|
bearerToken,
|
|
150
137
|
methodName: 'unCancelSubscription',
|
|
@@ -167,8 +154,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
167
154
|
if (request.products.length === 0) {
|
|
168
155
|
throw new SubscriptionServiceError(SubscriptionControllerErrorMessage.SubscriptionProductsEmpty);
|
|
169
156
|
}
|
|
170
|
-
const { profileKey, bearerToken } = await
|
|
171
|
-
const jsonResponse = await
|
|
157
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
158
|
+
const jsonResponse = await this.#fetchJson({
|
|
172
159
|
profileKey,
|
|
173
160
|
bearerToken,
|
|
174
161
|
methodName: 'startSubscriptionWithCard',
|
|
@@ -193,9 +180,9 @@ export class SubscriptionService extends BaseDataService {
|
|
|
193
180
|
if (request.products.length === 0) {
|
|
194
181
|
throw new SubscriptionServiceError(SubscriptionControllerErrorMessage.SubscriptionProductsEmpty);
|
|
195
182
|
}
|
|
196
|
-
|
|
197
|
-
const { profileKey, bearerToken } = await
|
|
198
|
-
const jsonResponse = await
|
|
183
|
+
this.#assertValidCryptoAuthCombo(request);
|
|
184
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
185
|
+
const jsonResponse = await this.#fetchJson({
|
|
199
186
|
profileKey,
|
|
200
187
|
bearerToken,
|
|
201
188
|
methodName: 'startSubscriptionWithCrypto',
|
|
@@ -214,9 +201,9 @@ export class SubscriptionService extends BaseDataService {
|
|
|
214
201
|
* @returns The redirect URL response.
|
|
215
202
|
*/
|
|
216
203
|
async updatePaymentMethodCard(request) {
|
|
217
|
-
const { profileKey, bearerToken } = await
|
|
204
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
218
205
|
const path = `subscriptions/${request.subscriptionId}/payment-method/card`;
|
|
219
|
-
const jsonResponse = await
|
|
206
|
+
const jsonResponse = await this.#fetchJson({
|
|
220
207
|
profileKey,
|
|
221
208
|
bearerToken,
|
|
222
209
|
methodName: 'updatePaymentMethodCard',
|
|
@@ -237,9 +224,9 @@ export class SubscriptionService extends BaseDataService {
|
|
|
237
224
|
* @param request - The update payment method request.
|
|
238
225
|
*/
|
|
239
226
|
async updatePaymentMethodCrypto(request) {
|
|
240
|
-
const { profileKey, bearerToken } = await
|
|
227
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
241
228
|
const path = `subscriptions/${request.subscriptionId}/payment-method/crypto`;
|
|
242
|
-
await
|
|
229
|
+
await this.#fetchJson({
|
|
243
230
|
profileKey,
|
|
244
231
|
bearerToken,
|
|
245
232
|
methodName: 'updatePaymentMethodCrypto',
|
|
@@ -260,12 +247,12 @@ export class SubscriptionService extends BaseDataService {
|
|
|
260
247
|
* @returns The eligibility for a shield subscription
|
|
261
248
|
*/
|
|
262
249
|
async getSubscriptionsEligibilities(request) {
|
|
263
|
-
const { profileKey, bearerToken } = await
|
|
250
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
264
251
|
let queryParams;
|
|
265
252
|
if (request?.balanceCategory !== undefined) {
|
|
266
253
|
queryParams = { balanceCategory: request.balanceCategory };
|
|
267
254
|
}
|
|
268
|
-
const jsonResponse = await
|
|
255
|
+
const jsonResponse = await this.#fetchJson({
|
|
269
256
|
profileKey,
|
|
270
257
|
bearerToken,
|
|
271
258
|
methodName: 'getSubscriptionsEligibilities',
|
|
@@ -291,8 +278,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
291
278
|
* @example { event: SubscriptionUserEvent.ShieldEntryModalViewed, cohort: 'post_tx' }
|
|
292
279
|
*/
|
|
293
280
|
async submitUserEvent(request) {
|
|
294
|
-
const { profileKey, bearerToken } = await
|
|
295
|
-
await
|
|
281
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
282
|
+
await this.#fetchJson({
|
|
296
283
|
profileKey,
|
|
297
284
|
bearerToken,
|
|
298
285
|
methodName: 'submitUserEvent',
|
|
@@ -310,8 +297,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
310
297
|
* @example { cohort: 'post_tx' }
|
|
311
298
|
*/
|
|
312
299
|
async assignUserToCohort(request) {
|
|
313
|
-
const { profileKey, bearerToken } = await
|
|
314
|
-
await
|
|
300
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
301
|
+
await this.#fetchJson({
|
|
315
302
|
profileKey,
|
|
316
303
|
bearerToken,
|
|
317
304
|
methodName: 'assignUserToCohort',
|
|
@@ -332,8 +319,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
332
319
|
* @example { address: '0x1234567890123456789012345678901234567890', products: [ProductType.Shield] }
|
|
333
320
|
*/
|
|
334
321
|
async submitSponsorshipIntents(request) {
|
|
335
|
-
const { profileKey, bearerToken } = await
|
|
336
|
-
await
|
|
322
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
323
|
+
await this.#fetchJson({
|
|
337
324
|
profileKey,
|
|
338
325
|
bearerToken,
|
|
339
326
|
methodName: 'submitSponsorshipIntents',
|
|
@@ -352,8 +339,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
352
339
|
* @returns The response from the API.
|
|
353
340
|
*/
|
|
354
341
|
async linkRewards(request) {
|
|
355
|
-
const { profileKey, bearerToken } = await
|
|
356
|
-
const jsonResponse = await
|
|
342
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
343
|
+
const jsonResponse = await this.#fetchJson({
|
|
357
344
|
profileKey,
|
|
358
345
|
bearerToken,
|
|
359
346
|
methodName: 'linkRewards',
|
|
@@ -371,8 +358,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
371
358
|
* @returns The pricing response.
|
|
372
359
|
*/
|
|
373
360
|
async getPricing() {
|
|
374
|
-
const { profileKey, bearerToken } = await
|
|
375
|
-
const jsonResponse = await
|
|
361
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
362
|
+
const jsonResponse = await this.#fetchJson({
|
|
376
363
|
profileKey,
|
|
377
364
|
bearerToken,
|
|
378
365
|
methodName: 'getPricing',
|
|
@@ -388,8 +375,8 @@ export class SubscriptionService extends BaseDataService {
|
|
|
388
375
|
* @returns The billing portal response.
|
|
389
376
|
*/
|
|
390
377
|
async getBillingPortalUrl() {
|
|
391
|
-
const { profileKey, bearerToken } = await
|
|
392
|
-
const jsonResponse = await
|
|
378
|
+
const { profileKey, bearerToken } = await this.#getAuthenticatedContext();
|
|
379
|
+
const jsonResponse = await this.#fetchJson({
|
|
393
380
|
profileKey,
|
|
394
381
|
bearerToken,
|
|
395
382
|
methodName: 'getBillingPortalUrl',
|
|
@@ -399,94 +386,105 @@ export class SubscriptionService extends BaseDataService {
|
|
|
399
386
|
});
|
|
400
387
|
return create(jsonResponse, BillingPortalResponseStruct);
|
|
401
388
|
}
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
389
|
+
async #fetchJson({ profileKey, bearerToken, methodName, requestParams, path, method = 'GET', body, queryParams, errorMessage, }) {
|
|
390
|
+
const url = this.#getSubscriptionApiUrl(path);
|
|
391
|
+
if (queryParams) {
|
|
392
|
+
Object.entries(queryParams).forEach(([key, value]) => {
|
|
393
|
+
url.searchParams.append(key, value);
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
try {
|
|
397
|
+
return await this.fetchQuery({
|
|
398
|
+
queryKey: [
|
|
399
|
+
`${this.name}:${methodName}`,
|
|
400
|
+
profileKey,
|
|
401
|
+
requestParams,
|
|
402
|
+
],
|
|
403
|
+
staleTime: 0,
|
|
404
|
+
gcTime: 0,
|
|
405
|
+
queryFn: async () => {
|
|
406
|
+
const response = await this.#fetch(url.toString(), {
|
|
407
|
+
method,
|
|
408
|
+
headers: {
|
|
409
|
+
'Content-Type': 'application/json',
|
|
410
|
+
...this.#headersForToken(bearerToken),
|
|
411
|
+
},
|
|
412
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
413
|
+
});
|
|
414
|
+
if (!response.ok) {
|
|
415
|
+
const apiError = await getSubscriptionErrorFromResponse(response);
|
|
416
|
+
throw new HttpError(response.status, apiError.message);
|
|
417
|
+
}
|
|
418
|
+
return response.json();
|
|
419
|
+
},
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
log(errorMessage, error);
|
|
424
|
+
const errorMessageWithUrl = `${errorMessage} (url: ${url.toString()})`;
|
|
425
|
+
const errorToCapture = error instanceof Error ? error : new Error(errorMessage);
|
|
426
|
+
this.#captureException?.(createSentryError(errorMessageWithUrl, errorToCapture));
|
|
427
|
+
if (error instanceof SubscriptionServiceError) {
|
|
428
|
+
throw error;
|
|
429
|
+
}
|
|
430
|
+
throw new SubscriptionServiceError(`Failed to make request. ${errorMessageWithUrl}`, {
|
|
431
|
+
cause: errorToCapture,
|
|
432
|
+
});
|
|
443
433
|
}
|
|
444
|
-
throw new SubscriptionServiceError(`Failed to make request. ${errorMessageWithUrl}`, {
|
|
445
|
-
cause: errorToCapture,
|
|
446
|
-
});
|
|
447
|
-
}
|
|
448
|
-
}, _SubscriptionService_assertValidCryptoAuthCombo = function _SubscriptionService_assertValidCryptoAuthCombo(request) {
|
|
449
|
-
const method = request.cryptoAuthMethod ?? CRYPTO_AUTH_METHODS.ERC20_APPROVAL;
|
|
450
|
-
const hasRawTransaction = Boolean(request.rawTransaction);
|
|
451
|
-
const hasDelegationHash = Boolean(request.delegationHash);
|
|
452
|
-
const isValidErc20Approval = method === CRYPTO_AUTH_METHODS.ERC20_APPROVAL &&
|
|
453
|
-
hasRawTransaction &&
|
|
454
|
-
!hasDelegationHash;
|
|
455
|
-
const isValidDelegation = method === CRYPTO_AUTH_METHODS.DELEGATION &&
|
|
456
|
-
hasDelegationHash &&
|
|
457
|
-
!hasRawTransaction;
|
|
458
|
-
if (!isValidErc20Approval && !isValidDelegation) {
|
|
459
|
-
throw new SubscriptionServiceError(SubscriptionServiceErrorMessage.InvalidCryptoAuthCombo);
|
|
460
434
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
435
|
+
/**
|
|
436
|
+
* Ensures the request uses exactly one crypto auth method: ERC-20 approval
|
|
437
|
+
* (`rawTransaction`, default) or delegation (`delegationHash`).
|
|
438
|
+
*
|
|
439
|
+
* @param request - The start crypto subscription request.
|
|
440
|
+
* @throws If both, neither, or a mismatched combo of auth fields is provided.
|
|
441
|
+
*/
|
|
442
|
+
#assertValidCryptoAuthCombo(request) {
|
|
443
|
+
const method = request.cryptoAuthMethod ?? CRYPTO_AUTH_METHODS.ERC20_APPROVAL;
|
|
444
|
+
const hasRawTransaction = Boolean(request.rawTransaction);
|
|
445
|
+
const hasDelegationHash = Boolean(request.delegationHash);
|
|
446
|
+
const isValidErc20Approval = method === CRYPTO_AUTH_METHODS.ERC20_APPROVAL &&
|
|
447
|
+
hasRawTransaction &&
|
|
448
|
+
!hasDelegationHash;
|
|
449
|
+
const isValidDelegation = method === CRYPTO_AUTH_METHODS.DELEGATION &&
|
|
450
|
+
hasDelegationHash &&
|
|
451
|
+
!hasRawTransaction;
|
|
452
|
+
if (!isValidErc20Approval && !isValidDelegation) {
|
|
453
|
+
throw new SubscriptionServiceError(SubscriptionServiceErrorMessage.InvalidCryptoAuthCombo);
|
|
454
|
+
}
|
|
468
455
|
}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
}
|
|
456
|
+
async #getAuthenticatedContext() {
|
|
457
|
+
try {
|
|
458
|
+
const [bearerToken, sessionProfile] = await Promise.all([
|
|
459
|
+
this.messenger.call('AuthenticationController:getBearerToken'),
|
|
460
|
+
this.messenger.call('AuthenticationController:getSessionProfile'),
|
|
461
|
+
]);
|
|
462
|
+
return { profileKey: sessionProfile.profileId, bearerToken };
|
|
463
|
+
}
|
|
464
|
+
catch (error) {
|
|
465
|
+
const errorMessage = error instanceof Error
|
|
466
|
+
? error.message
|
|
467
|
+
: 'Unknown error when getting authorization header';
|
|
468
|
+
this.#captureException?.(createSentryError(`Failed to get authorization header. ${errorMessage}`, error instanceof Error ? error : new Error(errorMessage)));
|
|
469
|
+
throw new SubscriptionServiceError(`Failed to get authorization header. ${errorMessage}`, {
|
|
470
|
+
cause: error instanceof Error ? error : new Error(errorMessage),
|
|
471
|
+
});
|
|
472
|
+
}
|
|
477
473
|
}
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
}, _SubscriptionService_getSubscriptionApiUrl = function _SubscriptionService_getSubscriptionApiUrl(path) {
|
|
481
|
-
try {
|
|
482
|
-
return new URL(SUBSCRIPTION_URL(__classPrivateFieldGet(this, _SubscriptionService_env, "f"), path));
|
|
474
|
+
#headersForToken(bearerToken) {
|
|
475
|
+
return { Authorization: `Bearer ${bearerToken}` };
|
|
483
476
|
}
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
477
|
+
#getSubscriptionApiUrl(path) {
|
|
478
|
+
try {
|
|
479
|
+
return new URL(SUBSCRIPTION_URL(this.#env, path));
|
|
480
|
+
}
|
|
481
|
+
catch (error) {
|
|
482
|
+
const errorMessage = error instanceof Error
|
|
483
|
+
? error.message
|
|
484
|
+
: 'Unknown error when getting subscription API URL';
|
|
485
|
+
this.#captureException?.(createSentryError(`Failed to get subscription API URL. ${errorMessage}`, error instanceof Error ? error : new Error(errorMessage)));
|
|
486
|
+
throw error;
|
|
487
|
+
}
|
|
490
488
|
}
|
|
491
|
-
}
|
|
492
|
-
//# sourceMappingURL=SubscriptionService.
|
|
489
|
+
}
|
|
490
|
+
//# sourceMappingURL=SubscriptionService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionService.js","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n DataServiceCacheUpdatedEvent,\n DataServiceGranularCacheUpdatedEvent,\n DataServiceInvalidateQueriesAction,\n} from '@metamask/base-data-service';\nimport { BaseDataService } from '@metamask/base-data-service';\nimport type { CreateServicePolicyOptions } from '@metamask/controller-utils';\nimport { handleWhen, HttpError } from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type { AuthenticationController } from '@metamask/profile-sync-controller';\nimport { create } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\nimport type { QueryClientConfig } from '@tanstack/query-core';\n\nimport {\n Env,\n getEnvUrls,\n SubscriptionControllerErrorMessage,\n SubscriptionServiceErrorMessage,\n} from './constants.js';\nimport {\n createSentryError,\n getSubscriptionErrorFromResponse,\n SubscriptionServiceError,\n} from './errors.js';\nimport { createModuleLogger, projectLogger } from './logger.js';\nimport type { SubscriptionServiceMethodActions } from './SubscriptionService-method-action-types.js';\nimport {\n BillingPortalResponseStruct,\n GetSubscriptionsResponseStruct,\n PricingResponseStruct,\n StartCryptoSubscriptionResponseStruct,\n StartSubscriptionResponseStruct,\n SubscriptionApiGeneralResponseStruct,\n SubscriptionBenefitsResponseStruct,\n SubscriptionEligibilityArrayStruct,\n SubscriptionStruct,\n UpdatePaymentMethodCardResponseStruct,\n} from './SubscriptionService-structs.js';\nimport { CRYPTO_AUTH_METHODS } from './types.js';\nimport type {\n AssignCohortRequest,\n BillingPortalResponse,\n CancelSubscriptionRequest,\n GetSubscriptionsEligibilitiesRequest,\n GetSubscriptionsResponse,\n LinkRewardsRequest,\n PricingResponse,\n StartCryptoSubscriptionRequest,\n StartCryptoSubscriptionResponse,\n StartSubscriptionRequest,\n StartSubscriptionResponse,\n SubmitSponsorshipIntentsRequest,\n SubmitUserEventRequest,\n Subscription,\n SubscriptionApiGeneralResponse,\n SubscriptionBenefitsResponse,\n SubscriptionEligibility,\n UpdatePaymentMethodCardRequest,\n UpdatePaymentMethodCardResponse,\n UpdatePaymentMethodCryptoRequest,\n} from './types.js';\n\nexport const serviceName = 'SubscriptionService';\n\nexport const SUBSCRIPTION_URL = (env: Env, path: string): string =>\n `${getEnvUrls(env).subscriptionApiUrl}/v1/${path}`;\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'getSubscriptions',\n 'getBenefits',\n 'cancelSubscription',\n 'unCancelSubscription',\n 'startSubscriptionWithCard',\n 'startSubscriptionWithCrypto',\n 'updatePaymentMethodCard',\n 'updatePaymentMethodCrypto',\n 'getSubscriptionsEligibilities',\n 'submitUserEvent',\n 'assignUserToCohort',\n 'submitSponsorshipIntents',\n 'linkRewards',\n 'getPricing',\n 'getBillingPortalUrl',\n] as const;\n\nexport type SubscriptionServiceInvalidateQueriesAction =\n DataServiceInvalidateQueriesAction<typeof serviceName>;\n\nexport type SubscriptionServiceActions =\n | SubscriptionServiceMethodActions\n | SubscriptionServiceInvalidateQueriesAction;\n\ntype AllowedActions =\n | AuthenticationController.AuthenticationControllerGetBearerTokenAction\n | AuthenticationController.AuthenticationControllerGetSessionProfileAction;\n\ntype AllowedEvents = never;\n\nexport type SubscriptionServiceCacheUpdatedEvent = DataServiceCacheUpdatedEvent<\n typeof serviceName\n>;\n\nexport type SubscriptionServiceGranularCacheUpdatedEvent =\n DataServiceGranularCacheUpdatedEvent<typeof serviceName>;\n\nexport type SubscriptionServiceEvents =\n | SubscriptionServiceCacheUpdatedEvent\n | SubscriptionServiceGranularCacheUpdatedEvent;\n\nexport type SubscriptionServiceMessenger = Messenger<\n typeof serviceName,\n SubscriptionServiceActions | AllowedActions,\n SubscriptionServiceEvents | AllowedEvents\n>;\n\nexport type SubscriptionServiceOptions = {\n messenger: SubscriptionServiceMessenger;\n /**\n * The `fetch` function to use for requests. Defaults to the global `fetch`.\n */\n fetchFunction?: typeof fetch;\n env?: Env;\n captureException?: (error: Error) => void;\n queryClientConfig?: QueryClientConfig;\n policyOptions?: CreateServicePolicyOptions;\n};\n\nconst log = createModuleLogger(projectLogger, 'SubscriptionService');\n\nfunction isRetryableError(error: unknown): boolean {\n if (error instanceof HttpError) {\n if (error.httpStatus === 429) {\n return true;\n }\n return error.httpStatus < 400 || error.httpStatus >= 500;\n }\n return true;\n}\n\nconst DEFAULT_POLICY_OPTIONS: CreateServicePolicyOptions = {\n retryFilterPolicy: handleWhen(isRetryableError),\n};\n\n/**\n * Data service for the Subscription API.\n *\n * All requests are authenticated via JWT Bearer tokens obtained from the\n * `AuthenticationController:getBearerToken` messenger action. Cached queries\n * are scoped by `profileId` from\n * `AuthenticationController:getSessionProfile`.\n */\nexport class SubscriptionService extends BaseDataService<\n typeof serviceName,\n SubscriptionServiceMessenger\n> {\n readonly #env: Env;\n\n readonly #fetch: typeof fetch;\n\n readonly #captureException?: (error: Error) => void;\n\n constructor({\n messenger,\n fetchFunction = globalThis.fetch,\n env = Env.PRD,\n captureException,\n queryClientConfig = {},\n policyOptions = {},\n }: SubscriptionServiceOptions) {\n super({\n name: serviceName,\n messenger,\n queryClientConfig,\n policyOptions: { ...DEFAULT_POLICY_OPTIONS, ...policyOptions },\n });\n\n this.#env = env;\n this.#fetch = fetchFunction;\n this.#captureException = captureException;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n /**\n * Fetches the user's subscriptions.\n *\n * @returns The subscriptions response.\n */\n async getSubscriptions(): Promise<GetSubscriptionsResponse> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'getSubscriptions',\n requestParams: null,\n path: 'subscriptions',\n errorMessage: SubscriptionServiceErrorMessage.FailedToGetSubscriptions,\n });\n\n return create(jsonResponse, GetSubscriptionsResponseStruct);\n }\n\n /**\n * Fetches the user's subscription benefits.\n *\n * @returns The benefits response.\n */\n async getBenefits(): Promise<SubscriptionBenefitsResponse> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'getBenefits',\n requestParams: null,\n path: 'benefits',\n method: 'POST',\n body: {},\n errorMessage: SubscriptionServiceErrorMessage.FailedToGetBenefits,\n });\n\n return create(jsonResponse, SubscriptionBenefitsResponseStruct);\n }\n\n /**\n * Cancels a subscription.\n *\n * @param params - The cancel subscription request.\n * @returns The updated subscription.\n */\n async cancelSubscription(\n params: CancelSubscriptionRequest,\n ): Promise<Subscription> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const path = `subscriptions/${params.subscriptionId}/cancel`;\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'cancelSubscription',\n requestParams: params,\n path,\n method: 'POST',\n body: {\n cancelAtPeriodEnd: params.cancelAtPeriodEnd,\n },\n errorMessage: SubscriptionServiceErrorMessage.FailedToCancelSubscription,\n });\n\n return create(jsonResponse, SubscriptionStruct);\n }\n\n /**\n * Reverses a pending subscription cancellation.\n *\n * @param params - The uncancel subscription request.\n * @param params.subscriptionId - The subscription ID to uncancel.\n * @returns The updated subscription.\n */\n async unCancelSubscription(params: {\n subscriptionId: string;\n }): Promise<Subscription> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const path = `subscriptions/${params.subscriptionId}/uncancel`;\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'unCancelSubscription',\n requestParams: params,\n path,\n method: 'POST',\n body: {},\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToUncancelSubscription,\n });\n\n return create(jsonResponse, SubscriptionStruct);\n }\n\n /**\n * Starts a card-paid subscription checkout session for the requested products\n * (e.g. Shield or Money Account Plus).\n *\n * @param request - The start subscription request.\n * @returns The checkout session response.\n */\n async startSubscriptionWithCard(\n request: StartSubscriptionRequest,\n ): Promise<StartSubscriptionResponse> {\n if (request.products.length === 0) {\n throw new SubscriptionServiceError(\n SubscriptionControllerErrorMessage.SubscriptionProductsEmpty,\n );\n }\n\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'startSubscriptionWithCard',\n requestParams: request,\n path: 'subscriptions/card',\n method: 'POST',\n body: request,\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToStartSubscriptionWithCard,\n });\n\n return create(jsonResponse, StartSubscriptionResponseStruct);\n }\n\n /**\n * Starts a subscription with a crypto payment method.\n *\n * @param request - The start crypto subscription request.\n * @returns The created subscription response.\n * @throws If `products` is empty.\n * @throws If the request does not use exactly one of `rawTransaction`\n * (ERC-20 approval) or `delegationHash` (delegation).\n */\n async startSubscriptionWithCrypto(\n request: StartCryptoSubscriptionRequest,\n ): Promise<StartCryptoSubscriptionResponse> {\n if (request.products.length === 0) {\n throw new SubscriptionServiceError(\n SubscriptionControllerErrorMessage.SubscriptionProductsEmpty,\n );\n }\n\n this.#assertValidCryptoAuthCombo(request);\n\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'startSubscriptionWithCrypto',\n requestParams: request,\n path: 'subscriptions/crypto',\n method: 'POST',\n body: request,\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToStartSubscriptionWithCrypto,\n });\n\n return create(jsonResponse, StartCryptoSubscriptionResponseStruct);\n }\n\n /**\n * Updates a subscription's card payment method.\n *\n * @param request - The update payment method request.\n * @returns The redirect URL response.\n */\n async updatePaymentMethodCard(\n request: UpdatePaymentMethodCardRequest,\n ): Promise<UpdatePaymentMethodCardResponse> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const path = `subscriptions/${request.subscriptionId}/payment-method/card`;\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'updatePaymentMethodCard',\n requestParams: request,\n path,\n method: 'PATCH',\n body: {\n ...request,\n subscriptionId: undefined,\n },\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToUpdatePaymentMethodCard,\n });\n\n return create(jsonResponse, UpdatePaymentMethodCardResponseStruct);\n }\n\n /**\n * Updates a subscription's crypto payment method.\n *\n * @param request - The update payment method request.\n */\n async updatePaymentMethodCrypto(\n request: UpdatePaymentMethodCryptoRequest,\n ): Promise<void> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const path = `subscriptions/${request.subscriptionId}/payment-method/crypto`;\n await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'updatePaymentMethodCrypto',\n requestParams: request,\n path,\n method: 'PATCH',\n body: {\n ...request,\n subscriptionId: undefined,\n },\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToUpdatePaymentMethodCrypto,\n });\n }\n\n /**\n * Get the eligibility for a shield subscription.\n *\n * @param request - Optional request object containing user balance category to check cohort eligibility\n * @returns The eligibility for a shield subscription\n */\n async getSubscriptionsEligibilities(\n request?: GetSubscriptionsEligibilitiesRequest,\n ): Promise<SubscriptionEligibility[]> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n let queryParams: Record<string, string> | undefined;\n if (request?.balanceCategory !== undefined) {\n queryParams = { balanceCategory: request.balanceCategory };\n }\n\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'getSubscriptionsEligibilities',\n requestParams: request ?? null,\n path: 'subscriptions/eligibility',\n queryParams,\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToGetSubscriptionsEligibilities,\n });\n\n const results = create(jsonResponse, SubscriptionEligibilityArrayStruct);\n\n return results.map((result) => ({\n ...result,\n canSubscribe: result.canSubscribe ?? false,\n canViewEntryModal: result.canViewEntryModal ?? false,\n cohorts: result.cohorts ?? [],\n assignedCohort: result.assignedCohort ?? null,\n hasAssignedCohortExpired: result.hasAssignedCohortExpired ?? false,\n }));\n }\n\n /**\n * Submit a user event. (e.g. shield modal viewed)\n *\n * @param request - Request object containing the event to submit.\n * @example { event: SubscriptionUserEvent.ShieldEntryModalViewed, cohort: 'post_tx' }\n */\n async submitUserEvent(request: SubmitUserEventRequest): Promise<void> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'submitUserEvent',\n requestParams: request,\n path: 'user-events',\n method: 'POST',\n body: request,\n errorMessage: SubscriptionServiceErrorMessage.FailedToSubmitUserEvent,\n });\n }\n\n /**\n * Assign user to a cohort.\n *\n * @param request - Request object containing the cohort to assign the user to.\n * @example { cohort: 'post_tx' }\n */\n async assignUserToCohort(request: AssignCohortRequest): Promise<void> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'assignUserToCohort',\n requestParams: request,\n path: 'cohorts/assign',\n method: 'POST',\n body: request,\n errorMessage: SubscriptionServiceErrorMessage.FailedToAssignUserToCohort,\n });\n }\n\n /**\n * Submit sponsorship intents to the Subscription Service backend.\n *\n * This is intended to be used together with the crypto subscription flow.\n * When the user has enabled the smart transaction feature, we will sponsor the gas fees for the subscription approval transaction.\n *\n * @param request - Request object containing the address and products.\n * @example { address: '0x1234567890123456789012345678901234567890', products: [ProductType.Shield] }\n */\n async submitSponsorshipIntents(\n request: SubmitSponsorshipIntentsRequest,\n ): Promise<void> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'submitSponsorshipIntents',\n requestParams: request,\n path: 'transaction-sponsorship/intents',\n method: 'POST',\n body: request,\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToSubmitSponsorshipIntents,\n });\n }\n\n /**\n * Link rewards to a subscription.\n *\n * @param request - Request object containing the reward account ID.\n * @example { rewardAccountId: 'eip155:1:0x1234567890123456789012345678901234567890' }\n * @returns The response from the API.\n */\n async linkRewards(\n request: LinkRewardsRequest,\n ): Promise<SubscriptionApiGeneralResponse> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'linkRewards',\n requestParams: request,\n path: 'rewards/link',\n method: 'POST',\n body: request,\n errorMessage: SubscriptionServiceErrorMessage.FailedToLinkRewards,\n });\n\n return create(jsonResponse, SubscriptionApiGeneralResponseStruct);\n }\n\n /**\n * Fetches subscription pricing information.\n *\n * @returns The pricing response.\n */\n async getPricing(): Promise<PricingResponse> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'getPricing',\n requestParams: null,\n path: 'pricing',\n errorMessage: SubscriptionServiceErrorMessage.FailedToGetPricing,\n });\n\n return create(jsonResponse, PricingResponseStruct);\n }\n\n /**\n * Fetches the billing portal URL.\n *\n * @returns The billing portal response.\n */\n async getBillingPortalUrl(): Promise<BillingPortalResponse> {\n const { profileKey, bearerToken } = await this.#getAuthenticatedContext();\n const jsonResponse = await this.#fetchJson({\n profileKey,\n bearerToken,\n methodName: 'getBillingPortalUrl',\n requestParams: null,\n path: 'billing-portal',\n errorMessage: SubscriptionServiceErrorMessage.FailedToGetBillingPortalUrl,\n });\n\n return create(jsonResponse, BillingPortalResponseStruct);\n }\n\n async #fetchJson({\n profileKey,\n bearerToken,\n methodName,\n requestParams,\n path,\n method = 'GET',\n body,\n queryParams,\n errorMessage,\n }: {\n profileKey: string;\n bearerToken: string;\n methodName: string;\n requestParams: unknown;\n path: string;\n method?: 'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH';\n body?: Record<string, unknown>;\n queryParams?: Record<string, string>;\n errorMessage: string;\n }): Promise<unknown> {\n const url = this.#getSubscriptionApiUrl(path);\n\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n\n try {\n return await this.fetchQuery({\n queryKey: [\n `${this.name}:${methodName}`,\n profileKey,\n requestParams as Json,\n ],\n staleTime: 0,\n gcTime: 0,\n queryFn: async () => {\n const response = await this.#fetch(url.toString(), {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...this.#headersForToken(bearerToken),\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const apiError = await getSubscriptionErrorFromResponse(response);\n throw new HttpError(response.status, apiError.message);\n }\n\n return response.json();\n },\n });\n } catch (error) {\n log(errorMessage, error);\n\n const errorMessageWithUrl = `${errorMessage} (url: ${url.toString()})`;\n const errorToCapture =\n error instanceof Error ? error : new Error(errorMessage);\n this.#captureException?.(\n createSentryError(errorMessageWithUrl, errorToCapture),\n );\n\n if (error instanceof SubscriptionServiceError) {\n throw error;\n }\n\n throw new SubscriptionServiceError(\n `Failed to make request. ${errorMessageWithUrl}`,\n {\n cause: errorToCapture,\n },\n );\n }\n }\n\n /**\n * Ensures the request uses exactly one crypto auth method: ERC-20 approval\n * (`rawTransaction`, default) or delegation (`delegationHash`).\n *\n * @param request - The start crypto subscription request.\n * @throws If both, neither, or a mismatched combo of auth fields is provided.\n */\n #assertValidCryptoAuthCombo(request: StartCryptoSubscriptionRequest): void {\n const method =\n request.cryptoAuthMethod ?? CRYPTO_AUTH_METHODS.ERC20_APPROVAL;\n const hasRawTransaction = Boolean(request.rawTransaction);\n const hasDelegationHash = Boolean(request.delegationHash);\n const isValidErc20Approval =\n method === CRYPTO_AUTH_METHODS.ERC20_APPROVAL &&\n hasRawTransaction &&\n !hasDelegationHash;\n const isValidDelegation =\n method === CRYPTO_AUTH_METHODS.DELEGATION &&\n hasDelegationHash &&\n !hasRawTransaction;\n\n if (!isValidErc20Approval && !isValidDelegation) {\n throw new SubscriptionServiceError(\n SubscriptionServiceErrorMessage.InvalidCryptoAuthCombo,\n );\n }\n }\n\n async #getAuthenticatedContext(): Promise<{\n profileKey: string;\n bearerToken: string;\n }> {\n try {\n const [bearerToken, sessionProfile] = await Promise.all([\n this.messenger.call('AuthenticationController:getBearerToken'),\n this.messenger.call('AuthenticationController:getSessionProfile'),\n ]);\n\n return { profileKey: sessionProfile.profileId, bearerToken };\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Unknown error when getting authorization header';\n\n this.#captureException?.(\n createSentryError(\n `Failed to get authorization header. ${errorMessage}`,\n error instanceof Error ? error : new Error(errorMessage),\n ),\n );\n\n throw new SubscriptionServiceError(\n `Failed to get authorization header. ${errorMessage}`,\n {\n cause: error instanceof Error ? error : new Error(errorMessage),\n },\n );\n }\n }\n\n #headersForToken(bearerToken: string): Record<string, string> {\n return { Authorization: `Bearer ${bearerToken}` };\n }\n\n #getSubscriptionApiUrl(path: string): URL {\n try {\n return new URL(SUBSCRIPTION_URL(this.#env, path));\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Unknown error when getting subscription API URL';\n this.#captureException?.(\n createSentryError(\n `Failed to get subscription API URL. ${errorMessage}`,\n error instanceof Error ? error : new Error(errorMessage),\n ),\n );\n\n throw error;\n }\n }\n}\n"]}
|