@shware/purchase 1.8.9 → 2.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.
Files changed (128) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/dist/app-store/config.cjs +105 -128
  3. package/dist/app-store/config.cjs.map +1 -1
  4. package/dist/app-store/config.d.cts +36 -33
  5. package/dist/app-store/config.d.cts.map +1 -0
  6. package/dist/app-store/config.d.mts +42 -0
  7. package/dist/app-store/config.d.mts.map +1 -0
  8. package/dist/app-store/config.mjs +100 -91
  9. package/dist/app-store/config.mjs.map +1 -1
  10. package/dist/app-store/index.cjs +3 -31
  11. package/dist/app-store/index.d.cts +2 -3
  12. package/dist/app-store/index.d.mts +2 -0
  13. package/dist/app-store/index.mjs +1 -5
  14. package/dist/google-play/config.cjs +108 -123
  15. package/dist/google-play/config.cjs.map +1 -1
  16. package/dist/google-play/config.d.cts +35 -33
  17. package/dist/google-play/config.d.cts.map +1 -0
  18. package/dist/google-play/config.d.mts +41 -0
  19. package/dist/google-play/config.d.mts.map +1 -0
  20. package/dist/google-play/config.mjs +103 -86
  21. package/dist/google-play/config.mjs.map +1 -1
  22. package/dist/google-play/index.cjs +9 -42
  23. package/dist/google-play/index.d.cts +3 -4
  24. package/dist/google-play/index.d.mts +3 -0
  25. package/dist/google-play/index.mjs +2 -17
  26. package/dist/google-play/real-time-developer-notification.cjs +122 -81
  27. package/dist/google-play/real-time-developer-notification.cjs.map +1 -1
  28. package/dist/google-play/real-time-developer-notification.d.cts +119 -117
  29. package/dist/google-play/real-time-developer-notification.d.cts.map +1 -0
  30. package/dist/google-play/real-time-developer-notification.d.mts +150 -0
  31. package/dist/google-play/real-time-developer-notification.d.mts.map +1 -0
  32. package/dist/google-play/real-time-developer-notification.mjs +118 -53
  33. package/dist/google-play/real-time-developer-notification.mjs.map +1 -1
  34. package/dist/index.cjs +13 -48
  35. package/dist/index.d.cts +5 -6
  36. package/dist/index.d.mts +5 -0
  37. package/dist/index.mjs +2 -19
  38. package/dist/stripe/config.cjs +114 -133
  39. package/dist/stripe/config.cjs.map +1 -1
  40. package/dist/stripe/config.d.cts +46 -37
  41. package/dist/stripe/config.d.cts.map +1 -0
  42. package/dist/stripe/config.d.mts +52 -0
  43. package/dist/stripe/config.d.mts.map +1 -0
  44. package/dist/stripe/config.mjs +109 -96
  45. package/dist/stripe/config.mjs.map +1 -1
  46. package/dist/stripe/handler.cjs +25 -53
  47. package/dist/stripe/handler.cjs.map +1 -1
  48. package/dist/stripe/handler.d.cts +10 -9
  49. package/dist/stripe/handler.d.cts.map +1 -0
  50. package/dist/stripe/handler.d.mts +16 -0
  51. package/dist/stripe/handler.d.mts.map +1 -0
  52. package/dist/stripe/handler.mjs +25 -29
  53. package/dist/stripe/handler.mjs.map +1 -1
  54. package/dist/stripe/index.cjs +27 -74
  55. package/dist/stripe/index.d.cts +8 -12
  56. package/dist/stripe/index.d.mts +8 -0
  57. package/dist/stripe/index.mjs +5 -44
  58. package/dist/stripe/mapper.cjs +168 -219
  59. package/dist/stripe/mapper.cjs.map +1 -1
  60. package/dist/stripe/mapper.d.cts +115 -114
  61. package/dist/stripe/mapper.d.cts.map +1 -0
  62. package/dist/stripe/mapper.d.mts +158 -0
  63. package/dist/stripe/mapper.d.mts.map +1 -0
  64. package/dist/stripe/mapper.mjs +155 -182
  65. package/dist/stripe/mapper.mjs.map +1 -1
  66. package/dist/stripe/metadata.cjs +11 -35
  67. package/dist/stripe/metadata.cjs.map +1 -1
  68. package/dist/stripe/metadata.d.cts +9 -7
  69. package/dist/stripe/metadata.d.cts.map +1 -0
  70. package/dist/stripe/metadata.d.mts +12 -0
  71. package/dist/stripe/metadata.d.mts.map +1 -0
  72. package/dist/stripe/metadata.mjs +11 -11
  73. package/dist/stripe/metadata.mjs.map +1 -1
  74. package/dist/stripe/pending-checkout.cjs +55 -61
  75. package/dist/stripe/pending-checkout.cjs.map +1 -1
  76. package/dist/stripe/pending-checkout.d.cts +3 -1
  77. package/dist/stripe/pending-checkout.d.cts.map +1 -0
  78. package/dist/stripe/{pending-checkout.d.ts → pending-checkout.d.mts} +3 -1
  79. package/dist/stripe/pending-checkout.d.mts.map +1 -0
  80. package/dist/stripe/pending-checkout.mjs +52 -34
  81. package/dist/stripe/pending-checkout.mjs.map +1 -1
  82. package/dist/stripe/schema.cjs +30 -55
  83. package/dist/stripe/schema.cjs.map +1 -1
  84. package/dist/stripe/schema.d.cts +36 -37
  85. package/dist/stripe/schema.d.cts.map +1 -0
  86. package/dist/stripe/schema.d.mts +40 -0
  87. package/dist/stripe/schema.d.mts.map +1 -0
  88. package/dist/stripe/schema.mjs +28 -40
  89. package/dist/stripe/schema.mjs.map +1 -1
  90. package/dist/subscription/index.cjs +178 -80
  91. package/dist/subscription/index.cjs.map +1 -1
  92. package/dist/subscription/index.d.cts +136 -134
  93. package/dist/subscription/index.d.cts.map +1 -0
  94. package/dist/subscription/index.d.mts +150 -0
  95. package/dist/subscription/index.d.mts.map +1 -0
  96. package/dist/subscription/index.mjs +173 -51
  97. package/dist/subscription/index.mjs.map +1 -1
  98. package/dist/types.cjs +0 -19
  99. package/dist/types.d.cts +7 -6
  100. package/dist/types.d.cts.map +1 -0
  101. package/dist/types.d.mts +10 -0
  102. package/dist/types.d.mts.map +1 -0
  103. package/dist/types.mjs +1 -1
  104. package/package.json +40 -25
  105. package/dist/app-store/config.d.ts +0 -39
  106. package/dist/app-store/index.cjs.map +0 -1
  107. package/dist/app-store/index.d.ts +0 -3
  108. package/dist/app-store/index.mjs.map +0 -1
  109. package/dist/google-play/config.d.ts +0 -39
  110. package/dist/google-play/index.cjs.map +0 -1
  111. package/dist/google-play/index.d.ts +0 -4
  112. package/dist/google-play/index.mjs.map +0 -1
  113. package/dist/google-play/real-time-developer-notification.d.ts +0 -148
  114. package/dist/index.cjs.map +0 -1
  115. package/dist/index.d.ts +0 -6
  116. package/dist/index.mjs.map +0 -1
  117. package/dist/stripe/config.d.ts +0 -43
  118. package/dist/stripe/handler.d.ts +0 -15
  119. package/dist/stripe/index.cjs.map +0 -1
  120. package/dist/stripe/index.d.ts +0 -12
  121. package/dist/stripe/index.mjs.map +0 -1
  122. package/dist/stripe/mapper.d.ts +0 -157
  123. package/dist/stripe/metadata.d.ts +0 -10
  124. package/dist/stripe/schema.d.ts +0 -41
  125. package/dist/subscription/index.d.ts +0 -148
  126. package/dist/types.cjs.map +0 -1
  127. package/dist/types.d.ts +0 -9
  128. package/dist/types.mjs.map +0 -1
