@gurge/sdk 0.3.24 → 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 (114) 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.d.ts +1 -3
  33. package/common/src/data-structures/Hinkal/hinkalWithdraw.mjs +21 -34
  34. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
  35. package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +2 -2
  36. package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.cjs +1 -1
  37. package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.mjs +1 -1
  38. package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs +1 -1
  39. package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.mjs +4 -4
  40. package/common/src/data-structures/utxo/Utxo.cjs +1 -1
  41. package/common/src/data-structures/utxo/Utxo.d.ts +1 -0
  42. package/common/src/data-structures/utxo/Utxo.mjs +19 -6
  43. package/common/src/functions/index.cjs +1 -1
  44. package/common/src/functions/index.mjs +0 -1
  45. package/common/src/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
  46. package/common/src/functions/pre-transaction/buildCommitmentValidationData.mjs +86 -47
  47. package/common/src/functions/pre-transaction/outputUtxoProcessing.cjs +1 -1
  48. package/common/src/functions/pre-transaction/outputUtxoProcessing.d.ts +2 -2
  49. package/common/src/functions/pre-transaction/outputUtxoProcessing.mjs +28 -22
  50. package/common/src/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
  51. package/common/src/functions/snarkjs/constructGeneralZkProof.mjs +60 -65
  52. package/common/src/functions/snarkjs/generateMainAndCommitmentZkProof.cjs +1 -1
  53. package/common/src/functions/snarkjs/generateMainAndCommitmentZkProof.mjs +10 -21
  54. package/common/src/functions/snarkjs/generateZkProof.cjs +1 -1
  55. package/common/src/functions/snarkjs/generateZkProof.mjs +13 -24
  56. package/common/src/functions/snarkjs/generateZkProofEnclave.cjs +1 -1
  57. package/common/src/functions/snarkjs/generateZkProofEnclave.mjs +11 -14
  58. package/common/src/functions/snarkjs/generateZkProofSelf.cjs +1 -1
  59. package/common/src/functions/snarkjs/generateZkProofSelf.mjs +16 -22
  60. package/common/src/functions/utils/bigint-math.utils.cjs +1 -1
  61. package/common/src/functions/utils/bigint-math.utils.mjs +1 -12
  62. package/common/src/functions/utils/hinkalTiming.utils.cjs +1 -1
  63. package/common/src/functions/utils/hinkalTiming.utils.d.ts +4 -2
  64. package/common/src/functions/utils/hinkalTiming.utils.mjs +13 -10
  65. package/common/src/functions/utils/index.cjs +1 -1
  66. package/common/src/functions/utils/index.mjs +1 -1
  67. package/common/src/functions/utils/utxoPadding.utils.cjs +1 -0
  68. package/common/src/functions/utils/utxoPadding.utils.d.ts +2 -0
  69. package/common/src/functions/utils/utxoPadding.utils.mjs +14 -0
  70. package/common/src/functions/web3/events/getInputUtxoAndBalance.cjs +1 -1
  71. package/common/src/functions/web3/events/getInputUtxoAndBalance.mjs +72 -53
  72. package/common/src/functions/web3/events/getInputUtxosEnclave.cjs +1 -1
  73. package/common/src/functions/web3/events/getInputUtxosEnclave.mjs +20 -21
  74. package/common/src/functions/web3/events/getShieldedBalance.cjs +1 -1
  75. package/common/src/functions/web3/events/getShieldedBalance.mjs +34 -37
  76. package/common/src/webworker/cryptoWorker/cryptoWorker.types.cjs +1 -0
  77. package/common/src/webworker/cryptoWorker/cryptoWorker.types.d.ts +49 -0
  78. package/common/src/webworker/cryptoWorker/cryptoWorker.types.mjs +6 -0
  79. package/common/src/webworker/cryptoWorker/cryptoWorkerLauncher.d.ts +1 -0
  80. package/common/src/webworker/cryptoWorker/cryptoWorkerLogic.d.ts +2 -0
  81. package/common/src/webworker/logError-DFS-H2t0.js +2 -0
  82. package/common/src/webworker/package.json +1 -1
  83. package/common/src/webworker/performTaskWithWorker.cjs +1 -1
  84. package/common/src/webworker/performTaskWithWorker.mjs +6 -6
  85. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  86. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  87. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  88. package/common/src/webworker/viteWorkerURL.constant.cjs +4 -3
  89. package/common/src/webworker/viteWorkerURL.constant.d.ts +1 -0
  90. package/common/src/webworker/viteWorkerURL.constant.mjs +4 -3
  91. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  92. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  93. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  94. package/package.json +1 -1
  95. package/react-native/HinkalWebViewWorker.cjs +76 -4
  96. package/react-native/HinkalWebViewWorker.mjs +152 -49
  97. package/react-native/bridge/HinkalRNWorker.cjs +1 -1
  98. package/react-native/bridge/HinkalRNWorker.d.ts +1 -0
  99. package/react-native/bridge/HinkalRNWorker.mjs +16 -11
  100. package/react-native/bridge/RnWebViewCryptoBridge.cjs +1 -0
  101. package/react-native/bridge/RnWebViewCryptoBridge.d.ts +7 -0
  102. package/react-native/bridge/RnWebViewCryptoBridge.mjs +49 -0
  103. package/react-native/shims/circomlibjs-hinkal-fork.js +2 -2
  104. package/react-native/shims/circomlibjs.js +2 -2
  105. package/react-native/workerCDNUrls.cjs +1 -1
  106. package/react-native/workerCDNUrls.d.ts +1 -0
  107. package/react-native/workerCDNUrls.mjs +2 -2
  108. package/sdk/package.json.cjs +1 -1
  109. package/sdk/package.json.mjs +1 -1
  110. package/common/src/crypto/BabyJubRN.cjs +0 -1
  111. package/common/src/crypto/BabyJubRN.mjs +0 -33
  112. package/common/src/crypto/EddsaRN.cjs +0 -1
  113. package/common/src/crypto/EddsaRN.mjs +0 -41
  114. package/common/src/webworker/logError-DCl9T86l.js +0 -2
