@allbridge/bridge-core-sdk 3.23.1-alpha.1 → 3.23.1-beta.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.
@@ -1,7 +1,7 @@
1
1
  import { AllbridgeCoreSdkOptions, RawSuiTransaction } from "../../index";
2
2
  import { NodeRpcUrlsConfig } from "../../services";
3
3
  /**
4
- * Contains usefully Sui methods
4
+ * Contains useful Sui methods
5
5
  */
6
6
  export interface SuiUtils {
7
7
  /**
@@ -14,15 +14,10 @@ export interface SuiUtils {
14
14
  export declare class DefaultSuiUtils implements SuiUtils {
15
15
  readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig;
16
16
  readonly params: AllbridgeCoreSdkOptions;
17
- keyMap: {
18
- readonly SplitCoins: "amounts";
19
- readonly MoveCall: "arguments";
20
- readonly MergeCoins: "sources";
21
- readonly TransferObjects: "objects";
22
- readonly MakeMoveVec: "elements";
23
- readonly Upgrade: "ticket";
24
- };
17
+ private readonly keyMap;
25
18
  constructor(nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions);
26
19
  private offset;
20
+ private getInputObjectId;
27
21
  merge(bridgeTransaction: RawSuiTransaction, customTransaction: string): Promise<RawSuiTransaction>;
22
+ private cleanupTransaction;
28
23
  }
@@ -6,20 +6,20 @@ class DefaultSuiUtils {
6
6
  nodeRpcUrlsConfig;
7
7
  params;
8
8
  keyMap = {
9
- SplitCoins: "amounts",
10
- MoveCall: "arguments",
11
- MergeCoins: "sources",
12
- TransferObjects: "objects",
13
- MakeMoveVec: "elements",
14
- Upgrade: "ticket",
9
+ SplitCoins: ["amounts", "coin"],
10
+ MoveCall: ["arguments"],
11
+ MergeCoins: ["sources"],
12
+ TransferObjects: ["objects"],
13
+ MakeMoveVec: ["elements"],
14
+ Upgrade: ["ticket"],
15
15
  };
16
16
  constructor(nodeRpcUrlsConfig, params) {
17
17
  this.nodeRpcUrlsConfig = nodeRpcUrlsConfig;
18
18
  this.params = params;
19
19
  }
20
- offset(obj, offsetInput, offsetCmd) {
20
+ offset(obj, inputIndexMap, offsetCmd) {
21
21
  if (obj.Input !== undefined) {
22
- obj.Input = obj.Input + offsetInput;
22
+ obj.Input = inputIndexMap.get(obj.Input);
23
23
  return obj;
24
24
  }
25
25
  if (obj.NestedResult !== undefined) {
@@ -32,25 +32,145 @@ class DefaultSuiUtils {
32
32
  }
33
33
  return obj;
34
34
  }
35
+ getInputObjectId(input) {
36
+ if ("UnresolvedObject" in input && input.UnresolvedObject?.objectId) {
37
+ return input.UnresolvedObject.objectId;
38
+ }
39
+ if ("Object" in input) {
40
+ const obj = input.Object;
41
+ if ("ImmOrOwnedObject" in obj) {
42
+ return obj.ImmOrOwnedObject.objectId;
43
+ }
44
+ if ("SharedObject" in obj) {
45
+ return obj.SharedObject.objectId;
46
+ }
47
+ if ("Receiving" in obj) {
48
+ return obj.Receiving.objectId;
49
+ }
50
+ }
51
+ return undefined;
52
+ }
35
53
  async merge(bridgeTransaction, customTransaction) {
36
54
  const rawTx = JSON.parse(bridgeTransaction);
37
- const offsetInput = rawTx.inputs.length;
38
- const offsetCommands = rawTx.commands.length;
39
55
  const customTx = JSON.parse(customTransaction);
40
- rawTx.inputs = rawTx.inputs.concat(customTx.inputs);
41
- for (const cmd of customTx.commands) {
56
+ const offsetCommands = customTx.commands.length;
57
+ const objectIdToIndex = new Map();
58
+ const inputIndexMap = new Map();
59
+ customTx.inputs.forEach((input, index) => {
60
+ const objectId = this.getInputObjectId(input);
61
+ if (objectId)
62
+ objectIdToIndex.set(objectId, index);
63
+ });
64
+ rawTx.inputs.forEach((input, index) => {
65
+ const objectId = this.getInputObjectId(input);
66
+ if (objectId && objectIdToIndex.has(objectId)) {
67
+ inputIndexMap.set(index, objectIdToIndex.get(objectId));
68
+ }
69
+ else {
70
+ const newIndex = customTx.inputs.length;
71
+ customTx.inputs.push(input);
72
+ inputIndexMap.set(index, newIndex);
73
+ if (objectId)
74
+ objectIdToIndex.set(objectId, newIndex);
75
+ }
76
+ });
77
+ for (const cmd of rawTx.commands) {
42
78
  const kind = Object.keys(cmd)[0];
43
- const argKey = this.keyMap[kind];
44
- if (!argKey)
79
+ const argKeys = this.keyMap[kind];
80
+ if (!argKeys)
45
81
  continue;
46
- const args = cmd[kind][argKey];
47
- if (!Array.isArray(args))
48
- continue;
49
- cmd[kind][argKey] = args.map((arg) => this.offset(arg, offsetInput, offsetCommands));
50
- rawTx.commands.push(cmd);
82
+ for (const argKey of argKeys) {
83
+ const args = cmd[kind][argKey];
84
+ if (!Array.isArray(args)) {
85
+ cmd[kind][argKey] = this.offset(args, inputIndexMap, offsetCommands);
86
+ }
87
+ else {
88
+ cmd[kind][argKey] = args.map((arg) => this.offset(arg, inputIndexMap, offsetCommands));
89
+ }
90
+ }
91
+ customTx.commands.push(cmd);
92
+ }
93
+ const cleanedTx = this.cleanupTransaction(customTx);
94
+ return transactions_1.Transaction.from(JSON.stringify(cleanedTx)).toJSON();
95
+ }
96
+ cleanupTransaction(tx) {
97
+ const usedInputs = new Set();
98
+ const usedResults = new Set();
99
+ const keepCommands = [];
100
+ const oldToNewCmdIdx = new Map();
101
+ const visit = (obj) => {
102
+ if (obj?.Input !== undefined)
103
+ usedInputs.add(obj.Input);
104
+ if (obj?.Result !== undefined)
105
+ usedResults.add(obj.Result);
106
+ if (obj?.NestedResult !== undefined)
107
+ usedResults.add(obj.NestedResult[0]);
108
+ };
109
+ const remapCmd = (obj) => {
110
+ if (obj?.Result !== undefined) {
111
+ const newIdx = oldToNewCmdIdx.get(obj.Result);
112
+ return newIdx !== undefined ? { Result: newIdx } : obj;
113
+ }
114
+ if (obj?.NestedResult !== undefined) {
115
+ const newIdx = oldToNewCmdIdx.get(obj.NestedResult[0]);
116
+ return newIdx !== undefined ? { NestedResult: [newIdx, obj.NestedResult[1]] } : obj;
117
+ }
118
+ return obj;
119
+ };
120
+ const remapInput = (obj) => {
121
+ if (obj?.Input !== undefined) {
122
+ const newIdx = inputMap.get(obj.Input);
123
+ return newIdx !== undefined ? { Input: newIdx } : obj;
124
+ }
125
+ return obj;
126
+ };
127
+ for (const cmd of tx.commands) {
128
+ const kind = Object.keys(cmd)[0];
129
+ for (const v of Object.values(cmd[kind])) {
130
+ if (Array.isArray(v)) {
131
+ v.forEach(visit);
132
+ }
133
+ else {
134
+ visit(v);
135
+ }
136
+ }
51
137
  }
52
- const tx = transactions_1.Transaction.from(JSON.stringify(rawTx));
53
- return tx.toJSON();
138
+ tx.commands.forEach((cmd, idx) => {
139
+ const kind = Object.keys(cmd)[0];
140
+ const isDroppable = ["SplitCoins"].includes(kind);
141
+ const isUsed = usedResults.has(idx);
142
+ if (!isDroppable || isUsed) {
143
+ oldToNewCmdIdx.set(idx, keepCommands.length);
144
+ keepCommands.push(cmd);
145
+ }
146
+ });
147
+ keepCommands.forEach((cmd, idx) => {
148
+ const kind = Object.keys(cmd)[0];
149
+ for (const key of Object.keys(cmd[kind])) {
150
+ const field = cmd[kind][key];
151
+ keepCommands[idx][kind][key] = Array.isArray(field) ? field.map(remapCmd) : remapCmd(field);
152
+ }
153
+ });
154
+ const inputMap = new Map();
155
+ const finalInputs = tx.inputs.filter((input, idx) => {
156
+ if (usedInputs.has(idx)) {
157
+ inputMap.set(idx, inputMap.size);
158
+ return true;
159
+ }
160
+ return false;
161
+ });
162
+ keepCommands.forEach((cmd, idx) => {
163
+ const kind = Object.keys(cmd)[0];
164
+ for (const key of Object.keys(cmd[kind])) {
165
+ const field = cmd[kind][key];
166
+ keepCommands[idx][kind][key] = Array.isArray(field) ? field.map(remapInput) : remapInput(field);
167
+ }
168
+ });
169
+ return {
170
+ ...tx,
171
+ inputs: finalInputs,
172
+ commands: keepCommands,
173
+ };
54
174
  }
55
175
  }
56
176
  exports.DefaultSuiUtils = DefaultSuiUtils;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/sui/index.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AAgBvD,MAAa,eAAe;IAWf;IACA;IAXX,MAAM,GAAG;QACP,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,SAAS;QACrB,eAAe,EAAE,SAAS;QAC1B,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,QAAQ;KACT,CAAC;IAEX,YACW,iBAAoC,EACpC,MAA+B;QAD/B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,WAAM,GAAN,MAAM,CAAyB;IACvC,CAAC;IAEI,MAAM,CAAC,GAAQ,EAAE,WAAmB,EAAE,SAAiB;QAC7D,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5B,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC;YACpC,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACnC,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;YACpC,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,iBAAoC,EAAE,iBAAyB;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC/C,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAgC,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;YAC1F,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,EAAE,GAAG,0BAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;CACF;AAnDD,0CAmDC","sourcesContent":["import { Transaction } from \"@mysten/sui/transactions\";\nimport { AllbridgeCoreSdkOptions, RawSuiTransaction } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\n\n/**\n * Contains usefully Sui methods\n */\nexport interface SuiUtils {\n /**\n * merge Sui's transactions\n * @param bridgeTransaction transaction to merge with\n * @param customTransaction custom transaction to merge with the bridge transaction\n */\n merge(bridgeTransaction: RawSuiTransaction, customTransaction: string): Promise<RawSuiTransaction>;\n}\n\nexport class DefaultSuiUtils implements SuiUtils {\n keyMap = {\n SplitCoins: \"amounts\",\n MoveCall: \"arguments\",\n MergeCoins: \"sources\",\n TransferObjects: \"objects\",\n MakeMoveVec: \"elements\",\n Upgrade: \"ticket\",\n } as const;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions\n ) {}\n\n private offset(obj: any, offsetInput: number, offsetCmd: number): { [key: string]: number | [number, number] } {\n if (obj.Input !== undefined) {\n obj.Input = obj.Input + offsetInput;\n return obj;\n }\n if (obj.NestedResult !== undefined) {\n obj.NestedResult = [obj.NestedResult[0] + offsetCmd, obj.NestedResult[1]];\n return obj;\n }\n if (obj.Result !== undefined) {\n obj.Result = obj.Result + offsetCmd;\n return obj;\n }\n return obj;\n }\n\n async merge(bridgeTransaction: RawSuiTransaction, customTransaction: string): Promise<RawSuiTransaction> {\n const rawTx = JSON.parse(bridgeTransaction);\n const offsetInput = rawTx.inputs.length;\n const offsetCommands = rawTx.commands.length;\n const customTx = JSON.parse(customTransaction);\n rawTx.inputs = rawTx.inputs.concat(customTx.inputs);\n for (const cmd of customTx.commands) {\n const kind = Object.keys(cmd)[0] as string;\n const argKey = this.keyMap[kind as keyof typeof this.keyMap];\n if (!argKey) continue;\n\n const args = cmd[kind][argKey];\n if (!Array.isArray(args)) continue;\n cmd[kind][argKey] = args.map((arg: any) => this.offset(arg, offsetInput, offsetCommands));\n rawTx.commands.push(cmd);\n }\n\n const tx = Transaction.from(JSON.stringify(rawTx));\n return tx.toJSON();\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/sui/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Transaction } from \"@mysten/sui/transactions\";\nimport { AllbridgeCoreSdkOptions, RawSuiTransaction } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\n\n/**\n * Contains useful Sui methods\n */\nexport interface SuiUtils {\n /**\n * merge Sui's transactions\n * @param bridgeTransaction transaction to merge with\n * @param customTransaction custom transaction to merge with the bridge transaction\n */\n merge(bridgeTransaction: RawSuiTransaction, customTransaction: string): Promise<RawSuiTransaction>;\n}\n\nexport class DefaultSuiUtils implements SuiUtils {\n private readonly keyMap = {\n SplitCoins: [\"amounts\", \"coin\"],\n MoveCall: [\"arguments\"],\n MergeCoins: [\"sources\"],\n TransferObjects: [\"objects\"],\n MakeMoveVec: [\"elements\"],\n Upgrade: [\"ticket\"],\n } as const;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions\n ) {}\n\n private offset(\n obj: any,\n inputIndexMap: Map<number, number>,\n offsetCmd: number\n ): { [key: string]: number | [number, number] } {\n if (obj.Input !== undefined) {\n obj.Input = inputIndexMap.get(obj.Input);\n return obj;\n }\n if (obj.NestedResult !== undefined) {\n obj.NestedResult = [obj.NestedResult[0] + offsetCmd, obj.NestedResult[1]];\n return obj;\n }\n if (obj.Result !== undefined) {\n obj.Result = obj.Result + offsetCmd;\n return obj;\n }\n return obj;\n }\n\n private getInputObjectId(input: any): string | undefined {\n if (\"UnresolvedObject\" in input && input.UnresolvedObject?.objectId) {\n return input.UnresolvedObject.objectId;\n }\n if (\"Object\" in input) {\n const obj = input.Object;\n if (\"ImmOrOwnedObject\" in obj) {\n return obj.ImmOrOwnedObject.objectId;\n }\n if (\"SharedObject\" in obj) {\n return obj.SharedObject.objectId;\n }\n if (\"Receiving\" in obj) {\n return obj.Receiving.objectId;\n }\n }\n return undefined;\n }\n\n async merge(bridgeTransaction: RawSuiTransaction, customTransaction: string): Promise<RawSuiTransaction> {\n const rawTx = JSON.parse(bridgeTransaction);\n const customTx = JSON.parse(customTransaction);\n const offsetCommands = customTx.commands.length;\n\n const objectIdToIndex = new Map<string, number>();\n const inputIndexMap = new Map<number, number>();\n\n customTx.inputs.forEach((input: any, index: number) => {\n const objectId = this.getInputObjectId(input);\n if (objectId) objectIdToIndex.set(objectId, index);\n });\n\n rawTx.inputs.forEach((input: any, index: number) => {\n const objectId = this.getInputObjectId(input);\n if (objectId && objectIdToIndex.has(objectId)) {\n inputIndexMap.set(index, objectIdToIndex.get(objectId) as number);\n } else {\n const newIndex = customTx.inputs.length;\n customTx.inputs.push(input);\n inputIndexMap.set(index, newIndex);\n if (objectId) objectIdToIndex.set(objectId, newIndex);\n }\n });\n\n for (const cmd of rawTx.commands) {\n const kind = Object.keys(cmd)[0] as string;\n const argKeys = this.keyMap[kind as keyof typeof this.keyMap];\n if (!argKeys) continue;\n for (const argKey of argKeys) {\n const args = cmd[kind][argKey];\n if (!Array.isArray(args)) {\n cmd[kind][argKey] = this.offset(args, inputIndexMap, offsetCommands);\n } else {\n cmd[kind][argKey] = args.map((arg: any) => this.offset(arg, inputIndexMap, offsetCommands));\n }\n }\n customTx.commands.push(cmd);\n }\n\n const cleanedTx = this.cleanupTransaction(customTx);\n return Transaction.from(JSON.stringify(cleanedTx)).toJSON();\n }\n\n private cleanupTransaction(tx: any): RawSuiTransaction {\n const usedInputs = new Set<number>();\n const usedResults = new Set<number>();\n const keepCommands: any[] = [];\n const oldToNewCmdIdx = new Map<number, number>();\n\n const visit = (obj: any) => {\n if (obj?.Input !== undefined) usedInputs.add(obj.Input);\n if (obj?.Result !== undefined) usedResults.add(obj.Result);\n if (obj?.NestedResult !== undefined) usedResults.add(obj.NestedResult[0]);\n };\n const remapCmd = (obj: any): any => {\n if (obj?.Result !== undefined) {\n const newIdx = oldToNewCmdIdx.get(obj.Result);\n return newIdx !== undefined ? { Result: newIdx } : obj;\n }\n if (obj?.NestedResult !== undefined) {\n const newIdx = oldToNewCmdIdx.get(obj.NestedResult[0]);\n return newIdx !== undefined ? { NestedResult: [newIdx, obj.NestedResult[1]] } : obj;\n }\n return obj;\n };\n\n const remapInput = (obj: any): any => {\n if (obj?.Input !== undefined) {\n const newIdx = inputMap.get(obj.Input);\n return newIdx !== undefined ? { Input: newIdx } : obj;\n }\n return obj;\n };\n\n for (const cmd of tx.commands) {\n const kind = Object.keys(cmd)[0] as string;\n for (const v of Object.values(cmd[kind])) {\n if (Array.isArray(v)) {\n v.forEach(visit);\n } else {\n visit(v);\n }\n }\n }\n tx.commands.forEach((cmd: any, idx: number) => {\n const kind = Object.keys(cmd)[0] as string;\n const isDroppable = [\"SplitCoins\"].includes(kind);\n const isUsed = usedResults.has(idx);\n\n if (!isDroppable || isUsed) {\n oldToNewCmdIdx.set(idx, keepCommands.length);\n keepCommands.push(cmd);\n }\n });\n\n keepCommands.forEach((cmd: any, idx: number) => {\n const kind = Object.keys(cmd)[0] as string;\n for (const key of Object.keys(cmd[kind])) {\n const field = cmd[kind][key];\n keepCommands[idx][kind][key] = Array.isArray(field) ? field.map(remapCmd) : remapCmd(field);\n }\n });\n\n const inputMap = new Map<number, number>();\n const finalInputs = tx.inputs.filter((input: any, idx: number) => {\n if (usedInputs.has(idx)) {\n inputMap.set(idx, inputMap.size);\n return true;\n }\n return false;\n });\n\n keepCommands.forEach((cmd: any, idx: number) => {\n const kind = Object.keys(cmd)[0] as string;\n for (const key of Object.keys(cmd[kind])) {\n const field = cmd[kind][key];\n keepCommands[idx][kind][key] = Array.isArray(field) ? field.map(remapInput) : remapInput(field);\n }\n });\n\n return {\n ...tx,\n inputs: finalInputs,\n commands: keepCommands,\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- export declare const VERSION = "3.23.1-alpha.1";
1
+ export declare const VERSION = "3.23.1-beta.1";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = "3.23.1-alpha.1";
4
+ exports.VERSION = "3.23.1-beta.1";
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,gBAAgB,CAAC","sourcesContent":["export const VERSION = \"3.23.1-alpha.1\";\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,eAAe,CAAC","sourcesContent":["export const VERSION = \"3.23.1-beta.1\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allbridge/bridge-core-sdk",
3
- "version": "3.23.1-alpha.1",
3
+ "version": "3.23.1-beta.1",
4
4
  "main": "./dist/cjs/index.js",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -103,7 +103,7 @@
103
103
  "@project-serum/anchor": "^0.25.0",
104
104
  "@solana/spl-token": "^0.3.8",
105
105
  "@solana/web3.js": "^1.98.0",
106
- "@stellar/stellar-sdk": "^14.0.0-rc.3",
106
+ "@stellar/stellar-sdk": "^13.1.0",
107
107
  "assert": "^2.1.0",
108
108
  "axios": "^1.7.9",
109
109
  "big.js": "^6.2.2",