@@ -0,0 +1,23 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ exports.__toESM = __toESM;
@@ -1,132 +1,109 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/app-store/config.ts
31
- var config_exports = {};
32
- __export(config_exports, {
33
- AppStoreConfig: () => AppStoreConfig
34
- });
35
- module.exports = __toCommonJS(config_exports);
36
- var import_utils = require("@shware/utils");
37
- var import_ms = __toESM(require("ms"), 1);
38
- var addMethod = /* @__PURE__ */ Symbol("addMethod");
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ let _shware_utils = require("@shware/utils");
4
+ let ms = require("ms");
5
+ ms = require_runtime.__toESM(ms, 1);
6
+ //#region src/app-store/config.ts
7
+ const addMethod = Symbol("addMethod");
39
8
  var Subscription = class {
40
- plan;
41
- config;
42
- products;
43
- defaultProductId;
44
- constructor(config, plan) {
45
- this.plan = plan;
46
- this.config = config;
47
- this.products = /* @__PURE__ */ new Map();
48
- this.defaultProductId = null;
49
- }
50
- product = (productId, metadata = { credits: 0, expiresIn: "0" }) => {
51
- this.products.set(productId, metadata);
52
- return this;
53
- };
54
- default = (defaultProductId) => {
55
- this.defaultProductId = defaultProductId;
56
- this.config[addMethod](this);
57
- return this.config;
58
- };
9
+ plan;
10
+ billingPeriod;
11
+ config;
12
+ products;
13
+ defaultProductId;
14
+ constructor(config, plan, billingPeriod) {
15
+ this.plan = plan;
16
+ this.billingPeriod = billingPeriod;
17
+ this.config = config;
18
+ this.products = /* @__PURE__ */ new Map();
19
+ this.defaultProductId = null;
20
+ }
21
+ product = (productId, metadata = {
22
+ credits: 0,
23
+ expiresIn: "0"
24
+ }) => {
25
+ this.products.set(productId, metadata);
26
+ return this;
27
+ };
28
+ default = (defaultProductId) => {
29
+ this.defaultProductId = defaultProductId;
30
+ this.config[addMethod](this);
31
+ return this.config;
32
+ };
59
33
  };
