@folks-finance/xchain-sdk 0.0.55 → 0.0.56
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/common/types/message.d.ts +3 -2
- package/dist/common/types/message.js.map +1 -1
- package/dist/common/utils/adapter.d.ts +4 -5
- package/dist/common/utils/adapter.js +5 -4
- package/dist/common/utils/adapter.js.map +1 -1
- package/dist/types/generics.d.ts +1 -0
- package/dist/types/generics.js +2 -0
- package/dist/types/generics.js.map +1 -0
- package/dist/utils/array.d.ts +1 -0
- package/dist/utils/array.js +5 -0
- package/dist/utils/array.js.map +1 -1
- package/package.json +1 -1
- package/src/common/types/message.ts +3 -2
- package/src/common/utils/adapter.ts +15 -6
- package/src/types/generics.ts +1 -0
- package/src/utils/array.ts +7 -0
|
@@ -3,6 +3,7 @@ import type { FolksChainId } from "./chain.js";
|
|
|
3
3
|
import type { AccountId, LoanId, LoanName, Nonce } from "./lending.js";
|
|
4
4
|
import type { LoanTypeId } from "./module.js";
|
|
5
5
|
import type { FolksTokenId, FolksSpokeTokenType, FolksHubTokenType } from "./token.js";
|
|
6
|
+
import type { NonEmptyArray } from "../../types/generics.js";
|
|
6
7
|
import type { FINALITY, HUB_ACTIONS, RECEIVE_TOKEN_ACTIONS, REVERSIBLE_HUB_ACTIONS, SEND_TOKEN_ACTIONS } from "../constants/message.js";
|
|
7
8
|
import type { Hex } from "viem";
|
|
8
9
|
export declare enum AdapterType {
|
|
@@ -44,8 +45,8 @@ export type MessageAdapters = {
|
|
|
44
45
|
returnAdapterId: AdapterType;
|
|
45
46
|
};
|
|
46
47
|
export type SupportedMessageAdapters = {
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
adapterIds: NonEmptyArray<AdapterType>;
|
|
49
|
+
returnAdapterIds: NonEmptyArray<AdapterType>;
|
|
49
50
|
};
|
|
50
51
|
export type FeeParams = {
|
|
51
52
|
receiverValue: bigint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/common/types/message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/common/types/message.ts"],"names":[],"mappings":"AAeA,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,2CAAO,CAAA;IACP,+DAAiB,CAAA;IACjB,+DAAiB,CAAA;IACjB,uDAAa,CAAA;IACb,yDAAc,CAAA;AAChB,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;AAED,MAAM,CAAN,IAAY,MAsBX;AAtBD,WAAY,MAAM;IAChB,eAAe;IACf,qDAAa,CAAA;IACb,qDAAa,CAAA;IACb,iEAAmB,CAAA;IACnB,6DAAiB,CAAA;IACjB,iDAAW,CAAA;IACX,uDAAc,CAAA;IACd,+CAAU,CAAA;IACV,+CAAU,CAAA;IACV,mEAAoB,CAAA;IACpB,yCAAO,CAAA;IACP,sDAAa,CAAA;IACb,4CAAQ,CAAA;IACR,wDAAc,CAAA;IACd,wCAAM,CAAA;IACN,sCAAK,CAAA;IACL,kEAAmB,CAAA;IACnB,8CAAS,CAAA;IACT,4DAAgB,CAAA;IAChB,eAAe;IACf,8CAAS,CAAA;AACX,CAAC,EAtBW,MAAM,KAAN,MAAM,QAsBjB"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { AdapterType } from "../types/message.js";
|
|
2
|
+
import type { NonEmptyArray } from "../../types/generics.js";
|
|
2
3
|
import type { MessageAdapterParams } from "../types/adapter.js";
|
|
3
4
|
import type { FolksChainId, NetworkType } from "../types/chain.js";
|
|
5
|
+
import type { SupportedMessageAdapters } from "../types/message.js";
|
|
4
6
|
import type { CrossChainTokenType } from "../types/token.js";
|
|
5
|
-
export declare function getSpokeAdapterIds(folksChainId: FolksChainId, network: NetworkType): AdapterType
|
|
7
|
+
export declare function getSpokeAdapterIds(folksChainId: FolksChainId, network: NetworkType): NonEmptyArray<AdapterType>;
|
|
6
8
|
export declare function doesAdapterSupportDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean;
|
|
7
9
|
export declare function assertAdapterSupportsDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): void;
|
|
8
10
|
export declare function doesAdapterSupportTokenMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean;
|
|
@@ -12,7 +14,4 @@ export declare function assertCrossChainTokenSupportedByAdapter(crossChainToken:
|
|
|
12
14
|
export declare function assertAdapterSupportsCrossChainToken(folksChainId: FolksChainId, crossChainToken: CrossChainTokenType, adapterId: AdapterType): void;
|
|
13
15
|
export declare function doesAdapterSupportReceiverValue(folksChainId: FolksChainId, adapterId: AdapterType): boolean;
|
|
14
16
|
export declare function assertAdapterSupportsReceiverValue(folksChainId: FolksChainId, adapterId: AdapterType): void;
|
|
15
|
-
export declare function getSupportedMessageAdapters(params: MessageAdapterParams):
|
|
16
|
-
adapterIds: AdapterType[];
|
|
17
|
-
returnAdapterIds: AdapterType[];
|
|
18
|
-
};
|
|
17
|
+
export declare function getSupportedMessageAdapters(params: MessageAdapterParams): SupportedMessageAdapters;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getHubTokenData, isHubChain } from "../../chains/evm/hub/utils/chain.js";
|
|
2
|
-
import { intersect } from "../../utils/array.js";
|
|
2
|
+
import { ensureNonEmpty, intersect } from "../../utils/array.js";
|
|
3
3
|
import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
|
|
4
4
|
import { FolksCore } from "../../xchain/core/folks-core.js";
|
|
5
5
|
import { DATA_ADAPTERS } from "../constants/adapter.js";
|
|
@@ -9,7 +9,8 @@ import { TokenType } from "../types/token.js";
|
|
|
9
9
|
import { getSpokeChain } from "./chain.js";
|
|
10
10
|
export function getSpokeAdapterIds(folksChainId, network) {
|
|
11
11
|
const spokeChain = getSpokeChain(folksChainId, network);
|
|
12
|
-
|
|
12
|
+
const adapterIds = Object.keys(spokeChain.adapters).map(parseInt);
|
|
13
|
+
return ensureNonEmpty(adapterIds, `No adapters found for chain ${folksChainId}`);
|
|
13
14
|
}
|
|
14
15
|
export function doesAdapterSupportDataMessage(folksChainId, adapterId) {
|
|
15
16
|
const isHub = isHubChain(folksChainId, FolksCore.getSelectedNetwork());
|
|
@@ -68,7 +69,7 @@ function getReturnMessageAdapterIds({ folksTokenId, network }) {
|
|
|
68
69
|
export function getSupportedMessageAdapters(params) {
|
|
69
70
|
const { messageAdapterParamType, sourceFolksChainId, network } = params;
|
|
70
71
|
const spokeAdapterIds = getSpokeAdapterIds(sourceFolksChainId, network);
|
|
71
|
-
const supportedAdapterIds = getMessageAdapterIds(params).filter(intersect(spokeAdapterIds));
|
|
72
|
+
const supportedAdapterIds = ensureNonEmpty(getMessageAdapterIds(params).filter(intersect(spokeAdapterIds)), `No supported adapters found for chain ${sourceFolksChainId}`);
|
|
72
73
|
switch (messageAdapterParamType) {
|
|
73
74
|
case MessageAdapterParamsType.SendToken: {
|
|
74
75
|
return {
|
|
@@ -78,7 +79,7 @@ export function getSupportedMessageAdapters(params) {
|
|
|
78
79
|
}
|
|
79
80
|
case MessageAdapterParamsType.ReceiveToken: {
|
|
80
81
|
const destSpokeAdapterIds = getSpokeAdapterIds(params.destFolksChainId, network);
|
|
81
|
-
const supportedReturnAdapterIds = getReturnMessageAdapterIds(params).filter(intersect(destSpokeAdapterIds));
|
|
82
|
+
const supportedReturnAdapterIds = ensureNonEmpty(getReturnMessageAdapterIds(params).filter(intersect(destSpokeAdapterIds)), `No supported return adapters found for chain ${params.destFolksChainId}`);
|
|
82
83
|
return {
|
|
83
84
|
adapterIds: supportedAdapterIds,
|
|
84
85
|
returnAdapterIds: supportedReturnAdapterIds,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/common/utils/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/common/utils/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type NonEmptyArray<T> = [T, ...Array<T>];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/types/generics.ts"],"names":[],"mappings":""}
|
package/dist/utils/array.d.ts
CHANGED
package/dist/utils/array.js
CHANGED
package/dist/utils/array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GACpB,CAAI,GAAa,EAAE,EAAE,CACrB,CAAC,CAAI,EAAE,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEpB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAI,GAAa,EAAE,MAAe,EAAoB,EAAE;IACpF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,uBAAuB,CAAC,CAAC;IACzE,OAAO,GAAuB,CAAC;AACjC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -3,6 +3,7 @@ import type { FolksChainId } from "./chain.js";
|
|
|
3
3
|
import type { AccountId, LoanId, LoanName, Nonce } from "./lending.js";
|
|
4
4
|
import type { LoanTypeId } from "./module.js";
|
|
5
5
|
import type { FolksTokenId, FolksSpokeTokenType, FolksHubTokenType } from "./token.js";
|
|
6
|
+
import type { NonEmptyArray } from "../../types/generics.js";
|
|
6
7
|
import type {
|
|
7
8
|
FINALITY,
|
|
8
9
|
HUB_ACTIONS,
|
|
@@ -72,8 +73,8 @@ export type MessageAdapters = {
|
|
|
72
73
|
};
|
|
73
74
|
|
|
74
75
|
export type SupportedMessageAdapters = {
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
adapterIds: NonEmptyArray<AdapterType>;
|
|
77
|
+
returnAdapterIds: NonEmptyArray<AdapterType>;
|
|
77
78
|
};
|
|
78
79
|
|
|
79
80
|
export type FeeParams = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getHubTokenData, isHubChain } from "../../chains/evm/hub/utils/chain.js";
|
|
2
|
-
import { intersect } from "../../utils/array.js";
|
|
2
|
+
import { ensureNonEmpty, intersect } from "../../utils/array.js";
|
|
3
3
|
import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
|
|
4
4
|
import { FolksCore } from "../../xchain/core/folks-core.js";
|
|
5
5
|
import { DATA_ADAPTERS } from "../constants/adapter.js";
|
|
@@ -9,13 +9,16 @@ import { TokenType } from "../types/token.js";
|
|
|
9
9
|
|
|
10
10
|
import { getSpokeChain } from "./chain.js";
|
|
11
11
|
|
|
12
|
+
import type { NonEmptyArray } from "../../types/generics.js";
|
|
12
13
|
import type { MessageAdapterParams, ReceiveTokenMessageAdapterParams } from "../types/adapter.js";
|
|
13
14
|
import type { FolksChainId, NetworkType } from "../types/chain.js";
|
|
15
|
+
import type { SupportedMessageAdapters } from "../types/message.js";
|
|
14
16
|
import type { CrossChainTokenType, FolksTokenId } from "../types/token.js";
|
|
15
17
|
|
|
16
|
-
export function getSpokeAdapterIds(folksChainId: FolksChainId, network: NetworkType) {
|
|
18
|
+
export function getSpokeAdapterIds(folksChainId: FolksChainId, network: NetworkType): NonEmptyArray<AdapterType> {
|
|
17
19
|
const spokeChain = getSpokeChain(folksChainId, network);
|
|
18
|
-
|
|
20
|
+
const adapterIds = Object.keys(spokeChain.adapters).map<AdapterType>(parseInt);
|
|
21
|
+
return ensureNonEmpty(adapterIds, `No adapters found for chain ${folksChainId}`);
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
export function doesAdapterSupportDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean {
|
|
@@ -101,10 +104,13 @@ function getReturnMessageAdapterIds({ folksTokenId, network }: ReceiveTokenMessa
|
|
|
101
104
|
return getSendTokenAdapterIds(folksTokenId, network);
|
|
102
105
|
}
|
|
103
106
|
|
|
104
|
-
export function getSupportedMessageAdapters(params: MessageAdapterParams) {
|
|
107
|
+
export function getSupportedMessageAdapters(params: MessageAdapterParams): SupportedMessageAdapters {
|
|
105
108
|
const { messageAdapterParamType, sourceFolksChainId, network } = params;
|
|
106
109
|
const spokeAdapterIds = getSpokeAdapterIds(sourceFolksChainId, network);
|
|
107
|
-
const supportedAdapterIds =
|
|
110
|
+
const supportedAdapterIds = ensureNonEmpty(
|
|
111
|
+
getMessageAdapterIds(params).filter(intersect(spokeAdapterIds)),
|
|
112
|
+
`No supported adapters found for chain ${sourceFolksChainId}`,
|
|
113
|
+
);
|
|
108
114
|
|
|
109
115
|
switch (messageAdapterParamType) {
|
|
110
116
|
case MessageAdapterParamsType.SendToken: {
|
|
@@ -115,7 +121,10 @@ export function getSupportedMessageAdapters(params: MessageAdapterParams) {
|
|
|
115
121
|
}
|
|
116
122
|
case MessageAdapterParamsType.ReceiveToken: {
|
|
117
123
|
const destSpokeAdapterIds = getSpokeAdapterIds(params.destFolksChainId, network);
|
|
118
|
-
const supportedReturnAdapterIds =
|
|
124
|
+
const supportedReturnAdapterIds = ensureNonEmpty(
|
|
125
|
+
getReturnMessageAdapterIds(params).filter(intersect(destSpokeAdapterIds)),
|
|
126
|
+
`No supported return adapters found for chain ${params.destFolksChainId}`,
|
|
127
|
+
);
|
|
119
128
|
return {
|
|
120
129
|
adapterIds: supportedAdapterIds,
|
|
121
130
|
returnAdapterIds: supportedReturnAdapterIds,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type NonEmptyArray<T> = [T, ...Array<T>];
|
package/src/utils/array.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
import type { NonEmptyArray } from "../types/generics.js";
|
|
2
|
+
|
|
1
3
|
export const intersect =
|
|
2
4
|
<T>(arr: Array<T>) =>
|
|
3
5
|
(x: T) =>
|
|
4
6
|
arr.includes(x);
|
|
7
|
+
|
|
8
|
+
export const ensureNonEmpty = <T>(arr: Array<T>, errMsg?: string): NonEmptyArray<T> => {
|
|
9
|
+
if (arr.length === 0) throw new Error(errMsg ?? "Array cannot be empty");
|
|
10
|
+
return arr as NonEmptyArray<T>;
|
|
11
|
+
};
|