@storm-trade/wallet-core 1.0.21 → 1.0.22

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.
@@ -71,6 +71,10 @@ export declare class IframeAdapter {
71
71
  getPublicKey(address: string): Promise<GetPublicKeyResponse>;
72
72
  resetDevice(address: string): Promise<EmptyResponse>;
73
73
  signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse>;
74
+ signMessages(masterAddress: string, messages: SignRequest[]): Promise<{
75
+ hashes: Uint8Array[];
76
+ signatures: Uint8Array[];
77
+ }>;
74
78
  createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse>;
75
79
  getActiveSessions(): Promise<ActiveSessionsResponse>;
76
80
  disconnect(masterAddress: string): Promise<void>;
@@ -88,6 +92,13 @@ export declare function queryId(): bigint;
88
92
 
89
93
  export declare const SessionExpiredOrNotProvided: Error;
90
94
 
95
+ export declare type SignManyRequest = SignRequest[];
96
+
97
+ export declare type SignManyResponse = {
98
+ hashes: Uint8Array[];
99
+ signatures: Uint8Array[];
100
+ };
101
+
91
102
  export declare type SignRequest = {
92
103
  body: Uint8Array;
93
104
  };
@@ -1,23 +1,23 @@
1
- var v = Object.defineProperty;
2
- var M = (r, e, t) => e in r ? v(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
- var n = (r, e, t) => M(r, typeof e != "symbol" ? e + "" : e, t);
4
- import { beginCell as f, Address as l, Dictionary as a, toNano as m, Cell as B, contractAddress as E } from "@ton/ton";
1
+ var S = Object.defineProperty;
2
+ var v = (r, e, t) => e in r ? S(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
+ var a = (r, e, t) => v(r, typeof e != "symbol" ? e + "" : e, t);
4
+ import { beginCell as f, Address as u, Dictionary as c, toNano as m, Cell as B, contractAddress as E } from "@ton/ton";
5
5
  class K {
6
6
  constructor(e) {
7
- n(this, "host");
8
- n(this, "timeouts");
9
- n(this, "waitingForResponse", /* @__PURE__ */ new Map());
10
- n(this, "iframe");
11
- n(this, "state", "not-ready");
12
- n(this, "i18nInit");
13
- n(this, "handleMessage", (e) => {
7
+ a(this, "host");
8
+ a(this, "timeouts");
9
+ a(this, "waitingForResponse", /* @__PURE__ */ new Map());
10
+ a(this, "iframe");
11
+ a(this, "state", "not-ready");
12
+ a(this, "i18nInit");
13
+ a(this, "handleMessage", (e) => {
14
14
  if (typeof e.data != "object" || e.data === null || !("id" in e.data) || !("status" in e.data) || typeof e.data.id != "string" || typeof e.data.status != "string")
15
15
  return;
16
16
  const t = this.waitingForResponse.get(e.data.id);
17
17
  if (!t)
18
18
  return;
19
- const [s, c] = t;
20
- this.waitingForResponse.delete(e.data.id), e.data.status === "success" ? "payload" in e.data ? s(e.data.payload) : s(void 0) : "error" in e.data ? c(new Error(e.data.error)) : c(new Error("Unknown error"));
19
+ const [s, n] = t;
20
+ this.waitingForResponse.delete(e.data.id), e.data.status === "success" ? "payload" in e.data ? s(e.data.payload) : s(void 0) : "error" in e.data ? n(new Error(e.data.error)) : n(new Error("Unknown error"));
21
21
  });
22
22
  this.host = e.host, this.timeouts = {
23
23
  init: 1e3,
@@ -33,7 +33,7 @@ class K {
33
33
  }
34
34
  async sendMessage(e, t) {
35
35
  var i, d;
36
- const s = Math.random().toString(), c = Promise.race([
36
+ const s = Math.random().toString(), n = Promise.race([
37
37
  new Promise((o, b) => {
38
38
  this.waitingForResponse.set(s, [o, b]);
39
39
  }),
@@ -43,19 +43,19 @@ class K {
43
43
  }, t);
44
44
  })
45
45
  ]);
46
- return (d = (i = this.iframe) == null ? void 0 : i.contentWindow) == null || d.postMessage({ id: s, payload: e }, this.host), c;
46
+ return (d = (i = this.iframe) == null ? void 0 : i.contentWindow) == null || d.postMessage({ id: s, payload: e }, this.host), n;
47
47
  }
48
48
  setupMessageListener() {
49
49
  window.addEventListener("message", this.handleMessage);
50
50
  }
51
51
  async attachIframe(e) {
52
52
  this.iframe = document.createElement("iframe"), this.iframe.src = this.host, this.iframe.frameBorder = "0", this.iframe.width = "100%", this.iframe.height = "100%";
53
- const t = new Promise((s, c) => {
53
+ const t = new Promise((s, n) => {
54
54
  var i, d;
55
55
  (i = this.iframe) == null || i.addEventListener("load", async () => {
56
56
  s();
57
57
  }, { once: !0 }), (d = this.iframe) == null || d.addEventListener("error", (o) => {
58
- c(o);
58
+ n(o);
59
59
  }, { once: !0 });
60
60
  });
61
61
  return e.appendChild(this.iframe), t;
@@ -95,6 +95,9 @@ class K {
95
95
  async signMessage(e, t) {
96
96
  return this.sendMessage({ type: "sign", address: e, message: t }, this.timeouts.sign);
97
97
  }
98
+ async signMessages(e, t) {
99
+ return this.sendMessage({ type: "sign-many", address: e, messages: t }, this.timeouts.sign);
100
+ }
98
101
  async createTransfer(e, t) {
99
102
  return this.sendMessage({
100
103
  type: "create-transfer",
@@ -124,27 +127,27 @@ class P {
124
127
  this.tonClient = e, this.config = t;
125
128
  }
126
129
  calculateSmartAccountAddressFromStateInit(e) {
127
- return U(e, l.parse(this.config.smartAccountMasterAddress));
130
+ return U(e, u.parse(this.config.smartAccountMasterAddress));
128
131
  }
129
132
  async getSmartAccountAddress(e) {
130
- return (await this.tonClient.runMethod(l.parse(this.config.smartAccountMasterAddress), "get_nft_address_by_index", [
133
+ return (await this.tonClient.runMethod(u.parse(this.config.smartAccountMasterAddress), "get_nft_address_by_index", [
131
134
  {
132
135
  type: "int",
133
- value: BigInt(`0x${l.parse(e).hash.toString("hex")}`)
136
+ value: BigInt(`0x${u.parse(e).hash.toString("hex")}`)
134
137
  }
135
138
  ])).stack.readAddress();
136
139
  }
137
140
  async getSmartAccountData(e) {
138
- const t = l.parse(e);
141
+ const t = u.parse(e);
139
142
  try {
140
- const c = (await this.tonClient.runMethod(t, "get_storage_data")).stack, i = c.readBigNumber(), d = c.readAddress(), o = c.readAddress(), b = c.readCellOpt();
143
+ const n = (await this.tonClient.runMethod(t, "get_storage_data")).stack, i = n.readBigNumber(), d = n.readAddress(), o = n.readAddress(), b = n.readCellOpt();
141
144
  let y = [];
142
- b && (y = a.loadDirect(a.Keys.BigUint(256), a.Values.Cell(), b).keys());
143
- const w = c.readAddress(), A = a.loadDirect(
144
- a.Keys.Uint(8),
145
+ b && (y = c.loadDirect(c.Keys.BigUint(256), c.Values.Cell(), b).keys());
146
+ const w = n.readAddress(), A = c.loadDirect(
147
+ c.Keys.Uint(8),
145
148
  x,
146
- c.readCell()
147
- ).values(), S = c.readNumber();
149
+ n.readCell()
150
+ ).values(), M = n.readNumber();
148
151
  return {
149
152
  index: i,
150
153
  collectionAddress: d,
@@ -152,7 +155,7 @@ class P {
152
155
  publicKeys: y,
153
156
  adminAddress: w,
154
157
  backendPublicKeys: A,
155
- seqno: S
158
+ seqno: M
156
159
  };
157
160
  } catch (s) {
158
161
  if (s.message.endsWith("-13"))
@@ -161,12 +164,12 @@ class P {
161
164
  }
162
165
  }
163
166
  createDeploySmartAccountTx(e, t) {
164
- const s = a.empty(a.Keys.BigUint(256), a.Values.Cell());
167
+ const s = c.empty(c.Keys.BigUint(256), c.Values.Cell());
165
168
  s.set(_(e), f().endCell());
166
- const c = f().storeUint(1983912421, 32).storeUint(0, 64).storeDict(s).endCell();
169
+ const n = f().storeUint(1983912421, 32).storeUint(0, 64).storeDict(s).endCell();
167
170
  return {
168
171
  address: this.config.smartAccountMasterAddress,
169
- payload: c.toBoc().toString("base64"),
172
+ payload: n.toBoc().toString("base64"),
170
173
  amount: t
171
174
  };
172
175
  }
@@ -199,13 +202,13 @@ class P {
199
202
  function _(r) {
200
203
  return BigInt("0x" + r.toString("hex"));
201
204
  }
202
- const p = 10n, u = 1022n, h = 8191n;
205
+ const p = 10n, l = 1022n, h = 8191n;
203
206
  class g {
204
207
  // [0 .. 1022]
205
208
  constructor() {
206
- n(this, "shift");
209
+ a(this, "shift");
207
210
  // [0 .. 8191]
208
- n(this, "bitnumber");
211
+ a(this, "bitnumber");
209
212
  this.shift = 0n, this.bitnumber = 0n;
210
213
  }
211
214
  static fromShiftAndBitNumber(e, t) {
@@ -213,19 +216,19 @@ class g {
213
216
  if (s.shift = e, s.shift < 0) throw new Error("invalid shift");
214
217
  if (s.shift > h) throw new Error("invalid shift");
215
218
  if (s.bitnumber = t, s.bitnumber < 0) throw new Error("invalid bitnumber");
216
- if (s.bitnumber > u) throw new Error("invalid bitnumber");
219
+ if (s.bitnumber > l) throw new Error("invalid bitnumber");
217
220
  return s;
218
221
  }
219
222
  getNext() {
220
223
  let e = this.bitnumber + 1n, t = this.shift;
221
- if (t === h && e > u - 1n)
224
+ if (t === h && e > l - 1n)
222
225
  throw new Error("Overload");
223
- if (e > u && (e = 0n, t += 1n, t > h))
226
+ if (e > l && (e = 0n, t += 1n, t > h))
224
227
  throw new Error("Overload");
225
228
  return g.fromShiftAndBitNumber(t, e);
226
229
  }
227
230
  hasNext() {
228
- return !(this.bitnumber >= u - 1n && this.shift === h);
231
+ return !(this.bitnumber >= l - 1n && this.shift === h);
229
232
  }
230
233
  getShift() {
231
234
  return this.shift;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-core.js","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n this.iframe = document.createElement('iframe');\n this.iframe.src = this.host;\n this.iframe.frameBorder = '0';\n this.iframe.width='100%'\n this.iframe.height='100%'\n const p = new Promise<void>((resolve, reject) => {\n this.iframe?.addEventListener('load', async () => {\n resolve();\n }, { once: true });\n this.iframe?.addEventListener('error', (e) => {\n reject(e);\n }, { once: true });\n });\n root.appendChild(this.iframe);\n return p;\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state === 'not-ready') {\n this.state = 'initializing';\n console.log('[embedded-wallet] attaching to root', root);\n await this.attachIframe(root);\n console.log('[embedded-wallet] iframe attached');\n this.setupMessageListener();\n console.log('[embedded-wallet] sending ping');\n let retryCount = 5;\n while (retryCount > 0) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n break;\n } catch (e) {\n retryCount--;\n if (retryCount === 0) {\n this.destroy();\n throw new Error('[embedded-wallet] ping retries exceeded. Init failed');\n } else {\n console.warn('[embedded-wallet] failed to ping attached iframe retrying');\n }\n }\n }\n console.log('[embedded-wallet] pong received');\n this.state = 'ready';\n }\n }\n\n destroy(): void {\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n for (const [_, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n this.iframe?.remove();\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nconst ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f8434104035a741b5b\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address): Address {\n const code = Cell.fromHex(ORDINARY_SMART_ACCOUNT_CODE);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress));\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","p","e","retryCount","masterAddress","address","message","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":"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"}
1
+ {"version":3,"file":"wallet-core.js","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n this.iframe = document.createElement('iframe');\n this.iframe.src = this.host;\n this.iframe.frameBorder = '0';\n this.iframe.width='100%'\n this.iframe.height='100%'\n const p = new Promise<void>((resolve, reject) => {\n this.iframe?.addEventListener('load', async () => {\n resolve();\n }, { once: true });\n this.iframe?.addEventListener('error', (e) => {\n reject(e);\n }, { once: true });\n });\n root.appendChild(this.iframe);\n return p;\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state === 'not-ready') {\n this.state = 'initializing';\n console.log('[embedded-wallet] attaching to root', root);\n await this.attachIframe(root);\n console.log('[embedded-wallet] iframe attached');\n this.setupMessageListener();\n console.log('[embedded-wallet] sending ping');\n let retryCount = 5;\n while (retryCount > 0) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n break;\n } catch (e) {\n retryCount--;\n if (retryCount === 0) {\n this.destroy();\n throw new Error('[embedded-wallet] ping retries exceeded. Init failed');\n } else {\n console.warn('[embedded-wallet] failed to ping attached iframe retrying');\n }\n }\n }\n console.log('[embedded-wallet] pong received');\n this.state = 'ready';\n }\n }\n\n destroy(): void {\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n for (const [_, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n this.iframe?.remove();\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async signMessages(masterAddress: string, messages: SignRequest[]): Promise<{ hashes: Uint8Array[]; signatures: Uint8Array[]; }> {\n return this.sendMessage({ type: 'sign-many', address: masterAddress, messages }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nconst ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f8434104035a741b5b\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address): Address {\n const code = Cell.fromHex(ORDINARY_SMART_ACCOUNT_CODE);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress));\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","p","e","retryCount","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- (function(i,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@ton/ton")):typeof define=="function"&&define.amd?define(["exports","@ton/ton"],r):(i=typeof globalThis<"u"?globalThis:i||self,r(i.WalletCore={},i.ton))})(this,function(i,r){"use strict";var R=Object.defineProperty;var U=(i,r,o)=>r in i?R(i,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):i[r]=o;var n=(i,r,o)=>U(i,typeof r!="symbol"?r+"":r,o);class o{constructor(e){n(this,"host");n(this,"timeouts");n(this,"waitingForResponse",new Map);n(this,"iframe");n(this,"state","not-ready");n(this,"i18nInit");n(this,"handleMessage",e=>{if(typeof e.data!="object"||e.data===null||!("id"in e.data)||!("status"in e.data)||typeof e.data.id!="string"||typeof e.data.status!="string")return;const t=this.waitingForResponse.get(e.data.id);if(!t)return;const[s,a]=t;this.waitingForResponse.delete(e.data.id),e.data.status==="success"?"payload"in e.data?s(e.data.payload):s(void 0):"error"in e.data?a(new Error(e.data.error)):a(new Error("Unknown error"))});this.host=e.host,this.timeouts={init:1e3,connect:6e4,disconnect:1e3,sign:1e3,createTransfer:1e3,activeSessions:1e3,getPublicKey:1e3,resetDevice:1e3,...e.timeouts},this.i18nInit=e.i18n}async sendMessage(e,t){var d,f;const s=Math.random().toString(),a=Promise.race([new Promise((b,l)=>{this.waitingForResponse.set(s,[b,l])}),new Promise((b,l)=>{setTimeout(()=>{l(new Error("Response timeout"))},t)})]);return(f=(d=this.iframe)==null?void 0:d.contentWindow)==null||f.postMessage({id:s,payload:e},this.host),a}setupMessageListener(){window.addEventListener("message",this.handleMessage)}async attachIframe(e){this.iframe=document.createElement("iframe"),this.iframe.src=this.host,this.iframe.frameBorder="0",this.iframe.width="100%",this.iframe.height="100%";const t=new Promise((s,a)=>{var d,f;(d=this.iframe)==null||d.addEventListener("load",async()=>{s()},{once:!0}),(f=this.iframe)==null||f.addEventListener("error",b=>{a(b)},{once:!0})});return e.appendChild(this.iframe),t}async init(e){if(this.state==="not-ready"){this.state="initializing",console.log("[embedded-wallet] attaching to root",e),await this.attachIframe(e),console.log("[embedded-wallet] iframe attached"),this.setupMessageListener(),console.log("[embedded-wallet] sending ping");let t=5;for(;t>0;)try{await this.sendMessage({type:"ping",i18n:this.i18nInit},this.timeouts.init);break}catch{if(t--,t===0)throw this.destroy(),new Error("[embedded-wallet] ping retries exceeded. Init failed");console.warn("[embedded-wallet] failed to ping attached iframe retrying")}console.log("[embedded-wallet] pong received"),this.state="ready"}}destroy(){var e;this.state="not-ready",window.removeEventListener("message",this.handleMessage);for(const[t,s]of this.waitingForResponse.values())s(new Error("Iframe disconnected"));this.waitingForResponse.clear(),(e=this.iframe)==null||e.remove()}async connect(e){return this.sendMessage({type:"connect",address:e},this.timeouts.connect)}async getPublicKey(e){return this.sendMessage({type:"get-public-key",address:e},this.timeouts.getPublicKey)}async resetDevice(e){return this.sendMessage({type:"reset-device",address:e},this.timeouts.resetDevice)}async signMessage(e,t){return this.sendMessage({type:"sign",address:e,message:t},this.timeouts.sign)}async createTransfer(e,t){return this.sendMessage({type:"create-transfer",address:e,data:t},this.timeouts.createTransfer)}async getActiveSessions(){return this.sendMessage({type:"active-sessions"},this.timeouts.activeSessions)}async disconnect(e){return this.sendMessage({type:"disconnect",address:e},this.timeouts.disconnect)}}const w=c=>c.loadBuffer(32),A=c=>r.beginCell().storeBuffer(c,32).endCell(),S={serialize:(c,e)=>{e.storeBuilder(A(c).asBuilder())},parse:c=>w(c)},v="b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f8434104035a741b5b",C=0;function g(c,e){const t=r.Cell.fromHex(v),s=r.beginCell().storeUint(C,8).storeAddress(e).storeAddress(c).storeDict(null).endCell();return r.contractAddress(0,{code:t,data:s})}class M{constructor(e,t){this.tonClient=e,this.config=t}calculateSmartAccountAddressFromStateInit(e){return g(e,r.Address.parse(this.config.smartAccountMasterAddress))}async getSmartAccountAddress(e){return(await this.tonClient.runMethod(r.Address.parse(this.config.smartAccountMasterAddress),"get_nft_address_by_index",[{type:"int",value:BigInt(`0x${r.Address.parse(e).hash.toString("hex")}`)}])).stack.readAddress()}async getSmartAccountData(e){const t=r.Address.parse(e);try{const a=(await this.tonClient.runMethod(t,"get_storage_data")).stack,d=a.readBigNumber(),f=a.readAddress(),b=a.readAddress(),l=a.readCellOpt();let p=[];l&&(p=r.Dictionary.loadDirect(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell(),l).keys());const D=a.readAddress(),N=r.Dictionary.loadDirect(r.Dictionary.Keys.Uint(8),S,a.readCell()).values(),T=a.readNumber();return{index:d,collectionAddress:f,masterWalletAddress:b,publicKeys:p,adminAddress:D,backendPublicKeys:N,seqno:T}}catch(s){if(s.message.endsWith("-13"))return null;throw s}}createDeploySmartAccountTx(e,t){const s=r.Dictionary.empty(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell());s.set(B(e),r.beginCell().endCell());const a=r.beginCell().storeUint(1983912421,32).storeUint(0,64).storeDict(s).endCell();return{address:this.config.smartAccountMasterAddress,payload:a.toBoc().toString("base64"),amount:t}}createAddPublicKeyTx(e,t){const s=r.beginCell().storeUint(571231257,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}createRemovePublicKeyTx(e,t){const s=r.beginCell().storeUint(1948765727,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}createRemoveAllKeysExceptCurrentTx(e,t){const s=r.beginCell().storeUint(1604127040,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}}function B(c){return BigInt("0x"+c.toString("hex"))}const y=10n,u=1022n,h=8191n;class m{constructor(){n(this,"shift");n(this,"bitnumber");this.shift=0n,this.bitnumber=0n}static fromShiftAndBitNumber(e,t){const s=new m;if(s.shift=e,s.shift<0)throw new Error("invalid shift");if(s.shift>h)throw new Error("invalid shift");if(s.bitnumber=t,s.bitnumber<0)throw new Error("invalid bitnumber");if(s.bitnumber>u)throw new Error("invalid bitnumber");return s}getNext(){let e=this.bitnumber+1n,t=this.shift;if(t===h&&e>u-1n)throw new Error("Overload");if(e>u&&(e=0n,t+=1n,t>h))throw new Error("Overload");return m.fromShiftAndBitNumber(t,e)}hasNext(){return!(this.bitnumber>=u-1n&&this.shift===h)}getShift(){return this.shift}getBitNumber(){return this.bitnumber}getQueryId(){return(this.shift<<y)+this.bitnumber}static fromQueryId(e){const t=e>>y,s=e&1023n;return this.fromShiftAndBitNumber(t,s)}static fromSeqno(e){const t=e/1023n,s=e%1023n;return this.fromShiftAndBitNumber(t,s)}toSeqno(){return this.bitnumber+this.shift*1023n}}function E(){const c=Math.floor(Date.now()/1e3)-30;return BigInt(c%(1<<23))}const I=new Error("Session is expired or never provided");i.HighloadQueryId=m,i.IframeAdapter=o,i.SessionExpiredOrNotProvided=I,i.StormWallet=M,i.calculateSmartAccountAddressFromStateInit=g,i.queryId=E,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
1
+ (function(i,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@ton/ton")):typeof define=="function"&&define.amd?define(["exports","@ton/ton"],r):(i=typeof globalThis<"u"?globalThis:i||self,r(i.WalletCore={},i.ton))})(this,function(i,r){"use strict";var R=Object.defineProperty;var U=(i,r,o)=>r in i?R(i,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):i[r]=o;var c=(i,r,o)=>U(i,typeof r!="symbol"?r+"":r,o);class o{constructor(e){c(this,"host");c(this,"timeouts");c(this,"waitingForResponse",new Map);c(this,"iframe");c(this,"state","not-ready");c(this,"i18nInit");c(this,"handleMessage",e=>{if(typeof e.data!="object"||e.data===null||!("id"in e.data)||!("status"in e.data)||typeof e.data.id!="string"||typeof e.data.status!="string")return;const t=this.waitingForResponse.get(e.data.id);if(!t)return;const[s,n]=t;this.waitingForResponse.delete(e.data.id),e.data.status==="success"?"payload"in e.data?s(e.data.payload):s(void 0):"error"in e.data?n(new Error(e.data.error)):n(new Error("Unknown error"))});this.host=e.host,this.timeouts={init:1e3,connect:6e4,disconnect:1e3,sign:1e3,createTransfer:1e3,activeSessions:1e3,getPublicKey:1e3,resetDevice:1e3,...e.timeouts},this.i18nInit=e.i18n}async sendMessage(e,t){var d,f;const s=Math.random().toString(),n=Promise.race([new Promise((b,l)=>{this.waitingForResponse.set(s,[b,l])}),new Promise((b,l)=>{setTimeout(()=>{l(new Error("Response timeout"))},t)})]);return(f=(d=this.iframe)==null?void 0:d.contentWindow)==null||f.postMessage({id:s,payload:e},this.host),n}setupMessageListener(){window.addEventListener("message",this.handleMessage)}async attachIframe(e){this.iframe=document.createElement("iframe"),this.iframe.src=this.host,this.iframe.frameBorder="0",this.iframe.width="100%",this.iframe.height="100%";const t=new Promise((s,n)=>{var d,f;(d=this.iframe)==null||d.addEventListener("load",async()=>{s()},{once:!0}),(f=this.iframe)==null||f.addEventListener("error",b=>{n(b)},{once:!0})});return e.appendChild(this.iframe),t}async init(e){if(this.state==="not-ready"){this.state="initializing",console.log("[embedded-wallet] attaching to root",e),await this.attachIframe(e),console.log("[embedded-wallet] iframe attached"),this.setupMessageListener(),console.log("[embedded-wallet] sending ping");let t=5;for(;t>0;)try{await this.sendMessage({type:"ping",i18n:this.i18nInit},this.timeouts.init);break}catch{if(t--,t===0)throw this.destroy(),new Error("[embedded-wallet] ping retries exceeded. Init failed");console.warn("[embedded-wallet] failed to ping attached iframe retrying")}console.log("[embedded-wallet] pong received"),this.state="ready"}}destroy(){var e;this.state="not-ready",window.removeEventListener("message",this.handleMessage);for(const[t,s]of this.waitingForResponse.values())s(new Error("Iframe disconnected"));this.waitingForResponse.clear(),(e=this.iframe)==null||e.remove()}async connect(e){return this.sendMessage({type:"connect",address:e},this.timeouts.connect)}async getPublicKey(e){return this.sendMessage({type:"get-public-key",address:e},this.timeouts.getPublicKey)}async resetDevice(e){return this.sendMessage({type:"reset-device",address:e},this.timeouts.resetDevice)}async signMessage(e,t){return this.sendMessage({type:"sign",address:e,message:t},this.timeouts.sign)}async signMessages(e,t){return this.sendMessage({type:"sign-many",address:e,messages:t},this.timeouts.sign)}async createTransfer(e,t){return this.sendMessage({type:"create-transfer",address:e,data:t},this.timeouts.createTransfer)}async getActiveSessions(){return this.sendMessage({type:"active-sessions"},this.timeouts.activeSessions)}async disconnect(e){return this.sendMessage({type:"disconnect",address:e},this.timeouts.disconnect)}}const w=a=>a.loadBuffer(32),A=a=>r.beginCell().storeBuffer(a,32).endCell(),S={serialize:(a,e)=>{e.storeBuilder(A(a).asBuilder())},parse:a=>w(a)},v="b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f8434104035a741b5b",M=0;function g(a,e){const t=r.Cell.fromHex(v),s=r.beginCell().storeUint(M,8).storeAddress(e).storeAddress(a).storeDict(null).endCell();return r.contractAddress(0,{code:t,data:s})}class C{constructor(e,t){this.tonClient=e,this.config=t}calculateSmartAccountAddressFromStateInit(e){return g(e,r.Address.parse(this.config.smartAccountMasterAddress))}async getSmartAccountAddress(e){return(await this.tonClient.runMethod(r.Address.parse(this.config.smartAccountMasterAddress),"get_nft_address_by_index",[{type:"int",value:BigInt(`0x${r.Address.parse(e).hash.toString("hex")}`)}])).stack.readAddress()}async getSmartAccountData(e){const t=r.Address.parse(e);try{const n=(await this.tonClient.runMethod(t,"get_storage_data")).stack,d=n.readBigNumber(),f=n.readAddress(),b=n.readAddress(),l=n.readCellOpt();let p=[];l&&(p=r.Dictionary.loadDirect(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell(),l).keys());const D=n.readAddress(),N=r.Dictionary.loadDirect(r.Dictionary.Keys.Uint(8),S,n.readCell()).values(),T=n.readNumber();return{index:d,collectionAddress:f,masterWalletAddress:b,publicKeys:p,adminAddress:D,backendPublicKeys:N,seqno:T}}catch(s){if(s.message.endsWith("-13"))return null;throw s}}createDeploySmartAccountTx(e,t){const s=r.Dictionary.empty(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell());s.set(B(e),r.beginCell().endCell());const n=r.beginCell().storeUint(1983912421,32).storeUint(0,64).storeDict(s).endCell();return{address:this.config.smartAccountMasterAddress,payload:n.toBoc().toString("base64"),amount:t}}createAddPublicKeyTx(e,t){const s=r.beginCell().storeUint(571231257,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}createRemovePublicKeyTx(e,t){const s=r.beginCell().storeUint(1948765727,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}createRemoveAllKeysExceptCurrentTx(e,t){const s=r.beginCell().storeUint(1604127040,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}}function B(a){return BigInt("0x"+a.toString("hex"))}const y=10n,u=1022n,h=8191n;class m{constructor(){c(this,"shift");c(this,"bitnumber");this.shift=0n,this.bitnumber=0n}static fromShiftAndBitNumber(e,t){const s=new m;if(s.shift=e,s.shift<0)throw new Error("invalid shift");if(s.shift>h)throw new Error("invalid shift");if(s.bitnumber=t,s.bitnumber<0)throw new Error("invalid bitnumber");if(s.bitnumber>u)throw new Error("invalid bitnumber");return s}getNext(){let e=this.bitnumber+1n,t=this.shift;if(t===h&&e>u-1n)throw new Error("Overload");if(e>u&&(e=0n,t+=1n,t>h))throw new Error("Overload");return m.fromShiftAndBitNumber(t,e)}hasNext(){return!(this.bitnumber>=u-1n&&this.shift===h)}getShift(){return this.shift}getBitNumber(){return this.bitnumber}getQueryId(){return(this.shift<<y)+this.bitnumber}static fromQueryId(e){const t=e>>y,s=e&1023n;return this.fromShiftAndBitNumber(t,s)}static fromSeqno(e){const t=e/1023n,s=e%1023n;return this.fromShiftAndBitNumber(t,s)}toSeqno(){return this.bitnumber+this.shift*1023n}}function E(){const a=Math.floor(Date.now()/1e3)-30;return BigInt(a%(1<<23))}const I=new Error("Session is expired or never provided");i.HighloadQueryId=m,i.IframeAdapter=o,i.SessionExpiredOrNotProvided=I,i.StormWallet=C,i.calculateSmartAccountAddressFromStateInit=g,i.queryId=E,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=wallet-core.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-core.umd.cjs","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n this.iframe = document.createElement('iframe');\n this.iframe.src = this.host;\n this.iframe.frameBorder = '0';\n this.iframe.width='100%'\n this.iframe.height='100%'\n const p = new Promise<void>((resolve, reject) => {\n this.iframe?.addEventListener('load', async () => {\n resolve();\n }, { once: true });\n this.iframe?.addEventListener('error', (e) => {\n reject(e);\n }, { once: true });\n });\n root.appendChild(this.iframe);\n return p;\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state === 'not-ready') {\n this.state = 'initializing';\n console.log('[embedded-wallet] attaching to root', root);\n await this.attachIframe(root);\n console.log('[embedded-wallet] iframe attached');\n this.setupMessageListener();\n console.log('[embedded-wallet] sending ping');\n let retryCount = 5;\n while (retryCount > 0) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n break;\n } catch (e) {\n retryCount--;\n if (retryCount === 0) {\n this.destroy();\n throw new Error('[embedded-wallet] ping retries exceeded. Init failed');\n } else {\n console.warn('[embedded-wallet] failed to ping attached iframe retrying');\n }\n }\n }\n console.log('[embedded-wallet] pong received');\n this.state = 'ready';\n }\n }\n\n destroy(): void {\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n for (const [_, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n this.iframe?.remove();\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nconst ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f8434104035a741b5b\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address): Address {\n const code = Cell.fromHex(ORDINARY_SMART_ACCOUNT_CODE);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress));\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","p","e","retryCount","masterAddress","address","message","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":"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"}
1
+ {"version":3,"file":"wallet-core.umd.cjs","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n this.iframe = document.createElement('iframe');\n this.iframe.src = this.host;\n this.iframe.frameBorder = '0';\n this.iframe.width='100%'\n this.iframe.height='100%'\n const p = new Promise<void>((resolve, reject) => {\n this.iframe?.addEventListener('load', async () => {\n resolve();\n }, { once: true });\n this.iframe?.addEventListener('error', (e) => {\n reject(e);\n }, { once: true });\n });\n root.appendChild(this.iframe);\n return p;\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state === 'not-ready') {\n this.state = 'initializing';\n console.log('[embedded-wallet] attaching to root', root);\n await this.attachIframe(root);\n console.log('[embedded-wallet] iframe attached');\n this.setupMessageListener();\n console.log('[embedded-wallet] sending ping');\n let retryCount = 5;\n while (retryCount > 0) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n break;\n } catch (e) {\n retryCount--;\n if (retryCount === 0) {\n this.destroy();\n throw new Error('[embedded-wallet] ping retries exceeded. Init failed');\n } else {\n console.warn('[embedded-wallet] failed to ping attached iframe retrying');\n }\n }\n }\n console.log('[embedded-wallet] pong received');\n this.state = 'ready';\n }\n }\n\n destroy(): void {\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n for (const [_, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n this.iframe?.remove();\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async signMessages(masterAddress: string, messages: SignRequest[]): Promise<{ hashes: Uint8Array[]; signatures: Uint8Array[]; }> {\n return this.sendMessage({ type: 'sign-many', address: masterAddress, messages }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nconst ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000beda81c3e461dc2beb1cc8c77929e81afd8ff8aa116c7b3b7040ad695c359094c801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e68203dbd98209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f8434104035a741b5b\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address): Address {\n const code = Cell.fromHex(ORDINARY_SMART_ACCOUNT_CODE);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress));\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","p","e","retryCount","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storm-trade/wallet-core",
3
- "version": "1.0.21",
3
+ "version": "1.0.22",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "files": [