@@ -14,8 +14,9 @@
14
14
  var e = /* @__PURE__ */ ((r) => (r.ZKProof = "ZKProof", r.SnarkJS = "SnarkJS", r.UTXO = "UTXO", r))(e || {});
15
15
 
16
16
  const n = async () => ({
17
- [e.ZKProof]: await getWorkerURL(domain + '/0.3.24/' + 'zkProofWorkerLauncher.js'),
18
- [e.SnarkJS]: await getWorkerURL(domain + '/0.3.24/' + 'snarkjsWorkerLauncher.js'),
19
- [e.UTXO]: await getWorkerURL(domain + '/0.3.24/' + 'utxoWorkerLauncher.js'),
17
+ [e.ZKProof]: await getWorkerURL(domain + '/0.3.26/' + 'zkProofWorkerLauncher.js'),
18
+ [e.SnarkJS]: await getWorkerURL(domain + '/0.3.26/' + 'snarkjsWorkerLauncher.js'),
19
+ [e.UTXO]: await getWorkerURL(domain + '/0.3.26/' + 'utxoWorkerLauncher.js'),
20
+ cryptoEngine: await getWorkerURL(domain + '/0.3.26/' + 'cryptoWorkerLauncher.js'),
20
21
  });
21
22
  export { n as getWorkerViteURL };
@@ -1 +1 @@
1
- var e=``+(typeof document>`u`?require(`url`).pathToFileURL(__dirname+`/../../../../assets/zkProofWorkerLauncher-BBhS4vyU.js`).href:new URL(`../../../../assets/zkProofWorkerLauncher-BBhS4vyU.js`,document.currentScript&&document.currentScript.tagName.toUpperCase()===`SCRIPT`&&document.currentScript.src||document.baseURI).href);exports.default=e;
1
+ var e=``+(typeof document>`u`?require(`url`).pathToFileURL(__dirname+`/../../../../assets/zkProofWorkerLauncher-Ces3iaVd.js`).href:new URL(`../../../../assets/zkProofWorkerLauncher-Ces3iaVd.js`,document.currentScript&&document.currentScript.tagName.toUpperCase()===`SCRIPT`&&document.currentScript.src||document.baseURI).href);exports.default=e;
@@ -1,4 +1,4 @@
1
1
  //#region libs/shared/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url
2
- var e = "" + new URL("../../../../assets/zkProofWorkerLauncher-BBhS4vyU.js", import.meta.url).href;
2
+ var e = "" + new URL("../../../../assets/zkProofWorkerLauncher-Ces3iaVd.js", import.meta.url).href;
3
3
  //#endregion
4
4
  export { e as default };
