@gurge/sdk 0.3.25 → 0.3.26

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.
Files changed (91) hide show
  1. package/common/src/crypto/babyJub.cjs +1 -1
  2. package/common/src/crypto/babyJub.mjs +12 -6
  3. package/common/src/crypto/eddsa.cjs +1 -1
  4. package/common/src/crypto/eddsa.mjs +12 -6
  5. package/common/src/crypto/poseidon.cjs +1 -1
  6. package/common/src/crypto/poseidon.mjs +12 -6
  7. package/common/src/crypto/preProcessing.cjs +1 -1
  8. package/common/src/crypto/preProcessing.mjs +23 -13
  9. package/common/src/crypto/rnCryptoBridge.cjs +1 -0
  10. package/common/src/crypto/rnCryptoBridge.d.ts +8 -0
  11. package/common/src/crypto/rnCryptoBridge.mjs +10 -0
  12. package/common/src/crypto/rnUtxoCrypto.cjs +1 -0
  13. package/common/src/crypto/rnUtxoCrypto.d.ts +14 -0
  14. package/common/src/crypto/rnUtxoCrypto.mjs +40 -0
  15. package/common/src/data-structures/Hinkal/hinkalClaimUtxo.cjs +1 -1
  16. package/common/src/data-structures/Hinkal/hinkalClaimUtxo.mjs +1 -1
  17. package/common/src/data-structures/Hinkal/hinkalDeposit.cjs +1 -1
  18. package/common/src/data-structures/Hinkal/hinkalDeposit.mjs +1 -1
  19. package/common/src/data-structures/Hinkal/hinkalPrivateWallet.cjs +1 -1
  20. package/common/src/data-structures/Hinkal/hinkalPrivateWallet.mjs +1 -1
  21. package/common/src/data-structures/Hinkal/hinkalSolanaSwap.cjs +1 -1
  22. package/common/src/data-structures/Hinkal/hinkalSolanaSwap.mjs +1 -1
  23. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
  24. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +1 -1
  25. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
  26. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +1 -1
  27. package/common/src/data-structures/Hinkal/hinkalSwap.cjs +1 -1
  28. package/common/src/data-structures/Hinkal/hinkalSwap.mjs +1 -1
  29. package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
  30. package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +1 -1
  31. package/common/src/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
  32. package/common/src/data-structures/Hinkal/hinkalWithdraw.mjs +1 -1
  33. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
  34. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +2 -2
  35. package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.cjs +1 -1
  36. package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.mjs +1 -1
  37. package/common/src/data-structures/utxo/Utxo.cjs +1 -1
  38. package/common/src/data-structures/utxo/Utxo.d.ts +1 -0
  39. package/common/src/data-structures/utxo/Utxo.mjs +19 -6
  40. package/common/src/functions/index.cjs +1 -1
  41. package/common/src/functions/index.mjs +0 -1
  42. package/common/src/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
  43. package/common/src/functions/pre-transaction/buildCommitmentValidationData.mjs +86 -54
  44. package/common/src/functions/pre-transaction/outputUtxoProcessing.cjs +1 -1
  45. package/common/src/functions/pre-transaction/outputUtxoProcessing.d.ts +2 -2
  46. package/common/src/functions/pre-transaction/outputUtxoProcessing.mjs +28 -27
  47. package/common/src/functions/utils/bigint-math.utils.cjs +1 -1
  48. package/common/src/functions/utils/bigint-math.utils.mjs +1 -12
  49. package/common/src/functions/utils/index.cjs +1 -1
  50. package/common/src/functions/utils/index.mjs +1 -1
  51. package/common/src/functions/utils/utxoPadding.utils.cjs +1 -0
  52. package/common/src/functions/utils/utxoPadding.utils.d.ts +2 -0
  53. package/common/src/functions/utils/utxoPadding.utils.mjs +14 -0
  54. package/common/src/functions/web3/events/getInputUtxoAndBalance.cjs +1 -1
  55. package/common/src/functions/web3/events/getInputUtxoAndBalance.mjs +14 -11
  56. package/common/src/functions/web3/events/getShieldedBalance.cjs +1 -1
  57. package/common/src/functions/web3/events/getShieldedBalance.mjs +64 -64
  58. package/common/src/webworker/cryptoWorker/cryptoWorker.types.cjs +1 -0
  59. package/common/src/webworker/cryptoWorker/cryptoWorker.types.d.ts +49 -0
  60. package/common/src/webworker/cryptoWorker/cryptoWorker.types.mjs +6 -0
  61. package/common/src/webworker/cryptoWorker/cryptoWorkerLauncher.d.ts +1 -0
  62. package/common/src/webworker/cryptoWorker/cryptoWorkerLogic.d.ts +2 -0
  63. package/common/src/webworker/logError-DFS-H2t0.js +2 -0
  64. package/common/src/webworker/package.json +1 -1
  65. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  66. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  67. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  68. package/common/src/webworker/viteWorkerURL.constant.cjs +4 -3
  69. package/common/src/webworker/viteWorkerURL.constant.d.ts +1 -0
  70. package/common/src/webworker/viteWorkerURL.constant.mjs +4 -3
  71. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  72. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  73. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  74. package/package.json +1 -1
  75. package/react-native/HinkalWebViewWorker.cjs +63 -3
  76. package/react-native/HinkalWebViewWorker.mjs +134 -51
  77. package/react-native/bridge/RnWebViewCryptoBridge.cjs +1 -0
  78. package/react-native/bridge/RnWebViewCryptoBridge.d.ts +7 -0
  79. package/react-native/bridge/RnWebViewCryptoBridge.mjs +49 -0
  80. package/react-native/shims/circomlibjs-hinkal-fork.js +2 -2
  81. package/react-native/shims/circomlibjs.js +2 -2
  82. package/react-native/workerCDNUrls.cjs +1 -1
  83. package/react-native/workerCDNUrls.d.ts +1 -0
  84. package/react-native/workerCDNUrls.mjs +2 -2
  85. package/sdk/package.json.cjs +1 -1
  86. package/sdk/package.json.mjs +1 -1
  87. package/common/src/crypto/BabyJubRN.cjs +0 -1
  88. package/common/src/crypto/BabyJubRN.mjs +0 -33
  89. package/common/src/crypto/EddsaRN.cjs +0 -1
  90. package/common/src/crypto/EddsaRN.mjs +0 -41
  91. package/common/src/webworker/logError-DCl9T86l.js +0 -2
@@ -1,20 +1,27 @@
1
- import { logRnDeltaEvent as e } from "../common/src/functions/utils/hinkalTiming.utils.mjs";
2
- import { WorkerFactory as t } from "../common/src/webworker/workerFactory.mjs";
3
- import { WORKER_CDN_URLS as n } from "./workerCDNUrls.mjs";
4
- import { bigIntReplacer as r, reviveBigInts as i } from "./bridge/serialization.utils.mjs";
5
- import { HinkalRNWorker as a } from "./bridge/HinkalRNWorker.mjs";
6
- import { useCallback as o, useEffect as s, useRef as c } from "react";
7
- import { DeviceEventEmitter as l, StyleSheet as u, View as d } from "react-native";
8
- import { WebView as f } from "react-native-webview";
9
- import { jsx as p } from "react/jsx-runtime";
1
+ import { RnCryptoBridgeFactory as e } from "../common/src/crypto/rnCryptoBridge.mjs";
2
+ import { logRnDeltaEvent as t } from "../common/src/functions/utils/hinkalTiming.utils.mjs";
3
+ import { WorkerFactory as n } from "../common/src/webworker/workerFactory.mjs";
4
+ import { CRYPTO_ENGINE_CDN_URL as r, WORKER_CDN_URLS as i } from "./workerCDNUrls.mjs";
5
+ import { bigIntReplacer as a, reviveBigInts as o } from "./bridge/serialization.utils.mjs";
6
+ import { HinkalRNWorker as s } from "./bridge/HinkalRNWorker.mjs";
7
+ import { RnWebViewCryptoBridge as c } from "./bridge/RnWebViewCryptoBridge.mjs";
8
+ import { useCallback as l, useEffect as u, useRef as d } from "react";
9
+ import { DeviceEventEmitter as f, StyleSheet as p, View as m } from "react-native";
10
+ import { WebView as h } from "react-native-webview";
11
+ import { jsx as g } from "react/jsx-runtime";
10
12
  //#region libs/shared/sdk/src/react-native/HinkalWebViewWorker.tsx
