@funkit/api-base 0.0.1
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/.eslintignore +5 -0
- package/README.md +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/src/consts/api.d.ts +1 -0
- package/dist/src/consts/api.js +12 -0
- package/dist/src/consts/api.js.map +1 -0
- package/dist/src/consts/index.d.ts +3 -0
- package/dist/src/consts/index.js +20 -0
- package/dist/src/consts/index.js.map +1 -0
- package/dist/src/consts/request.d.ts +13 -0
- package/dist/src/consts/request.js +3 -0
- package/dist/src/consts/request.js.map +1 -0
- package/dist/src/consts/retry.d.ts +4 -0
- package/dist/src/consts/retry.js +19 -0
- package/dist/src/consts/retry.js.map +1 -0
- package/dist/src/errors/BaseError.d.ts +9 -0
- package/dist/src/errors/BaseError.js +24 -0
- package/dist/src/errors/BaseError.js.map +1 -0
- package/dist/src/errors/ClientError.d.ts +22 -0
- package/dist/src/errors/ClientError.js +76 -0
- package/dist/src/errors/ClientError.js.map +1 -0
- package/dist/src/errors/ServerError.d.ts +7 -0
- package/dist/src/errors/ServerError.js +18 -0
- package/dist/src/errors/ServerError.js.map +1 -0
- package/dist/src/errors/errors.json +626 -0
- package/dist/src/errors/index.d.ts +4 -0
- package/dist/src/errors/index.js +21 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/errors/types.d.ts +60 -0
- package/dist/src/errors/types.js +51 -0
- package/dist/src/errors/types.js.map +1 -0
- package/dist/src/services/assets/endpoints.d.ts +50 -0
- package/dist/src/services/assets/endpoints.js +95 -0
- package/dist/src/services/assets/endpoints.js.map +1 -0
- package/dist/src/services/assets/index.d.ts +2 -0
- package/dist/src/services/assets/index.js +19 -0
- package/dist/src/services/assets/index.js.map +1 -0
- package/dist/src/services/assets/types.d.ts +65 -0
- package/dist/src/services/assets/types.js +3 -0
- package/dist/src/services/assets/types.js.map +1 -0
- package/dist/src/services/checkout/endpoints.d.ts +55 -0
- package/dist/src/services/checkout/endpoints.js +169 -0
- package/dist/src/services/checkout/endpoints.js.map +1 -0
- package/dist/src/services/checkout/index.d.ts +2 -0
- package/dist/src/services/checkout/index.js +19 -0
- package/dist/src/services/checkout/index.js.map +1 -0
- package/dist/src/services/checkout/types.d.ts +106 -0
- package/dist/src/services/checkout/types.js +21 -0
- package/dist/src/services/checkout/types.js.map +1 -0
- package/dist/src/services/index.d.ts +4 -0
- package/dist/src/services/index.js +21 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/mesh/endpoints.d.ts +45 -0
- package/dist/src/services/mesh/endpoints.js +129 -0
- package/dist/src/services/mesh/endpoints.js.map +1 -0
- package/dist/src/services/mesh/index.d.ts +2 -0
- package/dist/src/services/mesh/index.js +19 -0
- package/dist/src/services/mesh/index.js.map +1 -0
- package/dist/src/services/mesh/types.d.ts +56 -0
- package/dist/src/services/mesh/types.js +3 -0
- package/dist/src/services/mesh/types.js.map +1 -0
- package/dist/src/services/moonpay/endpoints.d.ts +3 -0
- package/dist/src/services/moonpay/endpoints.js +43 -0
- package/dist/src/services/moonpay/endpoints.js.map +1 -0
- package/dist/src/services/moonpay/index.d.ts +2 -0
- package/dist/src/services/moonpay/index.js +19 -0
- package/dist/src/services/moonpay/index.js.map +1 -0
- package/dist/src/services/moonpay/types.d.ts +14 -0
- package/dist/src/services/moonpay/types.js +3 -0
- package/dist/src/services/moonpay/types.js.map +1 -0
- package/dist/src/utils/checkout.d.ts +2 -0
- package/dist/src/utils/checkout.js +20 -0
- package/dist/src/utils/checkout.js.map +1 -0
- package/dist/src/utils/error.d.ts +1 -0
- package/dist/src/utils/error.js +13 -0
- package/dist/src/utils/error.js.map +1 -0
- package/dist/src/utils/index.d.ts +3 -0
- package/dist/src/utils/index.js +20 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/request.d.ts +7 -0
- package/dist/src/utils/request.js +128 -0
- package/dist/src/utils/request.js.map +1 -0
- package/dist/test/services/assets.test.d.ts +1 -0
- package/dist/test/services/assets.test.js +37 -0
- package/dist/test/services/assets.test.js.map +1 -0
- package/dist/test/services/checkout.test.d.ts +1 -0
- package/dist/test/services/checkout.test.js +42 -0
- package/dist/test/services/checkout.test.js.map +1 -0
- package/dist/test/services/mesh.test.d.ts +1 -0
- package/dist/test/services/mesh.test.js +12 -0
- package/dist/test/services/mesh.test.js.map +1 -0
- package/dist/test/services/moonpay.test.d.ts +1 -0
- package/dist/test/services/moonpay.test.js +25 -0
- package/dist/test/services/moonpay.test.js.map +1 -0
- package/dist/test/setup.d.ts +0 -0
- package/dist/test/setup.js +10 -0
- package/dist/test/setup.js.map +1 -0
- package/index.ts +4 -0
- package/package.json +37 -0
- package/src/consts/api.ts +9 -0
- package/src/consts/index.ts +3 -0
- package/src/consts/request.ts +16 -0
- package/src/consts/retry.ts +21 -0
- package/src/errors/BaseError.ts +28 -0
- package/src/errors/ClientError.ts +175 -0
- package/src/errors/ServerError.ts +43 -0
- package/src/errors/errors.json +626 -0
- package/src/errors/index.ts +4 -0
- package/src/errors/types.ts +64 -0
- package/src/services/assets/endpoints.ts +131 -0
- package/src/services/assets/index.ts +2 -0
- package/src/services/assets/types.ts +80 -0
- package/src/services/checkout/endpoints.ts +233 -0
- package/src/services/checkout/index.ts +2 -0
- package/src/services/checkout/types.ts +130 -0
- package/src/services/index.ts +4 -0
- package/src/services/mesh/endpoints.ts +164 -0
- package/src/services/mesh/index.ts +2 -0
- package/src/services/mesh/types.ts +63 -0
- package/src/services/moonpay/endpoints.ts +62 -0
- package/src/services/moonpay/index.ts +2 -0
- package/src/services/moonpay/types.ts +15 -0
- package/src/utils/checkout.ts +17 -0
- package/src/utils/error.ts +15 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/request.ts +198 -0
- package/test/services/assets.test.ts +41 -0
- package/test/services/checkout.test.ts +53 -0
- package/test/services/mesh.test.ts +10 -0
- package/test/services/moonpay.test.ts +24 -0
- package/test/setup.ts +9 -0
- package/tsconfig.json +33 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.sendPutRequest = exports.sendDeleteRequest = exports.sendPostRequest = exports.sendGetRequest = exports.sendRequest = void 0;
|
|
27
|
+
const attempt_1 = require("@lifeomic/attempt");
|
|
28
|
+
const viem_1 = require("viem");
|
|
29
|
+
const fetch = (...args) => Promise.resolve().then(() => __importStar(require('node-fetch'))).then(({ default: fetch }) => fetch(...args));
|
|
30
|
+
const retry_1 = require("../consts/retry");
|
|
31
|
+
const errors_1 = require("../errors");
|
|
32
|
+
const stringifyWithBigIntSanitization = (object) => {
|
|
33
|
+
return JSON.stringify(object, (_, value) => (typeof value === 'bigint' ? (0, viem_1.toHex)(value) : value));
|
|
34
|
+
};
|
|
35
|
+
const sendRequest = async ({ uri, method, apiKey, body = {}, retryOptions = {}, }) => {
|
|
36
|
+
try {
|
|
37
|
+
const headers = {
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
...(apiKey ? { 'X-Api-Key': apiKey } : {}),
|
|
40
|
+
};
|
|
41
|
+
const finalRetryOptions = {
|
|
42
|
+
...retry_1.DEFAULT_RETRY_OPTIONS,
|
|
43
|
+
...(retryOptions || {}),
|
|
44
|
+
};
|
|
45
|
+
return (0, attempt_1.retry)(async function () {
|
|
46
|
+
const response = await fetch(uri, {
|
|
47
|
+
method,
|
|
48
|
+
headers,
|
|
49
|
+
redirect: 'follow',
|
|
50
|
+
body: method !== 'GET' ? stringifyWithBigIntSanitization(body) : undefined,
|
|
51
|
+
});
|
|
52
|
+
const json = await response.json();
|
|
53
|
+
if (response.ok) {
|
|
54
|
+
return json;
|
|
55
|
+
}
|
|
56
|
+
else if (response.status === 400) {
|
|
57
|
+
throw new errors_1.InvalidParameterError(errors_1.ErrorCode.InvalidParameter, `bad request ${JSON.stringify(json)}`, { body }, 'check the api call parameters. its mostly because some call parameters are wrong', 'https://docs.fun.xyz');
|
|
58
|
+
}
|
|
59
|
+
else if (response.status === 403) {
|
|
60
|
+
throw new errors_1.AccessDeniedError(errors_1.ErrorCode.Unauthorized, 'Invalid API key or insufficient access.', { apiKey }, 'Check your api key at https://app.fun.xyz and check with fun team if you believe something is off', 'https://docs.fun.xyz');
|
|
61
|
+
}
|
|
62
|
+
else if (response.status === 404) {
|
|
63
|
+
throw new errors_1.ResourceNotFoundError(errors_1.ErrorCode.ServerMissingData, JSON.stringify(json), { body }, 'check the api call parameters. its mostly because some call parameters are wrong', 'https://docs.fun.xyz');
|
|
64
|
+
}
|
|
65
|
+
else if (response.status === 429) {
|
|
66
|
+
throw new errors_1.ThrottlingError(errors_1.ErrorCode.RequestLimitExceeded, `too many requests ${JSON.stringify(json)}`, { body }, 'you are making too many requests. please slow down. Reach out to fun team if you need more quota', 'https://docs.fun.xyz');
|
|
67
|
+
}
|
|
68
|
+
else if (response.status === 500) {
|
|
69
|
+
if (json.errorCode === errors_1.ErrorCode.UserOpFailureError) {
|
|
70
|
+
throw new errors_1.UserOpFailureError(errors_1.ErrorCode.UserOpFailureError, JSON.stringify(json), { body }, 'fix user op failure. Most of the time this is due to invalid parameters', 'https://docs.fun.xyz');
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
throw new errors_1.InternalFailureError(errors_1.ErrorCode.ServerFailure, `server failure ${JSON.stringify(json)}`, { body }, 'retry later. if it still fails, please contact us.', 'https://docs.fun.xyz');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (response.status === 504) {
|
|
77
|
+
throw new errors_1.InternalFailureError(errors_1.ErrorCode.ServerTimeout, `server timeout failure ${JSON.stringify(json)}`, { body }, 'retry later. if it still fails, please contact us.', 'https://docs.fun.xyz');
|
|
78
|
+
}
|
|
79
|
+
else if (!response.ok) {
|
|
80
|
+
throw new errors_1.InternalFailureError(errors_1.ErrorCode.UnknownServerError, `unknown server failure ${JSON.stringify(json)}`, { body }, 'retry later. if it still fails, please contact us.', 'https://docs.fun.xyz');
|
|
81
|
+
}
|
|
82
|
+
return {};
|
|
83
|
+
}, finalRetryOptions);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
throw new errors_1.InternalFailureError(errors_1.ErrorCode.ServerConnectionError, `Cannot connect to Fun API Service ${err}`, { body }, 'retry later. if it still fails, please contact us.', 'https://docs.fun.xyz');
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
exports.sendRequest = sendRequest;
|
|
90
|
+
async function sendGetRequest({ uri, apiKey, retryOptions, }) {
|
|
91
|
+
return await (0, exports.sendRequest)({
|
|
92
|
+
uri,
|
|
93
|
+
apiKey,
|
|
94
|
+
retryOptions,
|
|
95
|
+
method: 'GET',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
exports.sendGetRequest = sendGetRequest;
|
|
99
|
+
async function sendPostRequest({ uri, body, apiKey, retryOptions, }) {
|
|
100
|
+
return await (0, exports.sendRequest)({
|
|
101
|
+
uri,
|
|
102
|
+
apiKey,
|
|
103
|
+
body,
|
|
104
|
+
retryOptions,
|
|
105
|
+
method: 'POST',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
exports.sendPostRequest = sendPostRequest;
|
|
109
|
+
async function sendDeleteRequest({ uri, apiKey, retryOptions, }) {
|
|
110
|
+
await (0, exports.sendRequest)({
|
|
111
|
+
uri,
|
|
112
|
+
method: 'DELETE',
|
|
113
|
+
apiKey,
|
|
114
|
+
retryOptions,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
exports.sendDeleteRequest = sendDeleteRequest;
|
|
118
|
+
async function sendPutRequest({ uri, body, apiKey, retryOptions, }) {
|
|
119
|
+
return await (0, exports.sendRequest)({
|
|
120
|
+
uri,
|
|
121
|
+
apiKey,
|
|
122
|
+
body,
|
|
123
|
+
retryOptions,
|
|
124
|
+
method: 'PUT',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
exports.sendPutRequest = sendPutRequest;
|
|
128
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/utils/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const __1 = require("../../");
|
|
4
|
+
describe('assets service', () => {
|
|
5
|
+
test('getAssetPriceInfo returns valid result', async () => {
|
|
6
|
+
const assetPriceInfo = await (0, __1.getAssetPriceInfo)({
|
|
7
|
+
chainId: '1',
|
|
8
|
+
assetTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
9
|
+
apiKey: global.TEST_API_KEY,
|
|
10
|
+
});
|
|
11
|
+
expect(assetPriceInfo.amount).toBe(1);
|
|
12
|
+
expect(assetPriceInfo.unitPrice).toBeGreaterThan(0);
|
|
13
|
+
expect(assetPriceInfo.total).toBeGreaterThan(0);
|
|
14
|
+
});
|
|
15
|
+
test('getAllWalletTokens returns valid result', async () => {
|
|
16
|
+
const walletBalance = await (0, __1.getAllWalletTokens)({
|
|
17
|
+
walletAddress: global.TEST_WALLET_ADDRESS,
|
|
18
|
+
onlyVerifiedTokens: true,
|
|
19
|
+
apiKey: global.TEST_API_KEY,
|
|
20
|
+
});
|
|
21
|
+
expect(walletBalance['1']).toBeTruthy();
|
|
22
|
+
expect(walletBalance['137']).toBeTruthy();
|
|
23
|
+
expect(walletBalance['8453']).toBeTruthy();
|
|
24
|
+
expect(walletBalance['324']).toBeTruthy();
|
|
25
|
+
expect(walletBalance['42161']).toBeTruthy();
|
|
26
|
+
});
|
|
27
|
+
test('getAllWalletTokensByChainId returns valid result', async () => {
|
|
28
|
+
const ethereumBalance = await (0, __1.getAllWalletTokensByChainId)({
|
|
29
|
+
chainId: '1',
|
|
30
|
+
walletAddress: global.TEST_WALLET_ADDRESS,
|
|
31
|
+
onlyVerifiedTokens: true,
|
|
32
|
+
apiKey: global.TEST_API_KEY,
|
|
33
|
+
});
|
|
34
|
+
expect(ethereumBalance).toBeTruthy();
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=assets.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.test.js","sourceRoot":"","sources":["../../../test/services/assets.test.ts"],"names":[],"mappings":";;AAAA,8BAIe;AAEf,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,cAAc,GAAG,MAAM,IAAA,qBAAiB,EAAC;YAC7C,OAAO,EAAE,GAAG;YACZ,iBAAiB,EAAE,4CAA4C;YAC/D,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAA;QACF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACnD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,aAAa,GAAG,MAAM,IAAA,sBAAkB,EAAC;YAC7C,aAAa,EAAE,MAAM,CAAC,mBAAmB;YACzC,kBAAkB,EAAE,IAAI;YACxB,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAA;QACF,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACvC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACzC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC1C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACzC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,eAAe,GAAG,MAAM,IAAA,+BAA2B,EAAC;YACxD,OAAO,EAAE,GAAG;YACZ,aAAa,EAAE,MAAM,CAAC,mBAAmB;YACzC,kBAAkB,EAAE,IAAI;YACxB,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAA;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const __1 = require("../../");
|
|
4
|
+
const QUOTE_TEST_TIMEOUT = 30000; // 30 seconds
|
|
5
|
+
describe('checkout service', () => {
|
|
6
|
+
let quoteId;
|
|
7
|
+
test('getCheckoutQuote and initializeCheckout returns valid result', async () => {
|
|
8
|
+
const quoteParams = {
|
|
9
|
+
fromChainId: '8453',
|
|
10
|
+
fromTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
11
|
+
fromTokenDecimals: 18,
|
|
12
|
+
toChainId: '137',
|
|
13
|
+
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
14
|
+
toTokenDecimals: 18,
|
|
15
|
+
toTokenAmount: 5,
|
|
16
|
+
expirationTimestampMs: 300000, // 5 minutes
|
|
17
|
+
sponsorInitialTransferGasLimit: '0',
|
|
18
|
+
recipientAddr: global.TEST_WALLET_ADDRESS,
|
|
19
|
+
needsRefuel: false,
|
|
20
|
+
apiKey: global.TEST_API_KEY,
|
|
21
|
+
};
|
|
22
|
+
const quote = await (0, __1.getCheckoutQuote)(quoteParams);
|
|
23
|
+
quoteId = quote.quoteId;
|
|
24
|
+
expect(quote.quoteId).toBeTruthy();
|
|
25
|
+
const checkoutInitParams = {
|
|
26
|
+
quoteId,
|
|
27
|
+
sourceOfFund: `balance|eoa|${global.TEST_WALLET_ADDRESS}`,
|
|
28
|
+
apiKey: global.TEST_API_KEY,
|
|
29
|
+
clientMetadata: {},
|
|
30
|
+
};
|
|
31
|
+
const depositAddr = await (0, __1.initializeCheckout)(checkoutInitParams);
|
|
32
|
+
expect(depositAddr).toBeTruthy();
|
|
33
|
+
}, QUOTE_TEST_TIMEOUT);
|
|
34
|
+
test('getCheckoutsByRecipientAddress returns valid result', async () => {
|
|
35
|
+
const checkouts = await (0, __1.getCheckoutsByRecipientAddress)({
|
|
36
|
+
recipientAddress: global.TEST_WALLET_ADDRESS,
|
|
37
|
+
apiKey: global.TEST_API_KEY,
|
|
38
|
+
});
|
|
39
|
+
expect(checkouts.length).toBeGreaterThan(0);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=checkout.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout.test.js","sourceRoot":"","sources":["../../../test/services/checkout.test.ts"],"names":[],"mappings":";;AAAA,8BAIe;AAEf,MAAM,kBAAkB,GAAG,KAAK,CAAA,CAAC,aAAa;AAE9C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,OAAe,CAAA;IACnB,IAAI,CACF,8DAA8D,EAC9D,KAAK,IAAI,EAAE;QACT,MAAM,WAAW,GAAG;YAClB,WAAW,EAAE,MAAM;YACnB,gBAAgB,EACd,4CAA6D;YAC/D,iBAAiB,EAAE,EAAE;YACrB,SAAS,EAAE,KAAK;YAChB,cAAc,EACZ,4CAA6D;YAC/D,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,CAAC;YAChB,qBAAqB,EAAE,MAAO,EAAE,YAAY;YAC5C,8BAA8B,EAAE,GAAG;YACnC,aAAa,EAAE,MAAM,CAAC,mBAAmB;YACzC,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAA;QACD,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAgB,EAAC,WAAW,CAAC,CAAA;QACjD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QACvB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;QAElC,MAAM,kBAAkB,GAAG;YACzB,OAAO;YACP,YAAY,EAAE,eAAe,MAAM,CAAC,mBAAmB,EAAE;YACzD,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,cAAc,EAAE,EAAE;SACnB,CAAA;QACD,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAkB,EAAC,kBAAkB,CAAC,CAAA;QAChE,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAA;IAClC,CAAC,EACD,kBAAkB,CACnB,CAAA;IAED,IAAI,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,SAAS,GAAG,MAAM,IAAA,kCAA8B,EAAC;YACrD,gBAAgB,EAAE,MAAM,CAAC,mBAAmB;YAC5C,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAA;QACF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const __1 = require("../../");
|
|
4
|
+
describe('mesh service', () => {
|
|
5
|
+
test('meshGetTransferIntegrations returns valid result', async () => {
|
|
6
|
+
const integrationsResponse = await (0, __1.meshGetTransferIntegrations)({
|
|
7
|
+
apiKey: global.TEST_API_KEY,
|
|
8
|
+
});
|
|
9
|
+
expect(integrationsResponse.integrations.length).toBeGreaterThan(0);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=mesh.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh.test.js","sourceRoot":"","sources":["../../../test/services/mesh.test.ts"],"names":[],"mappings":";;AAAA,8BAAoD;AAEpD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,oBAAoB,GAAG,MAAM,IAAA,+BAA2B,EAAC;YAC7D,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC,CAAA;QACF,MAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const __1 = require("../../");
|
|
4
|
+
describe('moonpay service', () => {
|
|
5
|
+
test('getMoonpayUrlSignature returns valid result', async () => {
|
|
6
|
+
const urlSignature = await (0, __1.getMoonpayUrlSignature)({
|
|
7
|
+
apiKey: global.TEST_API_KEY,
|
|
8
|
+
isSandbox: true,
|
|
9
|
+
url: 'https://buy.moonpay.com/?apiKey=pk_test_dWfAhBbvVexIId9S5hPd78mKM7ivIsqu¤cyCode=usdc&walletAddress=0x931122fD30c218e208A3546A3faa2f40F6c06A3e&colorCode=%2331a3f8&theme=light&baseCurrencyCode=usd"eCurrencyAmount=106.23&lockAmount=true&externalCustomerId=0x6ec0c2f25d323e7779925Cc20c3740101f990d9F%7C0x6ec0c2f25d323e7779925Cc20c3740101f990d9F%7CgsWiq9zk0W5Rh4vzpqURI6nyauFL0tSm9m0EydTI&mpSdk=%7B%22version%22%3A%221.8.0%22%2C%22environment%22%3A%22production%22%2C%22flow%22%3A%22buy%22%2C%22variant%22%3A%22embedded%22%2C%22platform%22%3A%22web%22%7D',
|
|
10
|
+
});
|
|
11
|
+
expect(urlSignature).toBeTruthy();
|
|
12
|
+
});
|
|
13
|
+
test('getMoonpayBuyQuoteForCreditCard returns valid result', async () => {
|
|
14
|
+
const buyQuote = await (0, __1.getMoonpayBuyQuoteForCreditCard)({
|
|
15
|
+
apiKey: global.TEST_API_KEY,
|
|
16
|
+
baseCurrencyCode: 'usd',
|
|
17
|
+
currencyCode: 'usdc',
|
|
18
|
+
quoteCurrencyAmount: '106.23',
|
|
19
|
+
areFeesIncluded: true,
|
|
20
|
+
});
|
|
21
|
+
expect(buyQuote.accountId).toBeTruthy();
|
|
22
|
+
expect(buyQuote.baseCurrencyCode).toBe('usd');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=moonpay.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moonpay.test.js","sourceRoot":"","sources":["../../../test/services/moonpay.test.ts"],"names":[],"mappings":";;AAAA,8BAAgF;AAEhF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAsB,EAAC;YAChD,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,SAAS,EAAE,IAAI;YACf,GAAG,EAAE,ijBAAijB;SACvjB,CAAC,CAAA;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAG,MAAM,IAAA,mCAA+B,EAAC;YACrD,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,gBAAgB,EAAE,KAAK;YACvB,YAAY,EAAE,MAAM;YACpB,mBAAmB,EAAE,QAAQ;YAC7B,eAAe,EAAE,IAAI;SACtB,CAAC,CAAA;QACF,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAA;QACvC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
File without changes
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
beforeAll(() => {
|
|
3
|
+
global.TEST_API_KEY = 'hnHevQR0y394nBprGrvNx4HgoZHUwMet5mXTOBhf';
|
|
4
|
+
global.TEST_WALLET_ADDRESS = '0xD646AF38161B2d9Fd65F5116C7Ecdf23562644b0';
|
|
5
|
+
});
|
|
6
|
+
afterAll(() => {
|
|
7
|
+
delete global.TEST_API_KEY;
|
|
8
|
+
delete global.TEST_WALLET_ADDRESS;
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../test/setup.ts"],"names":[],"mappings":";AAAA,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,YAAY,GAAG,0CAA0C,CAAA;IAChE,MAAM,CAAC,mBAAmB,GAAG,4CAA4C,CAAA;AAC3E,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,GAAG,EAAE;IACZ,OAAO,MAAM,CAAC,YAAY,CAAA;IAC1B,OAAO,MAAM,CAAC,mBAAmB,CAAA;AACnC,CAAC,CAAC,CAAA"}
|
package/index.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@funkit/api-base",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Base API for Funkit",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@lifeomic/attempt": "^3.1.0",
|
|
12
|
+
"node-fetch": "^2.7.0",
|
|
13
|
+
"big.js": "^6.2.1"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@funkit/eslint-config": "1.1.1",
|
|
17
|
+
"ts-node": "^10.9.1",
|
|
18
|
+
"typescript": "^5.4.3",
|
|
19
|
+
"eslint": "^8.41.0",
|
|
20
|
+
"vitest": "^1.4.0"
|
|
21
|
+
},
|
|
22
|
+
"author": "https://fun.xyz/",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/fun-xyz/funkit.git",
|
|
27
|
+
"directory": "packages/api-base"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "rm -rf dist && tsc",
|
|
31
|
+
"build:watch": "rm -rf dist && tsc -w",
|
|
32
|
+
"lint": "eslint --ext .ts,.tsx './**/*.{ts,tsx}'",
|
|
33
|
+
"lint:fix": "eslint --ext .ts,.tsx './**/*.{ts,tsx}' --fix",
|
|
34
|
+
"dev-test": "ts-node ./dev-test.ts",
|
|
35
|
+
"test": "vitest"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const API_BASE_URL =
|
|
2
|
+
process.env.NODE_ENV === 'staging'
|
|
3
|
+
? 'https://api.fun.xyz/staging/v1'
|
|
4
|
+
: process.env.NODE_ENV === 'testing'
|
|
5
|
+
? 'https://api.fun.xyz/testing/v1'
|
|
6
|
+
: process.env.NODE_ENV === 'local'
|
|
7
|
+
? 'http://127.0.0.1:3000'
|
|
8
|
+
: // Production
|
|
9
|
+
'https://api.fun.xyz/v1'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RetryOptions } from './retry'
|
|
2
|
+
|
|
3
|
+
export interface BaseRequest {
|
|
4
|
+
uri: string
|
|
5
|
+
method: 'PUT' | 'DELETE' | 'GET' | 'POST'
|
|
6
|
+
apiKey: string
|
|
7
|
+
retryOptions?: RetryOptions
|
|
8
|
+
body?: object
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type GetRequest = Omit<BaseRequest, 'body' | 'method'>
|
|
12
|
+
export type PostRequest = Omit<BaseRequest, 'method'>
|
|
13
|
+
export type DeleteRequest = Omit<BaseRequest, 'body' | 'method'>
|
|
14
|
+
export type PutRequest = Omit<BaseRequest, 'method'>
|
|
15
|
+
|
|
16
|
+
export type BaseResponse = any // TODO:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PartialAttemptOptions } from '@lifeomic/attempt'
|
|
2
|
+
|
|
3
|
+
import { errorAbortHandler } from '../utils/error'
|
|
4
|
+
import { BaseResponse } from './request'
|
|
5
|
+
|
|
6
|
+
export type RetryOptions = PartialAttemptOptions<BaseResponse>
|
|
7
|
+
|
|
8
|
+
export const DEFAULT_RETRY_OPTIONS = {
|
|
9
|
+
delay: 100,
|
|
10
|
+
initialDelay: 0,
|
|
11
|
+
maxDelay: 3000,
|
|
12
|
+
factor: 2,
|
|
13
|
+
maxAttempts: 5,
|
|
14
|
+
timeout: 0,
|
|
15
|
+
jitter: true,
|
|
16
|
+
minDelay: 0,
|
|
17
|
+
handleError: errorAbortHandler,
|
|
18
|
+
handleTimeout: null,
|
|
19
|
+
beforeAttempt: null,
|
|
20
|
+
calculateDelay: null,
|
|
21
|
+
} as RetryOptions
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const discord = 'https://discord.gg/mvQunrx6NG'
|
|
2
|
+
export class BaseError extends Error {
|
|
3
|
+
timestamp: string
|
|
4
|
+
|
|
5
|
+
constructor(
|
|
6
|
+
public baseType: string,
|
|
7
|
+
public type: string,
|
|
8
|
+
public code: string,
|
|
9
|
+
msg: string,
|
|
10
|
+
|
|
11
|
+
public paramsUsed: any,
|
|
12
|
+
fixSuggestion: string,
|
|
13
|
+
docLink: string,
|
|
14
|
+
isInternal = false,
|
|
15
|
+
) {
|
|
16
|
+
super(`${msg}\n\n${fixSuggestion}\nDocs: ${docLink}\nDiscord: ${discord}`)
|
|
17
|
+
if (isInternal) {
|
|
18
|
+
this.loadEnd()
|
|
19
|
+
}
|
|
20
|
+
this.message += '\n\nTrace:'
|
|
21
|
+
this.timestamp = new Date().toUTCString()
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
loadEnd() {
|
|
25
|
+
this.message +=
|
|
26
|
+
'\n\nThis is an internal sdk error. Please contact the fun team at our Discord for the fastest response.'
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { BaseError } from './BaseError'
|
|
2
|
+
import FWErrors from './errors.json'
|
|
3
|
+
import { ErrorBaseType, ErrorCode, ErrorType } from './types'
|
|
4
|
+
export class ClientError extends BaseError {
|
|
5
|
+
constructor(
|
|
6
|
+
type: string,
|
|
7
|
+
code: string,
|
|
8
|
+
msg: string,
|
|
9
|
+
paramsUsed: any,
|
|
10
|
+
fixSuggestion: string,
|
|
11
|
+
docLink: string,
|
|
12
|
+
) {
|
|
13
|
+
super(
|
|
14
|
+
ErrorBaseType.ClientError,
|
|
15
|
+
type,
|
|
16
|
+
code,
|
|
17
|
+
msg,
|
|
18
|
+
paramsUsed,
|
|
19
|
+
fixSuggestion,
|
|
20
|
+
docLink,
|
|
21
|
+
false,
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class InvalidParameterError extends ClientError {
|
|
27
|
+
constructor(
|
|
28
|
+
code: string,
|
|
29
|
+
msg: string,
|
|
30
|
+
paramsUsed: any,
|
|
31
|
+
fixSuggestion: string,
|
|
32
|
+
docLink: string,
|
|
33
|
+
) {
|
|
34
|
+
super(
|
|
35
|
+
ErrorType.InvalidParameter,
|
|
36
|
+
code,
|
|
37
|
+
msg,
|
|
38
|
+
paramsUsed,
|
|
39
|
+
fixSuggestion,
|
|
40
|
+
docLink,
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class ResourceNotFoundError extends ClientError {
|
|
46
|
+
constructor(
|
|
47
|
+
code: string,
|
|
48
|
+
msg: string,
|
|
49
|
+
paramsUsed: any,
|
|
50
|
+
fixSuggestion: string,
|
|
51
|
+
docLink: string,
|
|
52
|
+
) {
|
|
53
|
+
if (msg.includes('Chain name not found')) {
|
|
54
|
+
const { reqId } = JSON.parse(msg)
|
|
55
|
+
msg = ': Chain name not found or not supported.'
|
|
56
|
+
fixSuggestion = 'Change your EnvOptions to the correct chain identifier.'
|
|
57
|
+
super(
|
|
58
|
+
ErrorType.ResourceNotFound,
|
|
59
|
+
ErrorCode.ChainNotSupported,
|
|
60
|
+
msg,
|
|
61
|
+
{ reqId },
|
|
62
|
+
fixSuggestion,
|
|
63
|
+
docLink,
|
|
64
|
+
)
|
|
65
|
+
} else {
|
|
66
|
+
super(
|
|
67
|
+
ErrorType.ResourceNotFound,
|
|
68
|
+
code,
|
|
69
|
+
msg,
|
|
70
|
+
paramsUsed,
|
|
71
|
+
fixSuggestion,
|
|
72
|
+
docLink,
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export class InvalidActionError extends ClientError {
|
|
79
|
+
constructor(
|
|
80
|
+
code: string,
|
|
81
|
+
msg: string,
|
|
82
|
+
paramsUsed: any,
|
|
83
|
+
fixSuggestion: string,
|
|
84
|
+
docLink: string,
|
|
85
|
+
) {
|
|
86
|
+
super(
|
|
87
|
+
ErrorType.InvalidAction,
|
|
88
|
+
code,
|
|
89
|
+
msg,
|
|
90
|
+
paramsUsed,
|
|
91
|
+
fixSuggestion,
|
|
92
|
+
docLink,
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export class ThrottlingError extends ClientError {
|
|
98
|
+
constructor(
|
|
99
|
+
code: string,
|
|
100
|
+
msg: string,
|
|
101
|
+
paramsUsed: any,
|
|
102
|
+
fixSuggestion: string,
|
|
103
|
+
docLink: string,
|
|
104
|
+
) {
|
|
105
|
+
super(
|
|
106
|
+
ErrorType.ThrottlingError,
|
|
107
|
+
code,
|
|
108
|
+
msg,
|
|
109
|
+
paramsUsed,
|
|
110
|
+
fixSuggestion,
|
|
111
|
+
docLink,
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export class AccessDeniedError extends ClientError {
|
|
117
|
+
constructor(
|
|
118
|
+
code: string,
|
|
119
|
+
msg: string,
|
|
120
|
+
paramsUsed: any,
|
|
121
|
+
fixSuggestion: string,
|
|
122
|
+
docLink: string,
|
|
123
|
+
) {
|
|
124
|
+
super(
|
|
125
|
+
ErrorType.AccessDeniedError,
|
|
126
|
+
code,
|
|
127
|
+
msg,
|
|
128
|
+
paramsUsed,
|
|
129
|
+
fixSuggestion,
|
|
130
|
+
docLink,
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export class UserOpFailureError extends ClientError {
|
|
136
|
+
constructor(
|
|
137
|
+
code: string,
|
|
138
|
+
msg: string,
|
|
139
|
+
paramsUsed: any,
|
|
140
|
+
fixSuggestion: string,
|
|
141
|
+
docLink: string,
|
|
142
|
+
) {
|
|
143
|
+
const FWCode = findFWContractError(msg)
|
|
144
|
+
if (FWCode) {
|
|
145
|
+
const { reqId } = JSON.parse(msg)
|
|
146
|
+
msg = FWErrors[FWCode].info
|
|
147
|
+
fixSuggestion = FWErrors[FWCode].suggestion
|
|
148
|
+
super(
|
|
149
|
+
ErrorType.UserOpFailureError,
|
|
150
|
+
ErrorCode.FunWalletErrorCode,
|
|
151
|
+
msg,
|
|
152
|
+
{ reqId },
|
|
153
|
+
fixSuggestion,
|
|
154
|
+
docLink,
|
|
155
|
+
)
|
|
156
|
+
} else {
|
|
157
|
+
super(
|
|
158
|
+
ErrorType.UserOpFailureError,
|
|
159
|
+
code,
|
|
160
|
+
msg,
|
|
161
|
+
paramsUsed,
|
|
162
|
+
fixSuggestion,
|
|
163
|
+
docLink,
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const findFWContractError = (msg: string) => {
|
|
170
|
+
let match = msg.match(/FW\d{3}/)
|
|
171
|
+
if (!match) {
|
|
172
|
+
match = msg.match(/AA\d./)
|
|
173
|
+
}
|
|
174
|
+
return match?.[0]
|
|
175
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { BaseError } from './BaseError'
|
|
2
|
+
import { ErrorBaseType, ErrorType } from './types'
|
|
3
|
+
|
|
4
|
+
export class ServerError extends BaseError {
|
|
5
|
+
constructor(
|
|
6
|
+
type: string,
|
|
7
|
+
code: string,
|
|
8
|
+
msg: string,
|
|
9
|
+
paramsUsed: any,
|
|
10
|
+
fixSuggestion: string,
|
|
11
|
+
docLink: string,
|
|
12
|
+
) {
|
|
13
|
+
super(
|
|
14
|
+
ErrorBaseType.ServerError,
|
|
15
|
+
type,
|
|
16
|
+
code,
|
|
17
|
+
msg,
|
|
18
|
+
paramsUsed,
|
|
19
|
+
fixSuggestion,
|
|
20
|
+
docLink,
|
|
21
|
+
true,
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class InternalFailureError extends ServerError {
|
|
27
|
+
constructor(
|
|
28
|
+
code: string,
|
|
29
|
+
msg: string,
|
|
30
|
+
paramsUsed: any,
|
|
31
|
+
fixSuggestion: string,
|
|
32
|
+
docLink: string,
|
|
33
|
+
) {
|
|
34
|
+
super(
|
|
35
|
+
ErrorType.InternalServerFailure,
|
|
36
|
+
code,
|
|
37
|
+
msg,
|
|
38
|
+
paramsUsed,
|
|
39
|
+
fixSuggestion,
|
|
40
|
+
docLink,
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
}
|