@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.
@@ -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
- adapterId: Array<AdapterType>;
48
- returnAdapterId: Array<AdapterType>;
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":"AAcA,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
+ {"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
- return Object.keys(spokeChain.adapters).map(parseInt);
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":"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"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/types/generics.ts"],"names":[],"mappings":""}
@@ -1 +1,2 @@
1
1
  export declare const intersect: <T>(arr: Array<T>) => (x: T) => boolean;
2
+ export declare const ensureNonEmpty: <T>(arr: Array<T>, errMsg?: string) => [T, ...T[]];
@@ -1,2 +1,7 @@
1
1
  export const intersect = (arr) => (x) => arr.includes(x);
2
+ export const ensureNonEmpty = (arr, errMsg) => {
3
+ if (arr.length === 0)
4
+ throw new Error(errMsg ?? "Array cannot be empty");
5
+ return arr;
6
+ };
2
7
  //# sourceMappingURL=array.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GACpB,CAAI,GAAa,EAAE,EAAE,CACrB,CAAC,CAAI,EAAE,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC"}
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@folks-finance/xchain-sdk",
3
3
  "description": "The official JavaScript SDK for the Folks Finance Cross-Chain Lending Protocol",
4
- "version": "0.0.55",
4
+ "version": "0.0.56",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -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
- adapterId: Array<AdapterType>;
76
- returnAdapterId: Array<AdapterType>;
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
- return Object.keys(spokeChain.adapters).map<AdapterType>(parseInt);
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 = getMessageAdapterIds(params).filter(intersect(spokeAdapterIds));
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 = getReturnMessageAdapterIds(params).filter(intersect(destSpokeAdapterIds));
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>];
@@ -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
+ };