@metamask-previews/subscription-controller 5.4.2-preview-843a84316 → 5.4.2-preview-55087dcda
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 +0 -7
- package/dist/SubscriptionService.cjs +30 -125
- package/dist/SubscriptionService.cjs.map +1 -1
- package/dist/SubscriptionService.d.cts +0 -2
- package/dist/SubscriptionService.d.cts.map +1 -1
- package/dist/SubscriptionService.d.mts +0 -2
- package/dist/SubscriptionService.d.mts.map +1 -1
- package/dist/SubscriptionService.mjs +32 -127
- package/dist/SubscriptionService.mjs.map +1 -1
- package/dist/constants.cjs +1 -18
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +0 -16
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +0 -16
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +0 -17
- package/dist/constants.mjs.map +1 -1
- package/dist/errors.cjs +2 -48
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +1 -22
- package/dist/errors.d.cts.map +1 -1
- package/dist/errors.d.mts +1 -22
- package/dist/errors.d.mts.map +1 -1
- package/dist/errors.mjs +1 -45
- package/dist/errors.mjs.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,15 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
### Added
|
|
11
|
-
|
|
12
|
-
- **BREAKING**: Added two new params, `captureException` and `fetchFunction` to `SubscriptionService` constructor args. ([#7835](https://github.com/MetaMask/core/pull/7835))
|
|
13
|
-
- `fetchFunction` is to use the client provided `Fetch` API.
|
|
14
|
-
- `captureException` is to capture the error thrown and report to Sentry.
|
|
15
|
-
|
|
16
10
|
### Changed
|
|
17
11
|
|
|
18
|
-
- Updated `SubscriptionServiceError` to include more information for Sentry reporting. ([#7835](https://github.com/MetaMask/core/pull/7835))
|
|
19
12
|
- Bump `@metamask/profile-sync-controller` from `^27.0.0` to `^27.1.0` ([#7849](https://github.com/MetaMask/core/pull/7849))
|
|
20
13
|
- Bump `@metamask/transaction-controller` from `^62.12.0` to `^62.14.0` ([#7802](https://github.com/MetaMask/core/pull/7802), [#7832](https://github.com/MetaMask/core/pull/7832))
|
|
21
14
|
|
|
@@ -10,9 +10,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
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");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _SubscriptionService_instances, _SubscriptionService_env,
|
|
13
|
+
var _SubscriptionService_instances, _SubscriptionService_env, _SubscriptionService_makeRequest, _SubscriptionService_getAuthorizationHeader;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.SubscriptionService = exports.SUBSCRIPTION_URL = void 0;
|
|
16
|
+
const controller_utils_1 = require("@metamask/controller-utils");
|
|
16
17
|
const constants_1 = require("./constants.cjs");
|
|
17
18
|
const errors_1 = require("./errors.cjs");
|
|
18
19
|
const SUBSCRIPTION_URL = (env, path) => `${(0, constants_1.getEnvUrls)(env).subscriptionApiUrl}/v1/${path}`;
|
|
@@ -21,83 +22,46 @@ class SubscriptionService {
|
|
|
21
22
|
constructor(config) {
|
|
22
23
|
_SubscriptionService_instances.add(this);
|
|
23
24
|
_SubscriptionService_env.set(this, void 0);
|
|
24
|
-
_SubscriptionService_fetch.set(this, void 0);
|
|
25
|
-
_SubscriptionService_captureException.set(this, void 0);
|
|
26
25
|
__classPrivateFieldSet(this, _SubscriptionService_env, config.env, "f");
|
|
27
26
|
this.authUtils = config.auth;
|
|
28
|
-
__classPrivateFieldSet(this, _SubscriptionService_fetch, config.fetchFunction, "f");
|
|
29
|
-
__classPrivateFieldSet(this, _SubscriptionService_captureException, config.captureException, "f");
|
|
30
27
|
}
|
|
31
28
|
async getSubscriptions() {
|
|
32
29
|
const path = 'subscriptions';
|
|
33
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
34
|
-
path,
|
|
35
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToGetSubscriptions,
|
|
36
|
-
});
|
|
30
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path);
|
|
37
31
|
}
|
|
38
32
|
async cancelSubscription(params) {
|
|
39
33
|
const path = `subscriptions/${params.subscriptionId}/cancel`;
|
|
40
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, {
|
|
41
|
-
|
|
42
|
-
method: 'POST',
|
|
43
|
-
body: {
|
|
44
|
-
cancelAtPeriodEnd: params.cancelAtPeriodEnd,
|
|
45
|
-
},
|
|
46
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToCancelSubscription,
|
|
34
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', {
|
|
35
|
+
cancelAtPeriodEnd: params.cancelAtPeriodEnd,
|
|
47
36
|
});
|
|
48
37
|
}
|
|
49
38
|
async unCancelSubscription(params) {
|
|
50
39
|
const path = `subscriptions/${params.subscriptionId}/uncancel`;
|
|
51
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, {
|
|
52
|
-
path,
|
|
53
|
-
method: 'POST',
|
|
54
|
-
body: {},
|
|
55
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToUncancelSubscription,
|
|
56
|
-
});
|
|
40
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', {});
|
|
57
41
|
}
|
|
58
42
|
async startSubscriptionWithCard(request) {
|
|
59
43
|
if (request.products.length === 0) {
|
|
60
44
|
throw new errors_1.SubscriptionServiceError(constants_1.SubscriptionControllerErrorMessage.SubscriptionProductsEmpty);
|
|
61
45
|
}
|
|
62
46
|
const path = 'subscriptions/card';
|
|
63
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
64
|
-
path,
|
|
65
|
-
method: 'POST',
|
|
66
|
-
body: request,
|
|
67
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToStartSubscriptionWithCard,
|
|
68
|
-
});
|
|
47
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', request);
|
|
69
48
|
}
|
|
70
49
|
async startSubscriptionWithCrypto(request) {
|
|
71
50
|
const path = 'subscriptions/crypto';
|
|
72
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
73
|
-
path,
|
|
74
|
-
method: 'POST',
|
|
75
|
-
body: request,
|
|
76
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToStartSubscriptionWithCrypto,
|
|
77
|
-
});
|
|
51
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', request);
|
|
78
52
|
}
|
|
79
53
|
async updatePaymentMethodCard(request) {
|
|
80
54
|
const path = `subscriptions/${request.subscriptionId}/payment-method/card`;
|
|
81
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
body: {
|
|
85
|
-
...request,
|
|
86
|
-
subscriptionId: undefined,
|
|
87
|
-
},
|
|
88
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToUpdatePaymentMethodCard,
|
|
55
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'PATCH', {
|
|
56
|
+
...request,
|
|
57
|
+
subscriptionId: undefined,
|
|
89
58
|
});
|
|
90
59
|
}
|
|
91
60
|
async updatePaymentMethodCrypto(request) {
|
|
92
61
|
const path = `subscriptions/${request.subscriptionId}/payment-method/crypto`;
|
|
93
|
-
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
body: {
|
|
97
|
-
...request,
|
|
98
|
-
subscriptionId: undefined,
|
|
99
|
-
},
|
|
100
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToUpdatePaymentMethodCrypto,
|
|
62
|
+
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'PATCH', {
|
|
63
|
+
...request,
|
|
64
|
+
subscriptionId: undefined,
|
|
101
65
|
});
|
|
102
66
|
}
|
|
103
67
|
/**
|
|
@@ -112,11 +76,7 @@ class SubscriptionService {
|
|
|
112
76
|
if (request?.balanceCategory !== undefined) {
|
|
113
77
|
query = { balanceCategory: request.balanceCategory };
|
|
114
78
|
}
|
|
115
|
-
const results = await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
116
|
-
path,
|
|
117
|
-
queryParams: query,
|
|
118
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToGetSubscriptionsEligibilities,
|
|
119
|
-
});
|
|
79
|
+
const results = await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'GET', undefined, query);
|
|
120
80
|
return results.map((result) => ({
|
|
121
81
|
...result,
|
|
122
82
|
canSubscribe: result.canSubscribe || false,
|
|
@@ -134,12 +94,7 @@ class SubscriptionService {
|
|
|
134
94
|
*/
|
|
135
95
|
async submitUserEvent(request) {
|
|
136
96
|
const path = 'user-events';
|
|
137
|
-
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
138
|
-
path,
|
|
139
|
-
method: 'POST',
|
|
140
|
-
body: request,
|
|
141
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToSubmitUserEvent,
|
|
142
|
-
});
|
|
97
|
+
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', request);
|
|
143
98
|
}
|
|
144
99
|
/**
|
|
145
100
|
* Assign user to a cohort.
|
|
@@ -149,12 +104,7 @@ class SubscriptionService {
|
|
|
149
104
|
*/
|
|
150
105
|
async assignUserToCohort(request) {
|
|
151
106
|
const path = 'cohorts/assign';
|
|
152
|
-
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
153
|
-
path,
|
|
154
|
-
method: 'POST',
|
|
155
|
-
body: request,
|
|
156
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToAssignUserToCohort,
|
|
157
|
-
});
|
|
107
|
+
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', request);
|
|
158
108
|
}
|
|
159
109
|
/**
|
|
160
110
|
* Submit sponsorship intents to the Subscription Service backend.
|
|
@@ -167,12 +117,7 @@ class SubscriptionService {
|
|
|
167
117
|
*/
|
|
168
118
|
async submitSponsorshipIntents(request) {
|
|
169
119
|
const path = 'transaction-sponsorship/intents';
|
|
170
|
-
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
171
|
-
path,
|
|
172
|
-
method: 'POST',
|
|
173
|
-
body: request,
|
|
174
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToSubmitSponsorshipIntents,
|
|
175
|
-
});
|
|
120
|
+
await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', request);
|
|
176
121
|
}
|
|
177
122
|
/**
|
|
178
123
|
* Link rewards to a subscription.
|
|
@@ -183,51 +128,28 @@ class SubscriptionService {
|
|
|
183
128
|
*/
|
|
184
129
|
async linkRewards(request) {
|
|
185
130
|
const path = 'rewards/link';
|
|
186
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
187
|
-
path,
|
|
188
|
-
method: 'POST',
|
|
189
|
-
body: request,
|
|
190
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToLinkRewards,
|
|
191
|
-
});
|
|
131
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path, 'POST', request);
|
|
192
132
|
}
|
|
193
133
|
async getPricing() {
|
|
194
134
|
const path = 'pricing';
|
|
195
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
196
|
-
path,
|
|
197
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToGetPricing,
|
|
198
|
-
});
|
|
135
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path);
|
|
199
136
|
}
|
|
200
137
|
async getBillingPortalUrl() {
|
|
201
138
|
const path = 'billing-portal';
|
|
202
|
-
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this,
|
|
203
|
-
path,
|
|
204
|
-
errorMessage: constants_1.SubscriptionServiceErrorMessage.FailedToGetBillingPortalUrl,
|
|
205
|
-
});
|
|
139
|
+
return await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_makeRequest).call(this, path);
|
|
206
140
|
}
|
|
207
141
|
}
|
|
208
142
|
exports.SubscriptionService = SubscriptionService;
|
|
209
|
-
_SubscriptionService_env = new WeakMap(),
|
|
210
|
-
/**
|
|
211
|
-
* Makes a request to the Subscription Service backend.
|
|
212
|
-
*
|
|
213
|
-
* @param params - The request object containing the path, method, body, query parameters, and error message.
|
|
214
|
-
* @param params.path - The path of the request.
|
|
215
|
-
* @param params.method - The method of the request.
|
|
216
|
-
* @param params.body - The body of the request.
|
|
217
|
-
* @param params.queryParams - The query parameters of the request.
|
|
218
|
-
* @param params.errorMessage - The error message to throw if the request fails.
|
|
219
|
-
* @returns The result of the request.
|
|
220
|
-
*/
|
|
221
|
-
async function _SubscriptionService_makeRequest({ path, method = 'GET', body, queryParams, errorMessage, }) {
|
|
222
|
-
const url = new URL((0, exports.SUBSCRIPTION_URL)(__classPrivateFieldGet(this, _SubscriptionService_env, "f"), path));
|
|
143
|
+
_SubscriptionService_env = new WeakMap(), _SubscriptionService_instances = new WeakSet(), _SubscriptionService_makeRequest = async function _SubscriptionService_makeRequest(path, method = 'GET', body, queryParams) {
|
|
223
144
|
try {
|
|
145
|
+
const headers = await __classPrivateFieldGet(this, _SubscriptionService_instances, "m", _SubscriptionService_getAuthorizationHeader).call(this);
|
|
146
|
+
const url = new URL((0, exports.SUBSCRIPTION_URL)(__classPrivateFieldGet(this, _SubscriptionService_env, "f"), path));
|
|
224
147
|
if (queryParams) {
|
|
225
148
|
Object.entries(queryParams).forEach(([key, value]) => {
|
|
226
149
|
url.searchParams.append(key, value);
|
|
227
150
|
});
|
|
228
151
|
}
|
|
229
|
-
const
|
|
230
|
-
const response = await __classPrivateFieldGet(this, _SubscriptionService_fetch, "f").call(this, url.toString(), {
|
|
152
|
+
const response = await (0, controller_utils_1.handleFetch)(url.toString(), {
|
|
231
153
|
method,
|
|
232
154
|
headers: {
|
|
233
155
|
'Content-Type': 'application/json',
|
|
@@ -235,33 +157,16 @@ async function _SubscriptionService_makeRequest({ path, method = 'GET', body, qu
|
|
|
235
157
|
},
|
|
236
158
|
body: body ? JSON.stringify(body) : undefined,
|
|
237
159
|
});
|
|
238
|
-
|
|
239
|
-
const error = await (0, errors_1.getErrorFromResponse)(response);
|
|
240
|
-
throw error;
|
|
241
|
-
}
|
|
242
|
-
const data = await response.json();
|
|
243
|
-
return data;
|
|
160
|
+
return response;
|
|
244
161
|
}
|
|
245
162
|
catch (error) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
__classPrivateFieldGet(this, _SubscriptionService_captureException, "f")?.call(this, (0, errors_1.createSentryError)(errorMessageWithUrl, error instanceof Error ? error : new Error(errorMessage)));
|
|
249
|
-
throw new errors_1.SubscriptionServiceError(`Failed to make request. ${errorMessageWithUrl}`, {
|
|
250
|
-
cause: error instanceof Error ? error : undefined,
|
|
251
|
-
});
|
|
163
|
+
const errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
|
|
164
|
+
throw new errors_1.SubscriptionServiceError(`failed to make request. ${errorMessage}`);
|
|
252
165
|
}
|
|
253
166
|
}, _SubscriptionService_getAuthorizationHeader =
|
|
254
167
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
255
168
|
async function _SubscriptionService_getAuthorizationHeader() {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
return { Authorization: `Bearer ${accessToken}` };
|
|
259
|
-
}
|
|
260
|
-
catch (error) {
|
|
261
|
-
const errorMessage = error instanceof Error
|
|
262
|
-
? error.message
|
|
263
|
-
: 'Unknown error when getting authorization header';
|
|
264
|
-
throw new Error(`Failed to get authorization header. ${errorMessage}`);
|
|
265
|
-
}
|
|
169
|
+
const accessToken = await this.authUtils.getAccessToken();
|
|
170
|
+
return { Authorization: `Bearer ${accessToken}` };
|
|
266
171
|
};
|
|
267
172
|
//# sourceMappingURL=SubscriptionService.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionService.cjs","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getEnvUrls,\n SubscriptionControllerErrorMessage,\n SubscriptionServiceErrorMessage,\n} from './constants';\nimport type { Env } from './constants';\nimport {\n createSentryError,\n getErrorFromResponse,\n SubscriptionServiceError,\n} from './errors';\nimport type {\n AssignCohortRequest,\n AuthUtils,\n BillingPortalResponse,\n GetSubscriptionsEligibilitiesRequest,\n GetSubscriptionsResponse,\n ISubscriptionService,\n PricingResponse,\n SubscriptionEligibility,\n StartCryptoSubscriptionRequest,\n StartCryptoSubscriptionResponse,\n StartSubscriptionRequest,\n StartSubscriptionResponse,\n SubmitUserEventRequest,\n Subscription,\n UpdatePaymentMethodCardRequest,\n UpdatePaymentMethodCardResponse,\n UpdatePaymentMethodCryptoRequest,\n SubmitSponsorshipIntentsRequest,\n LinkRewardsRequest,\n SubscriptionApiGeneralResponse,\n CancelSubscriptionRequest,\n} from './types';\n\nexport type SubscriptionServiceConfig = {\n env: Env;\n auth: AuthUtils;\n fetchFunction: typeof fetch;\n captureException?: (error: Error) => void;\n};\n\nexport const SUBSCRIPTION_URL = (env: Env, path: string): string =>\n `${getEnvUrls(env).subscriptionApiUrl}/v1/${path}`;\n\nexport class SubscriptionService implements ISubscriptionService {\n readonly #env: Env;\n\n readonly #fetch: typeof fetch;\n\n readonly #captureException?: (error: Error) => void;\n\n public authUtils: AuthUtils;\n\n constructor(config: SubscriptionServiceConfig) {\n this.#env = config.env;\n this.authUtils = config.auth;\n this.#fetch = config.fetchFunction;\n this.#captureException = config.captureException;\n }\n\n async getSubscriptions(): Promise<GetSubscriptionsResponse> {\n const path = 'subscriptions';\n return await this.#makeRequest<GetSubscriptionsResponse>({\n path,\n errorMessage: SubscriptionServiceErrorMessage.FailedToGetSubscriptions,\n });\n }\n\n async cancelSubscription(\n params: CancelSubscriptionRequest,\n ): Promise<Subscription> {\n const path = `subscriptions/${params.subscriptionId}/cancel`;\n return await this.#makeRequest<Subscription>({\n path,\n method: 'POST',\n body: {\n cancelAtPeriodEnd: params.cancelAtPeriodEnd,\n },\n errorMessage: SubscriptionServiceErrorMessage.FailedToCancelSubscription,\n });\n }\n\n async unCancelSubscription(params: {\n subscriptionId: string;\n }): Promise<Subscription> {\n const path = `subscriptions/${params.subscriptionId}/uncancel`;\n return await this.#makeRequest<Subscription>({\n path,\n method: 'POST',\n body: {},\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToUncancelSubscription,\n });\n }\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 const path = 'subscriptions/card';\n\n return await this.#makeRequest<StartSubscriptionResponse>({\n path,\n method: 'POST',\n body: request,\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToStartSubscriptionWithCard,\n });\n }\n\n async startSubscriptionWithCrypto(\n request: StartCryptoSubscriptionRequest,\n ): Promise<StartCryptoSubscriptionResponse> {\n const path = 'subscriptions/crypto';\n return await this.#makeRequest<StartCryptoSubscriptionResponse>({\n path,\n method: 'POST',\n body: request,\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToStartSubscriptionWithCrypto,\n });\n }\n\n async updatePaymentMethodCard(\n request: UpdatePaymentMethodCardRequest,\n ): Promise<UpdatePaymentMethodCardResponse> {\n const path = `subscriptions/${request.subscriptionId}/payment-method/card`;\n return await this.#makeRequest<UpdatePaymentMethodCardResponse>({\n path,\n method: 'PATCH',\n body: {\n ...request,\n subscriptionId: undefined,\n },\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToUpdatePaymentMethodCard,\n });\n }\n\n async updatePaymentMethodCrypto(\n request: UpdatePaymentMethodCryptoRequest,\n ): Promise<void> {\n const path = `subscriptions/${request.subscriptionId}/payment-method/crypto`;\n await this.#makeRequest({\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 path = 'subscriptions/eligibility';\n let query: Record<string, string> | undefined;\n if (request?.balanceCategory !== undefined) {\n query = { balanceCategory: request.balanceCategory };\n }\n const results = await this.#makeRequest<SubscriptionEligibility[]>({\n path,\n queryParams: query,\n errorMessage:\n SubscriptionServiceErrorMessage.FailedToGetSubscriptionsEligibilities,\n });\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 path = 'user-events';\n await this.#makeRequest({\n path,\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 path = 'cohorts/assign';\n await this.#makeRequest({\n path,\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 path = 'transaction-sponsorship/intents';\n await this.#makeRequest({\n path,\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 path = 'rewards/link';\n return await this.#makeRequest<SubscriptionApiGeneralResponse>({\n path,\n method: 'POST',\n body: request,\n errorMessage: SubscriptionServiceErrorMessage.FailedToLinkRewards,\n });\n }\n\n async getPricing(): Promise<PricingResponse> {\n const path = 'pricing';\n return await this.#makeRequest<PricingResponse>({\n path,\n errorMessage: SubscriptionServiceErrorMessage.FailedToGetPricing,\n });\n }\n\n async getBillingPortalUrl(): Promise<BillingPortalResponse> {\n const path = 'billing-portal';\n return await this.#makeRequest<BillingPortalResponse>({\n path,\n errorMessage: SubscriptionServiceErrorMessage.FailedToGetBillingPortalUrl,\n });\n }\n\n /**\n * Makes a request to the Subscription Service backend.\n *\n * @param params - The request object containing the path, method, body, query parameters, and error message.\n * @param params.path - The path of the request.\n * @param params.method - The method of the request.\n * @param params.body - The body of the request.\n * @param params.queryParams - The query parameters of the request.\n * @param params.errorMessage - The error message to throw if the request fails.\n * @returns The result of the request.\n */\n async #makeRequest<Result>({\n path,\n method = 'GET',\n body,\n queryParams,\n errorMessage,\n }: {\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<Result> {\n const url = new URL(SUBSCRIPTION_URL(this.#env, path));\n\n try {\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n\n const headers = await this.#getAuthorizationHeader();\n const response = await this.#fetch(url.toString(), {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const error = await getErrorFromResponse(response);\n throw error;\n }\n\n const data = await response.json();\n return data;\n } catch (error) {\n console.error(errorMessage, error);\n\n const errorMessageWithUrl = `${errorMessage} (url: ${url.toString()})`;\n this.#captureException?.(\n createSentryError(\n errorMessageWithUrl,\n error instanceof Error ? error : new Error(errorMessage),\n ),\n );\n\n throw new SubscriptionServiceError(\n `Failed to make request. ${errorMessageWithUrl}`,\n {\n cause: error instanceof Error ? error : undefined,\n },\n );\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async #getAuthorizationHeader(): Promise<{ Authorization: string }> {\n try {\n const accessToken = await this.authUtils.getAccessToken();\n return { Authorization: `Bearer ${accessToken}` };\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Unknown error when getting authorization header';\n\n throw new Error(`Failed to get authorization header. ${errorMessage}`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SubscriptionService.cjs","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"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","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\n\nimport { getEnvUrls, SubscriptionControllerErrorMessage } from './constants';\nimport type { Env } from './constants';\nimport { SubscriptionServiceError } from './errors';\nimport type {\n AssignCohortRequest,\n AuthUtils,\n BillingPortalResponse,\n GetSubscriptionsEligibilitiesRequest,\n GetSubscriptionsResponse,\n ISubscriptionService,\n PricingResponse,\n SubscriptionEligibility,\n StartCryptoSubscriptionRequest,\n StartCryptoSubscriptionResponse,\n StartSubscriptionRequest,\n StartSubscriptionResponse,\n SubmitUserEventRequest,\n Subscription,\n UpdatePaymentMethodCardRequest,\n UpdatePaymentMethodCardResponse,\n UpdatePaymentMethodCryptoRequest,\n SubmitSponsorshipIntentsRequest,\n LinkRewardsRequest,\n SubscriptionApiGeneralResponse,\n CancelSubscriptionRequest,\n} from './types';\n\nexport type SubscriptionServiceConfig = {\n env: Env;\n auth: AuthUtils;\n};\n\nexport const SUBSCRIPTION_URL = (env: Env, path: string): string =>\n `${getEnvUrls(env).subscriptionApiUrl}/v1/${path}`;\n\nexport class SubscriptionService implements ISubscriptionService {\n readonly #env: Env;\n\n public authUtils: AuthUtils;\n\n constructor(config: SubscriptionServiceConfig) {\n this.#env = config.env;\n this.authUtils = config.auth;\n }\n\n async getSubscriptions(): Promise<GetSubscriptionsResponse> {\n const path = 'subscriptions';\n return await this.#makeRequest(path);\n }\n\n async cancelSubscription(\n params: CancelSubscriptionRequest,\n ): Promise<Subscription> {\n const path = `subscriptions/${params.subscriptionId}/cancel`;\n return await this.#makeRequest(path, 'POST', {\n cancelAtPeriodEnd: params.cancelAtPeriodEnd,\n });\n }\n\n async unCancelSubscription(params: {\n subscriptionId: string;\n }): Promise<Subscription> {\n const path = `subscriptions/${params.subscriptionId}/uncancel`;\n return await this.#makeRequest(path, 'POST', {});\n }\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 const path = 'subscriptions/card';\n\n return await this.#makeRequest(path, 'POST', request);\n }\n\n async startSubscriptionWithCrypto(\n request: StartCryptoSubscriptionRequest,\n ): Promise<StartCryptoSubscriptionResponse> {\n const path = 'subscriptions/crypto';\n return await this.#makeRequest(path, 'POST', request);\n }\n\n async updatePaymentMethodCard(\n request: UpdatePaymentMethodCardRequest,\n ): Promise<UpdatePaymentMethodCardResponse> {\n const path = `subscriptions/${request.subscriptionId}/payment-method/card`;\n return await this.#makeRequest<UpdatePaymentMethodCardResponse>(\n path,\n 'PATCH',\n {\n ...request,\n subscriptionId: undefined,\n },\n );\n }\n\n async updatePaymentMethodCrypto(\n request: UpdatePaymentMethodCryptoRequest,\n ): Promise<void> {\n const path = `subscriptions/${request.subscriptionId}/payment-method/crypto`;\n await this.#makeRequest(path, 'PATCH', {\n ...request,\n subscriptionId: undefined,\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 path = 'subscriptions/eligibility';\n let query: Record<string, string> | undefined;\n if (request?.balanceCategory !== undefined) {\n query = { balanceCategory: request.balanceCategory };\n }\n const results = await this.#makeRequest<SubscriptionEligibility[]>(\n path,\n 'GET',\n undefined,\n query,\n );\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 path = 'user-events';\n await this.#makeRequest(path, 'POST', request);\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 path = 'cohorts/assign';\n await this.#makeRequest(path, 'POST', request);\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 path = 'transaction-sponsorship/intents';\n await this.#makeRequest(path, 'POST', request);\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 path = 'rewards/link';\n return await this.#makeRequest<SubscriptionApiGeneralResponse>(\n path,\n 'POST',\n request,\n );\n }\n\n async #makeRequest<Result>(\n path: string,\n method: 'GET' | 'POST' | 'DELETE' | 'PUT' | 'PATCH' = 'GET',\n body?: Record<string, unknown>,\n queryParams?: Record<string, string>,\n ): Promise<Result> {\n try {\n const headers = await this.#getAuthorizationHeader();\n const url = new URL(SUBSCRIPTION_URL(this.#env, path));\n\n if (queryParams) {\n Object.entries(queryParams).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n\n const response = await handleFetch(url.toString(), {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n return response;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : JSON.stringify(error);\n\n throw new SubscriptionServiceError(\n `failed to make request. ${errorMessage}`,\n );\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async #getAuthorizationHeader(): Promise<{ Authorization: string }> {\n const accessToken = await this.authUtils.getAccessToken();\n return { Authorization: `Bearer ${accessToken}` };\n }\n\n async getPricing(): Promise<PricingResponse> {\n const path = 'pricing';\n return await this.#makeRequest<PricingResponse>(path);\n }\n\n async getBillingPortalUrl(): Promise<BillingPortalResponse> {\n const path = 'billing-portal';\n return await this.#makeRequest<BillingPortalResponse>(path);\n }\n}\n"]}
|
|
@@ -3,8 +3,6 @@ import type { AssignCohortRequest, AuthUtils, BillingPortalResponse, GetSubscrip
|
|
|
3
3
|
export type SubscriptionServiceConfig = {
|
|
4
4
|
env: Env;
|
|
5
5
|
auth: AuthUtils;
|
|
6
|
-
fetchFunction: typeof fetch;
|
|
7
|
-
captureException?: (error: Error) => void;
|
|
8
6
|
};
|
|
9
7
|
export declare const SUBSCRIPTION_URL: (env: Env, path: string) => string;
|
|
10
8
|
export declare class SubscriptionService implements ISubscriptionService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionService.d.cts","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SubscriptionService.d.cts","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAoB;AAEvC,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACZ,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,EAChC,+BAA+B,EAC/B,kBAAkB,EAClB,8BAA8B,EAC9B,yBAAyB,EAC1B,oBAAgB;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,GAAG,QAAQ,MAAM,KAAG,MACN,CAAC;AAErD,qBAAa,mBAAoB,YAAW,oBAAoB;;IAGvD,SAAS,EAAE,SAAS,CAAC;gBAEhB,MAAM,EAAE,yBAAyB;IAKvC,gBAAgB,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAKrD,kBAAkB,CACtB,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,YAAY,CAAC;IAOlB,oBAAoB,CAAC,MAAM,EAAE;QACjC,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKnB,yBAAyB,CAC7B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,yBAAyB,CAAC;IAW/B,2BAA2B,CAC/B,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,+BAA+B,CAAC;IAKrC,uBAAuB,CAC3B,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,+BAA+B,CAAC;IAYrC,yBAAyB,CAC7B,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,IAAI,CAAC;IAQhB;;;;;OAKG;IACG,6BAA6B,CACjC,OAAO,CAAC,EAAE,oCAAoC,GAC7C,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAuBrC;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;;;;;;OAQG;IACG,wBAAwB,CAC5B,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;OAMG;IACG,WAAW,CACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,8BAA8B,CAAC;IAmDpC,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAKtC,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAI5D"}
|
|
@@ -3,8 +3,6 @@ import type { AssignCohortRequest, AuthUtils, BillingPortalResponse, GetSubscrip
|
|
|
3
3
|
export type SubscriptionServiceConfig = {
|
|
4
4
|
env: Env;
|
|
5
5
|
auth: AuthUtils;
|
|
6
|
-
fetchFunction: typeof fetch;
|
|
7
|
-
captureException?: (error: Error) => void;
|
|
8
6
|
};
|
|
9
7
|
export declare const SUBSCRIPTION_URL: (env: Env, path: string) => string;
|
|
10
8
|
export declare class SubscriptionService implements ISubscriptionService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionService.d.mts","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SubscriptionService.d.mts","sourceRoot":"","sources":["../src/SubscriptionService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAoB;AAEvC,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACZ,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,EAChC,+BAA+B,EAC/B,kBAAkB,EAClB,8BAA8B,EAC9B,yBAAyB,EAC1B,oBAAgB;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,GAAG,QAAQ,MAAM,KAAG,MACN,CAAC;AAErD,qBAAa,mBAAoB,YAAW,oBAAoB;;IAGvD,SAAS,EAAE,SAAS,CAAC;gBAEhB,MAAM,EAAE,yBAAyB;IAKvC,gBAAgB,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAKrD,kBAAkB,CACtB,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,YAAY,CAAC;IAOlB,oBAAoB,CAAC,MAAM,EAAE;QACjC,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKnB,yBAAyB,CAC7B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,yBAAyB,CAAC;IAW/B,2BAA2B,CAC/B,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,+BAA+B,CAAC;IAKrC,uBAAuB,CAC3B,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,+BAA+B,CAAC;IAYrC,yBAAyB,CAC7B,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,IAAI,CAAC;IAQhB;;;;;OAKG;IACG,6BAA6B,CACjC,OAAO,CAAC,EAAE,oCAAoC,GAC7C,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAuBrC;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;;;;;;OAQG;IACG,wBAAwB,CAC5B,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;OAMG;IACG,WAAW,CACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,8BAA8B,CAAC;IAmDpC,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAKtC,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAI5D"}
|