@storm-trade/wallet-core 1.0.27 → 1.0.29

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.
@@ -60,6 +60,8 @@ export declare class IframeAdapter {
60
60
  private iframe?;
61
61
  private state;
62
62
  private readonly i18nInit?;
63
+ private iframeVersion?;
64
+ private iframeError?;
63
65
  constructor(props: IframeAdapterProps);
64
66
  private sendMessage;
65
67
  private setupMessageListener;
@@ -78,6 +80,7 @@ export declare class IframeAdapter {
78
80
  createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse>;
79
81
  getActiveSessions(): Promise<ActiveSessionsResponse>;
80
82
  disconnect(masterAddress: string): Promise<void>;
83
+ getIframeVersion(): string | undefined;
81
84
  }
82
85
 
83
86
  export declare type IframeAdapterProps = {
@@ -1,9 +1,9 @@
1
1
  var M = Object.defineProperty;
2
- var E = (n, e, t) => e in n ? M(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
- var c = (n, e, t) => E(n, typeof e != "symbol" ? e + "" : e, t);
4
- import { beginCell as d, Address as l, Dictionary as o, toNano as g, Cell as B, contractAddress as C } from "@ton/ton";
5
- const u = "[embedded-wallet v1.0.27]";
6
- class K {
2
+ var B = (n, e, t) => e in n ? M(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
+ var c = (n, e, t) => B(n, typeof e != "symbol" ? e + "" : e, t);
4
+ import { beginCell as b, Address as h, Dictionary as d, toNano as g, Cell as C, contractAddress as I } from "@ton/ton";
5
+ const y = "1.0.29", o = `[embedded-wallet v${y}]`;
6
+ class k {
7
7
  constructor(e) {
8
8
  c(this, "host");
9
9
  c(this, "timeouts");
@@ -11,8 +11,25 @@ class K {
11
11
  c(this, "iframe");
12
12
  c(this, "state", "not-ready");
13
13
  c(this, "i18nInit");
14
+ c(this, "iframeVersion");
15
+ c(this, "iframeError");
14
16
  c(this, "handleMessage", (e) => {
15
- 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")
17
+ if (typeof e.data != "object" || e.data === null)
18
+ return;
19
+ if ("type" in e.data && e.data.type === "iframe-ready") {
20
+ const a = e.data;
21
+ if (this.iframeVersion = a.version, console.log(o, `iframe ready, version: ${a.version}`), a.version) {
22
+ const i = a.version.split(".")[0], f = y.split(".")[0];
23
+ i !== f && console.warn(o, `Version mismatch: wallet-core=${y}, iframe-host=${a.version}`);
24
+ }
25
+ return;
26
+ }
27
+ if ("type" in e.data && e.data.type === "iframe-error") {
28
+ const a = e.data;
29
+ console.error(o, "iframe error:", a.error, a.stack), this.iframeError = new Error(a.error || "Unknown iframe error");
30
+ return;
31
+ }
32
+ if (!("id" in e.data) || !("status" in e.data) || typeof e.data.id != "string" || typeof e.data.status != "string")
16
33
  return;
17
34
  const t = this.waitingForResponse.get(e.data.id);
18
35
  if (!t)
@@ -35,12 +52,12 @@ class K {
35
52
  async sendMessage(e, t) {
36
53
  var a, i;
37
54
  const s = Math.random().toString(), r = Promise.race([
38
- new Promise((f, b) => {
39
- this.waitingForResponse.set(s, [f, b]);
55
+ new Promise((f, u) => {
56
+ this.waitingForResponse.set(s, [f, u]);
40
57
  }),
41
- new Promise((f, b) => {
58
+ new Promise((f, u) => {
42
59
  setTimeout(() => {
43
- b(new Error("Response timeout"));
60
+ u(new Error("Response timeout"));
44
61
  }, t);
45
62
  })
46
63
  ]);
@@ -63,16 +80,23 @@ class K {
63
80
  if (this.state === "not-ready") {
64
81
  this.state = "initializing";
65
82
  try {
66
- console.log(u, "attaching to root", e), await this.attachIframe(e), console.log(u, "iframe attached"), this.setupMessageListener(), console.log(u, "sending ping");
67
- let t;
68
- for (let s = 1; s <= 5; s++)
83
+ this.setupMessageListener(), console.log(o, "attaching to root", e);
84
+ const t = performance.now();
85
+ if (await this.attachIframe(e), console.log(o, `iframe attached in ${Math.round(performance.now() - t)}ms`), this.iframeError)
86
+ throw this.iframeError;
87
+ console.log(o, "sending ping");
88
+ let s;
89
+ for (let r = 1; r <= 5; r++) {
90
+ if (this.iframeError)
91
+ throw this.iframeError;
69
92
  try {
70
- await this.sendMessage({ type: "ping", i18n: this.i18nInit }, this.timeouts.init), console.log(u, "pong received"), this.state = "ready";
93
+ await this.sendMessage({ type: "ping", i18n: this.i18nInit }, this.timeouts.init), console.log(o, "pong received"), this.state = "ready";
71
94
  return;
72
- } catch (r) {
73
- t = r instanceof Error ? r : new Error(String(r)), console.warn(u, `ping attempt ${s}/5 failed:`, t.message), s < 5 && await new Promise((a) => setTimeout(a, 200));
95
+ } catch (a) {
96
+ s = a instanceof Error ? a : new Error(String(a)), console.warn(o, `ping attempt ${r}/5 failed:`, s.message), r < 5 && await new Promise((i) => setTimeout(i, 200));
74
97
  }
75
- throw new Error(`${u} ping retries exceeded: ${t == null ? void 0 : t.message}`);
98
+ }
99
+ throw new Error(`${o} ping retries exceeded: ${s == null ? void 0 : s.message}`);
76
100
  } catch (t) {
77
101
  throw this.destroy(), t;
78
102
  }
@@ -115,51 +139,54 @@ class K {
115
139
  async disconnect(e) {
116
140
  return this.sendMessage({ type: "disconnect", address: e }, this.timeouts.disconnect);
117
141
  }
142
+ getIframeVersion() {
143
+ return this.iframeVersion;
144
+ }
118
145
  }
119
- const I = (n) => n.loadBuffer(32), P = (n) => d().storeBuffer(n, 32).endCell(), R = {
146
+ const P = (n) => n.loadBuffer(32), R = (n) => b().storeBuffer(n, 32).endCell(), T = {
120
147
  serialize: (n, e) => {
121
- e.storeBuilder(P(n).asBuilder());
148
+ e.storeBuilder(R(n).asBuilder());
122
149
  },
123
- parse: (n) => I(n)
124
- }, T = "b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f", _ = 0;
150
+ parse: (n) => P(n)
151
+ }, U = "b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f", _ = 0;
125
152
  function x(n, e, t) {
126
- const s = B.fromHex(t), r = d().storeUint(_, 8).storeAddress(e).storeAddress(n).storeDict(null).endCell();
127
- return C(0, { code: s, data: r });
153
+ const s = C.fromHex(t), r = b().storeUint(_, 8).storeAddress(e).storeAddress(n).storeDict(null).endCell();
154
+ return I(0, { code: s, data: r });
128
155
  }
129
156
  class F {
130
- constructor(e, t, s = T) {
157
+ constructor(e, t, s = U) {
131
158
  this.tonClient = e, this.config = t, this.ordinarySmartAccountCode = s;
132
159
  }
133
160
  calculateSmartAccountAddressFromStateInit(e) {
134
- return x(e, l.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);
161
+ return x(e, h.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);
135
162
  }
136
163
  async getSmartAccountAddress(e) {
137
- return (await this.tonClient.runMethod(l.parse(this.config.smartAccountMasterAddress), "get_nft_address_by_index", [
164
+ return (await this.tonClient.runMethod(h.parse(this.config.smartAccountMasterAddress), "get_nft_address_by_index", [
138
165
  {
139
166
  type: "int",
140
- value: BigInt(`0x${l.parse(e).hash.toString("hex")}`)
167
+ value: BigInt(`0x${h.parse(e).hash.toString("hex")}`)
141
168
  }
142
169
  ])).stack.readAddress();
143
170
  }
144
171
  async getSmartAccountData(e) {
145
- const t = l.parse(e);
172
+ const t = h.parse(e);
146
173
  try {
147
- const r = (await this.tonClient.runMethod(t, "get_storage_data")).stack, a = r.readBigNumber(), i = r.readAddress(), f = r.readAddress(), b = r.readCellOpt();
148
- let p = [];
149
- b && (p = o.loadDirect(o.Keys.BigUint(256), o.Values.Cell(), b).keys());
150
- const A = r.readAddress(), S = o.loadDirect(
151
- o.Keys.Uint(8),
152
- R,
174
+ const r = (await this.tonClient.runMethod(t, "get_storage_data")).stack, a = r.readBigNumber(), i = r.readAddress(), f = r.readAddress(), u = r.readCellOpt();
175
+ let w = [];
176
+ u && (w = d.loadDirect(d.Keys.BigUint(256), d.Values.Cell(), u).keys());
177
+ const v = r.readAddress(), E = d.loadDirect(
178
+ d.Keys.Uint(8),
179
+ T,
153
180
  r.readCell()
154
- ).values(), v = r.readNumber();
181
+ ).values(), S = r.readNumber();
155
182
  return {
156
183
  index: a,
157
184
  collectionAddress: i,
158
185
  masterWalletAddress: f,
159
- publicKeys: p,
160
- adminAddress: A,
161
- backendPublicKeys: S,
162
- seqno: v
186
+ publicKeys: w,
187
+ adminAddress: v,
188
+ backendPublicKeys: E,
189
+ seqno: S
163
190
  };
164
191
  } catch (s) {
165
192
  if (s.message.endsWith("-13"))
@@ -168,9 +195,9 @@ class F {
168
195
  }
169
196
  }
170
197
  createDeploySmartAccountTx(e, t) {
171
- const s = o.empty(o.Keys.BigUint(256), o.Values.Cell());
172
- s.set(U(e), d().endCell());
173
- const r = d().storeUint(1983912421, 32).storeUint(0, 64).storeDict(s).endCell();
198
+ const s = d.empty(d.Keys.BigUint(256), d.Values.Cell());
199
+ s.set(N(e), b().endCell());
200
+ const r = b().storeUint(1983912421, 32).storeUint(0, 64).storeDict(s).endCell();
174
201
  return {
175
202
  address: this.config.smartAccountMasterAddress,
176
203
  payload: r.toBoc().toString("base64"),
@@ -178,7 +205,7 @@ class F {
178
205
  };
179
206
  }
180
207
  createAddPublicKeyTx(e, t) {
181
- const s = d().storeUint(571231257, 32).storeUint(0, 64).storeBuffer(t).endCell();
208
+ const s = b().storeUint(571231257, 32).storeUint(0, 64).storeBuffer(t).endCell();
182
209
  return {
183
210
  address: e,
184
211
  payload: s.toBoc().toString("base64"),
@@ -186,7 +213,7 @@ class F {
186
213
  };
187
214
  }
188
215
  createRemovePublicKeyTx(e, t) {
189
- const s = d().storeUint(1948765727, 32).storeUint(0, 64).storeBuffer(t).endCell();
216
+ const s = b().storeUint(1948765727, 32).storeUint(0, 64).storeBuffer(t).endCell();
190
217
  return {
191
218
  address: e,
192
219
  payload: s.toBoc().toString("base64"),
@@ -194,7 +221,7 @@ class F {
194
221
  };
195
222
  }
196
223
  createRemoveAllKeysExceptCurrentTx(e, t) {
197
- const s = d().storeUint(1604127040, 32).storeUint(0, 64).storeBuffer(t).endCell();
224
+ const s = b().storeUint(1604127040, 32).storeUint(0, 64).storeBuffer(t).endCell();
198
225
  return {
199
226
  address: e,
200
227
  payload: s.toBoc().toString("base64"),
@@ -203,11 +230,11 @@ class F {
203
230
  };
204
231
  }
205
232
  }
206
- function U(n) {
233
+ function N(n) {
207
234
  return BigInt("0x" + n.toString("hex"));
208
235
  }
209
- const w = 10n, h = 1022n, m = 8191n;
210
- class y {
236
+ const A = 10n, l = 1022n, m = 8191n;
237
+ class p {
211
238
  // [0 .. 1022]
212
239
  constructor() {
213
240
  c(this, "shift");
@@ -216,23 +243,23 @@ class y {
216
243
  this.shift = 0n, this.bitnumber = 0n;
217
244
  }
218
245
  static fromShiftAndBitNumber(e, t) {
219
- const s = new y();
246
+ const s = new p();
220
247
  if (s.shift = e, s.shift < 0) throw new Error("invalid shift");
221
248
  if (s.shift > m) throw new Error("invalid shift");
222
249
  if (s.bitnumber = t, s.bitnumber < 0) throw new Error("invalid bitnumber");
223
- if (s.bitnumber > h) throw new Error("invalid bitnumber");
250
+ if (s.bitnumber > l) throw new Error("invalid bitnumber");
224
251
  return s;
225
252
  }
226
253
  getNext() {
227
254
  let e = this.bitnumber + 1n, t = this.shift;
228
- if (t === m && e > h - 1n)
255
+ if (t === m && e > l - 1n)
229
256
  throw new Error("Overload");
230
- if (e > h && (e = 0n, t += 1n, t > m))
257
+ if (e > l && (e = 0n, t += 1n, t > m))
231
258
  throw new Error("Overload");
232
- return y.fromShiftAndBitNumber(t, e);
259
+ return p.fromShiftAndBitNumber(t, e);
233
260
  }
234
261
  hasNext() {
235
- return !(this.bitnumber >= h - 1n && this.shift === m);
262
+ return !(this.bitnumber >= l - 1n && this.shift === m);
236
263
  }
237
264
  getShift() {
238
265
  return this.shift;
@@ -241,10 +268,10 @@ class y {
241
268
  return this.bitnumber;
242
269
  }
243
270
  getQueryId() {
244
- return (this.shift << w) + this.bitnumber;
271
+ return (this.shift << A) + this.bitnumber;
245
272
  }
246
273
  static fromQueryId(e) {
247
- const t = e >> w, s = e & 1023n;
274
+ const t = e >> A, s = e & 1023n;
248
275
  return this.fromShiftAndBitNumber(t, s);
249
276
  }
250
277
  static fromSeqno(e) {
@@ -258,17 +285,17 @@ class y {
258
285
  return this.bitnumber + this.shift * 1023n;
259
286
  }
260
287
  }
261
- function k() {
288
+ function O() {
262
289
  const n = Math.floor(Date.now() / 1e3) - 30;
263
290
  return BigInt(n % (1 << 23));
264
291
  }
265
- const O = new Error("Session is expired or never provided");
292
+ const V = new Error("Session is expired or never provided");
266
293
  export {
267
- y as HighloadQueryId,
268
- K as IframeAdapter,
269
- O as SessionExpiredOrNotProvided,
294
+ p as HighloadQueryId,
295
+ k as IframeAdapter,
296
+ V as SessionExpiredOrNotProvided,
270
297
  F as StormWallet,
271
298
  x as calculateSmartAccountAddressFromStateInit,
272
- k as queryId
299
+ O as queryId
273
300
  };
274
301
  //# sourceMappingURL=wallet-core.js.map
@@ -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\nconst LOG_PREFIX = `[embedded-wallet v${__VERSION__}]`;\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 const iframe = document.createElement('iframe');\n iframe.src = this.host;\n iframe.frameBorder = '0';\n iframe.width = '100%';\n iframe.height = '100%';\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n iframe.addEventListener('load', () => resolve(), { once: true });\n iframe.addEventListener('error', (e) => reject(e), { once: true });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Iframe load timeout')), this.timeouts.init);\n });\n\n root.appendChild(iframe);\n this.iframe = iframe;\n return Promise.race([loadPromise, timeoutPromise]);\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state !== 'not-ready') {\n return;\n }\n\n this.state = 'initializing';\n\n try {\n console.log(LOG_PREFIX, 'attaching to root', root);\n await this.attachIframe(root);\n console.log(LOG_PREFIX, 'iframe attached');\n this.setupMessageListener();\n console.log(LOG_PREFIX, 'sending ping');\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= 5; attempt++) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n console.log(LOG_PREFIX, 'pong received');\n this.state = 'ready';\n return;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n console.warn(LOG_PREFIX, `ping attempt ${attempt}/5 failed:`, lastError.message);\n if (attempt < 5) {\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n }\n }\n\n throw new Error(`${LOG_PREFIX} ping retries exceeded: ${lastError?.message}`);\n } catch (e) {\n this.destroy();\n throw e;\n }\n }\n\n destroy(): void {\n if (this.state === 'not-ready') {\n return;\n }\n\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n\n for (const [, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n\n this.iframe?.remove();\n this.iframe = undefined;\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\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\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, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\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":["LOG_PREFIX","IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","iframe","loadPromise","e","timeoutPromise","lastError","attempt","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","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/version.ts","../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["declare const __VERSION__: string;\n\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev';\n","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';\nimport { VERSION } from '../version';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nconst LOG_PREFIX = `[embedded-wallet v${VERSION}]`;\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 private iframeVersion?: string;\n private iframeError?: Error;\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\n // Handle iframe-ready message\n if ('type' in e.data && e.data.type === 'iframe-ready') {\n const data = e.data as { type: string; version?: string; timestamp?: number };\n this.iframeVersion = data.version;\n console.log(LOG_PREFIX, `iframe ready, version: ${data.version}`);\n\n // Check version compatibility\n if (data.version) {\n const iframeMajor = data.version.split('.')[0];\n const coreMajor = VERSION.split('.')[0];\n if (iframeMajor !== coreMajor) {\n console.warn(LOG_PREFIX, `Version mismatch: wallet-core=${VERSION}, iframe-host=${data.version}`);\n }\n }\n return;\n }\n\n // Handle iframe-error message\n if ('type' in e.data && e.data.type === 'iframe-error') {\n const data = e.data as { type: string; error?: string; stack?: string };\n console.error(LOG_PREFIX, 'iframe error:', data.error, data.stack);\n this.iframeError = new Error(data.error || 'Unknown iframe error');\n return;\n }\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 private async attachIframe(root: HTMLElement): Promise<void> {\n const iframe = document.createElement('iframe');\n iframe.src = this.host;\n iframe.frameBorder = '0';\n iframe.width = '100%';\n iframe.height = '100%';\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n iframe.addEventListener('load', () => resolve(), { once: true });\n iframe.addEventListener('error', (e) => reject(e), { once: true });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Iframe load timeout')), this.timeouts.init);\n });\n\n root.appendChild(iframe);\n this.iframe = iframe;\n return Promise.race([loadPromise, timeoutPromise]);\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state !== 'not-ready') {\n return;\n }\n\n this.state = 'initializing';\n\n try {\n // Setup message listener before attaching iframe to catch early messages\n this.setupMessageListener();\n\n console.log(LOG_PREFIX, 'attaching to root', root);\n const attachStart = performance.now();\n await this.attachIframe(root);\n console.log(LOG_PREFIX, `iframe attached in ${Math.round(performance.now() - attachStart)}ms`);\n\n // Check if iframe reported an error during initialization\n if (this.iframeError) {\n throw this.iframeError;\n }\n\n console.log(LOG_PREFIX, 'sending ping');\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= 5; attempt++) {\n // Check for iframe errors between attempts\n if (this.iframeError) {\n throw this.iframeError;\n }\n\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n console.log(LOG_PREFIX, 'pong received');\n this.state = 'ready';\n return;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n console.warn(LOG_PREFIX, `ping attempt ${attempt}/5 failed:`, lastError.message);\n if (attempt < 5) {\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n }\n }\n\n throw new Error(`${LOG_PREFIX} ping retries exceeded: ${lastError?.message}`);\n } catch (e) {\n this.destroy();\n throw e;\n }\n }\n\n destroy(): void {\n if (this.state === 'not-ready') {\n return;\n }\n\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n\n for (const [, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n\n this.iframe?.remove();\n this.iframe = undefined;\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 getIframeVersion(): string | undefined {\n return this.iframeVersion;\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\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\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, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\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":["VERSION","LOG_PREFIX","IframeAdapter","props","__publicField","data","iframeMajor","coreMajor","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","iframe","loadPromise","e","timeoutPromise","attachStart","lastError","attempt","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","code","Cell","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 _=(i,r,a)=>r in i?R(i,r,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[r]=a;var d=(i,r,a)=>_(i,typeof r!="symbol"?r+"":r,a);const a="[embedded-wallet v1.0.27]";class w{constructor(e){d(this,"host");d(this,"timeouts");d(this,"waitingForResponse",new Map);d(this,"iframe");d(this,"state","not-ready");d(this,"i18nInit");d(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 o,f;const s=Math.random().toString(),n=Promise.race([new Promise((b,u)=>{this.waitingForResponse.set(s,[b,u])}),new Promise((b,u)=>{setTimeout(()=>{u(new Error("Response timeout"))},t)})]);return(f=(o=this.iframe)==null?void 0:o.contentWindow)==null||f.postMessage({id:s,payload:e},this.host),n}setupMessageListener(){window.addEventListener("message",this.handleMessage)}async attachIframe(e){const t=document.createElement("iframe");t.src=this.host,t.frameBorder="0",t.width="100%",t.height="100%";const s=new Promise((o,f)=>{t.addEventListener("load",()=>o(),{once:!0}),t.addEventListener("error",b=>f(b),{once:!0})}),n=new Promise((o,f)=>{setTimeout(()=>f(new Error("Iframe load timeout")),this.timeouts.init)});return e.appendChild(t),this.iframe=t,Promise.race([s,n])}async init(e){if(this.state==="not-ready"){this.state="initializing";try{console.log(a,"attaching to root",e),await this.attachIframe(e),console.log(a,"iframe attached"),this.setupMessageListener(),console.log(a,"sending ping");let t;for(let s=1;s<=5;s++)try{await this.sendMessage({type:"ping",i18n:this.i18nInit},this.timeouts.init),console.log(a,"pong received"),this.state="ready";return}catch(n){t=n instanceof Error?n:new Error(String(n)),console.warn(a,`ping attempt ${s}/5 failed:`,t.message),s<5&&await new Promise(o=>setTimeout(o,200))}throw new Error(`${a} ping retries exceeded: ${t==null?void 0:t.message}`)}catch(t){throw this.destroy(),t}}}destroy(){var e;if(this.state!=="not-ready"){this.state="not-ready",window.removeEventListener("message",this.handleMessage);for(const[,t]of this.waitingForResponse.values())t(new Error("Iframe disconnected"));this.waitingForResponse.clear(),(e=this.iframe)==null||e.remove(),this.iframe=void 0}}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 A=c=>c.loadBuffer(32),S=c=>r.beginCell().storeBuffer(c,32).endCell(),v={serialize:(c,e)=>{e.storeBuilder(S(c).asBuilder())},parse:c=>A(c)},C="b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f",M=0;function g(c,e,t){const s=r.Cell.fromHex(t),n=r.beginCell().storeUint(M,8).storeAddress(e).storeAddress(c).storeDict(null).endCell();return r.contractAddress(0,{code:s,data:n})}class E{constructor(e,t,s=C){this.tonClient=e,this.config=t,this.ordinarySmartAccountCode=s}calculateSmartAccountAddressFromStateInit(e){return g(e,r.Address.parse(this.config.smartAccountMasterAddress),this.ordinarySmartAccountCode)}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,o=n.readBigNumber(),f=n.readAddress(),b=n.readAddress(),u=n.readCellOpt();let p=[];u&&(p=r.Dictionary.loadDirect(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell(),u).keys());const P=n.readAddress(),T=r.Dictionary.loadDirect(r.Dictionary.Keys.Uint(8),v,n.readCell()).values(),N=n.readNumber();return{index:o,collectionAddress:f,masterWalletAddress:b,publicKeys:p,adminAddress:P,backendPublicKeys:T,seqno:N}}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(c){return BigInt("0x"+c.toString("hex"))}const y=10n,l=1022n,h=8191n;class m{constructor(){d(this,"shift");d(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>l)throw new Error("invalid bitnumber");return s}getNext(){let e=this.bitnumber+1n,t=this.shift;if(t===h&&e>l-1n)throw new Error("Overload");if(e>l&&(e=0n,t+=1n,t>h))throw new Error("Overload");return m.fromShiftAndBitNumber(t,e)}hasNext(){return!(this.bitnumber>=l-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 I(){const c=Math.floor(Date.now()/1e3)-30;return BigInt(c%(1<<23))}const D=new Error("Session is expired or never provided");i.HighloadQueryId=m,i.IframeAdapter=w,i.SessionExpiredOrNotProvided=D,i.StormWallet=E,i.calculateSmartAccountAddressFromStateInit=g,i.queryId=I,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
1
+ (function(a,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@ton/ton")):typeof define=="function"&&define.amd?define(["exports","@ton/ton"],r):(a=typeof globalThis<"u"?globalThis:a||self,r(a.WalletCore={},a.ton))})(this,function(a,r){"use strict";var U=Object.defineProperty;var _=(a,r,b)=>r in a?U(a,r,{enumerable:!0,configurable:!0,writable:!0,value:b}):a[r]=b;var d=(a,r,b)=>_(a,typeof r!="symbol"?r+"":r,b);const b="1.0.29",f=`[embedded-wallet v${b}]`;class A{constructor(e){d(this,"host");d(this,"timeouts");d(this,"waitingForResponse",new Map);d(this,"iframe");d(this,"state","not-ready");d(this,"i18nInit");d(this,"iframeVersion");d(this,"iframeError");d(this,"handleMessage",e=>{if(typeof e.data!="object"||e.data===null)return;if("type"in e.data&&e.data.type==="iframe-ready"){const n=e.data;if(this.iframeVersion=n.version,console.log(f,`iframe ready, version: ${n.version}`),n.version){const o=n.version.split(".")[0],u=b.split(".")[0];o!==u&&console.warn(f,`Version mismatch: wallet-core=${b}, iframe-host=${n.version}`)}return}if("type"in e.data&&e.data.type==="iframe-error"){const n=e.data;console.error(f,"iframe error:",n.error,n.stack),this.iframeError=new Error(n.error||"Unknown iframe error");return}if(!("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,i]=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?i(new Error(e.data.error)):i(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 n,o;const s=Math.random().toString(),i=Promise.race([new Promise((u,l)=>{this.waitingForResponse.set(s,[u,l])}),new Promise((u,l)=>{setTimeout(()=>{l(new Error("Response timeout"))},t)})]);return(o=(n=this.iframe)==null?void 0:n.contentWindow)==null||o.postMessage({id:s,payload:e},this.host),i}setupMessageListener(){window.addEventListener("message",this.handleMessage)}async attachIframe(e){const t=document.createElement("iframe");t.src=this.host,t.frameBorder="0",t.width="100%",t.height="100%";const s=new Promise((n,o)=>{t.addEventListener("load",()=>n(),{once:!0}),t.addEventListener("error",u=>o(u),{once:!0})}),i=new Promise((n,o)=>{setTimeout(()=>o(new Error("Iframe load timeout")),this.timeouts.init)});return e.appendChild(t),this.iframe=t,Promise.race([s,i])}async init(e){if(this.state==="not-ready"){this.state="initializing";try{this.setupMessageListener(),console.log(f,"attaching to root",e);const t=performance.now();if(await this.attachIframe(e),console.log(f,`iframe attached in ${Math.round(performance.now()-t)}ms`),this.iframeError)throw this.iframeError;console.log(f,"sending ping");let s;for(let i=1;i<=5;i++){if(this.iframeError)throw this.iframeError;try{await this.sendMessage({type:"ping",i18n:this.i18nInit},this.timeouts.init),console.log(f,"pong received"),this.state="ready";return}catch(n){s=n instanceof Error?n:new Error(String(n)),console.warn(f,`ping attempt ${i}/5 failed:`,s.message),i<5&&await new Promise(o=>setTimeout(o,200))}}throw new Error(`${f} ping retries exceeded: ${s==null?void 0:s.message}`)}catch(t){throw this.destroy(),t}}}destroy(){var e;if(this.state!=="not-ready"){this.state="not-ready",window.removeEventListener("message",this.handleMessage);for(const[,t]of this.waitingForResponse.values())t(new Error("Iframe disconnected"));this.waitingForResponse.clear(),(e=this.iframe)==null||e.remove(),this.iframe=void 0}}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)}getIframeVersion(){return this.iframeVersion}}const S=c=>c.loadBuffer(32),v=c=>r.beginCell().storeBuffer(c,32).endCell(),E={serialize:(c,e)=>{e.storeBuilder(v(c).asBuilder())},parse:c=>S(c)},M="b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f",C=0;function y(c,e,t){const s=r.Cell.fromHex(t),i=r.beginCell().storeUint(C,8).storeAddress(e).storeAddress(c).storeDict(null).endCell();return r.contractAddress(0,{code:s,data:i})}class B{constructor(e,t,s=M){this.tonClient=e,this.config=t,this.ordinarySmartAccountCode=s}calculateSmartAccountAddressFromStateInit(e){return y(e,r.Address.parse(this.config.smartAccountMasterAddress),this.ordinarySmartAccountCode)}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 i=(await this.tonClient.runMethod(t,"get_storage_data")).stack,n=i.readBigNumber(),o=i.readAddress(),u=i.readAddress(),l=i.readCellOpt();let w=[];l&&(w=r.Dictionary.loadDirect(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell(),l).keys());const T=i.readAddress(),N=r.Dictionary.loadDirect(r.Dictionary.Keys.Uint(8),E,i.readCell()).values(),R=i.readNumber();return{index:n,collectionAddress:o,masterWalletAddress:u,publicKeys:w,adminAddress:T,backendPublicKeys:N,seqno:R}}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(I(e),r.beginCell().endCell());const i=r.beginCell().storeUint(1983912421,32).storeUint(0,64).storeDict(s).endCell();return{address:this.config.smartAccountMasterAddress,payload:i.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 I(c){return BigInt("0x"+c.toString("hex"))}const p=10n,h=1022n,m=8191n;class g{constructor(){d(this,"shift");d(this,"bitnumber");this.shift=0n,this.bitnumber=0n}static fromShiftAndBitNumber(e,t){const s=new g;if(s.shift=e,s.shift<0)throw new Error("invalid shift");if(s.shift>m)throw new Error("invalid shift");if(s.bitnumber=t,s.bitnumber<0)throw new Error("invalid bitnumber");if(s.bitnumber>h)throw new Error("invalid bitnumber");return s}getNext(){let e=this.bitnumber+1n,t=this.shift;if(t===m&&e>h-1n)throw new Error("Overload");if(e>h&&(e=0n,t+=1n,t>m))throw new Error("Overload");return g.fromShiftAndBitNumber(t,e)}hasNext(){return!(this.bitnumber>=h-1n&&this.shift===m)}getShift(){return this.shift}getBitNumber(){return this.bitnumber}getQueryId(){return(this.shift<<p)+this.bitnumber}static fromQueryId(e){const t=e>>p,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 D(){const c=Math.floor(Date.now()/1e3)-30;return BigInt(c%(1<<23))}const P=new Error("Session is expired or never provided");a.HighloadQueryId=g,a.IframeAdapter=A,a.SessionExpiredOrNotProvided=P,a.StormWallet=B,a.calculateSmartAccountAddressFromStateInit=y,a.queryId=D,Object.defineProperty(a,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\nconst LOG_PREFIX = `[embedded-wallet v${__VERSION__}]`;\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 const iframe = document.createElement('iframe');\n iframe.src = this.host;\n iframe.frameBorder = '0';\n iframe.width = '100%';\n iframe.height = '100%';\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n iframe.addEventListener('load', () => resolve(), { once: true });\n iframe.addEventListener('error', (e) => reject(e), { once: true });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Iframe load timeout')), this.timeouts.init);\n });\n\n root.appendChild(iframe);\n this.iframe = iframe;\n return Promise.race([loadPromise, timeoutPromise]);\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state !== 'not-ready') {\n return;\n }\n\n this.state = 'initializing';\n\n try {\n console.log(LOG_PREFIX, 'attaching to root', root);\n await this.attachIframe(root);\n console.log(LOG_PREFIX, 'iframe attached');\n this.setupMessageListener();\n console.log(LOG_PREFIX, 'sending ping');\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= 5; attempt++) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n console.log(LOG_PREFIX, 'pong received');\n this.state = 'ready';\n return;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n console.warn(LOG_PREFIX, `ping attempt ${attempt}/5 failed:`, lastError.message);\n if (attempt < 5) {\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n }\n }\n\n throw new Error(`${LOG_PREFIX} ping retries exceeded: ${lastError?.message}`);\n } catch (e) {\n this.destroy();\n throw e;\n }\n }\n\n destroy(): void {\n if (this.state === 'not-ready') {\n return;\n }\n\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n\n for (const [, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n\n this.iframe?.remove();\n this.iframe = undefined;\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\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\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, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\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":["LOG_PREFIX","IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","iframe","loadPromise","e","timeoutPromise","lastError","attempt","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","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/version.ts","../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["declare const __VERSION__: string;\n\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev';\n","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';\nimport { VERSION } from '../version';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nconst LOG_PREFIX = `[embedded-wallet v${VERSION}]`;\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 private iframeVersion?: string;\n private iframeError?: Error;\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\n // Handle iframe-ready message\n if ('type' in e.data && e.data.type === 'iframe-ready') {\n const data = e.data as { type: string; version?: string; timestamp?: number };\n this.iframeVersion = data.version;\n console.log(LOG_PREFIX, `iframe ready, version: ${data.version}`);\n\n // Check version compatibility\n if (data.version) {\n const iframeMajor = data.version.split('.')[0];\n const coreMajor = VERSION.split('.')[0];\n if (iframeMajor !== coreMajor) {\n console.warn(LOG_PREFIX, `Version mismatch: wallet-core=${VERSION}, iframe-host=${data.version}`);\n }\n }\n return;\n }\n\n // Handle iframe-error message\n if ('type' in e.data && e.data.type === 'iframe-error') {\n const data = e.data as { type: string; error?: string; stack?: string };\n console.error(LOG_PREFIX, 'iframe error:', data.error, data.stack);\n this.iframeError = new Error(data.error || 'Unknown iframe error');\n return;\n }\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 private async attachIframe(root: HTMLElement): Promise<void> {\n const iframe = document.createElement('iframe');\n iframe.src = this.host;\n iframe.frameBorder = '0';\n iframe.width = '100%';\n iframe.height = '100%';\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n iframe.addEventListener('load', () => resolve(), { once: true });\n iframe.addEventListener('error', (e) => reject(e), { once: true });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Iframe load timeout')), this.timeouts.init);\n });\n\n root.appendChild(iframe);\n this.iframe = iframe;\n return Promise.race([loadPromise, timeoutPromise]);\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state !== 'not-ready') {\n return;\n }\n\n this.state = 'initializing';\n\n try {\n // Setup message listener before attaching iframe to catch early messages\n this.setupMessageListener();\n\n console.log(LOG_PREFIX, 'attaching to root', root);\n const attachStart = performance.now();\n await this.attachIframe(root);\n console.log(LOG_PREFIX, `iframe attached in ${Math.round(performance.now() - attachStart)}ms`);\n\n // Check if iframe reported an error during initialization\n if (this.iframeError) {\n throw this.iframeError;\n }\n\n console.log(LOG_PREFIX, 'sending ping');\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= 5; attempt++) {\n // Check for iframe errors between attempts\n if (this.iframeError) {\n throw this.iframeError;\n }\n\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n console.log(LOG_PREFIX, 'pong received');\n this.state = 'ready';\n return;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n console.warn(LOG_PREFIX, `ping attempt ${attempt}/5 failed:`, lastError.message);\n if (attempt < 5) {\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n }\n }\n\n throw new Error(`${LOG_PREFIX} ping retries exceeded: ${lastError?.message}`);\n } catch (e) {\n this.destroy();\n throw e;\n }\n }\n\n destroy(): void {\n if (this.state === 'not-ready') {\n return;\n }\n\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n\n for (const [, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n\n this.iframe?.remove();\n this.iframe = undefined;\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 getIframeVersion(): string | undefined {\n return this.iframeVersion;\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\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\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, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\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":["VERSION","LOG_PREFIX","IframeAdapter","props","__publicField","data","iframeMajor","coreMajor","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","iframe","loadPromise","e","timeoutPromise","attachStart","lastError","attempt","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","code","Cell","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.27",
3
+ "version": "1.0.29",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "files": [