@gibs/bridge-sdk 1.7.1 → 1.7.2
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/dist/src/abis.d.ts +14 -1
- package/dist/src/abis.js +14 -1
- package/dist/src/chain-info.d.ts +52 -0
- package/dist/src/chain-info.js +51 -15
- package/dist/src/config.d.ts +61 -2
- package/dist/src/config.js +63 -92
- package/dist/src/fee-type.d.ts +3 -0
- package/dist/src/fee-type.js +2 -0
- package/dist/src/image-links.d.ts +29 -0
- package/dist/src/image-links.js +28 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/settings.d.ts +341 -0
- package/dist/src/settings.js +614 -0
- package/dist/src/types.d.ts +9 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/abis.ts +14 -2
- package/src/chain-info.ts +53 -15
- package/src/config.ts +66 -92
- package/src/fee-type.ts +3 -1
- package/src/image-links.ts +29 -0
- package/src/index.ts +1 -0
- package/src/settings.ts +853 -0
- package/src/types.ts +9 -0
package/dist/src/config.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getAddress, zeroAddress } from "viem";
|
|
2
2
|
import _ from 'lodash';
|
|
3
|
-
import * as imageLinks from '@gibs/bridge-sdk/image-links';
|
|
4
3
|
/**
|
|
5
4
|
* Add here your chain id as hex, be sure to add your chain in the chainsMetadata object too
|
|
6
5
|
*/
|
|
@@ -14,14 +13,27 @@ export var Chains;
|
|
|
14
13
|
Chains["V4PLS"] = "0x3af";
|
|
15
14
|
// TBNB = '0x61',
|
|
16
15
|
})(Chains || (Chains = {}));
|
|
16
|
+
/** A map of chain ids to chain keys */
|
|
17
17
|
export const chainIdToKey = new Map(Object.entries(Chains).map(([key, chain]) => [chain, key]));
|
|
18
|
+
/**
|
|
19
|
+
* Converts a chain id to a chain key
|
|
20
|
+
* @param chainId - the chain id
|
|
21
|
+
* @returns the chain key
|
|
22
|
+
*/
|
|
18
23
|
export const toChain = (chainId) => `0x${Number(chainId).toString(16)}`;
|
|
24
|
+
/**
|
|
25
|
+
* Converts a chain id to a chain key
|
|
26
|
+
* @param chainId - the chain id
|
|
27
|
+
* @returns the chain key
|
|
28
|
+
*/
|
|
19
29
|
export const toChainKey = (chainId) => chainIdToKey.get(toChain(chainId));
|
|
30
|
+
/** The provider of an omnibridge */
|
|
20
31
|
export var Provider;
|
|
21
32
|
(function (Provider) {
|
|
22
33
|
Provider["PULSECHAIN"] = "pulsechain";
|
|
23
34
|
Provider["TOKENSEX"] = "tokensex";
|
|
24
35
|
})(Provider || (Provider = {}));
|
|
36
|
+
/** A map of chains to native asset out addresses */
|
|
25
37
|
export const nativeAssetOut = {
|
|
26
38
|
[Chains.ETH]: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
|
|
27
39
|
[Chains.BNB]: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
|
|
@@ -29,9 +41,11 @@ export const nativeAssetOut = {
|
|
|
29
41
|
[Chains.SEP]: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',
|
|
30
42
|
[Chains.V4PLS]: '0x70499adEBB11Efd915E3b69E700c331778628707',
|
|
31
43
|
};
|
|
44
|
+
/** A map of chains to deprecated native asset out addresses */
|
|
32
45
|
export const deprecatedNativeAssetOut = {
|
|
33
46
|
[Chains.PLS]: new Set(['0x97Ac4a2439A47c07ad535bb1188c989dae755341']),
|
|
34
47
|
};
|
|
48
|
+
/** A map of chains to uni v2 router addresses */
|
|
35
49
|
export const uniV2Routers = {
|
|
36
50
|
[Chains.PLS]: [
|
|
37
51
|
'0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02',
|
|
@@ -45,6 +59,7 @@ export const uniV2Routers = {
|
|
|
45
59
|
'0x636f6407B90661b73b1C0F7e24F4C79f624d0738',
|
|
46
60
|
],
|
|
47
61
|
};
|
|
62
|
+
/** A map of chains to native token symbols */
|
|
48
63
|
export const nativeTokenSymbol = {
|
|
49
64
|
[Chains.PLS]: 'PLS',
|
|
50
65
|
[Chains.V4PLS]: 'V4PLS',
|
|
@@ -52,6 +67,7 @@ export const nativeTokenSymbol = {
|
|
|
52
67
|
[Chains.SEP]: 'sepETH',
|
|
53
68
|
[Chains.BNB]: 'BNB',
|
|
54
69
|
};
|
|
70
|
+
/** A map of chains to native token names */
|
|
55
71
|
export const nativeTokenName = {
|
|
56
72
|
[Chains.PLS]: 'Pulse',
|
|
57
73
|
[Chains.V4PLS]: 'V4 Pulse',
|
|
@@ -59,6 +75,7 @@ export const nativeTokenName = {
|
|
|
59
75
|
[Chains.SEP]: 'Sepolia Ether',
|
|
60
76
|
[Chains.BNB]: 'BNB',
|
|
61
77
|
};
|
|
78
|
+
/** The settings for the pulsechain pls eth pathway */
|
|
62
79
|
const pulsechainPLSETHSettings = {
|
|
63
80
|
from: '0x0e18d0d556b652794EF12Bf68B2dC857EF5f3996',
|
|
64
81
|
to: '0xe20E337DB2a00b1C37139c873B92a0AAd3F468bF',
|
|
@@ -84,21 +101,6 @@ export const pathways = {
|
|
|
84
101
|
[zeroAddress]: pulsechainPLSETHSettings,
|
|
85
102
|
[getAddress(nativeAssetOut[Chains.PLS])]: pulsechainPLSETHSettings,
|
|
86
103
|
},
|
|
87
|
-
defaultAssetIn: {
|
|
88
|
-
symbol: 'WETH',
|
|
89
|
-
name: 'Wrapped Ether from Ethereum',
|
|
90
|
-
address: '0x02DcdD04e3F455D838cd1249292C58f3B79e3C3C',
|
|
91
|
-
decimals: 18,
|
|
92
|
-
chainId: 369,
|
|
93
|
-
logoURI: imageLinks.network(369),
|
|
94
|
-
extensions: {
|
|
95
|
-
bridgeInfo: {
|
|
96
|
-
'1': {
|
|
97
|
-
tokenAddress: nativeAssetOut[Chains.ETH],
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
104
|
},
|
|
103
105
|
},
|
|
104
106
|
[Chains.ETH]: {
|
|
@@ -122,21 +124,6 @@ export const pathways = {
|
|
|
122
124
|
nativeRouter: '0x1F0144Ce3BDaf11944Fe0beF6444599a0500695B',
|
|
123
125
|
},
|
|
124
126
|
},
|
|
125
|
-
defaultAssetIn: {
|
|
126
|
-
chainId: 1,
|
|
127
|
-
address: nativeAssetOut[Chains.ETH],
|
|
128
|
-
name: 'Wrapped Ether',
|
|
129
|
-
symbol: 'WETH',
|
|
130
|
-
decimals: 18,
|
|
131
|
-
logoURI: imageLinks.network(1),
|
|
132
|
-
extensions: {
|
|
133
|
-
bridgeInfo: {
|
|
134
|
-
'369': {
|
|
135
|
-
tokenAddress: '0x02DcdD04e3F455D838cd1249292C58f3B79e3C3C',
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
127
|
},
|
|
141
128
|
},
|
|
142
129
|
},
|
|
@@ -154,21 +141,6 @@ export const pathways = {
|
|
|
154
141
|
requiresDelivery: true,
|
|
155
142
|
// wbnb from bsc on pulsechain (tokensex)
|
|
156
143
|
bridgedNativeAssetOut: '0x518076CCE3729eF1a3877EA3647a26e278e764FE',
|
|
157
|
-
defaultAssetIn: {
|
|
158
|
-
symbol: 'WBNB',
|
|
159
|
-
name: 'Wrapped BNB',
|
|
160
|
-
address: '0x518076CCE3729eF1a3877EA3647a26e278e764FE',
|
|
161
|
-
decimals: 18,
|
|
162
|
-
chainId: 369,
|
|
163
|
-
logoURI: imageLinks.network(369),
|
|
164
|
-
extensions: {
|
|
165
|
-
bridgeInfo: {
|
|
166
|
-
'56': {
|
|
167
|
-
tokenAddress: nativeAssetOut[Chains.BNB],
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
},
|
|
171
|
-
},
|
|
172
144
|
},
|
|
173
145
|
},
|
|
174
146
|
[Chains.BNB]: {
|
|
@@ -184,21 +156,6 @@ export const pathways = {
|
|
|
184
156
|
requiresDelivery: false,
|
|
185
157
|
// wpls from pulsechain on bsc (tokensex)
|
|
186
158
|
bridgedNativeAssetOut: '0xF6088134D28eeBEF7128BA41FaDb2FCA0666c64C',
|
|
187
|
-
defaultAssetIn: {
|
|
188
|
-
chainId: 56,
|
|
189
|
-
address: nativeAssetOut[Chains.BNB],
|
|
190
|
-
name: 'Wrapped BNB from BSC',
|
|
191
|
-
symbol: 'WBNB',
|
|
192
|
-
decimals: 18,
|
|
193
|
-
logoURI: imageLinks.network(56),
|
|
194
|
-
extensions: {
|
|
195
|
-
bridgeInfo: {
|
|
196
|
-
'369': {
|
|
197
|
-
tokenAddress: '0x518076CCE3729eF1a3877EA3647a26e278e764FE',
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
},
|
|
201
|
-
},
|
|
202
159
|
},
|
|
203
160
|
},
|
|
204
161
|
},
|
|
@@ -240,21 +197,6 @@ export const testnetPathways = {
|
|
|
240
197
|
toHome: false,
|
|
241
198
|
feeManager: 'from',
|
|
242
199
|
bridgedNativeAssetOut: '0x3677bd78ccf4d299328ecfba61790cf8dbfcf686',
|
|
243
|
-
defaultAssetIn: {
|
|
244
|
-
chainId: 943,
|
|
245
|
-
address: '0x3677bd78CCf4d299328ECFBa61790cf8dBfcF686',
|
|
246
|
-
name: 'Wrapped Ether from Sepolia',
|
|
247
|
-
symbol: 'WsepETH',
|
|
248
|
-
decimals: 18,
|
|
249
|
-
logoURI: imageLinks.network(943),
|
|
250
|
-
extensions: {
|
|
251
|
-
bridgeInfo: {
|
|
252
|
-
'11155111': {
|
|
253
|
-
tokenAddress: nativeAssetOut[Chains.SEP],
|
|
254
|
-
},
|
|
255
|
-
},
|
|
256
|
-
},
|
|
257
|
-
},
|
|
258
200
|
},
|
|
259
201
|
},
|
|
260
202
|
[Chains.SEP]: {
|
|
@@ -269,39 +211,35 @@ export const testnetPathways = {
|
|
|
269
211
|
toHome: true,
|
|
270
212
|
feeManager: 'to',
|
|
271
213
|
bridgedNativeAssetOut: '0x35807560aD0597E23F452cdc82D4Fb0e7E3c6590',
|
|
272
|
-
defaultAssetIn: {
|
|
273
|
-
chainId: 11_155_111,
|
|
274
|
-
address: nativeAssetOut[Chains.SEP],
|
|
275
|
-
name: 'Wrapped Ether',
|
|
276
|
-
symbol: 'sepWETH',
|
|
277
|
-
decimals: 18,
|
|
278
|
-
logoURI: imageLinks.network(11_155_111),
|
|
279
|
-
extensions: {
|
|
280
|
-
bridgeInfo: {
|
|
281
|
-
'943': {
|
|
282
|
-
tokenAddress: '0x3677bd78CCf4d299328ECFBa61790cf8dBfcF686',
|
|
283
|
-
},
|
|
284
|
-
},
|
|
285
|
-
},
|
|
286
|
-
},
|
|
287
214
|
},
|
|
288
215
|
},
|
|
289
216
|
},
|
|
290
217
|
};
|
|
218
|
+
/** The mainnet bridge keys */
|
|
291
219
|
const mainnetBridgeKeys = [
|
|
292
220
|
[Provider.PULSECHAIN, Chains.PLS, Chains.ETH],
|
|
293
221
|
[Provider.PULSECHAIN, Chains.ETH, Chains.PLS],
|
|
294
222
|
[Provider.TOKENSEX, Chains.PLS, Chains.BNB],
|
|
295
223
|
[Provider.TOKENSEX, Chains.BNB, Chains.PLS],
|
|
296
224
|
];
|
|
225
|
+
/** The testnet bridge keys */
|
|
297
226
|
const testnetBridgeKeys = [
|
|
298
227
|
[Provider.PULSECHAIN, Chains.SEP, Chains.V4PLS],
|
|
299
228
|
[Provider.PULSECHAIN, Chains.V4PLS, Chains.SEP],
|
|
300
229
|
];
|
|
230
|
+
/** Returns the valid bridge keys for the given is prod */
|
|
301
231
|
export const validBridgeKeys = (isProd) => [
|
|
302
232
|
...mainnetBridgeKeys,
|
|
303
233
|
...(isProd ? [] : testnetBridgeKeys),
|
|
304
234
|
];
|
|
235
|
+
/**
|
|
236
|
+
* Infers the bridge key from the current key, provider, from chain, and to chain
|
|
237
|
+
* @param currentKey - the current bridge key
|
|
238
|
+
* @param provider - the provider
|
|
239
|
+
* @param fromChain - the from chain
|
|
240
|
+
* @param toChain - the to chain
|
|
241
|
+
* @returns the inferred bridge key
|
|
242
|
+
*/
|
|
305
243
|
export const inferBridgeKey = ({ currentKey, provider, fromChain, toChain, }) => {
|
|
306
244
|
const [, fromChainKey, toChainKey] = currentKey;
|
|
307
245
|
const from = fromChain ?? fromChainKey;
|
|
@@ -316,6 +254,13 @@ export const inferBridgeKey = ({ currentKey, provider, fromChain, toChain, }) =>
|
|
|
316
254
|
: Object.keys(pathways[provider][nextFromChain])[0];
|
|
317
255
|
return [provider, nextFromChain, nextToChain];
|
|
318
256
|
};
|
|
257
|
+
/**
|
|
258
|
+
* Returns the pathway for the given bridge key, is prod, and asset in address
|
|
259
|
+
* @param bridgeKey - the bridge key
|
|
260
|
+
* @param isProd - whether to use the production pathway
|
|
261
|
+
* @param assetInAddress - the asset in address
|
|
262
|
+
* @returns the pathway
|
|
263
|
+
*/
|
|
319
264
|
export const pathway = (bridgeKey, isProd, assetInAddress) => {
|
|
320
265
|
if (!bridgeKey)
|
|
321
266
|
return;
|
|
@@ -331,11 +276,25 @@ export const pathway = (bridgeKey, isProd, assetInAddress) => {
|
|
|
331
276
|
}
|
|
332
277
|
return pathway;
|
|
333
278
|
};
|
|
279
|
+
/**
|
|
280
|
+
* Returns the default asset in for the given bridge key and is prod
|
|
281
|
+
* @param bridgeKey - the bridge key
|
|
282
|
+
* @param isProd - whether to use the production pathway
|
|
283
|
+
* @returns the default asset in
|
|
284
|
+
*/
|
|
334
285
|
export const defaultAssetIn = ($bridgeKey, isProd) => {
|
|
286
|
+
if (!$bridgeKey)
|
|
287
|
+
return null;
|
|
335
288
|
const conf = pathway($bridgeKey, isProd);
|
|
336
|
-
const defaultAssetIn = _.get(conf, ['
|
|
289
|
+
const defaultAssetIn = _.get(conf, ['bridgedNativeAssetOut']);
|
|
337
290
|
return defaultAssetIn;
|
|
338
291
|
};
|
|
292
|
+
/**
|
|
293
|
+
* Returns whether the given asset is the native asset for the given bridge key
|
|
294
|
+
* @param asset - the asset
|
|
295
|
+
* @param bridgeKey - the bridge key
|
|
296
|
+
* @returns whether the given asset is the native asset for the given bridge key
|
|
297
|
+
*/
|
|
339
298
|
export const isNative = (asset, bridgeKey) => {
|
|
340
299
|
if (!bridgeKey || !asset) {
|
|
341
300
|
return false;
|
|
@@ -346,6 +305,12 @@ export const isNative = (asset, bridgeKey) => {
|
|
|
346
305
|
nativeAssetOut[toChain(asset.chainId)]?.toLowerCase() === asset.address?.toLowerCase()) &&
|
|
347
306
|
!asset.name.includes(' from Pulsechain'));
|
|
348
307
|
};
|
|
308
|
+
/**
|
|
309
|
+
* Returns whether the given asset is unwrappable for the given bridge key
|
|
310
|
+
* @param bridgeKey - the bridge key
|
|
311
|
+
* @param assetIn - the asset in
|
|
312
|
+
* @returns whether the given asset is unwrappable for the given bridge key
|
|
313
|
+
*/
|
|
349
314
|
export const isUnwrappable = (bridgeKey, assetIn) => {
|
|
350
315
|
if (!bridgeKey || !assetIn) {
|
|
351
316
|
return false;
|
|
@@ -356,6 +321,12 @@ export const isUnwrappable = (bridgeKey, assetIn) => {
|
|
|
356
321
|
return false;
|
|
357
322
|
return path.bridgedNativeAssetOut === getAddress(addr);
|
|
358
323
|
};
|
|
324
|
+
/**
|
|
325
|
+
* Returns whether the given asset can be unwrapped for the given bridge key
|
|
326
|
+
* @param bridgeKey - the bridge key
|
|
327
|
+
* @param assetIn - the asset in
|
|
328
|
+
* @returns boolean
|
|
329
|
+
*/
|
|
359
330
|
export const canChangeUnwrap = (bridgeKey, assetIn) => {
|
|
360
331
|
return !!assetIn && isUnwrappable(bridgeKey, assetIn);
|
|
361
332
|
};
|
package/dist/src/fee-type.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/** The type of fee to use for the bridge */
|
|
1
2
|
export declare enum FeeType {
|
|
2
3
|
PERCENT = "%",
|
|
3
4
|
GAS_TIP = "gas+%",
|
|
4
5
|
FIXED = "fixed"
|
|
5
6
|
}
|
|
7
|
+
/** The keys of the fee type */
|
|
6
8
|
export type FeeTypeKeys = keyof typeof FeeType;
|
|
9
|
+
/** A map of fee type values to keys */
|
|
7
10
|
export declare const feeTypeValToKeyMap: Map<FeeType, "PERCENT" | "GAS_TIP" | "FIXED">;
|
package/dist/src/fee-type.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
/** The type of fee to use for the bridge */
|
|
1
2
|
export var FeeType;
|
|
2
3
|
(function (FeeType) {
|
|
3
4
|
FeeType["PERCENT"] = "%";
|
|
4
5
|
FeeType["GAS_TIP"] = "gas+%";
|
|
5
6
|
FeeType["FIXED"] = "fixed";
|
|
6
7
|
})(FeeType || (FeeType = {}));
|
|
8
|
+
/** A map of fee type values to keys */
|
|
7
9
|
export const feeTypeValToKeyMap = new Map(Object.keys(FeeType).map((key) => [FeeType[key], key]));
|
|
@@ -1,12 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sets the image root for the bridge
|
|
3
|
+
* @param root - the root
|
|
4
|
+
*/
|
|
1
5
|
export declare const setImageRoot: (root: string) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Returns the image root for the bridge
|
|
8
|
+
* @returns the image root
|
|
9
|
+
*/
|
|
2
10
|
export declare const getImageRoot: () => string;
|
|
11
|
+
/** The minimal token info */
|
|
3
12
|
interface MinimalTokenInfo {
|
|
4
13
|
chainId: number;
|
|
5
14
|
address: string;
|
|
6
15
|
logoURI?: string | null;
|
|
7
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the list image for the given path
|
|
19
|
+
* @param path - the path
|
|
20
|
+
* @returns the list image
|
|
21
|
+
*/
|
|
8
22
|
export declare const list: (path: string) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Returns the network image for the given chain id
|
|
25
|
+
* @param chainId - the chain id
|
|
26
|
+
* @returns the network image
|
|
27
|
+
*/
|
|
9
28
|
export declare const network: (chainId: number) => string;
|
|
29
|
+
/**
|
|
30
|
+
* Returns the image url for the given token info
|
|
31
|
+
* @param t - the token info
|
|
32
|
+
* @returns the image url
|
|
33
|
+
*/
|
|
10
34
|
export declare const image: (t: MinimalTokenInfo) => string;
|
|
35
|
+
/**
|
|
36
|
+
* Returns a url that will lookup all sources for the given array
|
|
37
|
+
* @param sources - the sources
|
|
38
|
+
* @returns the images
|
|
39
|
+
*/
|
|
11
40
|
export declare const images: (sources: string[]) => string;
|
|
12
41
|
export {};
|
package/dist/src/image-links.js
CHANGED
|
@@ -1,17 +1,45 @@
|
|
|
1
1
|
import { getAddress } from 'viem';
|
|
2
2
|
let imageRoot = 'https://gib.show';
|
|
3
|
+
/**
|
|
4
|
+
* Sets the image root for the bridge
|
|
5
|
+
* @param root - the root
|
|
6
|
+
*/
|
|
3
7
|
export const setImageRoot = (root) => {
|
|
4
8
|
imageRoot = root;
|
|
5
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Returns the image root for the bridge
|
|
12
|
+
* @returns the image root
|
|
13
|
+
*/
|
|
6
14
|
export const getImageRoot = () => imageRoot;
|
|
15
|
+
/**
|
|
16
|
+
* Returns the list image for the given path
|
|
17
|
+
* @param path - the path
|
|
18
|
+
* @returns the list image
|
|
19
|
+
*/
|
|
7
20
|
export const list = (path) => {
|
|
8
21
|
return `${imageRoot}/list${path}`;
|
|
9
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Returns the network image for the given chain id
|
|
25
|
+
* @param chainId - the chain id
|
|
26
|
+
* @returns the network image
|
|
27
|
+
*/
|
|
10
28
|
export const network = (chainId) => {
|
|
11
29
|
if (!chainId) {
|
|
12
30
|
console.trace('network image');
|
|
13
31
|
}
|
|
14
32
|
return `${imageRoot}/image/${Number(chainId)}`;
|
|
15
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Returns the image url for the given token info
|
|
36
|
+
* @param t - the token info
|
|
37
|
+
* @returns the image url
|
|
38
|
+
*/
|
|
16
39
|
export const image = (t) => t.logoURI || `${network(t.chainId)}/${getAddress(t.address)}`;
|
|
40
|
+
/**
|
|
41
|
+
* Returns a url that will lookup all sources for the given array
|
|
42
|
+
* @param sources - the sources
|
|
43
|
+
* @returns the images
|
|
44
|
+
*/
|
|
17
45
|
export const images = (sources) => `${imageRoot}/image/?${sources.map((s) => `i=${s}`).join('&')}`;
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.js
CHANGED