60
- var AppStoreConfig = class _AppStoreConfig {
61
- appId;
62
- bundleId;
63
- products;
64
- consumables;
65
- subscriptions;
66
- nonConsumables;
67
- get productIds() {
68
- return Array.from(this.products.keys());
69
- }
70
- [addMethod] = (subscription) => {
71
- subscription.products.forEach((metadata, productId) => this.products.set(productId, metadata));
72
- this.subscriptions.set(subscription.plan, subscription);
73
- return this;
74
- };
75
- constructor(options) {
76
- this.appId = options.appId;
77
- this.bundleId = options.bundleId;
78
- this.products = /* @__PURE__ */ new Map();
79
- this.consumables = /* @__PURE__ */ new Set();
80
- this.subscriptions = /* @__PURE__ */ new Map();
81
- this.nonConsumables = /* @__PURE__ */ new Set();
82
- }
83
- static create = (options) => {
84
- return new _AppStoreConfig(options);
85
- };
86
- subscription = (plan) => {
87
- return new Subscription(this, plan);
88
- };
89
- consumable = (productId, metadata = { credits: 0, expiresIn: "0" }) => {
90
- this.consumables.add(productId);
91
- this.products.set(productId, metadata);
92
- return this;
93
- };
94
- nonConsumable = (productId) => {
95
- this.nonConsumables.add(productId);
96
- this.products.set(productId, null);
97
- return this;
98
- };
99
- getPlan = (productId) => {
100
- for (const [plan, subscription] of this.subscriptions.entries()) {
101
- if (subscription.products.has(productId)) return plan;
102
- }
103
- throw new Error(`Plan not found for product ${productId}`);
104
- };
105
- getMode = (productId) => {
106
- if (this.consumables.has(productId) || this.nonConsumables.has(productId)) return "payment";
107
- for (const subscription of this.subscriptions.values()) {
108
- if (subscription.products.has(productId)) return "subscription";
109
- }
110
- throw new Error(`Mode not found for product ${productId}`);
111
- };
112
- getCreditAmount = (productId) => {
113
- const config = this.products.get(productId);
114
- (0, import_utils.invariant)(config !== void 0, `Product not found for ${productId}`);
115
- (0, import_utils.invariant)(config !== null, `Credits not available for non-consumable product ${productId}`);
116
- return config.credits;
117
- };
118
- getCreditExpiresIn = (productId) => {
119
- const config = this.products.get(productId);
120
- (0, import_utils.invariant)(config, `Product not found for ${productId}`);
121
- return (0, import_ms.default)(config.expiresIn);
122
- };
123
- getCreditExpiresAt = (productId) => {
124
- const expiresIn = this.getCreditExpiresIn(productId);
125
- return new Date(Date.now() + expiresIn).toISOString();
126
- };
34
+ var AppStoreConfig = class AppStoreConfig {
35
+ appId;
36
+ bundleId;
37
+ products;
38
+ consumables;
39
+ subscriptions;
40
+ nonConsumables;
41
+ get productIds() {
42
+ return Array.from(this.products.keys());
43
+ }
44
+ [addMethod] = (subscription) => {
45
+ subscription.products.forEach((metadata, productId) => this.products.set(productId, metadata));
46
+ this.subscriptions.set(`${subscription.plan}:${subscription.billingPeriod}`, subscription);
47
+ return this;
48
+ };
49
+ constructor(options) {
50
+ this.appId = options.appId;
51
+ this.bundleId = options.bundleId;
52
+ this.products = /* @__PURE__ */ new Map();
53
+ this.consumables = /* @__PURE__ */ new Set();
54
+ this.subscriptions = /* @__PURE__ */ new Map();
55
+ this.nonConsumables = /* @__PURE__ */ new Set();
56
+ }
57
+ static create = (options) => {
58
+ return new AppStoreConfig(options);
59
+ };
60
+ /** The same plan may be declared once per billing period; duplicate pairs are rejected. */
61
+ subscription = (plan, billingPeriod) => {
62
+ return new Subscription(this, plan, billingPeriod);
63
+ };
64
+ consumable = (productId, metadata = {
65
+ credits: 0,
66
+ expiresIn: "0"
67
+ }) => {
68
+ this.consumables.add(productId);
69
+ this.products.set(productId, metadata);
70
+ return this;
71
+ };
72
+ nonConsumable = (productId) => {
73
+ this.nonConsumables.add(productId);
74
+ this.products.set(productId, null);
75
+ return this;
76
+ };
77
+ getPlan = (productId) => {
78
+ for (const subscription of this.subscriptions.values()) if (subscription.products.has(productId)) return subscription.plan;
79
+ throw new Error(`Plan not found for product ${productId}`);
80
+ };
81
+ getBillingPeriod = (productId) => {
82
+ for (const subscription of this.subscriptions.values()) if (subscription.products.has(productId)) return subscription.billingPeriod;
83
+ throw new Error(`Billing period not found for product ${productId}`);
84
+ };
85
+ getMode = (productId) => {
86
+ if (this.consumables.has(productId) || this.nonConsumables.has(productId)) return "payment";
87
+ for (const subscription of this.subscriptions.values()) if (subscription.products.has(productId)) return "subscription";
88
+ throw new Error(`Mode not found for product ${productId}`);
89
+ };
90
+ getCreditAmount = (productId) => {
91
+ const config = this.products.get(productId);
92
+ (0, _shware_utils.invariant)(config !== void 0, `Product not found for ${productId}`);
93
+ (0, _shware_utils.invariant)(config !== null, `Credits not available for non-consumable product ${productId}`);
94
+ return config.credits;
95
+ };
96
+ getCreditExpiresIn = (productId) => {
97
+ const config = this.products.get(productId);
98
+ (0, _shware_utils.invariant)(config, `Product not found for ${productId}`);
99
+ return (0, ms.default)(config.expiresIn);
100
+ };
101
+ getCreditExpiresAt = (productId) => {
102
+ const expiresIn = this.getCreditExpiresIn(productId);
103
+ return new Date(Date.now() + expiresIn).toISOString();
104
+ };
127
105
  };
128
- // Annotate the CommonJS export names for ESM import in node:
129
- 0 && (module.exports = {
130
- AppStoreConfig
131
- });
106
+ //#endregion
107
+ exports.AppStoreConfig = AppStoreConfig;
108
+
132
109
  //# sourceMappingURL=config.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/app-store/config.ts"],"sourcesContent":["import { invariant } from '@shware/utils';\nimport ms from 'ms';\nimport type { Metadata } from '../types';\n\nconst addMethod = Symbol('addMethod');\n\nclass Subscription<\n NS extends Lowercase<string> = Lowercase<string>,\n PE extends string = string,\n PL extends PE = never,\n PI extends string = never,\n I extends string = never,\n> {\n readonly plan: PL;\n readonly config: AppStoreConfig<NS, PE, PL, PI>;\n readonly products: Map<string, Metadata>;\n\n defaultProductId: I | null;\n\n constructor(config: AppStoreConfig<NS, PE, PL, PI>, plan: PL) {\n this.plan = plan;\n this.config = config;\n this.products = new Map();\n this.defaultProductId = null;\n }\n\n product = <K extends `${NS}.${Lowercase<string>}`>(\n productId: K extends PI ? never : K,\n metadata: Metadata = { credits: 0, expiresIn: '0' }\n ): Subscription<NS, PE, PL, PI | K, I | K> => {\n this.products.set(productId, metadata);\n return this as Subscription<NS, PE, PL, PI | K, I | K>;\n };\n\n default = (defaultProductId: I) => {\n this.defaultProductId = defaultProductId;\n this.config[addMethod](this as never);\n return this.config;\n };\n}\n\ntype Options = { appId: `${number}`; bundleId: string };\n\nexport class AppStoreConfig<\n NS extends Lowercase<string> = Lowercase<string>,\n PE extends string = string,\n PL extends PE = never,\n PI extends string = never,\n> {\n readonly appId: string;\n readonly bundleId: string;\n\n private products: Map<string, Metadata | null>;\n private consumables: Set<string>;\n private subscriptions: Map<PE, Subscription<NS, PE, PL, PI>>;\n private nonConsumables: Set<string>;\n\n get productIds(): string[] {\n return Array.from(this.products.keys());\n }\n\n [addMethod] = (subscription: Subscription<NS, PE, PL, PI>) => {\n subscription.products.forEach((metadata, productId) => this.products.set(productId, metadata));\n this.subscriptions.set(subscription.plan, subscription);\n return this;\n };\n\n private constructor(options: Options) {\n this.appId = options.appId;\n this.bundleId = options.bundleId;\n this.products = new Map();\n this.consumables = new Set();\n this.subscriptions = new Map();\n this.nonConsumables = new Set();\n }\n\n static create = <NS extends Lowercase<string>, PE extends string>(options: Options) => {\n return new AppStoreConfig<NS, PE>(options);\n };\n\n subscription = <K extends PE>(plan: K extends PL ? never : K) => {\n return new Subscription<NS, PE, K | PL, PI>(this, plan);\n };\n\n consumable = <K extends `${NS}.${Lowercase<string>}`>(\n productId: K extends PI ? never : K,\n metadata: Metadata = { credits: 0, expiresIn: '0' }\n ) => {\n this.consumables.add(productId);\n this.products.set(productId, metadata);\n return this as AppStoreConfig<NS, PE, PL, PI | K>;\n };\n\n nonConsumable = <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K) => {\n this.nonConsumables.add(productId);\n this.products.set(productId, null);\n return this as AppStoreConfig<NS, PE, PL, PI | K>;\n };\n\n getPlan = (productId: string): PE => {\n for (const [plan, subscription] of this.subscriptions.entries()) {\n if (subscription.products.has(productId)) return plan;\n }\n throw new Error(`Plan not found for product ${productId}`);\n };\n\n getMode = (productId: string): 'payment' | 'subscription' => {\n if (this.consumables.has(productId) || this.nonConsumables.has(productId)) return 'payment';\n for (const subscription of this.subscriptions.values()) {\n if (subscription.products.has(productId)) return 'subscription';\n }\n throw new Error(`Mode not found for product ${productId}`);\n };\n\n getCreditAmount = (productId: string): number => {\n const config = this.products.get(productId);\n invariant(config !== undefined, `Product not found for ${productId}`);\n invariant(config !== null, `Credits not available for non-consumable product ${productId}`);\n return config.credits;\n };\n\n private getCreditExpiresIn = (productId: string): number => {\n const config = this.products.get(productId);\n invariant(config, `Product not found for ${productId}`);\n return ms(config.expiresIn);\n };\n\n getCreditExpiresAt = (productId: string): string => {\n const expiresIn = this.getCreditExpiresIn(productId);\n return new Date(Date.now() + expiresIn).toISOString();\n };\n}\n"],"mappings":"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","names":["ms"]}
1
+ {"version":3,"file":"config.cjs","names":[],"sources":["../../src/app-store/config.ts"],"sourcesContent":["import { invariant } from '@shware/utils';\nimport ms from 'ms';\nimport type { Metadata } from '../types';\n\nconst addMethod = Symbol('addMethod');\n\nclass Subscription<\n NS extends Lowercase<string> = Lowercase<string>,\n PE extends string = string,\n BP extends string = string,\n PL extends string = never,\n PI extends string = never,\n I extends string = never,\n> {\n readonly plan: PE;\n readonly billingPeriod: BP;\n readonly config: AppStoreConfig<NS, PE, BP, PL, PI>;\n readonly products: Map<string, Metadata>;\n\n defaultProductId: I | null;\n\n constructor(config: AppStoreConfig<NS, PE, BP, PL, PI>, plan: PE, billingPeriod: BP) {\n this.plan = plan;\n this.billingPeriod = billingPeriod;\n this.config = config;\n this.products = new Map();\n this.defaultProductId = null;\n }\n\n product = <K extends `${NS}.${Lowercase<string>}`>(\n productId: K extends PI ? never : K,\n metadata: Metadata = { credits: 0, expiresIn: '0' }\n ): Subscription<NS, PE, BP, PL, PI | K, I | K> => {\n this.products.set(productId, metadata);\n return this as Subscription<NS, PE, BP, PL, PI | K, I | K>;\n };\n\n default = (defaultProductId: I) => {\n this.defaultProductId = defaultProductId;\n this.config[addMethod](this as never);\n return this.config;\n };\n}\n\ntype Options = { appId: `${number}`; bundleId: string };\n\nexport class AppStoreConfig<\n NS extends Lowercase<string> = Lowercase<string>,\n PE extends string = string,\n BP extends string = string,\n PL extends string = never,\n PI extends string = never,\n> {\n readonly appId: string;\n readonly bundleId: string;\n\n private products: Map<string, Metadata | null>;\n private consumables: Set<string>;\n private subscriptions: Map<string, Subscription<NS, PE, BP, PL, PI>>;\n private nonConsumables: Set<string>;\n\n get productIds(): string[] {\n return Array.from(this.products.keys());\n }\n\n [addMethod] = (subscription: Subscription<NS, PE, BP, PL, PI>) => {\n subscription.products.forEach((metadata, productId) => this.products.set(productId, metadata));\n this.subscriptions.set(`${subscription.plan}:${subscription.billingPeriod}`, subscription);\n return this;\n };\n\n private constructor(options: Options) {\n this.appId = options.appId;\n this.bundleId = options.bundleId;\n this.products = new Map();\n this.consumables = new Set();\n this.subscriptions = new Map();\n this.nonConsumables = new Set();\n }\n\n static create = <NS extends Lowercase<string>, PE extends string, BP extends string = string>(\n options: Options\n ) => {\n return new AppStoreConfig<NS, PE, BP>(options);\n };\n\n /** The same plan may be declared once per billing period; duplicate pairs are rejected. */\n subscription = <K extends PE, P extends BP>(\n plan: K,\n billingPeriod: `${K}:${P}` extends PL ? never : P\n ) => {\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion -- tsc requires the cast (tsgolint false positive)\n return new Subscription<NS, PE, BP, `${K}:${P}` | PL, PI>(this as never, plan, billingPeriod);\n };\n\n consumable = <K extends `${NS}.${Lowercase<string>}`>(\n productId: K extends PI ? never : K,\n metadata: Metadata = { credits: 0, expiresIn: '0' }\n ) => {\n this.consumables.add(productId);\n this.products.set(productId, metadata);\n return this as AppStoreConfig<NS, PE, BP, PL, PI | K>;\n };\n\n nonConsumable = <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K) => {\n this.nonConsumables.add(productId);\n this.products.set(productId, null);\n return this as AppStoreConfig<NS, PE, BP, PL, PI | K>;\n };\n\n getPlan = (productId: string): PE => {\n for (const subscription of this.subscriptions.values()) {\n if (subscription.products.has(productId)) return subscription.plan;\n }\n throw new Error(`Plan not found for product ${productId}`);\n };\n\n getBillingPeriod = (productId: string): BP => {\n for (const subscription of this.subscriptions.values()) {\n if (subscription.products.has(productId)) return subscription.billingPeriod;\n }\n throw new Error(`Billing period not found for product ${productId}`);\n };\n\n getMode = (productId: string): 'payment' | 'subscription' => {\n if (this.consumables.has(productId) || this.nonConsumables.has(productId)) return 'payment';\n for (const subscription of this.subscriptions.values()) {\n if (subscription.products.has(productId)) return 'subscription';\n }\n throw new Error(`Mode not found for product ${productId}`);\n };\n\n getCreditAmount = (productId: string): number => {\n const config = this.products.get(productId);\n invariant(config !== undefined, `Product not found for ${productId}`);\n invariant(config !== null, `Credits not available for non-consumable product ${productId}`);\n return config.credits;\n };\n\n private getCreditExpiresIn = (productId: string): number => {\n const config = this.products.get(productId);\n invariant(config, `Product not found for ${productId}`);\n return ms(config.expiresIn);\n };\n\n getCreditExpiresAt = (productId: string): string => {\n const expiresIn = this.getCreditExpiresIn(productId);\n return new Date(Date.now() + expiresIn).toISOString();\n };\n}\n"],"mappings":"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"}
@@ -1,39 +1,42 @@
1
- import { Metadata } from '../types.cjs';
2
- import 'ms';
3
-
1
+ import { Metadata } from "../types.cjs";
2
+ //#region src/app-store/config.d.ts
4
3
  declare const addMethod: unique symbol;
5
- declare class Subscription<NS extends Lowercase<string> = Lowercase<string>, PE extends string = string, PL extends PE = never, PI extends string = never, I extends string = never> {
6
- readonly plan: PL;
7
- readonly config: AppStoreConfig<NS, PE, PL, PI>;
8
- readonly products: Map<string, Metadata>;
9
- defaultProductId: I | null;
10
- constructor(config: AppStoreConfig<NS, PE, PL, PI>, plan: PL);
11
- product: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K, metadata?: Metadata) => Subscription<NS, PE, PL, PI | K, I | K>;
12
- default: (defaultProductId: I) => AppStoreConfig<NS, PE, PL, PI>;
4
+ declare class Subscription<NS extends Lowercase<string> = Lowercase<string>, PE extends string = string, BP extends string = string, PL extends string = never, PI extends string = never, I extends string = never> {
5
+ readonly plan: PE;
6
+ readonly billingPeriod: BP;
7
+ readonly config: AppStoreConfig<NS, PE, BP, PL, PI>;
8
+ readonly products: Map<string, Metadata>;
9
+ defaultProductId: I | null;
10
+ constructor(config: AppStoreConfig<NS, PE, BP, PL, PI>, plan: PE, billingPeriod: BP);
11
+ product: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K, metadata?: Metadata) => Subscription<NS, PE, BP, PL, PI | K, I | K>;
12
+ default: (defaultProductId: I) => AppStoreConfig<NS, PE, BP, PL, PI>;
13
13
  }
