@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.
- package/common/src/crypto/babyJub.cjs +1 -1
- package/common/src/crypto/babyJub.mjs +12 -6
- package/common/src/crypto/eddsa.cjs +1 -1
- package/common/src/crypto/eddsa.mjs +12 -6
- package/common/src/crypto/poseidon.cjs +1 -1
- package/common/src/crypto/poseidon.mjs +12 -6
- package/common/src/crypto/preProcessing.cjs +1 -1
- package/common/src/crypto/preProcessing.mjs +23 -13
- package/common/src/crypto/rnCryptoBridge.cjs +1 -0
- package/common/src/crypto/rnCryptoBridge.d.ts +8 -0
- package/common/src/crypto/rnCryptoBridge.mjs +10 -0
- package/common/src/crypto/rnUtxoCrypto.cjs +1 -0
- package/common/src/crypto/rnUtxoCrypto.d.ts +14 -0
- package/common/src/crypto/rnUtxoCrypto.mjs +40 -0
- package/common/src/data-structures/Hinkal/hinkalClaimUtxo.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalClaimUtxo.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDeposit.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalDeposit.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalPrivateWallet.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalPrivateWallet.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaSwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaSwap.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSwap.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalSwap.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalWithdraw.d.ts +1 -3
- package/common/src/data-structures/Hinkal/hinkalWithdraw.mjs +21 -34
- package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.cjs +1 -1
- package/common/src/data-structures/Hinkal/hinkalWithdrawStuckUtxos.mjs +2 -2
- package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.cjs +1 -1
- package/common/src/data-structures/Hinkal/prepareDepositOnChainUtxosZkProof.mjs +1 -1
- package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.cjs +1 -1
- package/common/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.mjs +4 -4
- package/common/src/data-structures/utxo/Utxo.cjs +1 -1
- package/common/src/data-structures/utxo/Utxo.d.ts +1 -0
- package/common/src/data-structures/utxo/Utxo.mjs +19 -6
- package/common/src/functions/index.cjs +1 -1
- package/common/src/functions/index.mjs +0 -1
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.cjs +1 -1
- package/common/src/functions/pre-transaction/buildCommitmentValidationData.mjs +86 -47
- package/common/src/functions/pre-transaction/outputUtxoProcessing.cjs +1 -1
- package/common/src/functions/pre-transaction/outputUtxoProcessing.d.ts +2 -2
- package/common/src/functions/pre-transaction/outputUtxoProcessing.mjs +28 -22
- package/common/src/functions/snarkjs/constructGeneralZkProof.cjs +1 -1
- package/common/src/functions/snarkjs/constructGeneralZkProof.mjs +60 -65
- package/common/src/functions/snarkjs/generateMainAndCommitmentZkProof.cjs +1 -1
- package/common/src/functions/snarkjs/generateMainAndCommitmentZkProof.mjs +10 -21
- package/common/src/functions/snarkjs/generateZkProof.cjs +1 -1
- package/common/src/functions/snarkjs/generateZkProof.mjs +13 -24
- package/common/src/functions/snarkjs/generateZkProofEnclave.cjs +1 -1
- package/common/src/functions/snarkjs/generateZkProofEnclave.mjs +11 -14
- package/common/src/functions/snarkjs/generateZkProofSelf.cjs +1 -1
- package/common/src/functions/snarkjs/generateZkProofSelf.mjs +16 -22
- package/common/src/functions/utils/bigint-math.utils.cjs +1 -1
- package/common/src/functions/utils/bigint-math.utils.mjs +1 -12
- package/common/src/functions/utils/hinkalTiming.utils.cjs +1 -1
- package/common/src/functions/utils/hinkalTiming.utils.d.ts +4 -2
- package/common/src/functions/utils/hinkalTiming.utils.mjs +13 -10
- package/common/src/functions/utils/index.cjs +1 -1
- package/common/src/functions/utils/index.mjs +1 -1
- package/common/src/functions/utils/utxoPadding.utils.cjs +1 -0
- package/common/src/functions/utils/utxoPadding.utils.d.ts +2 -0
- package/common/src/functions/utils/utxoPadding.utils.mjs +14 -0
- package/common/src/functions/web3/events/getInputUtxoAndBalance.cjs +1 -1
- package/common/src/functions/web3/events/getInputUtxoAndBalance.mjs +72 -53
- package/common/src/functions/web3/events/getInputUtxosEnclave.cjs +1 -1
- package/common/src/functions/web3/events/getInputUtxosEnclave.mjs +20 -21
- package/common/src/functions/web3/events/getShieldedBalance.cjs +1 -1
- package/common/src/functions/web3/events/getShieldedBalance.mjs +34 -37
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.cjs +1 -0
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.d.ts +49 -0
- package/common/src/webworker/cryptoWorker/cryptoWorker.types.mjs +6 -0
- package/common/src/webworker/cryptoWorker/cryptoWorkerLauncher.d.ts +1 -0
- package/common/src/webworker/cryptoWorker/cryptoWorkerLogic.d.ts +2 -0
- package/common/src/webworker/logError-DFS-H2t0.js +2 -0
- package/common/src/webworker/package.json +1 -1
- package/common/src/webworker/performTaskWithWorker.cjs +1 -1
- package/common/src/webworker/performTaskWithWorker.mjs +6 -6
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/utxoWorkerNode.cjs +1 -1
- package/common/src/webworker/viteWorkerURL.constant.cjs +4 -3
- package/common/src/webworker/viteWorkerURL.constant.d.ts +1 -0
- package/common/src/webworker/viteWorkerURL.constant.mjs +4 -3
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
- package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
- package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
- package/package.json +1 -1
- package/react-native/HinkalWebViewWorker.cjs +76 -4
- package/react-native/HinkalWebViewWorker.mjs +152 -49
- package/react-native/bridge/HinkalRNWorker.cjs +1 -1
- package/react-native/bridge/HinkalRNWorker.d.ts +1 -0
- package/react-native/bridge/HinkalRNWorker.mjs +16 -11
- package/react-native/bridge/RnWebViewCryptoBridge.cjs +1 -0
- package/react-native/bridge/RnWebViewCryptoBridge.d.ts +7 -0
- package/react-native/bridge/RnWebViewCryptoBridge.mjs +49 -0
- package/react-native/shims/circomlibjs-hinkal-fork.js +2 -2
- package/react-native/shims/circomlibjs.js +2 -2
- package/react-native/workerCDNUrls.cjs +1 -1
- package/react-native/workerCDNUrls.d.ts +1 -0
- package/react-native/workerCDNUrls.mjs +2 -2
- package/sdk/package.json.cjs +1 -1
- package/sdk/package.json.mjs +1 -1
- package/common/src/crypto/BabyJubRN.cjs +0 -1
- package/common/src/crypto/BabyJubRN.mjs +0 -33
- package/common/src/crypto/EddsaRN.cjs +0 -1
- package/common/src/crypto/EddsaRN.mjs +0 -41
- 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.
|
|
18
|
-
[e.SnarkJS]: await getWorkerURL(domain + '/0.3.
|
|
19
|
-
[e.UTXO]: await getWorkerURL(domain + '/0.3.
|
|
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-
|
|
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-
|
|
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-
|
|
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,8 +1,13 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../common/src/webworker/workerFactory.cjs`),
|
|
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(
|
|
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 {
|
|
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;`,
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
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
|
|
11
|
-
|
|
12
|
-
var
|
|
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(
|
|
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 {
|
|
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;`,
|
|
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
|
|
178
|
+
} }), x = () => {
|
|
179
|
+
let n = d(null), r = d({
|
|
105
180
|
ready: !1,
|
|
106
181
|
queue: []
|
|
107
|
-
}), i =
|
|
108
|
-
let
|
|
182
|
+
}), i = l((e, t, r) => {
|
|
183
|
+
let i;
|
|
109
184
|
try {
|
|
110
|
-
|
|
111
|
-
requestId:
|
|
112
|
-
variant:
|
|
113
|
-
message:
|
|
114
|
-
},
|
|
115
|
-
} catch (
|
|
116
|
-
|
|
117
|
-
requestId:
|
|
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: ${
|
|
194
|
+
error: `serialize failed: ${t?.message ?? t}`
|
|
120
195
|
});
|
|
121
196
|
return;
|
|
122
197
|
}
|
|
123
|
-
|
|
198
|
+
n.current?.injectJavaScript(`window.handleMessage && window.handleMessage(${i}); true;`);
|
|
124
199
|
}, []);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
231
|
+
n = o(JSON.parse(e.nativeEvent.data));
|
|
140
232
|
} catch (e) {
|
|
141
|
-
|
|
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
|
-
|
|
149
|
-
let e =
|
|
150
|
-
|
|
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
|
-
|
|
256
|
+
f.emit("FROM_WEBVIEW_WORKER", n);
|
|
154
257
|
}, [i]);
|
|
155
|
-
return /* @__PURE__ */
|
|
258
|
+
return /* @__PURE__ */ g(m, {
|
|
156
259
|
pointerEvents: "none",
|
|
157
|
-
style:
|
|
158
|
-
children: /* @__PURE__ */
|
|
159
|
-
ref:
|
|
260
|
+
style: b.hiddenHost,
|
|
261
|
+
children: /* @__PURE__ */ g(h, {
|
|
262
|
+
ref: n,
|
|
160
263
|
source: {
|
|
161
|
-
html:
|
|
162
|
-
baseUrl:
|
|
264
|
+
html: y,
|
|
265
|
+
baseUrl: _
|
|
163
266
|
},
|
|
164
267
|
originWhitelist: ["*"],
|
|
165
268
|
javaScriptEnabled: !0,
|
|
166
269
|
domStorageEnabled: !0,
|
|
167
270
|
androidLayerType: "hardware",
|
|
168
|
-
onMessage:
|
|
169
|
-
onLoad: () =>
|
|
271
|
+
onMessage: s,
|
|
272
|
+
onLoad: () => n.current?.injectJavaScript(v)
|
|
170
273
|
})
|
|
171
274
|
});
|
|
172
275
|
};
|
|
173
276
|
//#endregion
|
|
174
|
-
export {
|
|
277
|
+
export { x as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./serialization.utils.cjs`);let
|
|
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;
|
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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
|
|
5
|
+
var r = class {
|
|
5
6
|
onmessage = null;
|
|
6
7
|
onerror = null;
|
|
7
|
-
requestId =
|
|
8
|
+
requestId = t();
|
|
9
|
+
sentAt = 0;
|
|
8
10
|
subscription;
|
|
9
|
-
constructor(
|
|
10
|
-
this.variant =
|
|
11
|
-
!
|
|
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(
|
|
15
|
-
|
|
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:
|
|
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 {
|
|
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
|
-
'
|
|
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
|
-
'
|
|
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`}
|
|
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;
|