@metamask/ramps-controller 8.0.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 +26 -1
- package/dist/RampsController.cjs +646 -116
- package/dist/RampsController.cjs.map +1 -1
- package/dist/RampsController.d.cts +284 -13
- package/dist/RampsController.d.cts.map +1 -1
- package/dist/RampsController.d.mts +284 -13
- package/dist/RampsController.d.mts.map +1 -1
- package/dist/RampsController.mjs +646 -116
- package/dist/RampsController.mjs.map +1 -1
- package/dist/RampsService-method-action-types.cjs.map +1 -1
- package/dist/RampsService-method-action-types.d.cts +32 -1
- package/dist/RampsService-method-action-types.d.cts.map +1 -1
- package/dist/RampsService-method-action-types.d.mts +32 -1
- package/dist/RampsService-method-action-types.d.mts.map +1 -1
- package/dist/RampsService-method-action-types.mjs.map +1 -1
- package/dist/RampsService.cjs +83 -1
- package/dist/RampsService.cjs.map +1 -1
- package/dist/RampsService.d.cts +126 -0
- package/dist/RampsService.d.cts.map +1 -1
- package/dist/RampsService.d.mts +126 -0
- package/dist/RampsService.d.mts.map +1 -1
- package/dist/RampsService.mjs +82 -0
- package/dist/RampsService.mjs.map +1 -1
- package/dist/RequestCache.cjs.map +1 -1
- package/dist/RequestCache.d.cts +2 -0
- package/dist/RequestCache.d.cts.map +1 -1
- package/dist/RequestCache.d.mts +2 -0
- package/dist/RequestCache.d.mts.map +1 -1
- package/dist/RequestCache.mjs.map +1 -1
- package/dist/TransakService-method-action-types.cjs +7 -0
- package/dist/TransakService-method-action-types.cjs.map +1 -0
- package/dist/TransakService-method-action-types.d.cts +106 -0
- package/dist/TransakService-method-action-types.d.cts.map +1 -0
- package/dist/TransakService-method-action-types.d.mts +106 -0
- package/dist/TransakService-method-action-types.d.mts.map +1 -0
- package/dist/TransakService-method-action-types.mjs +6 -0
- package/dist/TransakService-method-action-types.mjs.map +1 -0
- package/dist/TransakService.cjs +588 -0
- package/dist/TransakService.cjs.map +1 -0
- package/dist/TransakService.d.cts +329 -0
- package/dist/TransakService.d.cts.map +1 -0
- package/dist/TransakService.d.mts +329 -0
- package/dist/TransakService.d.mts.map +1 -0
- package/dist/TransakService.mjs +582 -0
- package/dist/TransakService.mjs.map +1 -0
- package/dist/index.cjs +7 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -4
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +7 -4
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
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 _TransakService_instances, _TransakService_messenger, _TransakService_fetch, _TransakService_policy, _TransakService_environment, _TransakService_context, _TransakService_orderRetryDelayMs, _TransakService_apiKey, _TransakService_accessToken, _TransakService_ensureApiKey, _TransakService_ensureAccessToken, _TransakService_getHeaders, _TransakService_transakGet, _TransakService_transakPost, _TransakService_transakPatch, _TransakService_transakDelete, _TransakService_ordersApiGet;
|
|
13
|
+
import { createServicePolicy, HttpError } from "@metamask/controller-utils";
|
|
14
|
+
// === ENVIRONMENT ===
|
|
15
|
+
export var TransakEnvironment;
|
|
16
|
+
(function (TransakEnvironment) {
|
|
17
|
+
TransakEnvironment["Production"] = "production";
|
|
18
|
+
TransakEnvironment["Staging"] = "staging";
|
|
19
|
+
})(TransakEnvironment || (TransakEnvironment = {}));
|
|
20
|
+
var TransakApiProviders;
|
|
21
|
+
(function (TransakApiProviders) {
|
|
22
|
+
TransakApiProviders["TransakNative"] = "transak-native";
|
|
23
|
+
TransakApiProviders["TransakNativeStaging"] = "transak-native-staging";
|
|
24
|
+
})(TransakApiProviders || (TransakApiProviders = {}));
|
|
25
|
+
// === ORDER ID UTILITIES ===
|
|
26
|
+
export class TransakOrderIdTransformer {
|
|
27
|
+
static depositOrderIdToTransakOrderId(depositOrderId) {
|
|
28
|
+
const parts = depositOrderId.split('/');
|
|
29
|
+
return parts[parts.length - 1];
|
|
30
|
+
}
|
|
31
|
+
static transakOrderIdToDepositOrderId(transakOrderId, environment) {
|
|
32
|
+
const provider = environment === TransakEnvironment.Staging
|
|
33
|
+
? 'transak-native-staging'
|
|
34
|
+
: 'transak-native';
|
|
35
|
+
return `/providers/${provider}/orders/${transakOrderId}`;
|
|
36
|
+
}
|
|
37
|
+
static isDepositOrderId(orderId) {
|
|
38
|
+
return orderId.startsWith('/providers/');
|
|
39
|
+
}
|
|
40
|
+
static extractTransakOrderId(orderId) {
|
|
41
|
+
return this.isDepositOrderId(orderId)
|
|
42
|
+
? this.depositOrderIdToTransakOrderId(orderId)
|
|
43
|
+
: orderId;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// === MESSENGER ===
|
|
47
|
+
const serviceName = 'TransakService';
|
|
48
|
+
const MESSENGER_EXPOSED_METHODS = [
|
|
49
|
+
'setApiKey',
|
|
50
|
+
'setAccessToken',
|
|
51
|
+
'clearAccessToken',
|
|
52
|
+
'sendUserOtp',
|
|
53
|
+
'verifyUserOtp',
|
|
54
|
+
'logout',
|
|
55
|
+
'getUserDetails',
|
|
56
|
+
'getBuyQuote',
|
|
57
|
+
'getKycRequirement',
|
|
58
|
+
'getAdditionalRequirements',
|
|
59
|
+
'createOrder',
|
|
60
|
+
'getOrder',
|
|
61
|
+
'getUserLimits',
|
|
62
|
+
'requestOtt',
|
|
63
|
+
'generatePaymentWidgetUrl',
|
|
64
|
+
'submitPurposeOfUsageForm',
|
|
65
|
+
'patchUser',
|
|
66
|
+
'submitSsnDetails',
|
|
67
|
+
'confirmPayment',
|
|
68
|
+
'getTranslation',
|
|
69
|
+
'getIdProofStatus',
|
|
70
|
+
'cancelOrder',
|
|
71
|
+
'cancelAllActiveOrders',
|
|
72
|
+
'getActiveOrders',
|
|
73
|
+
];
|
|
74
|
+
// === HELPER FUNCTIONS ===
|
|
75
|
+
/**
|
|
76
|
+
* Maps ramps API payment method IDs (e.g., "/payments/debit-credit-card")
|
|
77
|
+
* to the deposit-format IDs expected by the translation endpoint
|
|
78
|
+
* (e.g., "credit_debit_card").
|
|
79
|
+
*
|
|
80
|
+
* The translation endpoint only understands the deposit-format IDs.
|
|
81
|
+
* If no mapping exists, the input is returned as-is (it may already be
|
|
82
|
+
* in the deposit format).
|
|
83
|
+
*/
|
|
84
|
+
const RAMPS_TO_DEPOSIT_PAYMENT_METHOD = {
|
|
85
|
+
'/payments/debit-credit-card': 'credit_debit_card',
|
|
86
|
+
'/payments/apple-pay': 'apple_pay',
|
|
87
|
+
'/payments/google-pay': 'google_pay',
|
|
88
|
+
'/payments/sepa-bank-transfer': 'sepa_bank_transfer',
|
|
89
|
+
'/payments/wire-transfer': 'wire_transfer',
|
|
90
|
+
'/payments/gbp-bank-transfer': 'gbp_bank_transfer',
|
|
91
|
+
};
|
|
92
|
+
function normalizePaymentMethodForTranslation(paymentMethod) {
|
|
93
|
+
if (!paymentMethod) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
return RAMPS_TO_DEPOSIT_PAYMENT_METHOD[paymentMethod] ?? paymentMethod;
|
|
97
|
+
}
|
|
98
|
+
function getTransakApiBaseUrl(environment) {
|
|
99
|
+
switch (environment) {
|
|
100
|
+
case TransakEnvironment.Production:
|
|
101
|
+
return 'https://api-gateway.transak.com';
|
|
102
|
+
case TransakEnvironment.Staging:
|
|
103
|
+
return 'https://api-gateway-stg.transak.com';
|
|
104
|
+
default:
|
|
105
|
+
throw new Error(`Invalid Transak environment: ${String(environment)}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function getRampsBaseUrl(environment) {
|
|
109
|
+
switch (environment) {
|
|
110
|
+
case TransakEnvironment.Production:
|
|
111
|
+
return 'https://on-ramp.api.cx.metamask.io';
|
|
112
|
+
case TransakEnvironment.Staging:
|
|
113
|
+
return 'https://on-ramp.uat-api.cx.metamask.io';
|
|
114
|
+
default:
|
|
115
|
+
throw new Error(`Invalid Transak environment: ${String(environment)}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function getRampsProviderPath(environment) {
|
|
119
|
+
const providerId = environment === TransakEnvironment.Staging
|
|
120
|
+
? TransakApiProviders.TransakNativeStaging
|
|
121
|
+
: TransakApiProviders.TransakNative;
|
|
122
|
+
return `/providers/${providerId}`;
|
|
123
|
+
}
|
|
124
|
+
function getPaymentWidgetBaseUrl(environment) {
|
|
125
|
+
switch (environment) {
|
|
126
|
+
case TransakEnvironment.Production:
|
|
127
|
+
return 'https://global.transak.com';
|
|
128
|
+
case TransakEnvironment.Staging:
|
|
129
|
+
return 'https://global-stg.transak.com';
|
|
130
|
+
default:
|
|
131
|
+
throw new Error(`Invalid Transak environment: ${String(environment)}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// === TRANSAK API ERROR ===
|
|
135
|
+
const TRANSAK_ORDER_EXISTS_CODE = '4005';
|
|
136
|
+
export class TransakApiError extends HttpError {
|
|
137
|
+
constructor(status, message, errorCode) {
|
|
138
|
+
super(status, message);
|
|
139
|
+
this.errorCode = errorCode;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// === SERVICE DEFINITION ===
|
|
143
|
+
export class TransakService {
|
|
144
|
+
constructor({ messenger, environment = TransakEnvironment.Staging, context, fetch: fetchFunction, apiKey, policyOptions = {}, orderRetryDelayMs = 2000, }) {
|
|
145
|
+
_TransakService_instances.add(this);
|
|
146
|
+
_TransakService_messenger.set(this, void 0);
|
|
147
|
+
_TransakService_fetch.set(this, void 0);
|
|
148
|
+
_TransakService_policy.set(this, void 0);
|
|
149
|
+
_TransakService_environment.set(this, void 0);
|
|
150
|
+
_TransakService_context.set(this, void 0);
|
|
151
|
+
_TransakService_orderRetryDelayMs.set(this, void 0);
|
|
152
|
+
_TransakService_apiKey.set(this, null);
|
|
153
|
+
_TransakService_accessToken.set(this, null);
|
|
154
|
+
this.name = serviceName;
|
|
155
|
+
__classPrivateFieldSet(this, _TransakService_messenger, messenger, "f");
|
|
156
|
+
__classPrivateFieldSet(this, _TransakService_fetch, fetchFunction, "f");
|
|
157
|
+
__classPrivateFieldSet(this, _TransakService_policy, createServicePolicy(policyOptions), "f");
|
|
158
|
+
__classPrivateFieldSet(this, _TransakService_environment, environment, "f");
|
|
159
|
+
__classPrivateFieldSet(this, _TransakService_context, context, "f");
|
|
160
|
+
__classPrivateFieldSet(this, _TransakService_apiKey, apiKey ?? null, "f");
|
|
161
|
+
__classPrivateFieldSet(this, _TransakService_orderRetryDelayMs, orderRetryDelayMs, "f");
|
|
162
|
+
__classPrivateFieldGet(this, _TransakService_messenger, "f").registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
163
|
+
}
|
|
164
|
+
setApiKey(apiKey) {
|
|
165
|
+
__classPrivateFieldSet(this, _TransakService_apiKey, apiKey, "f");
|
|
166
|
+
}
|
|
167
|
+
getApiKey() {
|
|
168
|
+
return __classPrivateFieldGet(this, _TransakService_apiKey, "f");
|
|
169
|
+
}
|
|
170
|
+
setAccessToken(token) {
|
|
171
|
+
__classPrivateFieldSet(this, _TransakService_accessToken, token, "f");
|
|
172
|
+
}
|
|
173
|
+
getAccessToken() {
|
|
174
|
+
return __classPrivateFieldGet(this, _TransakService_accessToken, "f");
|
|
175
|
+
}
|
|
176
|
+
clearAccessToken() {
|
|
177
|
+
__classPrivateFieldSet(this, _TransakService_accessToken, null, "f");
|
|
178
|
+
}
|
|
179
|
+
// === PUBLIC API METHODS ===
|
|
180
|
+
async sendUserOtp(email) {
|
|
181
|
+
const result = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/auth/login', { email });
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
async verifyUserOtp(email, verificationCode, stateToken) {
|
|
185
|
+
const responseData = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/auth/verify', {
|
|
186
|
+
email,
|
|
187
|
+
otp: verificationCode,
|
|
188
|
+
stateToken,
|
|
189
|
+
});
|
|
190
|
+
const accessToken = {
|
|
191
|
+
accessToken: responseData.accessToken,
|
|
192
|
+
ttl: responseData.ttl,
|
|
193
|
+
created: new Date(responseData.created),
|
|
194
|
+
};
|
|
195
|
+
this.setAccessToken(accessToken);
|
|
196
|
+
return accessToken;
|
|
197
|
+
}
|
|
198
|
+
async logout() {
|
|
199
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
200
|
+
try {
|
|
201
|
+
const result = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v1/auth/logout');
|
|
202
|
+
this.clearAccessToken();
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (error instanceof HttpError && error.httpStatus === 401) {
|
|
207
|
+
this.clearAccessToken();
|
|
208
|
+
return 'user was already logged out';
|
|
209
|
+
}
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async getUserDetails() {
|
|
214
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
215
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, '/api/v2/user/');
|
|
216
|
+
}
|
|
217
|
+
async getBuyQuote(genericFiatCurrency, genericCryptoCurrency, genericNetwork, genericPaymentMethod, fiatAmount) {
|
|
218
|
+
const normalizedPaymentMethod = normalizePaymentMethodForTranslation(genericPaymentMethod || undefined);
|
|
219
|
+
const translationRequest = {
|
|
220
|
+
cryptoCurrencyId: genericCryptoCurrency,
|
|
221
|
+
chainId: genericNetwork,
|
|
222
|
+
fiatCurrencyId: genericFiatCurrency,
|
|
223
|
+
paymentMethod: normalizedPaymentMethod,
|
|
224
|
+
};
|
|
225
|
+
const translation = await this.getTranslation(translationRequest);
|
|
226
|
+
const params = {
|
|
227
|
+
fiatCurrency: translation.fiatCurrency,
|
|
228
|
+
cryptoCurrency: translation.cryptoCurrency,
|
|
229
|
+
isBuyOrSell: 'BUY',
|
|
230
|
+
network: translation.network,
|
|
231
|
+
fiatAmount,
|
|
232
|
+
isFeeExcludedFromFiat: 'true',
|
|
233
|
+
};
|
|
234
|
+
if (translation.paymentMethod) {
|
|
235
|
+
params.paymentMethod = translation.paymentMethod;
|
|
236
|
+
}
|
|
237
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, '/api/v2/lookup/quotes', params);
|
|
238
|
+
}
|
|
239
|
+
async getKycRequirement(quoteId) {
|
|
240
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
241
|
+
const result = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, '/api/v2/kyc/requirement', {
|
|
242
|
+
'metadata[quoteId]': quoteId,
|
|
243
|
+
});
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
async getAdditionalRequirements(quoteId) {
|
|
247
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
248
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, '/api/v2/kyc/additional-requirements', { 'metadata[quoteId]': quoteId });
|
|
249
|
+
}
|
|
250
|
+
async createOrder(quoteId, walletAddress, paymentMethodId) {
|
|
251
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
252
|
+
const normalizedPaymentMethod = normalizePaymentMethodForTranslation(paymentMethodId);
|
|
253
|
+
const translation = await this.getTranslation({
|
|
254
|
+
paymentMethod: normalizedPaymentMethod,
|
|
255
|
+
});
|
|
256
|
+
const paymentInstrumentId = translation.paymentMethod ?? normalizedPaymentMethod;
|
|
257
|
+
try {
|
|
258
|
+
const transakOrder = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/orders', {
|
|
259
|
+
quoteId,
|
|
260
|
+
walletAddress,
|
|
261
|
+
paymentInstrumentId,
|
|
262
|
+
});
|
|
263
|
+
const depositOrderId = TransakOrderIdTransformer.transakOrderIdToDepositOrderId(transakOrder.orderId, __classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
264
|
+
return this.getOrder(depositOrderId, transakOrder.walletAddress, transakOrder.paymentDetails);
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
if (error instanceof TransakApiError &&
|
|
268
|
+
error.httpStatus === 409 &&
|
|
269
|
+
error.errorCode === TRANSAK_ORDER_EXISTS_CODE) {
|
|
270
|
+
await this.cancelAllActiveOrders();
|
|
271
|
+
await new Promise((resolve) => setTimeout(resolve, __classPrivateFieldGet(this, _TransakService_orderRetryDelayMs, "f")));
|
|
272
|
+
const retryOrder = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/orders', {
|
|
273
|
+
quoteId,
|
|
274
|
+
walletAddress,
|
|
275
|
+
paymentInstrumentId,
|
|
276
|
+
});
|
|
277
|
+
const retryDepositOrderId = TransakOrderIdTransformer.transakOrderIdToDepositOrderId(retryOrder.orderId, __classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
278
|
+
return this.getOrder(retryDepositOrderId, retryOrder.walletAddress, retryOrder.paymentDetails);
|
|
279
|
+
}
|
|
280
|
+
throw error;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
async getOrder(orderId, wallet, paymentDetails) {
|
|
284
|
+
let depositOrderId;
|
|
285
|
+
if (TransakOrderIdTransformer.isDepositOrderId(orderId)) {
|
|
286
|
+
depositOrderId = orderId;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
depositOrderId = TransakOrderIdTransformer.transakOrderIdToDepositOrderId(orderId, __classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
290
|
+
}
|
|
291
|
+
const transakOrderId = TransakOrderIdTransformer.extractTransakOrderId(depositOrderId);
|
|
292
|
+
const order = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ordersApiGet).call(this, `/orders/${transakOrderId}`, { wallet });
|
|
293
|
+
const orderWithId = {
|
|
294
|
+
...order,
|
|
295
|
+
id: depositOrderId,
|
|
296
|
+
orderType: 'DEPOSIT',
|
|
297
|
+
};
|
|
298
|
+
if (paymentDetails && paymentDetails.length > 0) {
|
|
299
|
+
return { ...orderWithId, paymentDetails };
|
|
300
|
+
}
|
|
301
|
+
if (__classPrivateFieldGet(this, _TransakService_accessToken, "f")?.accessToken) {
|
|
302
|
+
try {
|
|
303
|
+
const transakOrder = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, `/api/v2/orders/${transakOrderId}`);
|
|
304
|
+
return { ...orderWithId, paymentDetails: transakOrder.paymentDetails };
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
return orderWithId;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return orderWithId;
|
|
311
|
+
}
|
|
312
|
+
async getUserLimits(fiatCurrency, paymentMethod, kycType) {
|
|
313
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
314
|
+
const translation = await this.getTranslation({
|
|
315
|
+
paymentMethod: normalizePaymentMethodForTranslation(paymentMethod),
|
|
316
|
+
});
|
|
317
|
+
const params = {
|
|
318
|
+
isBuyOrSell: 'BUY',
|
|
319
|
+
kycType,
|
|
320
|
+
fiatCurrency,
|
|
321
|
+
};
|
|
322
|
+
if (translation.paymentMethod) {
|
|
323
|
+
params.paymentCategory = translation.paymentMethod;
|
|
324
|
+
}
|
|
325
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, '/api/v2/orders/user-limit', params);
|
|
326
|
+
}
|
|
327
|
+
async requestOtt() {
|
|
328
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
329
|
+
const result = await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/auth/request-ott');
|
|
330
|
+
return result;
|
|
331
|
+
}
|
|
332
|
+
generatePaymentWidgetUrl(ottToken, quote, walletAddress, extraParams) {
|
|
333
|
+
const apiKey = __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureApiKey).call(this);
|
|
334
|
+
const widgetBaseUrl = getPaymentWidgetBaseUrl(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
335
|
+
const defaultParams = {
|
|
336
|
+
apiKey,
|
|
337
|
+
ott: ottToken,
|
|
338
|
+
fiatCurrency: quote.fiatCurrency,
|
|
339
|
+
cryptoCurrencyCode: quote.cryptoCurrency,
|
|
340
|
+
productsAvailed: 'BUY',
|
|
341
|
+
fiatAmount: quote.fiatAmount.toString(),
|
|
342
|
+
network: quote.network,
|
|
343
|
+
hideExchangeScreen: 'true',
|
|
344
|
+
walletAddress,
|
|
345
|
+
disableWalletAddressForm: 'true',
|
|
346
|
+
paymentMethod: quote.paymentMethod,
|
|
347
|
+
redirectURL: 'https://on-ramp-content.api.cx.metamask.io/regions/fake-callback',
|
|
348
|
+
hideMenu: 'true',
|
|
349
|
+
};
|
|
350
|
+
const params = new URLSearchParams({
|
|
351
|
+
...defaultParams,
|
|
352
|
+
...extraParams,
|
|
353
|
+
});
|
|
354
|
+
const widgetUrl = new URL(widgetBaseUrl);
|
|
355
|
+
widgetUrl.search = params.toString();
|
|
356
|
+
return widgetUrl.toString();
|
|
357
|
+
}
|
|
358
|
+
async submitPurposeOfUsageForm(purpose) {
|
|
359
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
360
|
+
await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/kyc/purpose-of-usage', {
|
|
361
|
+
purposeList: purpose,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
async patchUser(data) {
|
|
365
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
366
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPatch).call(this, '/api/v2/kyc/user', data);
|
|
367
|
+
}
|
|
368
|
+
async submitSsnDetails(ssn, quoteId) {
|
|
369
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
370
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/kyc/ssn', { ssn, quoteId });
|
|
371
|
+
}
|
|
372
|
+
async confirmPayment(orderId, paymentMethodId) {
|
|
373
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
374
|
+
const normalizedPaymentMethod = normalizePaymentMethodForTranslation(paymentMethodId);
|
|
375
|
+
const translation = await this.getTranslation({
|
|
376
|
+
paymentMethod: normalizedPaymentMethod,
|
|
377
|
+
});
|
|
378
|
+
const transakOrderId = TransakOrderIdTransformer.extractTransakOrderId(orderId);
|
|
379
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakPost).call(this, '/api/v2/orders/payment-confirmation', {
|
|
380
|
+
orderId: transakOrderId,
|
|
381
|
+
paymentMethod: translation.paymentMethod ?? normalizedPaymentMethod,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
async getTranslation(translationRequest) {
|
|
385
|
+
const baseUrl = getRampsBaseUrl(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
386
|
+
const providerPath = getRampsProviderPath(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
387
|
+
const url = new URL(`${providerPath}/native/translate`, baseUrl);
|
|
388
|
+
url.searchParams.set('action', 'deposit');
|
|
389
|
+
url.searchParams.set('context', __classPrivateFieldGet(this, _TransakService_context, "f"));
|
|
390
|
+
const normalizedRequest = {
|
|
391
|
+
...translationRequest,
|
|
392
|
+
paymentMethod: normalizePaymentMethodForTranslation(translationRequest.paymentMethod),
|
|
393
|
+
};
|
|
394
|
+
for (const [key, value] of Object.entries(normalizedRequest)) {
|
|
395
|
+
if (value !== undefined) {
|
|
396
|
+
url.searchParams.set(key, value);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
const response = await __classPrivateFieldGet(this, _TransakService_policy, "f").execute(async () => {
|
|
400
|
+
const fetchResponse = await __classPrivateFieldGet(this, _TransakService_fetch, "f").call(this, url.toString(), {
|
|
401
|
+
method: 'GET',
|
|
402
|
+
headers: { Accept: 'application/json' },
|
|
403
|
+
});
|
|
404
|
+
if (!fetchResponse.ok) {
|
|
405
|
+
throw new HttpError(fetchResponse.status, `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`);
|
|
406
|
+
}
|
|
407
|
+
return fetchResponse.json();
|
|
408
|
+
});
|
|
409
|
+
return response;
|
|
410
|
+
}
|
|
411
|
+
async getIdProofStatus(workFlowRunId) {
|
|
412
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
413
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, '/api/v2/kyc/id-proof-status', { workFlowRunId });
|
|
414
|
+
}
|
|
415
|
+
async cancelOrder(depositOrderId) {
|
|
416
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
417
|
+
const transakOrderId = TransakOrderIdTransformer.extractTransakOrderId(depositOrderId);
|
|
418
|
+
await __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakDelete).call(this, `/api/v2/orders/${transakOrderId}`, {
|
|
419
|
+
cancelReason: 'Creating new order',
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
async cancelAllActiveOrders() {
|
|
423
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
424
|
+
const activeOrders = await this.getActiveOrders();
|
|
425
|
+
const errors = [];
|
|
426
|
+
await Promise.all(activeOrders.map(async (order) => {
|
|
427
|
+
try {
|
|
428
|
+
const depositOrderId = TransakOrderIdTransformer.transakOrderIdToDepositOrderId(order.orderId, __classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
429
|
+
await this.cancelOrder(depositOrderId);
|
|
430
|
+
}
|
|
431
|
+
catch (error) {
|
|
432
|
+
errors.push(error instanceof Error ? error : new Error(String(error)));
|
|
433
|
+
}
|
|
434
|
+
}));
|
|
435
|
+
return errors;
|
|
436
|
+
}
|
|
437
|
+
async getActiveOrders() {
|
|
438
|
+
__classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureAccessToken).call(this);
|
|
439
|
+
return __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_transakGet).call(this, '/api/v2/active-orders');
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
_TransakService_messenger = new WeakMap(), _TransakService_fetch = new WeakMap(), _TransakService_policy = new WeakMap(), _TransakService_environment = new WeakMap(), _TransakService_context = new WeakMap(), _TransakService_orderRetryDelayMs = new WeakMap(), _TransakService_apiKey = new WeakMap(), _TransakService_accessToken = new WeakMap(), _TransakService_instances = new WeakSet(), _TransakService_ensureApiKey = function _TransakService_ensureApiKey() {
|
|
443
|
+
if (!__classPrivateFieldGet(this, _TransakService_apiKey, "f")) {
|
|
444
|
+
throw new Error('Transak API key is required but not set.');
|
|
445
|
+
}
|
|
446
|
+
return __classPrivateFieldGet(this, _TransakService_apiKey, "f");
|
|
447
|
+
}, _TransakService_ensureAccessToken = function _TransakService_ensureAccessToken() {
|
|
448
|
+
if (!__classPrivateFieldGet(this, _TransakService_accessToken, "f")?.accessToken) {
|
|
449
|
+
throw new HttpError(401, 'Authentication required. Please log in to continue.');
|
|
450
|
+
}
|
|
451
|
+
const createdTime = new Date(__classPrivateFieldGet(this, _TransakService_accessToken, "f").created).getTime();
|
|
452
|
+
const tokenAgeMs = Date.now() - createdTime;
|
|
453
|
+
if (tokenAgeMs > __classPrivateFieldGet(this, _TransakService_accessToken, "f").ttl * 1000) {
|
|
454
|
+
this.clearAccessToken();
|
|
455
|
+
throw new HttpError(401, 'Authentication token has expired. Please log in again.');
|
|
456
|
+
}
|
|
457
|
+
}, _TransakService_getHeaders = function _TransakService_getHeaders() {
|
|
458
|
+
const headers = {
|
|
459
|
+
'Content-Type': 'application/json',
|
|
460
|
+
Accept: 'application/json',
|
|
461
|
+
};
|
|
462
|
+
if (__classPrivateFieldGet(this, _TransakService_accessToken, "f")?.accessToken) {
|
|
463
|
+
headers.authorization = __classPrivateFieldGet(this, _TransakService_accessToken, "f").accessToken;
|
|
464
|
+
}
|
|
465
|
+
return headers;
|
|
466
|
+
}, _TransakService_transakGet = async function _TransakService_transakGet(path, params) {
|
|
467
|
+
const baseUrl = getTransakApiBaseUrl(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
468
|
+
const url = new URL(path, baseUrl);
|
|
469
|
+
if (params) {
|
|
470
|
+
for (const [key, value] of Object.entries(params)) {
|
|
471
|
+
if (value !== null && value !== undefined) {
|
|
472
|
+
url.searchParams.set(key, value);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
const apiKey = __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureApiKey).call(this);
|
|
477
|
+
url.searchParams.set('apiKey', apiKey);
|
|
478
|
+
const response = await __classPrivateFieldGet(this, _TransakService_policy, "f").execute(async () => {
|
|
479
|
+
const fetchResponse = await __classPrivateFieldGet(this, _TransakService_fetch, "f").call(this, url.toString(), {
|
|
480
|
+
method: 'GET',
|
|
481
|
+
headers: __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_getHeaders).call(this),
|
|
482
|
+
});
|
|
483
|
+
if (!fetchResponse.ok) {
|
|
484
|
+
throw new HttpError(fetchResponse.status, `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`);
|
|
485
|
+
}
|
|
486
|
+
return fetchResponse.json();
|
|
487
|
+
});
|
|
488
|
+
return response.data;
|
|
489
|
+
}, _TransakService_transakPost = async function _TransakService_transakPost(path, body) {
|
|
490
|
+
const apiKey = __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureApiKey).call(this);
|
|
491
|
+
const baseUrl = getTransakApiBaseUrl(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
492
|
+
const url = new URL(path, baseUrl);
|
|
493
|
+
const requestBody = {
|
|
494
|
+
...(body ?? {}),
|
|
495
|
+
apiKey,
|
|
496
|
+
};
|
|
497
|
+
const response = await __classPrivateFieldGet(this, _TransakService_policy, "f").execute(async () => {
|
|
498
|
+
const fetchResponse = await __classPrivateFieldGet(this, _TransakService_fetch, "f").call(this, url.toString(), {
|
|
499
|
+
method: 'POST',
|
|
500
|
+
headers: __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_getHeaders).call(this),
|
|
501
|
+
body: JSON.stringify(requestBody),
|
|
502
|
+
});
|
|
503
|
+
if (!fetchResponse.ok) {
|
|
504
|
+
let errorBody = '';
|
|
505
|
+
let errorCode;
|
|
506
|
+
try {
|
|
507
|
+
errorBody = await fetchResponse.text();
|
|
508
|
+
const parsed = JSON.parse(errorBody);
|
|
509
|
+
errorCode = parsed?.error?.code;
|
|
510
|
+
}
|
|
511
|
+
catch {
|
|
512
|
+
// ignore body read/parse failures
|
|
513
|
+
}
|
|
514
|
+
throw new TransakApiError(fetchResponse.status, `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'${errorBody ? `: ${errorBody}` : ''}`, errorCode);
|
|
515
|
+
}
|
|
516
|
+
return fetchResponse.json();
|
|
517
|
+
});
|
|
518
|
+
return response.data;
|
|
519
|
+
}, _TransakService_transakPatch = async function _TransakService_transakPatch(path, body) {
|
|
520
|
+
const apiKey = __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureApiKey).call(this);
|
|
521
|
+
const baseUrl = getTransakApiBaseUrl(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
522
|
+
const url = new URL(path, baseUrl);
|
|
523
|
+
url.searchParams.set('apiKey', apiKey);
|
|
524
|
+
const response = await __classPrivateFieldGet(this, _TransakService_policy, "f").execute(async () => {
|
|
525
|
+
const fetchResponse = await __classPrivateFieldGet(this, _TransakService_fetch, "f").call(this, url.toString(), {
|
|
526
|
+
method: 'PATCH',
|
|
527
|
+
headers: __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_getHeaders).call(this),
|
|
528
|
+
body: JSON.stringify(body),
|
|
529
|
+
});
|
|
530
|
+
if (!fetchResponse.ok) {
|
|
531
|
+
throw new HttpError(fetchResponse.status, `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`);
|
|
532
|
+
}
|
|
533
|
+
return fetchResponse.json();
|
|
534
|
+
});
|
|
535
|
+
return response.data;
|
|
536
|
+
}, _TransakService_transakDelete = async function _TransakService_transakDelete(path, params) {
|
|
537
|
+
const apiKey = __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_ensureApiKey).call(this);
|
|
538
|
+
const baseUrl = getTransakApiBaseUrl(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
539
|
+
const url = new URL(path, baseUrl);
|
|
540
|
+
url.searchParams.set('apiKey', apiKey);
|
|
541
|
+
if (params) {
|
|
542
|
+
for (const [key, value] of Object.entries(params)) {
|
|
543
|
+
if (value !== null && value !== undefined) {
|
|
544
|
+
url.searchParams.set(key, value);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
await __classPrivateFieldGet(this, _TransakService_policy, "f").execute(async () => {
|
|
549
|
+
const fetchResponse = await __classPrivateFieldGet(this, _TransakService_fetch, "f").call(this, url.toString(), {
|
|
550
|
+
method: 'DELETE',
|
|
551
|
+
headers: __classPrivateFieldGet(this, _TransakService_instances, "m", _TransakService_getHeaders).call(this),
|
|
552
|
+
});
|
|
553
|
+
if (!fetchResponse.ok) {
|
|
554
|
+
throw new HttpError(fetchResponse.status, `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`);
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
}, _TransakService_ordersApiGet = async function _TransakService_ordersApiGet(path, params) {
|
|
558
|
+
const baseUrl = getRampsBaseUrl(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
559
|
+
const providerPath = getRampsProviderPath(__classPrivateFieldGet(this, _TransakService_environment, "f"));
|
|
560
|
+
const url = new URL(`${providerPath}${path}`, baseUrl);
|
|
561
|
+
url.searchParams.set('action', 'deposit');
|
|
562
|
+
url.searchParams.set('context', __classPrivateFieldGet(this, _TransakService_context, "f"));
|
|
563
|
+
if (params) {
|
|
564
|
+
for (const [key, value] of Object.entries(params)) {
|
|
565
|
+
if (value !== null && value !== undefined) {
|
|
566
|
+
url.searchParams.set(key, value);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
const response = await __classPrivateFieldGet(this, _TransakService_policy, "f").execute(async () => {
|
|
571
|
+
const fetchResponse = await __classPrivateFieldGet(this, _TransakService_fetch, "f").call(this, url.toString(), {
|
|
572
|
+
method: 'GET',
|
|
573
|
+
headers: { Accept: 'application/json' },
|
|
574
|
+
});
|
|
575
|
+
if (!fetchResponse.ok) {
|
|
576
|
+
throw new HttpError(fetchResponse.status, `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`);
|
|
577
|
+
}
|
|
578
|
+
return fetchResponse.json();
|
|
579
|
+
});
|
|
580
|
+
return response;
|
|
581
|
+
};
|
|
582
|
+
//# sourceMappingURL=TransakService.mjs.map
|