14
14
  type Options = {
15
- appId: `${number}`;
16
- bundleId: string;
15
+ appId: `${number}`;
16
+ bundleId: string;
17
17
  };
18
- declare class AppStoreConfig<NS extends Lowercase<string> = Lowercase<string>, PE extends string = string, PL extends PE = never, PI extends string = never> {
19
- readonly appId: string;
20
- readonly bundleId: string;
21
- private products;
22
- private consumables;
23
- private subscriptions;
24
- private nonConsumables;
25
- get productIds(): string[];
26
- [addMethod]: (subscription: Subscription<NS, PE, PL, PI>) => this;
27
- private constructor();
28
- static create: <NS_1 extends Lowercase<string>, PE_1 extends string>(options: Options) => AppStoreConfig<NS_1, PE_1, never, never>;
29
- subscription: <K extends PE>(plan: K extends PL ? never : K) => Subscription<NS, PE, PL | K, PI, never>;
30
- consumable: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K, metadata?: Metadata) => AppStoreConfig<NS, PE, PL, PI | K>;
31
- nonConsumable: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K) => AppStoreConfig<NS, PE, PL, PI | K>;
32
- getPlan: (productId: string) => PE;
33
- getMode: (productId: string) => "payment" | "subscription";
34
- getCreditAmount: (productId: string) => number;
35
- private getCreditExpiresIn;
36
- getCreditExpiresAt: (productId: string) => string;
18
+ declare class AppStoreConfig<NS extends Lowercase<string> = Lowercase<string>, PE extends string = string, BP extends string = string, PL extends string = never, PI extends string = never> {
19
+ readonly appId: string;
20
+ readonly bundleId: string;
21
+ private products;
22
+ private consumables;
23
+ private subscriptions;
24
+ private nonConsumables;
25
+ get productIds(): string[];
26
+ [addMethod]: (subscription: Subscription<NS, PE, BP, PL, PI>) => this;
27
+ private constructor();
28
+ static create: <NS_1 extends Lowercase<string>, PE_1 extends string, BP_1 extends string = string>(options: Options) => AppStoreConfig<NS_1, PE_1, BP_1, never, never>;
29
+ /** The same plan may be declared once per billing period; duplicate pairs are rejected. */
30
+ subscription: <K extends PE, P extends BP>(plan: K, billingPeriod: `${K}:${P}` extends PL ? never : P) => Subscription<NS, PE, BP, PL | `${K}:${P}`, PI, never>;
31
+ consumable: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K, metadata?: Metadata) => AppStoreConfig<NS, PE, BP, PL, PI | K>;
32
+ nonConsumable: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K) => AppStoreConfig<NS, PE, BP, PL, PI | K>;
33
+ getPlan: (productId: string) => PE;
34
+ getBillingPeriod: (productId: string) => BP;
35
+ getMode: (productId: string) => 'payment' | 'subscription';
36
+ getCreditAmount: (productId: string) => number;
37
+ private getCreditExpiresIn;
38
+ getCreditExpiresAt: (productId: string) => string;
37
39
  }
