@firefly-dao/sdk 1.0.0 → 1.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/README.md +7 -7
- package/_cjs/src/api/index.js +102 -17
- package/_cjs/src/api/index.js.map +1 -1
- package/_cjs/src/client/client.js +73 -50
- package/_cjs/src/client/client.js.map +1 -1
- package/_cjs/src/test.js +0 -30
- package/_cjs/src/test.js.map +1 -1
- package/_cjs/src/types/index.js.map +1 -1
- package/_cjs/src/utils/axios.js +0 -3
- package/_cjs/src/utils/axios.js.map +1 -1
- package/_cjs/tsconfig.build.tsbuildinfo +1 -1
- package/_esm/src/api/index.js +102 -13
- package/_esm/src/api/index.js.map +1 -1
- package/_esm/src/client/client.js +86 -45
- package/_esm/src/client/client.js.map +1 -1
- package/_esm/src/test.js +73 -29
- package/_esm/src/test.js.map +1 -1
- package/_esm/src/types/index.js.map +1 -1
- package/_esm/src/utils/axios.js +0 -3
- package/_esm/src/utils/axios.js.map +1 -1
- package/_esm/tsconfig.build.tsbuildinfo +1 -1
- package/_types/src/api/index.d.ts +79 -6
- package/_types/src/api/index.d.ts.map +1 -1
- package/_types/src/client/client.d.ts +9 -1
- package/_types/src/client/client.d.ts.map +1 -1
- package/_types/src/test.d.ts +1 -1
- package/_types/src/test.d.ts.map +1 -1
- package/_types/src/types/index.d.ts +21 -0
- package/_types/src/types/index.d.ts.map +1 -1
- package/_types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +59 -56
package/README.md
CHANGED
|
@@ -13,19 +13,19 @@ You can use the following ways to get the latest version of Firefly SDK:
|
|
|
13
13
|
**npm**
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm install @firefly-dao/
|
|
16
|
+
npm install @firefly-dao/sdk
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
**yarn**
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
yarn add @firefly-dao/
|
|
22
|
+
yarn add @firefly-dao/sdk
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
**pnpm**
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
pnpm add @firefly-dao/
|
|
28
|
+
pnpm add @firefly-dao/sdk
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
## Quick Start
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
MAINNET_FIREFLY_API,
|
|
39
39
|
TESTNET_FIREFLY_API,
|
|
40
40
|
LogLevel,
|
|
41
|
-
} from "@firefly-dao/
|
|
41
|
+
} from "@firefly-dao/sdk";
|
|
42
42
|
|
|
43
43
|
const client = new FireflyClient({
|
|
44
44
|
baseApiUrl: MAINNET_FIREFLY_API, // or TESTNET_FIREFLY_API
|
|
@@ -51,9 +51,9 @@ const client = new FireflyClient({
|
|
|
51
51
|
|
|
52
52
|
```typescript
|
|
53
53
|
const quote = await client.getQuote({
|
|
54
|
-
fromChainId: 8453,
|
|
54
|
+
fromChainId: 8453, // Base
|
|
55
55
|
fromTokenAddress: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
|
|
56
|
-
toChainId: 10,
|
|
56
|
+
toChainId: 10, // Optimism
|
|
57
57
|
toTokenAddress: "0x0000000000000000000000000000000000000000", // USDC
|
|
58
58
|
amount: "2000000", // 1 USDC (6 decimals)
|
|
59
59
|
recipient: "0x...", // destination address
|
|
@@ -198,7 +198,7 @@ import {
|
|
|
198
198
|
FireflyClient,
|
|
199
199
|
MAINNET_FIREFLY_API,
|
|
200
200
|
LogLevel,
|
|
201
|
-
} from "@firefly-dao/
|
|
201
|
+
} from "@firefly-dao/sdk";
|
|
202
202
|
import { createWalletClient } from "viem";
|
|
203
203
|
import { base } from "viem/chains";
|
|
204
204
|
import { privateKeyToAccount } from "viem/accounts";
|
package/_cjs/src/api/index.js
CHANGED
|
@@ -1,29 +1,114 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
exports.getExecutionStatus = getExecutionStatus;
|
|
4
|
+
exports.postActionApi = postActionApi;
|
|
5
5
|
exports.getChainsApi = getChainsApi;
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
exports.getTokenListApi = getTokenListApi;
|
|
7
|
+
exports.getTokenPriceApi = getTokenPriceApi;
|
|
8
|
+
exports.getExecutionHistoryApi = getExecutionHistoryApi;
|
|
9
|
+
exports.getTokenBalancesApi = getTokenBalancesApi;
|
|
10
|
+
const index_js_1 = require("../constants/index.js");
|
|
11
|
+
const axios_js_1 = require("../utils/axios.js");
|
|
12
|
+
const request_js_1 = require("../utils/request.js");
|
|
13
|
+
function getExecutionStatus({ chainId, hash, baseApiUrl }) {
|
|
14
|
+
return axios_js_1.axios.get(`${baseApiUrl}/quote/transaction`, {
|
|
11
15
|
params: {
|
|
12
|
-
chainId,
|
|
13
|
-
hash,
|
|
16
|
+
chainId: chainId,
|
|
17
|
+
hash: hash,
|
|
14
18
|
},
|
|
15
19
|
});
|
|
16
20
|
}
|
|
17
|
-
function
|
|
18
|
-
return
|
|
21
|
+
function postActionApi(body, baseApiUrl) {
|
|
22
|
+
return axios_js_1.axios.post(`${baseApiUrl}/action`, body);
|
|
19
23
|
}
|
|
20
|
-
function getChainsApi() {
|
|
21
|
-
|
|
24
|
+
async function getChainsApi(baseApiUrl) {
|
|
25
|
+
try {
|
|
26
|
+
const res = await axios_js_1.axios.get(`${baseApiUrl}/quote/chains`);
|
|
27
|
+
if (res.data.code !== 200) {
|
|
28
|
+
throw new request_js_1.APIError(res?.data?.message, res.status, res.data);
|
|
29
|
+
}
|
|
30
|
+
return res.data.data.map(chain => ({
|
|
31
|
+
name: chain.name,
|
|
32
|
+
chainId: chain.chainId,
|
|
33
|
+
aliasName: chain.aliasName,
|
|
34
|
+
icon: chain.icon,
|
|
35
|
+
explorer: chain.explorer,
|
|
36
|
+
tags: chain.tags,
|
|
37
|
+
depositContract: chain.depositContract,
|
|
38
|
+
type: chain.type,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw new request_js_1.APIError(error?.message, error?.status, error?.data);
|
|
43
|
+
}
|
|
22
44
|
}
|
|
23
|
-
function
|
|
24
|
-
|
|
45
|
+
async function getTokenListApi(queryTokenListParams, baseApiUrl) {
|
|
46
|
+
try {
|
|
47
|
+
const res = await axios_js_1.axios.post(`${baseApiUrl}/quote/token/list`, {
|
|
48
|
+
...queryTokenListParams
|
|
49
|
+
});
|
|
50
|
+
if (res.data.code !== 200) {
|
|
51
|
+
throw new request_js_1.APIError(res?.data?.message, res.status, res.data);
|
|
52
|
+
}
|
|
53
|
+
return res.data.data.map(token => ({
|
|
54
|
+
chainId: token.chainId,
|
|
55
|
+
address: token.address,
|
|
56
|
+
decimals: token.decimal,
|
|
57
|
+
icon: token.icon,
|
|
58
|
+
chainName: token.chainName,
|
|
59
|
+
aliasName: token.aliasName,
|
|
60
|
+
symbol: token.symbol,
|
|
61
|
+
verified: token.verified,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw new request_js_1.APIError(error?.message, error?.status, error?.data);
|
|
66
|
+
}
|
|
25
67
|
}
|
|
26
|
-
function
|
|
27
|
-
|
|
68
|
+
async function getTokenPriceApi({ tokenAddress, chainId }) {
|
|
69
|
+
try {
|
|
70
|
+
const res = await axios_js_1.axios.get(`${index_js_1.MAINNET_FIREFLY_API}/quote/token/price`, {
|
|
71
|
+
params: {
|
|
72
|
+
address: tokenAddress,
|
|
73
|
+
chainId: chainId,
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
if (res.data.code !== 200) {
|
|
77
|
+
throw new request_js_1.APIError(res?.data?.message, res.status, res.data);
|
|
78
|
+
}
|
|
79
|
+
return Number(res.data.data);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new request_js_1.APIError(error?.message, error?.status, error?.data);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async function getExecutionHistoryApi(body, baseApiUrl) {
|
|
86
|
+
try {
|
|
87
|
+
const res = await axios_js_1.axios.post(`${baseApiUrl}/quote/orders`, {
|
|
88
|
+
...body
|
|
89
|
+
});
|
|
90
|
+
if (res.data.code !== 200) {
|
|
91
|
+
throw new request_js_1.APIError(res?.data?.message, res.status, res.data);
|
|
92
|
+
}
|
|
93
|
+
return res.data.data;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
throw new request_js_1.APIError(error?.message, error?.status, error?.data);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function getTokenBalancesApi(data, baseApiUrl) {
|
|
100
|
+
try {
|
|
101
|
+
const res = await axios_js_1.axios.post(`${baseApiUrl}/bridge/balance/multi/token`, {
|
|
102
|
+
list: data
|
|
103
|
+
});
|
|
104
|
+
if (res.data.code !== 200) {
|
|
105
|
+
throw new request_js_1.APIError(res?.data?.message, res.status, res.data);
|
|
106
|
+
}
|
|
107
|
+
return res.data.data;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.log(error);
|
|
111
|
+
throw new request_js_1.APIError(error?.message, error?.status, error?.data);
|
|
112
|
+
}
|
|
28
113
|
}
|
|
29
114
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":";;AAiCA,gDAOC;AAaD,sCAEC;AAOD,oCAmBC;AAeD,0CAsBC;AAOD,4CAgBC;AAYD,wDAYC;AAgBD,kDAaC;AAlMD,oDAA4D;AAC5D,gDAA0C;AAE1C,oDAA+C;AA8B/C,SAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAA4B;IACxF,OAAO,gBAAK,CAAC,GAAG,CAAwC,GAAG,UAAU,oBAAoB,EAAE;QACzF,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;SACX;KACF,CAAC,CAAA;AACJ,CAAC;AAaD,SAAgB,aAAa,CAAC,IAAuB,EAAE,UAAkB;IACvE,OAAO,gBAAK,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,EAAE,IAAI,CAAC,CAAA;AACjD,CAAC;AAOM,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAK,CAAC,GAAG,CAAyB,GAAG,UAAU,eAAe,CAAC,CAAA;QACjF,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,qBAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC,CAAC,CAAA;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;AACH,CAAC;AAeM,KAAK,UAAU,eAAe,CAAC,oBAAwC,EAAE,UAAkB;IAChG,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAK,CAAC,IAAI,CAAyB,GAAG,UAAU,mBAAmB,EAAE;YACrF,GAAG,oBAAoB;SACxB,CAAC,CAAA;QAEF,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,qBAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC,CAAA;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;AACH,CAAC;AAOM,KAAK,UAAU,gBAAgB,CAAC,EAAE,YAAY,EAAE,OAAO,EAA0B;IACtF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAK,CAAC,GAAG,CAAuB,GAAG,8BAAmB,oBAAoB,EAAE;YAC5F,MAAM,EAAE;gBACN,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAA;QAEF,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,qBAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;AACH,CAAC;AAYM,KAAK,UAAU,sBAAsB,CAAC,IAAkC,EAAE,UAAkB;IACjG,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAK,CAAC,IAAI,CAA0C,GAAG,UAAU,eAAe,EAAE;YAClG,GAAG,IAAI;SACR,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,qBAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;AACH,CAAC;AAgBM,KAAK,UAAU,mBAAmB,CAAC,IAA+B,EAAE,UAAkB;IAC3F,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,gBAAK,CAAC,IAAI,CAA4C,GAAG,UAAU,6BAA6B,EAAE;YAClH,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,qBAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClB,MAAM,IAAI,qBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FireflyClient = void 0;
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
|
-
const
|
|
5
|
+
const axios_js_1 = require("../utils/axios.js");
|
|
6
|
+
const index_js_1 = require("../api/index.js");
|
|
6
7
|
const request_js_1 = require("../utils/request.js");
|
|
7
|
-
const
|
|
8
|
-
const
|
|
8
|
+
const index_js_2 = require("../constants/index.js");
|
|
9
|
+
const index_js_3 = require("../utils/index.js");
|
|
9
10
|
class FireflyClient {
|
|
10
|
-
constructor({ referrer = 'firefly-sdk', baseApiUrl, logLevel =
|
|
11
|
+
constructor({ referrer = 'firefly-sdk', baseApiUrl, logLevel = index_js_2.LogLevel.Info }) {
|
|
11
12
|
Object.defineProperty(this, "baseApiUrl", {
|
|
12
13
|
enumerable: true,
|
|
13
14
|
configurable: true,
|
|
@@ -48,7 +49,7 @@ class FireflyClient {
|
|
|
48
49
|
method: 'post',
|
|
49
50
|
data: query,
|
|
50
51
|
};
|
|
51
|
-
const res = await
|
|
52
|
+
const res = await axios_js_1.axios.request(request);
|
|
52
53
|
if (res.data.code !== 200) {
|
|
53
54
|
throw new request_js_1.APIError(res?.data?.message, res.status, res.data);
|
|
54
55
|
}
|
|
@@ -75,7 +76,7 @@ class FireflyClient {
|
|
|
75
76
|
if (step.id === 'approve') {
|
|
76
77
|
try {
|
|
77
78
|
this.logs('Starting approval...');
|
|
78
|
-
const params = (0,
|
|
79
|
+
const params = (0, index_js_3.handleWaitTransactionReceiptParams)(step);
|
|
79
80
|
const approveHash = await wallet.sendTransaction(params);
|
|
80
81
|
this.logs(`Approval tx hash: ${approveHash}.`);
|
|
81
82
|
await publicClient.waitForTransactionReceipt({
|
|
@@ -111,19 +112,15 @@ class FireflyClient {
|
|
|
111
112
|
let tx;
|
|
112
113
|
try {
|
|
113
114
|
tx = await wallet.sendTransaction(params);
|
|
114
|
-
(0,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
fromToken: quoteRequest.data.fromTokenAddress,
|
|
124
|
-
dstToken: quoteRequest.data.toTokenAddress,
|
|
125
|
-
},
|
|
126
|
-
});
|
|
115
|
+
(0, index_js_1.postActionApi)({
|
|
116
|
+
chainId: txData.chainId,
|
|
117
|
+
dstChainId: quoteRequest.data.toChainId,
|
|
118
|
+
hash: tx,
|
|
119
|
+
wallet: wallet?.account?.address || '0x',
|
|
120
|
+
dstWallet: quoteRequest.data.recipient,
|
|
121
|
+
fromToken: quoteRequest.data.fromTokenAddress,
|
|
122
|
+
dstToken: quoteRequest.data.toTokenAddress,
|
|
123
|
+
}, this.baseApiUrl);
|
|
127
124
|
this.logs(`Deposit tx hash: ${tx}.`);
|
|
128
125
|
}
|
|
129
126
|
catch (err) {
|
|
@@ -133,45 +130,71 @@ class FireflyClient {
|
|
|
133
130
|
message: `execute function deposit step failed: ${err}`,
|
|
134
131
|
};
|
|
135
132
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
133
|
+
while (true) {
|
|
134
|
+
await new Promise((resolve) => setTimeout(resolve, 1 * 1000));
|
|
135
|
+
const transaction = await (0, index_js_1.getExecutionStatus)({
|
|
136
|
+
chainId: quoteRequest.data.fromChainId,
|
|
137
|
+
hash: tx,
|
|
138
|
+
baseApiUrl: this.baseApiUrl
|
|
139
|
+
});
|
|
140
|
+
if (![-99, 0, 1, 2].includes(transaction.data.data.status)) {
|
|
141
|
+
onProgress?.({ step: 'deposit', status: 'failed', error: transaction.data.data.status });
|
|
142
|
+
return {
|
|
143
|
+
status: 'failed',
|
|
144
|
+
message: `execute function check transaction status failed: ${transaction.data.data.status}`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (transaction.data.data.status !== 1) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
else if (transaction.data.data.status === 1) {
|
|
151
|
+
this.logs('Deposit successful.');
|
|
152
|
+
this.logs(`Cross-chain successful. Tx hash: ${transaction.data.data.dstHash}.`);
|
|
153
|
+
onProgress?.({ step: 'deposit', status: 'success', hash: transaction.data.data.dstHash || '' });
|
|
154
|
+
response = {
|
|
155
|
+
status: 'success',
|
|
156
|
+
message: 'transaction successful'
|
|
157
|
+
};
|
|
159
158
|
break;
|
|
160
159
|
}
|
|
161
160
|
}
|
|
162
|
-
catch (err) {
|
|
163
|
-
onProgress?.({ step: 'deposit', status: 'failed', error: err });
|
|
164
|
-
return {
|
|
165
|
-
status: 'failed',
|
|
166
|
-
message: `execute function check transaction status failed: ${err}`,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
161
|
}
|
|
170
162
|
}
|
|
171
163
|
return response;
|
|
172
164
|
}
|
|
165
|
+
queryFireflyChains() {
|
|
166
|
+
return (0, index_js_1.getChainsApi)(this.baseApiUrl);
|
|
167
|
+
}
|
|
168
|
+
queryTokenList(queryTokenListParams) {
|
|
169
|
+
return (0, index_js_1.getTokenListApi)(queryTokenListParams, this.baseApiUrl);
|
|
170
|
+
}
|
|
171
|
+
queryTokenPrice({ tokenAddress, chainId }) {
|
|
172
|
+
return (0, index_js_1.getTokenPriceApi)({ tokenAddress, chainId });
|
|
173
|
+
}
|
|
174
|
+
async queryExecutionStatus({ chainId, hash }) {
|
|
175
|
+
try {
|
|
176
|
+
const res = await (0, index_js_1.getExecutionStatus)({
|
|
177
|
+
chainId,
|
|
178
|
+
hash,
|
|
179
|
+
baseApiUrl: this.baseApiUrl
|
|
180
|
+
});
|
|
181
|
+
if (res.data.code !== 200) {
|
|
182
|
+
throw new request_js_1.APIError(res?.data?.message, res.status, res.data);
|
|
183
|
+
}
|
|
184
|
+
return res.data.data;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
throw new request_js_1.APIError(error?.message, error?.status, error?.data);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
queryExecutionHistory(queryParams) {
|
|
191
|
+
return (0, index_js_1.getExecutionHistoryApi)(queryParams, this.baseApiUrl);
|
|
192
|
+
}
|
|
193
|
+
queryTokenBalances(data) {
|
|
194
|
+
return (0, index_js_1.getTokenBalancesApi)(data, this.baseApiUrl);
|
|
195
|
+
}
|
|
173
196
|
async logs(message) {
|
|
174
|
-
if (this.logLevel ===
|
|
197
|
+
if (this.logLevel === index_js_2.LogLevel.Info) {
|
|
175
198
|
console.log(message);
|
|
176
199
|
}
|
|
177
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/client/client.ts"],"names":[],"mappings":";;;AAAA,+BAAmE;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/client/client.ts"],"names":[],"mappings":"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"}
|
package/_cjs/src/test.js
CHANGED
|
@@ -1,35 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const chains_1 = require("viem/chains");
|
|
4
|
-
const client_js_1 = require("./client/client.js");
|
|
5
|
-
const viem_1 = require("viem");
|
|
6
|
-
const accounts_1 = require("viem/accounts");
|
|
7
|
-
const index_js_1 = require("./constants/index.js");
|
|
8
2
|
async function main() {
|
|
9
|
-
const client = new client_js_1.FireflyClient({
|
|
10
|
-
baseApiUrl: index_js_1.MAINNET_FIREFLY_API,
|
|
11
|
-
referrer: 'firefly-sdk',
|
|
12
|
-
logLevel: index_js_1.LogLevel.Info,
|
|
13
|
-
});
|
|
14
|
-
const quote = await client.getQuote({
|
|
15
|
-
"fromChainId": 8453,
|
|
16
|
-
"fromTokenAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
17
|
-
"recipient": "0x0955e7ad74ca25be76d7309532a40147e08ec8da",
|
|
18
|
-
"amount": "600000",
|
|
19
|
-
"toChainId": 42161,
|
|
20
|
-
"toTokenAddress": "0xaf88d065e77c8cc2239327c5edb3a432268e5831"
|
|
21
|
-
});
|
|
22
|
-
console.dir(quote, { depth: null });
|
|
23
|
-
const wallet = (0, viem_1.createWalletClient)({
|
|
24
|
-
chain: chains_1.base,
|
|
25
|
-
transport: (0, viem_1.http)(),
|
|
26
|
-
account: (0, accounts_1.privateKeyToAccount)(`0x`),
|
|
27
|
-
});
|
|
28
|
-
const response = await client.execute({
|
|
29
|
-
quote,
|
|
30
|
-
wallet: wallet,
|
|
31
|
-
});
|
|
32
|
-
console.dir(response, { depth: null });
|
|
33
3
|
}
|
|
34
4
|
main();
|
|
35
5
|
//# sourceMappingURL=test.js.map
|
package/_cjs/src/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/test.ts"],"names":[],"mappings":";AAMA,KAAK,UAAU,IAAI;AAoFnB,CAAC;AAED,IAAI,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AA2CA,uDAA4B"}
|
package/_cjs/src/utils/axios.js
CHANGED
|
@@ -5,9 +5,6 @@ const axios_1 = require("axios");
|
|
|
5
5
|
const request_js_1 = require("./request.js");
|
|
6
6
|
exports.axios = axios_1.default.create();
|
|
7
7
|
exports.axios.interceptors.response.use((_res) => {
|
|
8
|
-
if (_res.headers['Deprecation'] === 'true') {
|
|
9
|
-
console.warn(`Warning: API ${_res.config.url} is deprecated. Stability and performance may be affected.`);
|
|
10
|
-
}
|
|
11
8
|
return _res;
|
|
12
9
|
}, (error) => {
|
|
13
10
|
return Promise.reject(new request_js_1.APIError(error.response?.data?.message, error.response?.data?.statusCode || 500, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/utils/axios.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAE1B,6CAAuC;AAE1B,QAAA,KAAK,GAAG,eAAM,CAAC,MAAM,EAAE,CAAA;AAEpC,aAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC7B,CAAC,IAAmB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/utils/axios.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAE1B,6CAAuC;AAE1B,QAAA,KAAK,GAAG,eAAM,CAAC,MAAM,EAAE,CAAA;AAEpC,aAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC7B,CAAC,IAAmB,EAAE,EAAE;IAGtB,OAAO,IAAI,CAAA;AACb,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;IACR,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,qBAAQ,CACV,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAC7B,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,IAAI,GAAG,EACvC;QACE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI;QACvB,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG;KAC5B,CACF,CACF,CAAA;AACH,CAAC,CACF,CAAA"}
|