11
- var m = `${new URL(Object.values(n)[0]).origin}/`;
12
- t.rnWorkerFactory = (e) => new a(e);
13
- var h = `
13
+ var _ = `${new URL(Object.values(i)[0]).origin}/`;
14
+ n.rnWorkerFactory = (e) => new s(e);
15
+ var v = `
14
16
  if (!window.__hinkalPageBoot) (function(){
15
17
  window.__hinkalPageBoot = true;
16
- var URLS = ${JSON.stringify(n)};
18
+ var URLS = ${JSON.stringify(i)};
19
+ var CRYPTO_URL = ${JSON.stringify(r)};
17
20
  var BLOBS = {};
21
+ var cryptoWorker = null;
22
+ var cryptoReady = false;
23
+ var cryptoInitPromise = null;
24
+ var cryptoPending = {};
18
25
 
19
26
  function replacer(_key, value){
20
27
  if (typeof value === 'bigint') return { __bigint: value.toString() };
@@ -57,6 +64,61 @@ if (!window.__hinkalPageBoot) (function(){
57
64
  try { return new Worker(url, { type: 'module' }); } catch(_){ return new Worker(url); }
58
65
  }
59
66
 
67
+ function postCrypto(payload){ post(Object.assign({ channel: 'crypto' }, payload)); }
68
+
69
+ async function ensureCryptoWorker(){
70
+ if (cryptoReady) return cryptoWorker;
71
+ if (cryptoInitPromise) return cryptoInitPromise;
72
+ cryptoInitPromise = new Promise(function(resolve, reject){
73
+ blobUrl(CRYPTO_URL).then(function(url){
74
+ cryptoWorker = spawn(url);
75
+ cryptoWorker.onmessage = function(event){
76
+ var data = event && event.data;
77
+ if (!data || typeof data !== 'object') return;
78
+ if (data.type === 'ready') {
79
+ cryptoReady = true;
80
+ resolve(cryptoWorker);
81
+ return;
82
+ }
83
+ if (data.requestId && cryptoPending[data.requestId]) {
84
+ cryptoPending[data.requestId](data);
85
+ delete cryptoPending[data.requestId];
86
+ }
87
+ };
88
+ cryptoWorker.onerror = function(event){ reject(new Error(describe(event))); };
89
+ cryptoWorker.postMessage({ op: 'init' });
90
+ }).catch(reject);
91
+ });
92
+ return cryptoInitPromise;
93
+ }
94
+
95
+ function cryptoCall(requestId, op, payload){
96
+ ensureCryptoWorker().then(function(worker){
97
+ cryptoPending[requestId] = function(response){
98
+ if (response.type === 'result') postCrypto({ requestId: requestId, type: 'RESULT', data: response.data });
99
+ else postCrypto({ requestId: requestId, type: 'ERROR', error: response.error || 'crypto worker error' });
100
+ };
101
+ worker.postMessage({ requestId: requestId, op: op, payload: payload });
102
+ }).catch(function(error){
103
+ postCrypto({ requestId: requestId, type: 'ERROR', error: describe(error) });
104
+ });
105
+ }
106
+
107
+ window.handleCryptoMessage = function(envelope){
108
+ if (!envelope || typeof envelope !== 'object') return;
109
+ if (envelope.type === 'INIT') {
110
+ ensureCryptoWorker().then(function(){
111
+ postCrypto({ type: 'CRYPTO_READY', requestId: envelope.requestId });
112
+ }).catch(function(error){
113
+ postCrypto({ type: 'ERROR', requestId: envelope.requestId, error: describe(error) });
114
+ });
115
+ return;
116
+ }
117
+ if (envelope.type === 'CALL') {
118
+ cryptoCall(envelope.requestId, envelope.op, revive(envelope.payload));
119
+ }
120
+ };
121
+
60
122
  window.handleMessage = async function(envelope){
61
123
  var requestId = envelope && envelope.requestId;
62
124
  var variant = envelope && envelope.variant;
@@ -106,89 +168,110 @@ if (!window.__hinkalPageBoot) (function(){
106
168
 
107
169
  post({ type: 'READY' });
108
170
  })();
109
- true;`, g = `<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${h}<\/script></body></html>`, _ = u.create({ hiddenHost: {
171
+ true;`, y = `<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${v}<\/script></body></html>`, b = p.create({ hiddenHost: {
110
172
  position: "absolute",
111
173
  height: 1,
112
174
  width: 1,
113
175
  left: -9999,
114
176
  top: -9999,
115
177
  opacity: 0
116
- } }), v = () => {
117
- let t = c(null), n = c({
178
+ } }), x = () => {
179
+ let n = d(null), r = d({
118
180
  ready: !1,
119
181
  queue: []
120
- }), a = o((e, n, i) => {
121
- let a;
182
+ }), i = l((e, t, r) => {
183
+ let i;
122
184
  try {
123
- a = JSON.stringify({
185
+ i = JSON.stringify({
124
186
  requestId: e,
125
- variant: n,
126
- message: i
127
- }, r);
187
+ variant: t,
188
+ message: r
189
+ }, a);
128
190
  } catch (t) {
129
- l.emit("FROM_WEBVIEW_WORKER", {
191
+ f.emit("FROM_WEBVIEW_WORKER", {
130
192
  requestId: e,
131
193
  type: "ERROR",
132
194
  error: `serialize failed: ${t?.message ?? t}`
133
195
  });
134
196
  return;
135
197
  }
136
- t.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${a}); true;`);
198
+ n.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${i}); true;`);
137
199
  }, []);
138
- s(() => {
139
- let e = l.addListener("TO_WEBVIEW_WORKER", (e) => {
200
+ u(() => (e.bridge = new c(), () => {
201
+ e.bridge = null;
202
+ }), []), u(() => {
203
+ let e = f.addListener("TO_WEBVIEW_WORKER", (e) => {
140
204
  let t = {
141
205
  requestId: e?.__requestId ?? "",
142
206
  variant: e?.variant ?? "",
143
207
  message: e?.message
144
208
  };
145
- n.current.ready ? a(t.requestId, t.variant, t.message) : n.current.queue.push(t);
209
+ r.current.ready ? i(t.requestId, t.variant, t.message) : r.current.queue.push(t);
210
+ });
211
+ return () => e.remove();
212
+ }, [i]), u(() => {
213
+ let e = f.addListener("TO_WEBVIEW_CRYPTO", (e) => {
214
+ let t;
215
+ try {
216
+ t = JSON.stringify(e, a);
217
+ } catch (e) {
218
+ f.emit("FROM_WEBVIEW_CRYPTO", {
219
+ type: "ERROR",
220
+ error: `serialize failed: ${e?.message ?? e}`
221
+ });
222
+ return;
223
+ }
224
+ n.current?.injectJavaScript(`window.handleCryptoMessage && window.handleCryptoMessage(${t}); true;`);
146
225
  });
147
226
  return () => e.remove();
148
- }, [a]);
149
- let u = o((t) => {
150
- let r;
227
+ }, []);
228
+ let s = l((e) => {
229
+ let n;
151
230
  try {
152
- r = i(JSON.parse(t.nativeEvent.data));
231
+ n = o(JSON.parse(e.nativeEvent.data));
153
232
  } catch (e) {
154
- l.emit("FROM_WEBVIEW_WORKER", {
233
+ f.emit("FROM_WEBVIEW_WORKER", {
155
234
  type: "ERROR",
156
235
  error: e?.message ?? "parse error"
157
236
  });
158
237
  return;
159
238
  }
160
- if (r?.type === "READY") {
161
- n.current.ready = !0;
162
- let e = n.current.queue;
163
- n.current.queue = [], e.forEach(({ requestId: e, variant: t, message: n }) => a(e, t, n));
239
+ if (n?.type === "READY") {
240
+ r.current.ready = !0;
241
+ let e = r.current.queue;
242
+ r.current.queue = [], e.forEach(({ requestId: e, variant: t, message: n }) => i(e, t, n));
164
243
  return;
165
244
  }
166
- if (r?.type === "TIMING") {
167
- e(`webView.${r.variant}`, r.phase, {
168
- requestId: r.requestId,
169
- ms: r.ms
245
+ if (n?.type === "TIMING") {
246
+ t(`webView.${n.variant}`, n.phase, {
247
+ requestId: n.requestId,
248
+ ms: n.ms
170
249
  });
171
250
  return;
172
251
  }
173
- l.emit("FROM_WEBVIEW_WORKER", r);
174
- }, [a]);
175
- return /* @__PURE__ */ p(d, {
252
+ if (n?.channel === "crypto") {
253
+ f.emit("FROM_WEBVIEW_CRYPTO", n);
254
+ return;
255
+ }
256
+ f.emit("FROM_WEBVIEW_WORKER", n);
257
+ }, [i]);
258
+ return /* @__PURE__ */ g(m, {
176
259
  pointerEvents: "none",
177
- style: _.hiddenHost,
178
- children: /* @__PURE__ */ p(f, {
179
- ref: t,
260
+ style: b.hiddenHost,
261
+ children: /* @__PURE__ */ g(h, {
262
+ ref: n,
180
263
  source: {
181
- html: g,
182
- baseUrl: m
264
+ html: y,
265
+ baseUrl: _
183
266
  },
184
267
  originWhitelist: ["*"],
185
268
  javaScriptEnabled: !0,
186
269
  domStorageEnabled: !0,
187
270
  androidLayerType: "hardware",
188
- onMessage: u,
189
- onLoad: () => t.current?.injectJavaScript(h)
271
+ onMessage: s,
272
+ onLoad: () => n.current?.injectJavaScript(v)
190
273
  })
191
274
  });
192
275
  };
193
276
  //#endregion
194
- export { v as default };
277
+ export { x as default };
@@ -0,0 +1 @@
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../common/src/functions/utils/hinkalTiming.utils.cjs`),t=require(`./serialization.utils.cjs`);let n=require(`react-native`);var r=class{initPromise=null;ready=!1;init(){return this.ready?Promise.resolve():(this.initPromise||=new Promise((r,i)=>{let a=t.nextRequestId(),o=setTimeout(()=>{s.remove(),i(Error(`RN crypto engine init timed out`))},12e4),s=n.DeviceEventEmitter.addListener(`FROM_WEBVIEW_CRYPTO`,t=>{if(t?.type===`CRYPTO_READY`){clearTimeout(o),s.remove(),this.ready=!0,e.logRnDeltaEvent(`rnBridge.crypto`,`ready`,{requestId:a}),r();return}t?.requestId===a&&t?.type===`ERROR`&&(clearTimeout(o),s.remove(),i(Error(t.error??`RN crypto engine init failed`)))});e.logRnDeltaEvent(`rnBridge.crypto`,`init-sent`,{requestId:a}),n.DeviceEventEmitter.emit(`TO_WEBVIEW_CRYPTO`,{type:`INIT`,requestId:a})}),this.initPromise)}call(r,i){return new Promise((a,o)=>{let s=t.nextRequestId(),c=Date.now(),l=n.DeviceEventEmitter.addListener(`FROM_WEBVIEW_CRYPTO`,t=>{if(!(!t||t.requestId!==s)){if(l.remove(),t.type===`RESULT`){e.logRnDeltaEvent(`rnBridge.crypto`,r,{requestId:s,ms:Date.now()-c}),a(t.data);return}o(Error(t.error??`RN crypto call failed: ${r}`))}});n.DeviceEventEmitter.emit(`TO_WEBVIEW_CRYPTO`,{type:`CALL`,requestId:s,op:r,payload:i})})}};exports.RnWebViewCryptoBridge=r;
@@ -0,0 +1,7 @@
1
+ import { IRnCryptoBridge } from '../../common/src/crypto/rnCryptoBridge';
2
+ export declare class RnWebViewCryptoBridge implements IRnCryptoBridge {
3
+ private initPromise;
4
+ private ready;
5
+ init(): Promise<void>;
6
+ call<T>(op: string, payload?: unknown): Promise<T>;
7
+ }
@@ -0,0 +1,49 @@
1
+ import { logRnDeltaEvent as e } from "../../common/src/functions/utils/hinkalTiming.utils.mjs";
2
+ import { nextRequestId as t } from "./serialization.utils.mjs";
3
+ import { DeviceEventEmitter as n } from "react-native";
4
+ //#region libs/shared/sdk/src/react-native/bridge/RnWebViewCryptoBridge.ts
5
+ var r = class {
6
+ initPromise = null;
7
+ ready = !1;
8
+ init() {
9
+ return this.ready ? Promise.resolve() : (this.initPromise ||= new Promise((r, i) => {
10
+ let a = t(), o = setTimeout(() => {
11
+ s.remove(), i(/* @__PURE__ */ Error("RN crypto engine init timed out"));
12
+ }, 12e4), s = n.addListener("FROM_WEBVIEW_CRYPTO", (t) => {
13
+ if (t?.type === "CRYPTO_READY") {
14
+ clearTimeout(o), s.remove(), this.ready = !0, e("rnBridge.crypto", "ready", { requestId: a }), r();
15
+ return;
16
+ }
17
+ t?.requestId === a && t?.type === "ERROR" && (clearTimeout(o), s.remove(), i(Error(t.error ?? "RN crypto engine init failed")));
18
+ });
19
+ e("rnBridge.crypto", "init-sent", { requestId: a }), n.emit("TO_WEBVIEW_CRYPTO", {
20
+ type: "INIT",
21
+ requestId: a
22
+ });
23
+ }), this.initPromise);
24
+ }
25
+ call(r, i) {
26
+ return new Promise((a, o) => {
27
+ let s = t(), c = Date.now(), l = n.addListener("FROM_WEBVIEW_CRYPTO", (t) => {
28
+ if (!(!t || t.requestId !== s)) {
29
+ if (l.remove(), t.type === "RESULT") {
30
+ e("rnBridge.crypto", r, {
31
+ requestId: s,
32
+ ms: Date.now() - c
33
+ }), a(t.data);
34
+ return;
35
+ }
36
+ o(Error(t.error ?? `RN crypto call failed: ${r}`));
37
+ }
38
+ });
39
+ n.emit("TO_WEBVIEW_CRYPTO", {
40
+ type: "CALL",
41
+ requestId: s,
42
+ op: r,
43
+ payload: i
44
+ });
45
+ });
46
+ }
47
+ };
48
+ //#endregion
49
+ export { r as RnWebViewCryptoBridge };
@@ -1,8 +1,8 @@
1
1
  function notSupported(name) {
2
2
  return () => {
3
3
  throw new Error(
4
- `[hinkal-rn] circomlibjs-hinkal-fork.${name} is not available on React Native. ` +
5
- 'The SDK uses poseidon-lite + an inline BabyJubJub instead.',
4
+ `[hinkal-rn] circomlibjs-hinkal-fork.${name} is not available on React Native main thread. ` +
5
+ 'Heavy crypto runs in the WebView worker via @hinkal/sdk.',
6
6
  );
7
7
  };
8
8
  }
@@ -1,8 +1,8 @@
1
1
  function notSupported(name) {
2
2
  return () => {
3
3
  throw new Error(
4
- `[hinkal-rn] circomlibjs.${name} is not available on React Native. ` +
5
- 'The SDK uses poseidon-lite + an inline BabyJubJub instead.',
4
+ `[hinkal-rn] circomlibjs.${name} is not available on React Native main thread. ` +
5
+ 'Heavy crypto runs in the WebView worker via @hinkal/sdk.',
6
6
  );
7
7
  };
8
8
  }
@@ -1 +1 @@
1
- const e=require(`../common/src/webworker/worker.registry.cjs`),t=require(`../sdk/package.json.cjs`);var n=`https://storage.googleapis.com/hinkal-workers-staging`,r=(()=>{let e=String(t.default.version).split(`.`).map(Number);if(e.length!==3||e.some(e=>Number.isNaN(e)))throw Error(`Invalid sdk package.json version: ${t.default.version}`);return e[2]+=1,e.join(`.`)})(),i={[e.WorkerVariant.ZKProof]:`${n}/${r}/zkProofWorkerLauncher.js`,[e.WorkerVariant.SnarkJS]:`${n}/${r}/snarkjsWorkerLauncher.js`,[e.WorkerVariant.UTXO]:`${n}/${r}/utxoWorkerLauncher.js`};exports.WORKER_CDN_URLS=i;
1
+ const e=require(`../common/src/webworker/worker.registry.cjs`),t=require(`../sdk/package.json.cjs`);var n=`https://storage.googleapis.com/hinkal-workers-staging`,r=(()=>{let e=String(t.default.version).split(`.`).map(Number);if(e.length!==3||e.some(e=>Number.isNaN(e)))throw Error(`Invalid sdk package.json version: ${t.default.version}`);return e[2]+=1,e.join(`.`)})(),i={[e.WorkerVariant.ZKProof]:`${n}/${r}/zkProofWorkerLauncher.js`,[e.WorkerVariant.SnarkJS]:`${n}/${r}/snarkjsWorkerLauncher.js`,[e.WorkerVariant.UTXO]:`${n}/${r}/utxoWorkerLauncher.js`},a=`${n}/${r}/cryptoWorkerLauncher.js`;exports.CRYPTO_ENGINE_CDN_URL=a,exports.WORKER_CDN_URLS=i;
@@ -1,2 +1,3 @@
1
1
  import { WorkerVariant } from '../common/src/webworker/worker.registry';
2
2
  export declare const WORKER_CDN_URLS: Record<WorkerVariant, string>;
3
+ export declare const CRYPTO_ENGINE_CDN_URL: string;
@@ -9,6 +9,6 @@ var n = "https://storage.googleapis.com/hinkal-workers-staging", r = (() => {
9
9
  [e.ZKProof]: `${n}/${r}/zkProofWorkerLauncher.js`,
10
10
  [e.SnarkJS]: `${n}/${r}/snarkjsWorkerLauncher.js`,
11
11
  [e.UTXO]: `${n}/${r}/utxoWorkerLauncher.js`
12
- };
12
+ }, a = `${n}/${r}/cryptoWorkerLauncher.js`;
13
13
  //#endregion
14
- export { i as WORKER_CDN_URLS };
14
+ export { a as CRYPTO_ENGINE_CDN_URL, i as WORKER_CDN_URLS };
@@ -1 +1 @@
1
- var e={name:`@gurge/sdk`,version:`0.3.24`,homepage:`hinkal.io`,author:{name:`Hinkal Protocol`},keywords:[`blockchain`,`privacy`,`zero-knowledge`,`stealth addresses`],exports:{".":{types:`./index.d.ts`,"react-native":`./index.cjs`,import:`./index.mjs`,default:`./index.cjs`},"./providers/WagmiProviderAdapter":{types:`./providers/WagmiProviderAdapter.d.ts`,"react-native":`./providers/WagmiProviderAdapter.cjs`,import:`./providers/WagmiProviderAdapter.mjs`,default:`./providers/WagmiProviderAdapter.cjs`},"./providers/EthersProviderAdapter":{types:`./providers/EthersProviderAdapter.d.ts`,"react-native":`./providers/EthersProviderAdapter.cjs`,import:`./providers/EthersProviderAdapter.mjs`,default:`./providers/EthersProviderAdapter.cjs`},"./providers/TronProviderAdapter":{types:`./providers/TronProviderAdapter.d.ts`,"react-native":`./providers/TronProviderAdapter.cjs`,import:`./providers/TronProviderAdapter.mjs`,default:`./providers/TronProviderAdapter.cjs`},"./providers/SolanaProviderAdapter":{types:`./providers/SolanaProviderAdapter.d.ts`,"react-native":`./providers/SolanaProviderAdapter.cjs`,import:`./providers/SolanaProviderAdapter.mjs`,default:`./providers/SolanaProviderAdapter.cjs`},"./providers/prepareEthersHinkal":{types:`./providers/prepareEthersHinkal.d.ts`,"react-native":`./providers/prepareEthersHinkal.cjs`,import:`./providers/prepareEthersHinkal.mjs`,default:`./providers/prepareEthersHinkal.cjs`},"./providers/prepareWagmiHinkal":{types:`./providers/prepareWagmiHinkal.d.ts`,"react-native":`./providers/prepareWagmiHinkal.cjs`,import:`./providers/prepareWagmiHinkal.mjs`,default:`./providers/prepareWagmiHinkal.cjs`},"./providers/prepareTronHinkal":{types:`./providers/prepareTronHinkal.d.ts`,"react-native":`./providers/prepareTronHinkal.cjs`,import:`./providers/prepareTronHinkal.mjs`,default:`./providers/prepareTronHinkal.cjs`},"./providers/prepareSolanaHinkal":{types:`./providers/prepareSolanaHinkal.d.ts`,"react-native":`./providers/prepareSolanaHinkal.cjs`,import:`./providers/prepareSolanaHinkal.mjs`,default:`./providers/prepareSolanaHinkal.cjs`},"./react-native/HinkalWebViewWorker":{types:`./react-native/HinkalWebViewWorker.d.ts`,"react-native":`./react-native/HinkalWebViewWorker.cjs`,import:`./react-native/HinkalWebViewWorker.mjs`,default:`./react-native/HinkalWebViewWorker.cjs`},"./react-native/metro-config":`./react-native/metro-config.js`,"./react-native/shims/*":`./react-native/shims/*`},types:`./index.d.ts`,scripts:{prebuild:`nx prebuild:workers`,build:`nx build`,lint:`nx lint`,test:`nx test`},devDependencies:{nx:`22.6.4`,vite:`^8.0.4`,"vite-plugin-dts":`^4.5.4`,"vite-tsconfig-paths":`^6.1.1`},dependencies:{"@coral-xyz/anchor":`^0.31.0`,"@solana/spl-token":`^0.4.14`,"@solana/web3.js":`^1.98.4`,"@solana/wallet-adapter-react":`^0.15.39`,axios:`^1.15.0`,"async-mutex":`^0.4.0`,bs58:`^6.0.0`,buffer:`6.0.3`,"circomlibjs-hinkal-fork":`^0.0.10`,dotenv:`^16.4.5`,ethers:`^6.15.0`,"idb-keyval":`6.2.1`,multiformats:`^9.4.2`,snarkjs:`0.7.5`,"libsodium-wrappers":`^0.8.2`,lodash:`^4.17.21`,tweetnacl:`^1.0.3`,process:`0.11.10`,"ua-parser-js":`^1.0.37`,uuid:`^9.0.1`,"node-forge":`^1.3.1`,"poseidon-lite":`^0.3.0`,tronweb:`^6.2.0`},peerDependencies:{wagmi:`2.13.3`,"@walletconnect/utils":`^2.17.2`,react:`*`,"react-native":`*`,"react-native-webview":`*`},peerDependenciesMeta:{wagmi:{optional:!0},"@walletconnect/utils":{optional:!0},react:{optional:!0},"react-native":{optional:!0},"react-native-webview":{optional:!0}}};exports.default=e;
1
+ var e={name:`@gurge/sdk`,version:`0.3.25`,homepage:`hinkal.io`,author:{name:`Hinkal Protocol`},keywords:[`blockchain`,`privacy`,`zero-knowledge`,`stealth addresses`],exports:{".":{types:`./index.d.ts`,"react-native":`./index.cjs`,import:`./index.mjs`,default:`./index.cjs`},"./providers/WagmiProviderAdapter":{types:`./providers/WagmiProviderAdapter.d.ts`,"react-native":`./providers/WagmiProviderAdapter.cjs`,import:`./providers/WagmiProviderAdapter.mjs`,default:`./providers/WagmiProviderAdapter.cjs`},"./providers/EthersProviderAdapter":{types:`./providers/EthersProviderAdapter.d.ts`,"react-native":`./providers/EthersProviderAdapter.cjs`,import:`./providers/EthersProviderAdapter.mjs`,default:`./providers/EthersProviderAdapter.cjs`},"./providers/TronProviderAdapter":{types:`./providers/TronProviderAdapter.d.ts`,"react-native":`./providers/TronProviderAdapter.cjs`,import:`./providers/TronProviderAdapter.mjs`,default:`./providers/TronProviderAdapter.cjs`},"./providers/SolanaProviderAdapter":{types:`./providers/SolanaProviderAdapter.d.ts`,"react-native":`./providers/SolanaProviderAdapter.cjs`,import:`./providers/SolanaProviderAdapter.mjs`,default:`./providers/SolanaProviderAdapter.cjs`},"./providers/prepareEthersHinkal":{types:`./providers/prepareEthersHinkal.d.ts`,"react-native":`./providers/prepareEthersHinkal.cjs`,import:`./providers/prepareEthersHinkal.mjs`,default:`./providers/prepareEthersHinkal.cjs`},"./providers/prepareWagmiHinkal":{types:`./providers/prepareWagmiHinkal.d.ts`,"react-native":`./providers/prepareWagmiHinkal.cjs`,import:`./providers/prepareWagmiHinkal.mjs`,default:`./providers/prepareWagmiHinkal.cjs`},"./providers/prepareTronHinkal":{types:`./providers/prepareTronHinkal.d.ts`,"react-native":`./providers/prepareTronHinkal.cjs`,import:`./providers/prepareTronHinkal.mjs`,default:`./providers/prepareTronHinkal.cjs`},"./providers/prepareSolanaHinkal":{types:`./providers/prepareSolanaHinkal.d.ts`,"react-native":`./providers/prepareSolanaHinkal.cjs`,import:`./providers/prepareSolanaHinkal.mjs`,default:`./providers/prepareSolanaHinkal.cjs`},"./react-native/HinkalWebViewWorker":{types:`./react-native/HinkalWebViewWorker.d.ts`,"react-native":`./react-native/HinkalWebViewWorker.cjs`,import:`./react-native/HinkalWebViewWorker.mjs`,default:`./react-native/HinkalWebViewWorker.cjs`},"./react-native/metro-config":`./react-native/metro-config.js`,"./react-native/shims/*":`./react-native/shims/*`},types:`./index.d.ts`,scripts:{prebuild:`nx prebuild:workers`,build:`nx build`,lint:`nx lint`,test:`nx test`},devDependencies:{nx:`22.6.4`,vite:`^8.0.4`,"vite-plugin-dts":`^4.5.4`,"vite-tsconfig-paths":`^6.1.1`},dependencies:{"@coral-xyz/anchor":`^0.31.0`,"@solana/spl-token":`^0.4.14`,"@solana/web3.js":`^1.98.4`,"@solana/wallet-adapter-react":`^0.15.39`,axios:`^1.15.0`,"async-mutex":`^0.4.0`,bs58:`^6.0.0`,buffer:`6.0.3`,"circomlibjs-hinkal-fork":`^0.0.10`,dotenv:`^16.4.5`,ethers:`^6.15.0`,"idb-keyval":`6.2.1`,multiformats:`^9.4.2`,snarkjs:`0.7.5`,"libsodium-wrappers":`^0.8.2`,lodash:`^4.17.21`,tweetnacl:`^1.0.3`,process:`0.11.10`,"ua-parser-js":`^1.0.37`,uuid:`^9.0.1`,"node-forge":`^1.3.1`,"poseidon-lite":`^0.3.0`,tronweb:`^6.2.0`},peerDependencies:{wagmi:`2.13.3`,"@walletconnect/utils":`^2.17.2`,react:`*`,"react-native":`*`,"react-native-webview":`*`},peerDependenciesMeta:{wagmi:{optional:!0},"@walletconnect/utils":{optional:!0},react:{optional:!0},"react-native":{optional:!0},"react-native-webview":{optional:!0}}};exports.default=e;
@@ -1,6 +1,6 @@
1
1
  var e = {
2
2
  name: "@gurge/sdk",
3
- version: "0.3.24",
3
+ version: "0.3.25",
4
4
  homepage: "hinkal.io",
5
5
  author: { name: "Hinkal Protocol" },
6
6
  keywords: [
@@ -1 +0,0 @@
1
- const e=require(`../constants/protocol.constants.cjs`),t=require(`../functions/utils/bigint-math.utils.cjs`);var n=e.CIRCOM_P,r={p:n,zero:0n,one:1n,e:e=>t.mod(BigInt(e)),add:(e,n)=>t.mod(e+n),sub:(e,n)=>t.mod(e-n),mul:(e,n)=>t.mod(e*n),div:(e,r)=>{if(r===0n)throw Error(`Division by zero in BabyJub field`);return t.mod(e*t.modpow(r,n-2n,n))},toString:e=>t.mod(e).toString()},i=class{F=r;A=r.e(`168700`);D=r.e(`168696`);Base8=[r.e(`5299619240641551281634865583518297030282874472190772894086521144482721001553`),r.e(`16950150798460657717958625567821834550301663161624707787222815936182638968203`)];addPoint(e,t){let n=r.mul(e[0],t[1]),i=r.mul(e[1],t[0]),a=r.mul(r.sub(e[1],r.mul(this.A,e[0])),r.add(t[0],t[1])),o=r.mul(n,i),s=r.mul(this.D,o);return[r.div(r.add(n,i),r.add(r.one,s)),r.div(r.add(a,r.sub(r.mul(this.A,n),i)),r.sub(r.one,s))]}mulPointEscalar(e,t){let n=[r.zero,r.one],i=BigInt(t),a=e;for(;i!==0n;)i%2n==1n&&(n=this.addPoint(n,a)),a=this.addPoint(a,a),i/=2n;return n}};exports.BabyJubRN=i;
@@ -1,33 +0,0 @@
1
- import { CIRCOM_P as e } from "../constants/protocol.constants.mjs";
2
- import { mod as t, modpow as n } from "../functions/utils/bigint-math.utils.mjs";
3
- //#region libs/shared/common/src/crypto/BabyJubRN.ts
4
- var r = e, i = {
5
- p: r,
6
- zero: 0n,
7
- one: 1n,
8
- e: (e) => t(BigInt(e)),
9
- add: (e, n) => t(e + n),
10
- sub: (e, n) => t(e - n),
11
- mul: (e, n) => t(e * n),
12
- div: (e, i) => {
13
- if (i === 0n) throw Error("Division by zero in BabyJub field");
14
- return t(e * n(i, r - 2n, r));
15
- },
16
- toString: (e) => t(e).toString()
17
- }, a = class {
18
- F = i;
19
- A = i.e("168700");
20
- D = i.e("168696");
21
- Base8 = [i.e("5299619240641551281634865583518297030282874472190772894086521144482721001553"), i.e("16950150798460657717958625567821834550301663161624707787222815936182638968203")];
22
- addPoint(e, t) {
23
- let n = i.mul(e[0], t[1]), r = i.mul(e[1], t[0]), a = i.mul(i.sub(e[1], i.mul(this.A, e[0])), i.add(t[0], t[1])), o = i.mul(n, r), s = i.mul(this.D, o);
24
- return [i.div(i.add(n, r), i.add(i.one, s)), i.div(i.add(a, i.sub(i.mul(this.A, n), r)), i.sub(i.one, s))];
25
- }
26
- mulPointEscalar(e, t) {
27
- let n = [i.zero, i.one], r = BigInt(t), a = e;
28
- for (; r !== 0n;) r % 2n == 1n && (n = this.addPoint(n, a)), a = this.addPoint(a, a), r /= 2n;
29
- return n;
30
- }
31
- };
32
- //#endregion
33
- export { a as BabyJubRN };
@@ -1 +0,0 @@
1
- require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`./poseidon.cjs`),t=require(`../functions/utils/bigint-math.utils.cjs`),n=require(`./babyJub.cjs`);let r=require(`@noble/hashes/blake1.js`);var i=21888242871839275222246405745257275088614511777268538073601725287587578984328n/8n,a=(e,t=0,n=e.length-t)=>{let r=0n;for(let i=n-1;i>=0;--i)r=(r<<8n)+BigInt(e[t+i]);return r},o=(e,n,r,i)=>{let a=t.mod(r);for(let t=0;t<i;t+=1)e[n+t]=Number(a&255n),a>>=8n},s=e=>t.mod(e,i),c=e=>{let t=new Uint8Array(e);return t[0]&=248,t[31]&=127,t[31]|=64,t},l=class{constructor(e,t){this.babyJub=e,this.poseidon=t}prv2pub(e){let t=a(c((0,r.blake512)(e).slice(0,32)),0,32);return this.babyJub.mulPointEscalar(this.babyJub.Base8,t/8n)}signPoseidon(e,n){let i=c((0,r.blake512)(e)),l=a(i,0,32),u=this.babyJub.mulPointEscalar(this.babyJub.Base8,l/8n),d=new Uint8Array(64);d.set(i.slice(32),0),o(d,32,n,32);let f=s(a((0,r.blake512)(d),0,64)),p=this.babyJub.mulPointEscalar(this.babyJub.Base8,f),m=this.poseidon([p[0],p[1],u[0],u[1],n]);return{R8:p,S:s(f+s(t.mod(BigInt(this.poseidon.F.toString(m)))*l))}}},u=async()=>(await e.poseidonHolder.init(),await n.jubHolder.init(),new l(n.jubHolder.getJub(),e.poseidonHolder.getPoseidon()));exports.buildEddsaRN=u;
@@ -1,41 +0,0 @@
1
- import { poseidonHolder as e } from "./poseidon.mjs";
2
- import { mod as t } from "../functions/utils/bigint-math.utils.mjs";
3
- import { jubHolder as n } from "./babyJub.mjs";
4
- import { blake512 as r } from "@noble/hashes/blake1.js";
5
- //#region libs/shared/common/src/crypto/EddsaRN.ts
6
- var i = 21888242871839275222246405745257275088614511777268538073601725287587578984328n / 8n, a = (e, t = 0, n = e.length - t) => {
7
- let r = 0n;
8
- for (let i = n - 1; i >= 0; --i) r = (r << 8n) + BigInt(e[t + i]);
9
- return r;
10
- }, o = (e, n, r, i) => {
11
- let a = t(r);
12
- for (let t = 0; t < i; t += 1) e[n + t] = Number(a & 255n), a >>= 8n;
13
- }, s = (e) => t(e, i), c = (e) => {
14
- let t = new Uint8Array(e);
15
- return t[0] &= 248, t[31] &= 127, t[31] |= 64, t;
16
- }, l = class {
17
- constructor(e, t) {
18
- this.babyJub = e, this.poseidon = t;
19
- }
20
- prv2pub(e) {
21
- let t = a(c(r(e).slice(0, 32)), 0, 32);
22
- return this.babyJub.mulPointEscalar(this.babyJub.Base8, t / 8n);
23
- }
24
- signPoseidon(e, n) {
25
- let i = c(r(e)), l = a(i, 0, 32), u = this.babyJub.mulPointEscalar(this.babyJub.Base8, l / 8n), d = new Uint8Array(64);
26
- d.set(i.slice(32), 0), o(d, 32, n, 32);
27
- let f = s(a(r(d), 0, 64)), p = this.babyJub.mulPointEscalar(this.babyJub.Base8, f), m = this.poseidon([
28
- p[0],
29
- p[1],
30
- u[0],
31
- u[1],
32
- n
33
- ]);
34
- return {
35
- R8: p,
36
- S: s(f + s(t(BigInt(this.poseidon.F.toString(m))) * l))
37
- };
38
- }
39
- }, u = async () => (await e.init(), await n.init(), new l(n.getJub(), e.getPoseidon()));
40
- //#endregion
41
- export { u as buildEddsaRN };
@@ -1,2 +0,0 @@
1
- const e=require(`./workerProxy-DPeuP2Mg.js`);let t=require(`buffer`),n=require(`process`);n=e.u(n);let r=require(`circomlibjs-hinkal-fork`),i=require(`@noble/hashes/blake1.js`),a=require(`ethers`),o=require(`poseidon-lite`);o=e.u(o);let s=require(`libsodium-wrappers`);s=e.u(s);let c=require(`@solana/web3.js`),l=require(`bs58`);l=e.u(l);let u=require(`tweetnacl`);u=e.u(u);let d=require(`tronweb`);`${`00`.repeat(20)}`;var f=21888242871839275222246405745257275088548364400416034343698204186575808495617n,p=f/2n,m=200n;`${`00`.repeat(32)}`;var h=(e,t=f)=>{let n=e%t;return n>=0n?n:n+t},g=(e,t,n)=>{let r=1n,i=h(e,n),a=t;for(;a>0n;)a%2n==1n&&(r=r*i%n),a/=2n,i=i*i%n;return r},_=f,v={p:_,zero:0n,one:1n,e:e=>h(BigInt(e)),add:(e,t)=>h(e+t),sub:(e,t)=>h(e-t),mul:(e,t)=>h(e*t),div:(e,t)=>{if(t===0n)throw Error(`Division by zero in BabyJub field`);return h(e*g(t,_-2n,_))},toString:e=>h(e).toString()},y=class{F=v;A=v.e(`168700`);D=v.e(`168696`);Base8=[v.e(`5299619240641551281634865583518297030282874472190772894086521144482721001553`),v.e(`16950150798460657717958625567821834550301663161624707787222815936182638968203`)];addPoint(e,t){let n=v.mul(e[0],t[1]),r=v.mul(e[1],t[0]),i=v.mul(v.sub(e[1],v.mul(this.A,e[0])),v.add(t[0],t[1])),a=v.mul(n,r),o=v.mul(this.D,a);return[v.div(v.add(n,r),v.add(v.one,o)),v.div(v.add(i,v.sub(v.mul(this.A,n),r)),v.sub(v.one,o))]}mulPointEscalar(e,t){let n=[v.zero,v.one],r=BigInt(t),i=e;for(;r!==0n;)r%2n==1n&&(n=this.addPoint(n,i)),i=this.addPoint(i,i),r/=2n;return n}},b=new class{babyjub=void 0;async init(){this.babyjub||=e.o?new y:await(0,r.buildBabyjub)()}getJub(){return this.babyjub}},x=()=>b.getJub();function S(e){return typeof e==`object`&&`toBigInt`in e?e.toBigInt():BigInt(e)}var C=()=>{let e=e=>{let t=o[`poseidon${e.length}`];if(!t)throw Error(`Poseidon: arity ${e.length} not supported (1..16)`);return t(e.map(e=>BigInt(e)))};return e.F={toString:e=>BigInt(e).toString()},e},w=new class{poseidon=void 0;async init(){this.poseidon||=e.o?C():await(0,r.buildPoseidon)()}getPoseidon(){return this.poseidon}};function T(...e){let t=w.getPoseidon();return S(t.F.toString(t(e)))}var E=(...e)=>{let t=w.getPoseidon();return a.ethers.toBeHex(t.F.toString(t([...e])))},D=21888242871839275222246405745257275088614511777268538073601725287587578984328n/8n,O=(e,t=0,n=e.length-t)=>{let r=0n;for(let i=n-1;i>=0;--i)r=(r<<8n)+BigInt(e[t+i]);return r},k=(e,t,n,r)=>{let i=h(n);for(let n=0;n<r;n+=1)e[t+n]=Number(i&255n),i>>=8n},A=e=>h(e,D),j=e=>{let t=new Uint8Array(e);return t[0]&=248,t[31]&=127,t[31]|=64,t},ee=class{constructor(e,t){this.babyJub=e,this.poseidon=t}prv2pub(e){let t=O(j((0,i.blake512)(e).slice(0,32)),0,32);return this.babyJub.mulPointEscalar(this.babyJub.Base8,t/8n)}signPoseidon(e,t){let n=j((0,i.blake512)(e)),r=O(n,0,32),a=this.babyJub.mulPointEscalar(this.babyJub.Base8,r/8n),o=new Uint8Array(64);o.set(n.slice(32),0),k(o,32,t,32);let s=A(O((0,i.blake512)(o),0,64)),c=this.babyJub.mulPointEscalar(this.babyJub.Base8,s),l=this.poseidon([c[0],c[1],a[0],a[1],t]);return{R8:c,S:A(s+A(h(BigInt(this.poseidon.F.toString(l)))*r))}}},te=async()=>(await w.init(),await b.init(),new ee(b.getJub(),w.getPoseidon())),M=new class{eddsa=void 0;async init(){this.eddsa||=e.o?await te():await(0,r.buildEddsa)()}getEddsa(){return this.eddsa}},N=()=>M.getEddsa(),P=async(e=!1)=>{(typeof window<`u`||typeof self<`u`)&&(typeof window<`u`&&(window.global=window),globalThis.Buffer=t.Buffer,globalThis.process=n.default),await Promise.all([s.default.ready,w.init(),b.init(),...e?[]:[M.init()]])},F=class{inMemoryCache=new Map;constructor(e){e&&this.mergeWithSerialized(e)}getInMemory(e){return this.inMemoryCache.get(e)??void 0}setInMemory(e,t){this.inMemoryCache.set(e,t)}mergeWithSerialized(t){Object.entries(t).forEach(([t,n])=>{this.set(t,e.c(n))})}},I=class extends F{isAttached=!1;get(e){return this.getInMemory(e)}set(e,t){this.setInMemory(e,t)}serialize(){return Object.fromEntries([...this.inMemoryCache].map(([t,n])=>[t,e.l(n)]))}attach(t){if(this.isAttached)throw Error(`can't reattach cache device`);return this.isAttached=!0,(...n)=>{let r=e.l(n),i=this.get(r);if(i!==void 0)return i;let a=t(...n);return this.set(r,a),a}}},L=e=>{if(e<0n||e>=21888242871839275222246405745257275088548364400416034343698204186575808495617n)throw RangeError();return e>p},R=e=>L(e)?1n:0n,z=new I,B=new I,V=new I,H=class{signature;nullifyingKey;PREFIX_FOR_SPENDING_PAIR=`1`;PREFIX_FOR_NULLIFYING_PAIR=`2`;constructor(e,t){this.signature=e,this.nullifyingKey=t}getSignature(){return this.requireSignature(),this.signature}setSignature(e){this.signature=e}requireSignature(){if(!this.signature)throw Error(`No signature provided`)}requireKeyMaterial(){if(!this.signature&&!this.nullifyingKey)throw Error(`No signature or private key provided`)}verifyTronMessage(e,t){return this.requireSignature(),t===d.Trx.verifyMessageV2(e,this.signature)}getShieldedPrivateKey=()=>(this.requireKeyMaterial(),this.nullifyingKey||=a.ethers.keccak256(this.signature),this.nullifyingKey);getShieldedPublicKey=()=>(this.requireKeyMaterial(),E(this.getShieldedPrivateKey()));getSpendingKeyPair=()=>{this.requireSignature();let e=N(),t=x(),n=E(this.PREFIX_FOR_SPENDING_PAIR,this.getSignature()),r=Buffer.from(a.ethers.getBytes(n)),i=e.prv2pub(r);return{privSpendingKey:n,pubSpendingBJJPoint:[BigInt(t.F.toString(i[0])),BigInt(t.F.toString(i[1]))]}};signEddsa=e=>{this.requireSignature();let t=x(),n=N(),r=Buffer.from(a.ethers.getBytes(this.getSpendingKeyPair().privSpendingKey)),i=t.F.e(e),o=n.signPoseidon(r,i);return{R8:[BigInt(t.F.toString(o.R8[0])),BigInt(t.F.toString(o.R8[1]))],S:BigInt(o.S)}};getShieldedPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=E(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return a.ethers.keccak256(a.ethers.toUtf8Bytes(`hinkal-offchain-shielded-key:${t}`))};getClaimableSignatureFromNonce=e=>{this.requireKeyMaterial();let t=E(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return a.ethers.keccak256(a.ethers.toUtf8Bytes(`hinkal-claimable-utxo-signature:${t}`))};getDerivedEthereumAddress=()=>(this.requireKeyMaterial(),new a.ethers.Wallet(this.getShieldedPrivateKey()).address);getDerivedSolanaPublicKey=()=>(this.requireKeyMaterial(),c.Keypair.fromSeed(a.ethers.getBytes(this.getShieldedPrivateKey())).publicKey.toBase58());getNearIntentsAccountId=()=>{this.requireKeyMaterial();let e=c.Keypair.fromSeed(a.ethers.getBytes(this.getShieldedPrivateKey()));return a.ethers.hexlify(e.publicKey.toBytes()).slice(2)};getNearIntentsKeyPairString=()=>{this.requireKeyMaterial();let e=c.Keypair.fromSeed(a.ethers.getBytes(this.getShieldedPrivateKey()));return`ed25519:${l.default.encode(e.secretKey)}`};getSignerPrivateKeyFromNonce=e=>{this.requireKeyMaterial();let t=E(e,this.getShieldedPrivateKey(),this.getShieldedPublicKey());return a.ethers.keccak256(a.ethers.toUtf8Bytes(t))};getSignerSolanaPrivateKeyFromNonce=e=>{let t=this.getSignerPrivateKeyFromNonce(e),n=a.ethers.getBytes(t),r=c.Keypair.fromSeed(n);return l.default.encode(r.secretKey)};verifyMessage(e){return this.requireSignature(),a.ethers.verifyMessage(e,this.signature)}verifySolanaMessage(e,t){this.requireSignature();let n=new TextEncoder().encode(e),r=a.ethers.getBytes(this.signature),i=new c.PublicKey(t).toBytes();return u.default.sign.detached.verify(n,r,i)}static getRandomizedStealthPairOld=B.attach((e,t)=>{let n=x(),r=e*(BigInt(t)%f)%f,i=n.mulPointEscalar(n.Base8,e),a=n.mulPointEscalar(n.Base8,r);return{H0:[BigInt(n.F.toString(i[0])),BigInt(n.F.toString(i[1]))],H1:[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]}});static getRandomizedStealthPair=z.attach((e,t)=>{let n=x(),r=BigInt(t)%f,i=n.mulPointEscalar(n.Base8,e),a=n.mulPointEscalar(i,r);return{H0:[BigInt(n.F.toString(i[0])),BigInt(n.F.toString(i[1]))],H1:[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]}});static getStealthAddressCompressedPoints=(e,t)=>{let{H0:n,H1:r}=this.getRandomizedStealthPairOld(e,t),[i,a]=[n,r].map(e=>BigInt(e[1])+2n**255n*R(e[0]));return{h0:i,h1:a}};static checkSignature=(e,t,n,r)=>{let{h0:i,h1:a}=this.getStealthAddressCompressedPoints(e,r);return t===i&&n===a};static getStealthAddress=V.attach((e,t)=>{let{H0:n,H1:r}=this.getRandomizedStealthPairOld(e,t);return E(2n*R(n[0])+R(r[0]),n[1],r[1])});static getH1FromH0=(e,t)=>{let n=x(),r=BigInt(t)%f,i=[n.F.e(e[0]),n.F.e(e[1])],a=n.mulPointEscalar(i,r);return[BigInt(n.F.toString(a[0])),BigInt(n.F.toString(a[1]))]};static verifyStealthPair=(e,t,n,r=!0)=>{let i=this.getH1FromH0(e,n);return r?i[1]===t[1]:i===t};static getStealthAddressNewStyle=(e,t,n)=>{if(n?.length!==2)throw Error(`Spending public key must be an array of 2 elements`);let r=this.getH1FromH0(e,t);return E(2n*R(e[0])+R(r[0]),e[1],r[1],n[0],n[1],t)};static findCorrectRandomization(e,t){if(!t)throw Error(`No Private Shielded Key Provided`);let n=BigInt(t)%f,r,i,a=0n;do r=e*10n**a%f,i=r*n%f,a+=1n;while(i>=2n**253n||r>=2n**253n);return r}static getH0FromRandomization=e=>{let t=x(),n=t.mulPointEscalar(t.Base8,e);return[BigInt(t.F.toString(n[0])),BigInt(t.F.toString(n[1]))]};static findH0(e,t){if(!t)return;let{H0:n}=this.getRandomizedStealthPair(e,t);return n}static getEncryptionKeyPair=e=>{let t=s.default.crypto_box_seed_keypair(a.ethers.getBytes(e));return{privateKey:a.ethers.hexlify(t.privateKey),publicKey:a.ethers.hexlify(t.publicKey)}};getAccessKey=()=>(this.requireKeyMaterial(),E(this.getShieldedPrivateKey(),this.getShieldedPublicKey()));getBackendToken=()=>(this.requireKeyMaterial(),E(this.getAccessKey(),this.getShieldedPublicKey()))},U={CANNOT_CERTIFY_FOR_PAST_WEEK:`Certification for the past week is not available`,CYCLICAL_REFERRALS_FORBIDDEN:`Cyclical referrals are forbidden`,USER_IS_UNRANKED:`Please certify transactions to see rank`},W={WC_NO_MATCHING_KEY:`creating the transaction failed
2
- version`,CONNECTION_PROBLEM:`Failed to connect wallet. Please try again.`,REQUEST_PENDING:`request of type 'wallet_requestpermissions' already pending for origin`},G={INSUFFICIENT_FUNDS:`Insufficient funds`,INSUFFICIENT_FUNDS_WITHDRAW:`Not enough funds to withdraw`,INSUFFICIENT_FUNDS_TRANSFER:`Not enough funds to transfer`,INSUFFICIENT_FUNDS_TO_TRANSACT:`Not enough funds to transact`,INSUFFICIENT_FUNDS_GAS:`Insufficient funds for gas * price`,INSUFFICIENT_TRON_BALANCE_FOR_FEE:`Insufficient TRX balance to cover transfer amount and transaction fee reserve`,INSUFFICIENT_SOL_BALANCE:`Insufficient SOL balance`},K={GAS_PRICE_EXCEEDS_AUTOSHIELD_LIMIT:`Skipped shielding due to gas fee exceeding your limit.`,AUTO_SHIELD_INSUFFICIENT_GAS:`Auto-Shield skipped due to insufficient gas.`};({...U,...W,...G,...K});var q=e=>BigInt(a.ethers.hexlify(a.ethers.randomBytes(e))),J=()=>Math.floor(Date.now()/1e3),Y=class t{amount;erc20TokenAddress;mintAddress;timeStamp;nullifyingKey;spendingPublicKey;randomization;H0;stealthAddress;encryptionKey;commitment;nullifier;isBlocked;isNewStyle;constructor({amount:e,erc20TokenAddress:t,mintAddress:n,timeStamp:r,nullifyingKey:i,spendingPublicKey:a,randomization:o,H0:s,stealthAddress:c,encryptionKey:l,commitment:u=void 0,nullifier:d=void 0,isBlocked:f=!1,isNewStyle:p=!1}){this.amount=e,this.erc20TokenAddress=t,this.mintAddress=n,this.timeStamp=r??J().toString(),this.nullifyingKey=i,this.spendingPublicKey=a,this.randomization=o??(i?H.findCorrectRandomization(q(31),i):void 0),this.H0=s??(p&&this.randomization?H.findH0(this.randomization,i):void 0),this.stealthAddress=c,this.encryptionKey=l,this.commitment=u,this.nullifier=d,this.isBlocked=f,this.isNewStyle=p}static createFrom(e,n){return new t({...e.getConstructableParams(),nullifier:void 0,commitment:void 0,...n})}getConstructableParams(){return{amount:this.amount,erc20TokenAddress:this.erc20TokenAddress,mintAddress:this.mintAddress,timeStamp:this.timeStamp,nullifyingKey:this.nullifyingKey,spendingPublicKey:this.spendingPublicKey,randomization:this.randomization,H0:this.H0,stealthAddress:this.stealthAddress,encryptionKey:this.encryptionKey,commitment:this.commitment,nullifier:this.nullifier,isBlocked:this.isBlocked,isNewStyle:this.isNewStyle}}getBasicUtxoParams(){return{amount:this.amount,erc20TokenAddress:this.erc20TokenAddress,mintAddress:this.mintAddress,timeStamp:this.timeStamp,randomization:this.randomization,H0:this.H0,stealthAddress:this.stealthAddress,commitment:this.commitment,nullifier:this.nullifier,isBlocked:this.isBlocked,isNewStyle:this.isNewStyle}}getCommitment(){if(!this.commitment){let e=[this.amount,this.erc20TokenAddress,BigInt(this.getStealthAddress()),this.timeStamp];this.commitment=E(...e)}return this.commitment}getNullifier(){if(!this.nullifier){if(!this.nullifyingKey)throw Error(`No Nullifiers if private key is not provided`);let e=this.getCommitment(),t=E(this.nullifyingKey,e);this.nullifier=E(e,t)}return this.nullifier}getStealthAddress(){if(!this.stealthAddress){if(!this.nullifyingKey)throw Error(`No stealth address in UTXO if private key is not provided`);if(this.isNewStyle){if(!this.H0)throw Error(`No H0 point provided`);this.stealthAddress=H.getStealthAddressNewStyle(this.H0,this.nullifyingKey,this.spendingPublicKey)}else{if(!this.randomization)throw Error(`No randomization provided`);this.stealthAddress=H.getStealthAddress(this.randomization,this.nullifyingKey)}}return this.stealthAddress}getTokenAddress(t){let n=e.r(t)?this.mintAddress:this.erc20TokenAddress;if(!n)throw Error(`No token address provided`);return n}getEncryptionKey(){if(!this.nullifyingKey){if(!this.encryptionKey)throw Error(`No encryption key provided in UTXO`);return this.encryptionKey}return H.getEncryptionKeyPair(this.nullifyingKey).publicKey}},X=()=>s.default.crypto_box_SEALBYTES+s.default.crypto_secretbox_KEYBYTES,Z=e=>{let t=s.default.crypto_secretbox_NONCEBYTES,n=X(),r=0,i=e[r];r+=1;let a=e.slice(r,r+t);r+=t;let o=[];for(let t=0;t<i;t+=1)o.push(e.slice(r,r+n)),r+=n;return{nonce:a,sealedKeys:o,ciphertext:e.slice(r)}},ne=(e,t,n,r)=>{let{nonce:i,sealedKeys:o,ciphertext:c}=Z(e),l=s.default.crypto_box_seal_open(o[r],a.ethers.getBytes(n),a.ethers.getBytes(t)),u=s.default.crypto_secretbox_open_easy(c,i,l);return Buffer.from(u)},re=(e,t,n)=>{let r=s.default.crypto_box_seal_open(e,a.ethers.getBytes(n),a.ethers.getBytes(t));return Buffer.from(r)},ie=54912,ae=2,oe=e=>e[0]*256+e[1],Q=(e,t)=>{let{privateKey:n,publicKey:r}=H.getEncryptionKeyPair(t.getShieldedPrivateKey()),i=oe(e)===ie?ne(e.slice(ae),n,r,0):re(e,n,r),a=Buffer.from(i).toString(`utf-8`).split(`0x`).filter(e=>e.length!==0),o=e=>BigInt(`0x${e}`),s=e=>`0x${e}`,l=a.length>=8,u=l&&o(a[5])===1n,d=l?8:6,f=a[d]?s(a[d]):void 0,p=f?new c.PublicKey(Buffer.from(f.slice(2),`hex`)).toString():void 0;return{amount:o(a[0]),erc20TokenAddress:s(a[1]),randomization:o(a[2]),stealthAddress:s(a[3]),nullifyingKey:t.getShieldedPrivateKey(),timeStamp:o(a[4]).toString(),isNewStyle:u,...u?{H0:[o(a[6]),o(a[7])]}:{},mintAddress:p}},$=(e,t)=>new Y(Q(e,t)),se=e=>e&2n**255n-1n,ce=e=>e>>255n&1n,le=(...t)=>{e.a&&console.log(...t)};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return P}});