38
-
40
+ //#endregion
39
41
  export { AppStoreConfig };
42
+ //# sourceMappingURL=config.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.cts","names":[],"sources":["../../src/app-store/config.ts"],"mappings":";;cAIM;cAEA,aACJ,WAAW,oBAAoB,mBAC/B,4BACA,4BACA,2BACA,2BACA;WAES,MAAM;WACN,eAAe;WACf,QAAQ,eAAe,IAAI,IAAI,IAAI,IAAI;WACvC,UAAU,YAAY;EAE/B,kBAAkB;EAElB,YAAY,QAAQ,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,eAAe;EAQjF,UAAW,aAAa,MAAM,qBAAmB,WACpC,UAAU,aAAa,GAAC,WACzB,aACT,aAAa,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI;EAK5C,UAAO,kBAAsB,MAAC,eAAA,IAAA,IAAA,IAAA,IAAA;;KAO3B;EAAY;EAAoB;;cAExB,eACX,WAAW,oBAAoB,mBAC/B,4BACA,4BACA,2BACA;WAES;WACA;UAED;UACA;UACA;UACA;MAEJ;GAIH,aAAU,cAAkB,aAAa,IAAI,IAAI,IAAI,IAAI;UAMnD;SASA,SAAU,aAAW,mBAAmB,qBAAmB,8BAA0B,SACjF,YAAO,eAAA,MAAA,MAAA;;EAMlB,eAAgB,UAAU,IAAI,UAAU,IAAE,MAClC,GAAC,kBACW,KAAK,YAAY,aAAa,MAAC,aAAA,IAAA,IAAA,IAAA,QAAA,KAAA,KAAA;EAMnD,aAAc,aAAa,MAAM,qBAAmB,WACvC,UAAU,aAAa,GAAC,WACzB,aAIK,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK;EAGrD,gBAAiB,aAAa,MAAM,qBAAmB,WAAa,UAAU,aAAa,MAG1E,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK;EAGrD,UAAO,sBAAwB;EAO/B,mBAAgB,sBAAwB;EAOxC,UAAO;EAQP,kBAAe;UAOP;EAMR,qBAAkB"}
@@ -0,0 +1,42 @@
1
+ import { Metadata } from "../types.mjs";
2
+ //#region src/app-store/config.d.ts
3
+ declare const addMethod: unique symbol;
4
+ declare class Subscription<NS extends Lowercase<string> = Lowercase<string>, PE extends string = string, BP extends string = string, PL extends string = never, PI extends string = never, I extends string = never> {
5
+ readonly plan: PE;
6
+ readonly billingPeriod: BP;
7
+ readonly config: AppStoreConfig<NS, PE, BP, PL, PI>;
8
+ readonly products: Map<string, Metadata>;
9
+ defaultProductId: I | null;
10
+ constructor(config: AppStoreConfig<NS, PE, BP, PL, PI>, plan: PE, billingPeriod: BP);
11
+ product: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K, metadata?: Metadata) => Subscription<NS, PE, BP, PL, PI | K, I | K>;
12
+ default: (defaultProductId: I) => AppStoreConfig<NS, PE, BP, PL, PI>;
13
+ }
14
+ type Options = {
15
+ appId: `${number}`;
16
+ bundleId: string;
17
+ };
18
+ declare class AppStoreConfig<NS extends Lowercase<string> = Lowercase<string>, PE extends string = string, BP extends string = string, PL extends string = never, PI extends string = never> {
19
+ readonly appId: string;
20
+ readonly bundleId: string;
21
+ private products;
22
+ private consumables;
23
+ private subscriptions;
24
+ private nonConsumables;
25
+ get productIds(): string[];
26
+ [addMethod]: (subscription: Subscription<NS, PE, BP, PL, PI>) => this;
27
+ private constructor();
28
+ static create: <NS_1 extends Lowercase<string>, PE_1 extends string, BP_1 extends string = string>(options: Options) => AppStoreConfig<NS_1, PE_1, BP_1, never, never>;
29
+ /** The same plan may be declared once per billing period; duplicate pairs are rejected. */
30
+ subscription: <K extends PE, P extends BP>(plan: K, billingPeriod: `${K}:${P}` extends PL ? never : P) => Subscription<NS, PE, BP, PL | `${K}:${P}`, PI, never>;
31
+ consumable: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K, metadata?: Metadata) => AppStoreConfig<NS, PE, BP, PL, PI | K>;
32
+ nonConsumable: <K extends `${NS}.${Lowercase<string>}`>(productId: K extends PI ? never : K) => AppStoreConfig<NS, PE, BP, PL, PI | K>;
33
+ getPlan: (productId: string) => PE;
34
+ getBillingPeriod: (productId: string) => BP;
35
+ getMode: (productId: string) => 'payment' | 'subscription';
36
+ getCreditAmount: (productId: string) => number;
37
+ private getCreditExpiresIn;
38
+ getCreditExpiresAt: (productId: string) => string;
39
+ }
40
+ //#endregion
41
+ export { AppStoreConfig };
42
+ //# sourceMappingURL=config.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.mts","names":[],"sources":["../../src/app-store/config.ts"],"mappings":";;cAIM;cAEA,aACJ,WAAW,oBAAoB,mBAC/B,4BACA,4BACA,2BACA,2BACA;WAES,MAAM;WACN,eAAe;WACf,QAAQ,eAAe,IAAI,IAAI,IAAI,IAAI;WACvC,UAAU,YAAY;EAE/B,kBAAkB;EAElB,YAAY,QAAQ,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,eAAe;EAQjF,UAAW,aAAa,MAAM,qBAAmB,WACpC,UAAU,aAAa,GAAC,WACzB,aACT,aAAa,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI;EAK5C,UAAO,kBAAsB,MAAC,eAAA,IAAA,IAAA,IAAA,IAAA;;KAO3B;EAAY;EAAoB;;cAExB,eACX,WAAW,oBAAoB,mBAC/B,4BACA,4BACA,2BACA;WAES;WACA;UAED;UACA;UACA;UACA;MAEJ;GAIH,aAAU,cAAkB,aAAa,IAAI,IAAI,IAAI,IAAI;UAMnD;SASA,SAAU,aAAW,mBAAmB,qBAAmB,8BAA0B,SACjF,YAAO,eAAA,MAAA,MAAA;;EAMlB,eAAgB,UAAU,IAAI,UAAU,IAAE,MAClC,GAAC,kBACW,KAAK,YAAY,aAAa,MAAC,aAAA,IAAA,IAAA,IAAA,QAAA,KAAA,KAAA;EAMnD,aAAc,aAAa,MAAM,qBAAmB,WACvC,UAAU,aAAa,GAAC,WACzB,aAIK,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK;EAGrD,gBAAiB,aAAa,MAAM,qBAAmB,WAAa,UAAU,aAAa,MAG1E,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK;EAGrD,UAAO,sBAAwB;EAO/B,mBAAgB,sBAAwB;EAOxC,UAAO;EAQP,kBAAe;UAOP;EAMR,qBAAkB"}