@@ -1 +1 @@
1
- const e=require(`./workerProxy-DPeuP2Mg.js`),t=require(`./logError-DCl9T86l.js`);let n=require(`buffer`),r=require(`process`);r=e.u(r);let i=require(`worker_threads`);require(`ethers`),Object.values({preHookContract:`0x0000000000000000000000000000000000000000`,hookContract:`0x0000000000000000000000000000000000000000`,preHookMetadata:`0x00`,postHookMetadata:`0x00`}),Array.from({length:25},()=>`0`);var a=(e,t)=>{let n=[];for(let r=0;r<e.length;r+=1){n.push([]);for(let i=0;i<e[r].length;i+=1)n[r][i]=t.getSiblingHashesForVerification(BigInt(e[r][i].getCommitment())).map(e=>e.toString())}let r=[];for(let n=0;n<e.length;n+=1){r.push([]);for(let i=0;i<e[n].length;i+=1)r[n][i]=t.getSiblingSides(BigInt(e[n][i].getCommitment())).map(e=>e.toString())}return{inCommitmentSiblings:n,inCommitmentSiblingSides:r}},o=function(e){return e[e.CALC_COMMITMENTS_SIBLING_AND_SIDES=0]=`CALC_COMMITMENTS_SIBLING_AND_SIDES`,e[e.BUILD_IN_NULLIFIERS=1]=`BUILD_IN_NULLIFIERS`,e}({}),s=class extends Error{constructor(){super(`Merkle tree is incomplete`),this.name=`MerkleTreeIncompleteError`}},c=class e{tree;count;index;reverseTree;static createWithData(t,n,r,i,a,o,s){return new e(a,o,s,t,n,r,i)}static create(n,r,i=t.p){return new e(n,i,r)}createReverseTree(){let e=new Map;for(let t=this.getStartIndex();t<this.getStartIndex()+this.count;t+=1n){let n=this.tree.get(t);n!==void 0&&e.set(n,t)}return e}constructor(e,t,n,r,i,a,o){this.hashFunction=e,this.levels=t,this.defaultNodeValue=n,this.tree=r??new Map,this.count=o??0n,this.index=a??2n**(t-1n),i?this.reverseTree=i:this.reverseTree=this.createReverseTree()}getStartIndex(){return 2n**(this.levels-1n)}logarithm2(e){let t=0n;for(;2n**t<e;)t+=1n;return t}bigIntMax(e,t){return e>t?e:t}forceInsert(e,t){if(t<this.getStartIndex())throw RangeError();this.tree.set(t,e),this.reverseTree.set(e,t);let n=this.index-this.getStartIndex(),r=this.logarithm2(n),i=t;for(let e=1n;e<=r;e+=1n){i/=2n;let e=this.hashFunction(this.tree.get(i*2n)||this.defaultNodeValue,this.tree.get(i*2n+1n)||this.defaultNodeValue);this.tree.set(i,e)}}insert(e,n){let r=!1;this.tree.has(n)&&(r=!0,t.t(`Editing commitment index: ${n} `)),r||(this.count+=1n),this.index=this.bigIntMax(this.index,n+1n),this.forceInsert(e,n)}remove(e){this.forceInsert(this.defaultNodeValue,e)}completenessCheck(){if(this.count!==this.index-this.getStartIndex())throw new s}getRootHash(){this.completenessCheck();for(let e=1n;e<2n**this.levels;e*=2n)if(this.tree.get(e))return this.tree.get(e);return this.defaultNodeValue}getMerkleData(){return this.completenessCheck(),new Map(this.tree)}getValue(e){return this.tree.get(e)}getSiblingIndex(e){return e===1n?1n:e%2n==1n?e-1n:e+1n}getSiblingHashesForVerification(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;)n.push(this.tree.get(this.getSiblingIndex(t))||this.defaultNodeValue),t/=2n;return n.slice(0,25)}getSiblingSides(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;){let e=t%2n==0n?0n:1n;n.push(e),t/=2n}return n.slice(0,25)}toJSON(){let{tree:e,reverseTree:t,count:n,index:r}=this;return{tree:Object.fromEntries(e),reverseTree:Object.fromEntries(t),count:n.toString(),index:r.toString()}}toJSONLite(){let{tree:e,count:t,index:n}=this;return{tree:Object.fromEntries(e),count:t.toString(),index:n.toString()}}clone(){return e.createWithData(new Map(this.tree),new Map(this.reverseTree),this.index,this.count,this.hashFunction,this.levels,this.defaultNodeValue)}getIndex(){return this.index}},l=e=>new Map(Object.entries(e).map(([e,t])=>[BigInt(e),BigInt(t)])),u=e=>{let n=l(e.tree),r=e.reverseTree?l(e.reverseTree):void 0;return c.createWithData(n,r,BigInt(e.index),BigInt(e.count),t.d,t.p,0n)},d=new e.t,f=e=>{let{inputUtxosSerialized:n,merkleTreeSerialized:r}=e.data,i=u(r),{inCommitmentSiblings:o,inCommitmentSiblingSides:s}=a(n.map(e=>e.map(e=>new t.o(e))),i);d.postMessageToMainThread({inCommitmentSiblings:o,inCommitmentSiblingSides:s})},p=e=>{let{inputUtxosSerialized:n}=e.data,r=n.map(e=>e.map(e=>new t.o(e))).map(e=>e.map(e=>e.amount===0n?`0`:e.getNullifier()));d.postMessageToMainThread(r)},m=async e=>{try{await t.u(!0);let{type:n}=e.payload;switch(n){case o.CALC_COMMITMENTS_SIBLING_AND_SIDES:f(e.payload);return;case o.BUILD_IN_NULLIFIERS:p(e.payload);return;default:throw Error(`Unknown worker message type ${n}`)}}catch(e){console.error(`zk proof worker message failed`,e),d.postErrorToMainThread(e)}};globalThis.process=r.default,globalThis.Buffer=n.Buffer,i.parentPort.on(`message`,async e=>{await m(e)});
1
+ const e=require(`./workerProxy-DPeuP2Mg.js`),t=require(`./logError-DFS-H2t0.js`);let n=require(`buffer`),r=require(`process`);r=e.u(r);let i=require(`worker_threads`);require(`ethers`),Object.values({preHookContract:`0x0000000000000000000000000000000000000000`,hookContract:`0x0000000000000000000000000000000000000000`,preHookMetadata:`0x00`,postHookMetadata:`0x00`}),Array.from({length:25},()=>`0`);var a=(e,t)=>{let n=[];for(let r=0;r<e.length;r+=1){n.push([]);for(let i=0;i<e[r].length;i+=1)n[r][i]=t.getSiblingHashesForVerification(BigInt(e[r][i].getCommitment())).map(e=>e.toString())}let r=[];for(let n=0;n<e.length;n+=1){r.push([]);for(let i=0;i<e[n].length;i+=1)r[n][i]=t.getSiblingSides(BigInt(e[n][i].getCommitment())).map(e=>e.toString())}return{inCommitmentSiblings:n,inCommitmentSiblingSides:r}},o=function(e){return e[e.CALC_COMMITMENTS_SIBLING_AND_SIDES=0]=`CALC_COMMITMENTS_SIBLING_AND_SIDES`,e[e.BUILD_IN_NULLIFIERS=1]=`BUILD_IN_NULLIFIERS`,e}({}),s=class extends Error{constructor(){super(`Merkle tree is incomplete`),this.name=`MerkleTreeIncompleteError`}},c=class e{tree;count;index;reverseTree;static createWithData(t,n,r,i,a,o,s){return new e(a,o,s,t,n,r,i)}static create(n,r,i=t.u){return new e(n,i,r)}createReverseTree(){let e=new Map;for(let t=this.getStartIndex();t<this.getStartIndex()+this.count;t+=1n){let n=this.tree.get(t);n!==void 0&&e.set(n,t)}return e}constructor(e,t,n,r,i,a,o){this.hashFunction=e,this.levels=t,this.defaultNodeValue=n,this.tree=r??new Map,this.count=o??0n,this.index=a??2n**(t-1n),i?this.reverseTree=i:this.reverseTree=this.createReverseTree()}getStartIndex(){return 2n**(this.levels-1n)}logarithm2(e){let t=0n;for(;2n**t<e;)t+=1n;return t}bigIntMax(e,t){return e>t?e:t}forceInsert(e,t){if(t<this.getStartIndex())throw RangeError();this.tree.set(t,e),this.reverseTree.set(e,t);let n=this.index-this.getStartIndex(),r=this.logarithm2(n),i=t;for(let e=1n;e<=r;e+=1n){i/=2n;let e=this.hashFunction(this.tree.get(i*2n)||this.defaultNodeValue,this.tree.get(i*2n+1n)||this.defaultNodeValue);this.tree.set(i,e)}}insert(e,n){let r=!1;this.tree.has(n)&&(r=!0,t.t(`Editing commitment index: ${n} `)),r||(this.count+=1n),this.index=this.bigIntMax(this.index,n+1n),this.forceInsert(e,n)}remove(e){this.forceInsert(this.defaultNodeValue,e)}completenessCheck(){if(this.count!==this.index-this.getStartIndex())throw new s}getRootHash(){this.completenessCheck();for(let e=1n;e<2n**this.levels;e*=2n)if(this.tree.get(e))return this.tree.get(e);return this.defaultNodeValue}getMerkleData(){return this.completenessCheck(),new Map(this.tree)}getValue(e){return this.tree.get(e)}getSiblingIndex(e){return e===1n?1n:e%2n==1n?e-1n:e+1n}getSiblingHashesForVerification(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;)n.push(this.tree.get(this.getSiblingIndex(t))||this.defaultNodeValue),t/=2n;return n.slice(0,25)}getSiblingSides(e){this.completenessCheck();let t=this.reverseTree.get(e);if(t===void 0)return Array(25).fill(0n);let n=[];for(;t!==0n;){let e=t%2n==0n?0n:1n;n.push(e),t/=2n}return n.slice(0,25)}toJSON(){let{tree:e,reverseTree:t,count:n,index:r}=this;return{tree:Object.fromEntries(e),reverseTree:Object.fromEntries(t),count:n.toString(),index:r.toString()}}toJSONLite(){let{tree:e,count:t,index:n}=this;return{tree:Object.fromEntries(e),count:t.toString(),index:n.toString()}}clone(){return e.createWithData(new Map(this.tree),new Map(this.reverseTree),this.index,this.count,this.hashFunction,this.levels,this.defaultNodeValue)}getIndex(){return this.index}},l=e=>new Map(Object.entries(e).map(([e,t])=>[BigInt(e),BigInt(t)])),u=e=>{let n=l(e.tree),r=e.reverseTree?l(e.reverseTree):void 0;return c.createWithData(n,r,BigInt(e.index),BigInt(e.count),t.f,t.u,0n)},d=new e.t,f=e=>{let{inputUtxosSerialized:n,merkleTreeSerialized:r}=e.data,i=u(r),{inCommitmentSiblings:o,inCommitmentSiblingSides:s}=a(n.map(e=>e.map(e=>new t.o(e))),i);d.postMessageToMainThread({inCommitmentSiblings:o,inCommitmentSiblingSides:s})},p=e=>{let{inputUtxosSerialized:n}=e.data,r=n.map(e=>e.map(e=>new t.o(e))).map(e=>e.map(e=>e.amount===0n?`0`:e.getNullifier()));d.postMessageToMainThread(r)},m=async e=>{try{await t.d(!0);let{type:n}=e.payload;switch(n){case o.CALC_COMMITMENTS_SIBLING_AND_SIDES:f(e.payload);return;case o.BUILD_IN_NULLIFIERS:p(e.payload);return;default:throw Error(`Unknown worker message type ${n}`)}}catch(e){console.error(`zk proof worker message failed`,e),d.postErrorToMainThread(e)}};globalThis.process=r.default,globalThis.Buffer=n.Buffer,i.parentPort.on(`message`,async e=>{await m(e)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gurge/sdk",
3
- "version": "0.3.24",
3
+ "version": "0.3.26",
4
4
  "homepage": "hinkal.io",
5
5
  "author": {
6
6
  "name": "Hinkal Protocol"
@@ -1,8 +1,13 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../common/src/webworker/workerFactory.cjs`),t=require(`./workerCDNUrls.cjs`),n=require(`./bridge/serialization.utils.cjs`),r=require(`./bridge/HinkalRNWorker.cjs`);let i=require(`react`),a=require(`react-native`),o=require(`react-native-webview`),s=require(`react/jsx-runtime`);var c=`${new URL(Object.values(t.WORKER_CDN_URLS)[0]).origin}/`;e.WorkerFactory.rnWorkerFactory=e=>new r.HinkalRNWorker(e);var l=`
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../common/src/crypto/rnCryptoBridge.cjs`),t=require(`../common/src/functions/utils/hinkalTiming.utils.cjs`),n=require(`../common/src/webworker/workerFactory.cjs`),r=require(`./workerCDNUrls.cjs`),i=require(`./bridge/serialization.utils.cjs`),a=require(`./bridge/HinkalRNWorker.cjs`),o=require(`./bridge/RnWebViewCryptoBridge.cjs`);let s=require(`react`),c=require(`react-native`),l=require(`react-native-webview`),u=require(`react/jsx-runtime`);var d=`${new URL(Object.values(r.WORKER_CDN_URLS)[0]).origin}/`;n.WorkerFactory.rnWorkerFactory=e=>new a.HinkalRNWorker(e);var f=`
2
2
  if (!window.__hinkalPageBoot) (function(){
3
3
  window.__hinkalPageBoot = true;
4
- var URLS = ${JSON.stringify(t.WORKER_CDN_URLS)};
4
+ var URLS = ${JSON.stringify(r.WORKER_CDN_URLS)};
5
+ var CRYPTO_URL = ${JSON.stringify(r.CRYPTO_ENGINE_CDN_URL)};
5
6
  var BLOBS = {};
7
+ var cryptoWorker = null;
8
+ var cryptoReady = false;
9
+ var cryptoInitPromise = null;
10
+ var cryptoPending = {};
6
11
 
7
12
  function replacer(_key, value){
8
13
  if (typeof value === 'bigint') return { __bigint: value.toString() };
@@ -22,6 +27,9 @@ if (!window.__hinkalPageBoot) (function(){
22
27
  var out = {}; for (var i = 0; i < keys.length; i++) out[keys[i]] = revive(value[keys[i]]); return out;
23
28
  }
24
29
  function post(payload){ try { window.ReactNativeWebView.postMessage(JSON.stringify(payload, replacer)); } catch(_){} }
30
+ function postPhase(requestId, variant, phase, t0){
31
+ post({ type: 'TIMING', requestId: requestId, variant: variant, phase: phase, ms: Date.now() - t0 });
32
+ }
25
33
  function describe(error){
26
34
  if (!error) return 'worker error';
27
35
  if (error.message) return error.message;
@@ -55,15 +63,77 @@ if (!window.__hinkalPageBoot) (function(){
55
63
  try { return new Worker(url, { type: 'module' }); } catch(_){ return new Worker(url); }
56
64
  }
57
65
 
66
+ function postCrypto(payload){ post(Object.assign({ channel: 'crypto' }, payload)); }
67
+
68
+ async function ensureCryptoWorker(){
69
+ if (cryptoReady) return cryptoWorker;
70
+ if (cryptoInitPromise) return cryptoInitPromise;
71
+ cryptoInitPromise = new Promise(function(resolve, reject){
72
+ blobUrl(CRYPTO_URL).then(function(url){
73
+ cryptoWorker = spawn(url);
74
+ cryptoWorker.onmessage = function(event){
75
+ var data = event && event.data;
76
+ if (!data || typeof data !== 'object') return;
77
+ if (data.type === 'ready') {
78
+ cryptoReady = true;
79
+ resolve(cryptoWorker);
80
+ return;
81
+ }
82
+ if (data.requestId && cryptoPending[data.requestId]) {
83
+ cryptoPending[data.requestId](data);
84
+ delete cryptoPending[data.requestId];
85
+ }
86
+ };
87
+ cryptoWorker.onerror = function(event){ reject(new Error(describe(event))); };
88
+ cryptoWorker.postMessage({ op: 'init' });
89
+ }).catch(reject);
90
+ });
91
+ return cryptoInitPromise;
92
+ }
93
+
94
+ function cryptoCall(requestId, op, payload){
95
+ ensureCryptoWorker().then(function(worker){
96
+ cryptoPending[requestId] = function(response){
97
+ if (response.type === 'result') postCrypto({ requestId: requestId, type: 'RESULT', data: response.data });
98
+ else postCrypto({ requestId: requestId, type: 'ERROR', error: response.error || 'crypto worker error' });
99
+ };
100
+ worker.postMessage({ requestId: requestId, op: op, payload: payload });
101
+ }).catch(function(error){
102
+ postCrypto({ requestId: requestId, type: 'ERROR', error: describe(error) });
103
+ });
104
+ }
105
+
106
+ window.handleCryptoMessage = function(envelope){
107
+ if (!envelope || typeof envelope !== 'object') return;
108
+ if (envelope.type === 'INIT') {
109
+ ensureCryptoWorker().then(function(){
110
+ postCrypto({ type: 'CRYPTO_READY', requestId: envelope.requestId });
111
+ }).catch(function(error){
112
+ postCrypto({ type: 'ERROR', requestId: envelope.requestId, error: describe(error) });
113
+ });
114
+ return;
115
+ }
116
+ if (envelope.type === 'CALL') {
117
+ cryptoCall(envelope.requestId, envelope.op, revive(envelope.payload));
118
+ }
119
+ };
120
+
58
121
  window.handleMessage = async function(envelope){
59
122
  var requestId = envelope && envelope.requestId;
60
123
  var variant = envelope && envelope.variant;
61
124
  var message = revive(envelope && envelope.message);
62
125
  var url = URLS[variant];
126
+ var t0 = Date.now();
127
+ postPhase(requestId, variant, 'handleMessage-start', t0);
63
128
  if (!url) return post({ requestId: requestId, type: 'ERROR', error: 'Unknown variant: ' + variant });
64
129
 
65
130
  var worker;
66
- try { worker = spawn(await blobUrl(url)); }
131
+ try {
132
+ var blob = await blobUrl(url);
133
+ postPhase(requestId, variant, 'cdn-blob-ready', t0);
134
+ worker = spawn(blob);
135
+ postPhase(requestId, variant, 'inner-worker-spawned', t0);
136
+ }
67
137
  catch (error) { return post({ requestId: requestId, type: 'ERROR', error: 'spawn failed: ' + describe(error) }); }
68
138
 
69
139
  var done = false, ready = false, pending = message;
@@ -74,6 +144,7 @@ if (!window.__hinkalPageBoot) (function(){
74
144
  if (data && typeof data === 'object') {
75
145
  if (data.__hinkalWorkerReady) {
76
146
  ready = true;
147
+ postPhase(requestId, variant, 'inner-worker-ready', t0);
77
148
  try { worker.postMessage(pending); pending = null; }
78
149
  catch (error) { post({ requestId: requestId, type: 'ERROR', error: 'postMessage failed: ' + describe(error) }); finish(); }
79
150
  return;
@@ -85,6 +156,7 @@ if (!window.__hinkalPageBoot) (function(){
85
156
  }
86
157
  }
87
158
  post({ requestId: requestId, type: 'RESULT', data: data });
159
+ postPhase(requestId, variant, 'inner-worker-done', t0);
88
160
  finish();
89
161
  };
90
162
  worker.onerror = function(event){
@@ -95,4 +167,4 @@ if (!window.__hinkalPageBoot) (function(){
95
167
 
96
168
  post({ type: 'READY' });
97
169
  })();
98
- true;`,u=`<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${l}<\/script></body></html>`,d=a.StyleSheet.create({hiddenHost:{position:`absolute`,height:1,width:1,left:-9999,top:-9999,opacity:0}}),f=()=>{let e=(0,i.useRef)(null),t=(0,i.useRef)({ready:!1,queue:[]}),r=(0,i.useCallback)((t,r,i)=>{let o;try{o=JSON.stringify({requestId:t,variant:r,message:i},n.bigIntReplacer)}catch(e){a.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{requestId:t,type:`ERROR`,error:`serialize failed: ${e?.message??e}`});return}e.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${o}); true;`)},[]);(0,i.useEffect)(()=>{let e=a.DeviceEventEmitter.addListener(`TO_WEBVIEW_WORKER`,e=>{let n={requestId:e?.__requestId??``,variant:e?.variant??``,message:e?.message};t.current.ready?r(n.requestId,n.variant,n.message):t.current.queue.push(n)});return()=>e.remove()},[r]);let f=(0,i.useCallback)(e=>{let i;try{i=n.reviveBigInts(JSON.parse(e.nativeEvent.data))}catch(e){a.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{type:`ERROR`,error:e?.message??`parse error`});return}if(i?.type===`READY`){t.current.ready=!0;let e=t.current.queue;t.current.queue=[],e.forEach(({requestId:e,variant:t,message:n})=>r(e,t,n));return}a.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,i)},[r]);return(0,s.jsx)(a.View,{pointerEvents:`none`,style:d.hiddenHost,children:(0,s.jsx)(o.WebView,{ref:e,source:{html:u,baseUrl:c},originWhitelist:[`*`],javaScriptEnabled:!0,domStorageEnabled:!0,androidLayerType:`hardware`,onMessage:f,onLoad:()=>e.current?.injectJavaScript(l)})})};module.exports=f;
170
+ true;`,p=`<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${f}<\/script></body></html>`,m=c.StyleSheet.create({hiddenHost:{position:`absolute`,height:1,width:1,left:-9999,top:-9999,opacity:0}}),h=()=>{let n=(0,s.useRef)(null),r=(0,s.useRef)({ready:!1,queue:[]}),a=(0,s.useCallback)((e,t,r)=>{let a;try{a=JSON.stringify({requestId:e,variant:t,message:r},i.bigIntReplacer)}catch(t){c.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{requestId:e,type:`ERROR`,error:`serialize failed: ${t?.message??t}`});return}n.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${a}); true;`)},[]);(0,s.useEffect)(()=>(e.RnCryptoBridgeFactory.bridge=new o.RnWebViewCryptoBridge,()=>{e.RnCryptoBridgeFactory.bridge=null}),[]),(0,s.useEffect)(()=>{let e=c.DeviceEventEmitter.addListener(`TO_WEBVIEW_WORKER`,e=>{let t={requestId:e?.__requestId??``,variant:e?.variant??``,message:e?.message};r.current.ready?a(t.requestId,t.variant,t.message):r.current.queue.push(t)});return()=>e.remove()},[a]),(0,s.useEffect)(()=>{let e=c.DeviceEventEmitter.addListener(`TO_WEBVIEW_CRYPTO`,e=>{let t;try{t=JSON.stringify(e,i.bigIntReplacer)}catch(e){c.DeviceEventEmitter.emit(`FROM_WEBVIEW_CRYPTO`,{type:`ERROR`,error:`serialize failed: ${e?.message??e}`});return}n.current?.injectJavaScript(`window.handleCryptoMessage && window.handleCryptoMessage(${t}); true;`)});return()=>e.remove()},[]);let h=(0,s.useCallback)(e=>{let n;try{n=i.reviveBigInts(JSON.parse(e.nativeEvent.data))}catch(e){c.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,{type:`ERROR`,error:e?.message??`parse error`});return}if(n?.type===`READY`){r.current.ready=!0;let e=r.current.queue;r.current.queue=[],e.forEach(({requestId:e,variant:t,message:n})=>a(e,t,n));return}if(n?.type===`TIMING`){t.logRnDeltaEvent(`webView.${n.variant}`,n.phase,{requestId:n.requestId,ms:n.ms});return}if(n?.channel===`crypto`){c.DeviceEventEmitter.emit(`FROM_WEBVIEW_CRYPTO`,n);return}c.DeviceEventEmitter.emit(`FROM_WEBVIEW_WORKER`,n)},[a]);return(0,u.jsx)(c.View,{pointerEvents:`none`,style:m.hiddenHost,children:(0,u.jsx)(l.WebView,{ref:n,source:{html:p,baseUrl:d},originWhitelist:[`*`],javaScriptEnabled:!0,domStorageEnabled:!0,androidLayerType:`hardware`,onMessage:h,onLoad:()=>n.current?.injectJavaScript(f)})})};module.exports=h;
@@ -1,19 +1,27 @@
1
- import { WorkerFactory as e } from "../common/src/webworker/workerFactory.mjs";
2
- import { WORKER_CDN_URLS as t } from "./workerCDNUrls.mjs";
3
- import { bigIntReplacer as n, reviveBigInts as r } from "./bridge/serialization.utils.mjs";
4
- import { HinkalRNWorker as i } from "./bridge/HinkalRNWorker.mjs";
5
- import { useCallback as a, useEffect as o, useRef as s } from "react";
6
- import { DeviceEventEmitter as c, StyleSheet as l, View as u } from "react-native";
7
- import { WebView as d } from "react-native-webview";
8
- import { jsx as f } 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";
9
12
  //#region libs/shared/sdk/src/react-native/HinkalWebViewWorker.tsx
10
- var p = `${new URL(Object.values(t)[0]).origin}/`;
11
- e.rnWorkerFactory = (e) => new i(e);
12
- var m = `
13
+ var _ = `${new URL(Object.values(i)[0]).origin}/`;
14
+ n.rnWorkerFactory = (e) => new s(e);
15
+ var v = `
13
16
  if (!window.__hinkalPageBoot) (function(){
14
17
  window.__hinkalPageBoot = true;
15
- var URLS = ${JSON.stringify(t)};
18
+ var URLS = ${JSON.stringify(i)};
19
+ var CRYPTO_URL = ${JSON.stringify(r)};
16
20
  var BLOBS = {};
21
+ var cryptoWorker = null;
22
+ var cryptoReady = false;
23
+ var cryptoInitPromise = null;
24
+ var cryptoPending = {};
17
25
 
18
26
  function replacer(_key, value){
19
27
  if (typeof value === 'bigint') return { __bigint: value.toString() };
@@ -33,6 +41,9 @@ if (!window.__hinkalPageBoot) (function(){
33
41
  var out = {}; for (var i = 0; i < keys.length; i++) out[keys[i]] = revive(value[keys[i]]); return out;
34
42
  }
35
43
  function post(payload){ try { window.ReactNativeWebView.postMessage(JSON.stringify(payload, replacer)); } catch(_){} }
44
+ function postPhase(requestId, variant, phase, t0){
45
+ post({ type: 'TIMING', requestId: requestId, variant: variant, phase: phase, ms: Date.now() - t0 });
46
+ }
36
47
  function describe(error){
37
48
  if (!error) return 'worker error';
38
49
  if (error.message) return error.message;
@@ -53,15 +64,77 @@ if (!window.__hinkalPageBoot) (function(){
53
64
  try { return new Worker(url, { type: 'module' }); } catch(_){ return new Worker(url); }
54
65
  }
55
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
+
56
122
  window.handleMessage = async function(envelope){
57
123
  var requestId = envelope && envelope.requestId;
58
124
  var variant = envelope && envelope.variant;
59
125
  var message = revive(envelope && envelope.message);
60
126
  var url = URLS[variant];
127
+ var t0 = Date.now();
128
+ postPhase(requestId, variant, 'handleMessage-start', t0);
61
129
  if (!url) return post({ requestId: requestId, type: 'ERROR', error: 'Unknown variant: ' + variant });
62
130
 
63
131
  var worker;
64
- try { worker = spawn(await blobUrl(url)); }
132
+ try {
133
+ var blob = await blobUrl(url);
134
+ postPhase(requestId, variant, 'cdn-blob-ready', t0);
135
+ worker = spawn(blob);
136
+ postPhase(requestId, variant, 'inner-worker-spawned', t0);
137
+ }
65
138
  catch (error) { return post({ requestId: requestId, type: 'ERROR', error: 'spawn failed: ' + describe(error) }); }
66
139
 
67
140
  var done = false, ready = false, pending = message;
@@ -72,6 +145,7 @@ if (!window.__hinkalPageBoot) (function(){
72
145
  if (data && typeof data === 'object') {
73
146
  if (data.__hinkalWorkerReady) {
74
147
  ready = true;
148
+ postPhase(requestId, variant, 'inner-worker-ready', t0);
75
149
  try { worker.postMessage(pending); pending = null; }
76
150
  catch (error) { post({ requestId: requestId, type: 'ERROR', error: 'postMessage failed: ' + describe(error) }); finish(); }
77
151
  return;
@@ -83,6 +157,7 @@ if (!window.__hinkalPageBoot) (function(){
83
157
  }
84
158
  }
85
159
  post({ requestId: requestId, type: 'RESULT', data: data });
160
+ postPhase(requestId, variant, 'inner-worker-done', t0);
86
161
  finish();
87
162
  };
88
163
  worker.onerror = function(event){
@@ -93,82 +168,110 @@ if (!window.__hinkalPageBoot) (function(){
93
168
 
94
169
  post({ type: 'READY' });
95
170
  })();
96
- true;`, h = `<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${m}<\/script></body></html>`, g = l.create({ hiddenHost: {
171
+ true;`, y = `<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body><script>${v}<\/script></body></html>`, b = p.create({ hiddenHost: {
97
172
  position: "absolute",
98
173
  height: 1,
99
174
  width: 1,
100
175
  left: -9999,
101
176
  top: -9999,
102
177
  opacity: 0
103
- } }), _ = () => {
104
- let e = s(null), t = s({
178
+ } }), x = () => {
179
+ let n = d(null), r = d({
105
180
  ready: !1,
106
181
  queue: []
107
- }), i = a((t, r, i) => {
108
- let a;
182
+ }), i = l((e, t, r) => {
183
+ let i;
109
184
  try {
110
- a = JSON.stringify({
111
- requestId: t,
112
- variant: r,
113
- message: i
114
- }, n);
115
- } catch (e) {
116
- c.emit("FROM_WEBVIEW_WORKER", {
117
- requestId: t,
185
+ i = JSON.stringify({
186
+ requestId: e,
187
+ variant: t,
188
+ message: r
189
+ }, a);
190
+ } catch (t) {
191
+ f.emit("FROM_WEBVIEW_WORKER", {
192
+ requestId: e,
118
193
  type: "ERROR",
119
- error: `serialize failed: ${e?.message ?? e}`
194
+ error: `serialize failed: ${t?.message ?? t}`
120
195
  });
121
196
  return;
122
197
  }
123
- e.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${a}); true;`);
198
+ n.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${i}); true;`);
124
199
  }, []);
125
- o(() => {
126
- let e = c.addListener("TO_WEBVIEW_WORKER", (e) => {
127
- let n = {
200
+ u(() => (e.bridge = new c(), () => {
201
+ e.bridge = null;
202
+ }), []), u(() => {
203
+ let e = f.addListener("TO_WEBVIEW_WORKER", (e) => {
204
+ let t = {
128
205
  requestId: e?.__requestId ?? "",
129
206
  variant: e?.variant ?? "",
130
207
  message: e?.message
131
208
  };
132
- t.current.ready ? i(n.requestId, n.variant, n.message) : t.current.queue.push(n);
209
+ r.current.ready ? i(t.requestId, t.variant, t.message) : r.current.queue.push(t);
133
210
  });
134
211
  return () => e.remove();
135
- }, [i]);
136
- let l = a((e) => {
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;`);
225
+ });
226
+ return () => e.remove();
227
+ }, []);
228
+ let s = l((e) => {
137
229
  let n;
138
230
  try {
139
- n = r(JSON.parse(e.nativeEvent.data));
231
+ n = o(JSON.parse(e.nativeEvent.data));
140
232
  } catch (e) {
141
- c.emit("FROM_WEBVIEW_WORKER", {
233
+ f.emit("FROM_WEBVIEW_WORKER", {
142
234
  type: "ERROR",
143
235
  error: e?.message ?? "parse error"
144
236
  });
145
237
  return;
146
238
  }
147
239
  if (n?.type === "READY") {
148
- t.current.ready = !0;
149
- let e = t.current.queue;
150
- t.current.queue = [], e.forEach(({ requestId: e, variant: t, message: n }) => i(e, t, n));
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));
243
+ return;
244
+ }
245
+ if (n?.type === "TIMING") {
246
+ t(`webView.${n.variant}`, n.phase, {
247
+ requestId: n.requestId,
248
+ ms: n.ms
249
+ });
250
+ return;
251
+ }
252
+ if (n?.channel === "crypto") {
253
+ f.emit("FROM_WEBVIEW_CRYPTO", n);
151
254
  return;
152
255
  }
153
- c.emit("FROM_WEBVIEW_WORKER", n);
256
+ f.emit("FROM_WEBVIEW_WORKER", n);
154
257
  }, [i]);
155
- return /* @__PURE__ */ f(u, {
258
+ return /* @__PURE__ */ g(m, {
156
259
  pointerEvents: "none",
157
- style: g.hiddenHost,
158
- children: /* @__PURE__ */ f(d, {
159
- ref: e,
260
+ style: b.hiddenHost,
261
+ children: /* @__PURE__ */ g(h, {
262
+ ref: n,
160
263
  source: {
161
- html: h,
162
- baseUrl: p
264
+ html: y,
265
+ baseUrl: _
163
266
  },
164
267
  originWhitelist: ["*"],
165
268
  javaScriptEnabled: !0,
166
269
  domStorageEnabled: !0,
167
270
  androidLayerType: "hardware",
168
- onMessage: l,
169
- onLoad: () => e.current?.injectJavaScript(m)
271
+ onMessage: s,
272
+ onLoad: () => n.current?.injectJavaScript(v)
170
273
  })
171
274
  });
172
275
  };
173
276
  //#endregion
174
- export { _ as default };
277
+ export { x as default };
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./serialization.utils.cjs`);let t=require(`react-native`);var n=class{onmessage=null;onerror=null;requestId=e.nextRequestId();subscription;constructor(e){this.variant=e,this.subscription=t.DeviceEventEmitter.addListener(`FROM_WEBVIEW_WORKER`,e=>{!e||e.requestId!==this.requestId||(e.type===`RESULT`?this.onmessage?.({data:e.data}):e.type===`ERROR`&&this.onerror?.(Error(e.error??`WebView worker error`)))})}postMessage(e){t.DeviceEventEmitter.emit(`TO_WEBVIEW_WORKER`,{__requestId:this.requestId,variant:this.variant,message:e})}terminate(){this.subscription?.remove?.(),this.subscription=null}};exports.HinkalRNWorker=n;
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{onmessage=null;onerror=null;requestId=t.nextRequestId();sentAt=0;subscription;constructor(t){this.variant=t,this.subscription=n.DeviceEventEmitter.addListener(`FROM_WEBVIEW_WORKER`,t=>{!t||t.requestId!==this.requestId||(t.type===`RESULT`?(e.logRnDeltaEvent(`rnBridge.${this.variant}`,`round-trip`,{requestId:this.requestId,ms:Date.now()-this.sentAt}),this.onmessage?.({data:t.data})):t.type===`ERROR`&&this.onerror?.(Error(t.error??`WebView worker error`)))})}postMessage(t){this.sentAt=Date.now(),e.logRnDeltaEvent(`rnBridge.${this.variant}`,`postMessage-sent`,{requestId:this.requestId}),n.DeviceEventEmitter.emit(`TO_WEBVIEW_WORKER`,{__requestId:this.requestId,variant:this.variant,message:t})}terminate(){this.subscription?.remove?.(),this.subscription=null}};exports.HinkalRNWorker=r;
@@ -6,6 +6,7 @@ export declare class HinkalRNWorker {
6
6
  }) => void) | null;
7
7
  onerror: ((error: any) => void) | null;
8
8
  private requestId;
9
+ private sentAt;
9
10
  private subscription;
10
11
  constructor(variant: WorkerVariant);
11
12
  postMessage(message: unknown): void;
@@ -1,21 +1,26 @@
1
- import { nextRequestId as e } from "./serialization.utils.mjs";
2
- import { DeviceEventEmitter as t } from "react-native";
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";
3
4
  //#region libs/shared/sdk/src/react-native/bridge/HinkalRNWorker.ts
4
- var n = class {
5
+ var r = class {
5
6
  onmessage = null;
6
7
  onerror = null;
7
- requestId = e();
8
+ requestId = t();
9
+ sentAt = 0;
8
10
  subscription;
9
- constructor(e) {
10
- this.variant = e, this.subscription = t.addListener("FROM_WEBVIEW_WORKER", (e) => {
11
- !e || e.requestId !== this.requestId || (e.type === "RESULT" ? this.onmessage?.({ data: e.data }) : e.type === "ERROR" && this.onerror?.(Error(e.error ?? "WebView worker error")));
11
+ constructor(t) {
12
+ this.variant = t, this.subscription = n.addListener("FROM_WEBVIEW_WORKER", (t) => {
13
+ !t || t.requestId !== this.requestId || (t.type === "RESULT" ? (e(`rnBridge.${this.variant}`, "round-trip", {
14
+ requestId: this.requestId,
15
+ ms: Date.now() - this.sentAt
16
+ }), this.onmessage?.({ data: t.data })) : t.type === "ERROR" && this.onerror?.(Error(t.error ?? "WebView worker error")));
12
17
  });
13
18
  }
14
- postMessage(e) {
15
- t.emit("TO_WEBVIEW_WORKER", {
19
+ postMessage(t) {
20
+ this.sentAt = Date.now(), e(`rnBridge.${this.variant}`, "postMessage-sent", { requestId: this.requestId }), n.emit("TO_WEBVIEW_WORKER", {
16
21
  __requestId: this.requestId,
17
22
  variant: this.variant,
18
- message: e
23
+ message: t
19
24
  });
20
25
  }
21
26
  terminate() {
@@ -23,4 +28,4 @@ var n = class {
23
28
  }
24
29
  };
25
30
  //#endregion
26
- export { n as HinkalRNWorker };
31
+ export { r as HinkalRNWorker };
@@ -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;