@getpara/web-sdk 1.2.0 → 1.3.1

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/dist/index.js CHANGED
@@ -1,9 +1,4 @@
1
- export * from '@getpara/core-sdk';
2
- import { Para as ParaWeb } from './ParaWeb.js';
3
- import ParaCore from '@getpara/core-sdk';
4
- export { Environment, } from '@getpara/core-sdk';
5
- export { createCredential, generateSignature, parseCredentialCreationRes } from './cryptography/webAuth.js';
6
- export { truncateEthAddress } from './utils/truncateEthAddress.js';
7
- export * from './utils/isMobile.js';
8
- export { ParaWeb, ParaCore };
9
- export default ParaWeb;
1
+ "use client";
2
+ export*from"@getpara/core-sdk";import be from"@getpara/core-sdk";import{PopupType as C}from"@getpara/core-sdk";var v=class{constructor(){this.get=i=>typeof window<"u"&&localStorage.getItem(i)||null;this.set=(i,a)=>{typeof window<"u"&&localStorage.setItem(i,a)};this.removeItem=i=>{typeof window<"u"&&localStorage.removeItem(i)};this.clear=i=>{if(typeof window<"u")for(let a=0;a<localStorage.length;a++){let o=localStorage.key(a);o&&o.startsWith(i)&&(localStorage.removeItem(o),a--)}}}};var T=class{constructor(){this.get=i=>typeof window<"u"&&sessionStorage.getItem(i)||null;this.set=(i,a)=>{typeof window<"u"&&sessionStorage.setItem(i,a)};this.removeItem=i=>{typeof window<"u"&&sessionStorage.removeItem(i)};this.clear=i=>{if(typeof window<"u")for(let a=0;a<sessionStorage.length;a++){let o=sessionStorage.key(a);o&&o.startsWith(i)&&(sessionStorage.removeItem(o),a--)}}}};import{getPortalBaseURL as ye}from"@getpara/core-sdk";(()=>{let e=()=>{let o=new Error("not implemented");return o.code="ENOSYS",o};if(!globalThis.fs){let o="";globalThis.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync(s,n){o+=a.decode(n);let r=o.lastIndexOf(`
3
+ `);return r!=-1&&(console.log(o.substring(0,r)),o=o.substring(r+1)),n.length},write(s,n,r,l,g,u){if(r!==0||l!==n.length||g!==null){u(e());return}let d=this.writeSync(s,n);u(null,d)},chmod(s,n,r){r(e())},chown(s,n,r,l){l(e())},close(s,n){n(e())},fchmod(s,n,r){r(e())},fchown(s,n,r,l){l(e())},fstat(s,n){n(e())},fsync(s,n){n(null)},ftruncate(s,n,r){r(e())},lchown(s,n,r,l){l(e())},link(s,n,r){r(e())},lstat(s,n){n(e())},mkdir(s,n,r){r(e())},open(s,n,r,l){l(e())},read(s,n,r,l,g,u){u(e())},readdir(s,n){n(e())},readlink(s,n){n(e())},rename(s,n,r){r(e())},rmdir(s,n){n(e())},stat(s,n){n(e())},symlink(s,n,r){r(e())},truncate(s,n,r){r(e())},unlink(s,n){n(e())},utimes(s,n,r,l){l(e())}}}if(globalThis.process||(globalThis.process={getuid(){return-1},getgid(){return-1},geteuid(){return-1},getegid(){return-1},getgroups(){throw e()},pid:-1,ppid:-1,umask(){throw e()},cwd(){throw e()},chdir(){throw e()}}),!globalThis.crypto)throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)");if(globalThis.performance||(globalThis.performance=Date),!globalThis.TextEncoder)throw new Error("globalThis.TextEncoder is not available, polyfill required");if(!globalThis.TextDecoder)throw new Error("globalThis.TextDecoder is not available, polyfill required");let i=new TextEncoder("utf-8"),a=new TextDecoder("utf-8");globalThis.Go=class{constructor(){this.argv=["js"],this.env={},this.exit=t=>{t!==0&&console.warn("exit code:",t)},this._exitPromise=new Promise(t=>{this._resolveExitPromise=t}),this._pendingEvent=null,this._scheduledTimeouts=new Map,this._nextCallbackTimeoutID=1;let o=(t,c)=>{this.mem.setUint32(t+0,c,!0),this.mem.setUint32(t+4,Math.floor(c/4294967296),!0)},s=(t,c)=>{this.mem.setUint32(t+0,c,!0)},n=t=>{let c=this.mem.getUint32(t+0,!0),m=this.mem.getInt32(t+4,!0);return c+m*4294967296},r=t=>{let c=this.mem.getFloat64(t,!0);if(c===0)return;if(!isNaN(c))return c;let m=this.mem.getUint32(t,!0);return this._values[m]},l=(t,c)=>{if(typeof c=="number"&&c!==0){if(isNaN(c)){this.mem.setUint32(t+4,2146959360,!0),this.mem.setUint32(t,0,!0);return}this.mem.setFloat64(t,c,!0);return}if(c===void 0){this.mem.setFloat64(t,0,!0);return}let p=this._ids.get(c);p===void 0&&(p=this._idPool.pop(),p===void 0&&(p=this._values.length),this._values[p]=c,this._goRefCounts[p]=0,this._ids.set(c,p)),this._goRefCounts[p]++;let y=0;switch(typeof c){case"object":c!==null&&(y=1);break;case"string":y=2;break;case"symbol":y=3;break;case"function":y=4;break}this.mem.setUint32(t+4,2146959360|y,!0),this.mem.setUint32(t,p,!0)},g=t=>{let c=n(t+0),m=n(t+8);return new Uint8Array(this._inst.exports.mem.buffer,c,m)},u=t=>{let c=n(t+0),m=n(t+8),p=new Array(m);for(let y=0;y<m;y++)p[y]=r(c+y*8);return p},d=t=>{let c=n(t+0),m=n(t+8);return a.decode(new DataView(this._inst.exports.mem.buffer,c,m))},f=Date.now()-performance.now();this.importObject={_gotest:{add:(t,c)=>t+c},gojs:{"runtime.wasmExit":t=>{t>>>=0;let c=this.mem.getInt32(t+8,!0);this.exited=!0,delete this._inst,delete this._values,delete this._goRefCounts,delete this._ids,delete this._idPool,this.exit(c)},"runtime.wasmWrite":t=>{t>>>=0;let c=n(t+8),m=n(t+16),p=this.mem.getInt32(t+24,!0);fs.writeSync(c,new Uint8Array(this._inst.exports.mem.buffer,m,p))},"runtime.resetMemoryDataView":t=>{t>>>=0,this.mem=new DataView(this._inst.exports.mem.buffer)},"runtime.nanotime1":t=>{t>>>=0,o(t+8,(f+performance.now())*1e6)},"runtime.walltime":t=>{t>>>=0;let c=new Date().getTime();o(t+8,c/1e3),this.mem.setInt32(t+16,c%1e3*1e6,!0)},"runtime.scheduleTimeoutEvent":t=>{t>>>=0;let c=this._nextCallbackTimeoutID;this._nextCallbackTimeoutID++,this._scheduledTimeouts.set(c,setTimeout(()=>{for(this._resume();this._scheduledTimeouts.has(c);)console.warn("scheduleTimeoutEvent: missed timeout event"),this._resume()},n(t+8))),this.mem.setInt32(t+16,c,!0)},"runtime.clearTimeoutEvent":t=>{t>>>=0;let c=this.mem.getInt32(t+8,!0);clearTimeout(this._scheduledTimeouts.get(c)),this._scheduledTimeouts.delete(c)},"runtime.getRandomData":t=>{t>>>=0,crypto.getRandomValues(g(t+8))},"syscall/js.finalizeRef":t=>{t>>>=0;let c=this.mem.getUint32(t+8,!0);if(this._goRefCounts[c]--,this._goRefCounts[c]===0){let m=this._values[c];this._values[c]=null,this._ids.delete(m),this._idPool.push(c)}},"syscall/js.stringVal":t=>{t>>>=0,l(t+24,d(t+8))},"syscall/js.valueGet":t=>{t>>>=0;let c=Reflect.get(r(t+8),d(t+16));t=this._inst.exports.getsp()>>>0,l(t+32,c)},"syscall/js.valueSet":t=>{t>>>=0,Reflect.set(r(t+8),d(t+16),r(t+32))},"syscall/js.valueDelete":t=>{t>>>=0,Reflect.deleteProperty(r(t+8),d(t+16))},"syscall/js.valueIndex":t=>{t>>>=0,l(t+24,Reflect.get(r(t+8),n(t+16)))},"syscall/js.valueSetIndex":t=>{t>>>=0,Reflect.set(r(t+8),n(t+16),r(t+24))},"syscall/js.valueCall":t=>{t>>>=0;try{let c=r(t+8),m=Reflect.get(c,d(t+16)),p=u(t+32),y=Reflect.apply(m,c,p);t=this._inst.exports.getsp()>>>0,l(t+56,y),this.mem.setUint8(t+64,1)}catch(c){t=this._inst.exports.getsp()>>>0,l(t+56,c),this.mem.setUint8(t+64,0)}},"syscall/js.valueInvoke":t=>{t>>>=0;try{let c=r(t+8),m=u(t+16),p=Reflect.apply(c,void 0,m);t=this._inst.exports.getsp()>>>0,l(t+40,p),this.mem.setUint8(t+48,1)}catch(c){t=this._inst.exports.getsp()>>>0,l(t+40,c),this.mem.setUint8(t+48,0)}},"syscall/js.valueNew":t=>{t>>>=0;try{let c=r(t+8),m=u(t+16),p=Reflect.construct(c,m);t=this._inst.exports.getsp()>>>0,l(t+40,p),this.mem.setUint8(t+48,1)}catch(c){t=this._inst.exports.getsp()>>>0,l(t+40,c),this.mem.setUint8(t+48,0)}},"syscall/js.valueLength":t=>{t>>>=0,o(t+16,parseInt(r(t+8).length))},"syscall/js.valuePrepareString":t=>{t>>>=0;let c=i.encode(String(r(t+8)));l(t+16,c),o(t+24,c.length)},"syscall/js.valueLoadString":t=>{t>>>=0;let c=r(t+8);g(t+16).set(c)},"syscall/js.valueInstanceOf":t=>{t>>>=0,this.mem.setUint8(t+24,r(t+8)instanceof r(t+16)?1:0)},"syscall/js.copyBytesToGo":t=>{t>>>=0;let c=g(t+8),m=r(t+32);if(!(m instanceof Uint8Array||m instanceof Uint8ClampedArray)){this.mem.setUint8(t+48,0);return}let p=m.subarray(0,c.length);c.set(p),o(t+40,p.length),this.mem.setUint8(t+48,1)},"syscall/js.copyBytesToJS":t=>{t>>>=0;let c=r(t+8),m=g(t+16);if(!(c instanceof Uint8Array||c instanceof Uint8ClampedArray)){this.mem.setUint8(t+48,0);return}let p=m.subarray(0,c.length);c.set(p),o(t+40,p.length),this.mem.setUint8(t+48,1)},debug:t=>{console.log(t)}}}}async run(o){if(!(o instanceof WebAssembly.Instance))throw new Error("Go.run: WebAssembly.Instance expected");this._inst=o,this.mem=new DataView(this._inst.exports.mem.buffer),this._values=[NaN,0,null,!0,!1,globalThis,this],this._goRefCounts=new Array(this._values.length).fill(1/0),this._ids=new Map([[0,1],[null,2],[!0,3],[!1,4],[globalThis,5],[this,6]]),this._idPool=[],this.exited=!1;let s=4096,n=f=>{let t=s,c=i.encode(f+"\0");return new Uint8Array(this.mem.buffer,s,c.length).set(c),s+=c.length,s%8!==0&&(s+=8-s%8),t},r=this.argv.length,l=[];this.argv.forEach(f=>{l.push(n(f))}),l.push(0),Object.keys(this.env).sort().forEach(f=>{l.push(n(`${f}=${this.env[f]}`))}),l.push(0);let u=s;if(l.forEach(f=>{this.mem.setUint32(s,f,!0),this.mem.setUint32(s+4,0,!0),s+=8}),s>=12288)throw new Error("total length of command line and environment variables exceeds limit");this._inst.exports.run(r,u),this.exited&&this._resolveExitPromise(),await this._exitPromise}_resume(){if(this.exited)throw new Error("Go program has already exited");this._inst.exports.resume(),this.exited&&this._resolveExitPromise()}_makeFuncWrapper(o){let s=this;return function(){let n={id:o,this:this,args:arguments};return s._pendingEvent=n,s._resume(),n.result}}}})();import{getBaseMPCNetworkUrl as h,WalletScheme as P,WalletType as W}from"@getpara/core-sdk";var ae=(e,i,a)=>`{"ServerUrl":"${e}", "WalletId": "${i}", "Id":"${a}", "Ids":["USER","CAPSULE"], "Threshold":1}`,K=(e,i,a)=>`{"walletId": "${e}", "id":"${i}", "otherId":"CAPSULE", "isReceiver": false, "disableWebSockets": ${a}}`;async function le(e,i,a,o){let{data:s}=await e.mpcComputationClient.post("/wallets",{userId:i,walletId:a,protocolId:o});return s}async function ce(e,i,a,o,s,n){let{data:r}=await e.mpcComputationClient.post(`/wallets/${a}/messages/sign`,{userId:i,protocolId:o,message:s,signer:n});return r}async function U(e,i,a,o,s,n,r){let{data:l}=await e.mpcComputationClient.post(`/wallets/${a}/transactions/send`,{userId:i,protocolId:o,transaction:s,signer:n,chainId:r});return l}async function _(e,i){let{walletId:a,protocolId:o}=await e.client.createWallet(i,{scheme:P.ED25519,type:W.SOLANA}),s=h(e.env,!e.disableWebSockets);return{signer:await new Promise((r,l)=>globalThis.ed25519CreateAccount(s,a,o,(g,u)=>{g&&l(g),r(u)})),walletId:a}}async function O(e,i,a){let{walletId:o,protocolId:s}=await e.client.createPregenWallet({pregenIdentifier:i,pregenIdentifierType:a,scheme:P.ED25519,type:W.SOLANA}),n=h(e.env,!e.disableWebSockets);return{signer:await new Promise((l,g)=>globalThis.ed25519CreateAccount(n,o,s,(u,d)=>{u&&g(u),l(d)})),walletId:o}}async function L(e,i,a,o,s){let{protocolId:n}=await e.client.preSignMessage(a,o,s,P.ED25519);return{signature:await new Promise((l,g)=>globalThis.ed25519Sign(i,n,s,(u,d)=>{u&&g(u),l(d)}))}}async function M(e,i,a,o){let{walletId:s,protocolId:n}=await e.client.createWallet(i,{useTwoSigners:!0,scheme:e.useDKLS?P.DKLS:P.CGGMP,type:a,cosmosPrefix:a===W.COSMOS?e.cosmosPrefix:void 0});if(e.offloadMPCComputationURL&&!e.useDKLS)return{signer:(await le(e,i,s,n)).signer,walletId:s};let r=h(e.env,!e.disableWebSockets),l=e.useDKLS?K(s,"USER",e.disableWebSockets):ae(r,s,"USER"),g=e.useDKLS?globalThis.dklsCreateAccount:globalThis.createAccountV2;return{signer:await new Promise((d,f)=>g(l,r,n,o,()=>{},(t,c)=>{t&&f(t),d(c)})),walletId:s}}async function D(e,i,a,o,s,n){let{walletId:r,protocolId:l}=await e.client.createPregenWallet({pregenIdentifier:a,pregenIdentifierType:o,type:s,cosmosPrefix:s===W.COSMOS?e.cosmosPrefix:void 0}),g=h(e.env,!e.disableWebSockets),u=K(r,"USER",e.disableWebSockets);return{signer:await new Promise((f,t)=>globalThis.dklsCreateAccount(u,g,l,n,()=>{},(c,m)=>{c&&t(c),f(m)})),walletId:r}}async function N(e,i,a,o,s,n){let{protocolId:r,pendingTransactionId:l}=await e.client.preSignMessage(o,a,s,null,n);if(l)return{pendingTransactionId:l};if(e.offloadMPCComputationURL&&!e.useDKLS)return ce(e,o,a,r,s,i);let g=h(e.env,!e.disableWebSockets),u=e.useDKLS?globalThis.dklsSignMessage:globalThis.signMessage,d=JSON.parse(i);return!d.disableWebSockets!=!e.disableWebSockets&&(d.disableWebSockets=e.disableWebSockets),i=JSON.stringify(d),new Promise((f,t)=>u(i,g,s,r,(c,m)=>{c&&t(c),f({signature:m})}))}async function B(e,i,a,o,s,n){let{data:{protocolId:r,pendingTransactionId:l}}=await e.client.signTransaction(o,a,{transaction:s,chainId:n});if(l)return{pendingTransactionId:l};if(e.offloadMPCComputationURL&&!e.useDKLS)return U(e,o,a,r,s,i,n);let g=h(e.env,!e.disableWebSockets),u=e.useDKLS?globalThis.dklsSendTransaction:globalThis.sendTransaction,d=JSON.parse(i);return!d.disableWebSockets!=!e.disableWebSockets&&(d.disableWebSockets=e.disableWebSockets),i=JSON.stringify(d),new Promise((f,t)=>u(i,g,s,n,r,(c,m)=>{c&&t(c),f({signature:m})}))}async function x(e,i,a,o,s,n){let{data:{protocolId:r,pendingTransactionId:l}}=await e.client.sendTransaction(o,a,{transaction:s,chainId:n});if(l)return{pendingTransactionId:l};if(e.offloadMPCComputationURL&&!e.useDKLS)return U(e,o,a,r,s,i,n);let g=h(e.env,!e.disableWebSockets),u=e.useDKLS?globalThis.dklsSendTransaction:globalThis.sendTransaction,d=JSON.parse(i);return!d.disableWebSockets!=!e.disableWebSockets&&(d.disableWebSockets=e.disableWebSockets),i=JSON.stringify(d),new Promise((f,t)=>u(i,g,s,n,r,(c,m)=>{c&&t(c),f({signature:m})}))}async function j(e,i,a,o,s,n,r){let{data:{protocolId:l}}=await e.client.refreshKeys(o,a,s,n,r),g=h(e.env,!e.disableWebSockets),u=e.useDKLS?globalThis.dklsRefresh:globalThis.refresh,d=JSON.parse(i);return!d.disableWebSockets!=!e.disableWebSockets&&(d.disableWebSockets=e.disableWebSockets),i=JSON.stringify(d),new Promise((f,t)=>u(i,g,l,(c,m)=>{c&&t(c),f({protocolId:l,signer:m})}))}async function G(e,i,a,o){let s=await e.client.getParaShare(o,a);return s?new Promise((n,r)=>globalThis.getPrivateKey(i,s,(l,g)=>{l&&r(l),n(g)})):""}import{getPortalBaseURL as ue,initClient as de,mpcComputationClient as me,paraVersion as fe,WalletType as H}from"@getpara/core-sdk";async function pe(e,i){if(typeof self>"u")return;let a=new self.Go,o=i;if(!o){if(process.env.DISABLE_WASM_FETCH==="true")throw new Error("fetching wasm file is disabled");o=await(await fetch(`${ue(e)}/static/js/main.wasm`,{mode:"cors"})).arrayBuffer()}let s=await WebAssembly.instantiate(o,a.importObject);a.run(s.instance)}async function we(e,i){let{functionType:a,params:o,returnObject:s}=i;switch(a){case"KEYGEN":{let{userId:n,secretKey:r,type:l=H.EVM}=o;return await M(e,n,l,r)}case"SIGN_TRANSACTION":{let{share:n,walletId:r,userId:l,tx:g,chainId:u}=o;return B(e,n,r,l,g,u)}case"SEND_TRANSACTION":{let{share:n,walletId:r,userId:l,tx:g,chainId:u}=o;return x(e,n,r,l,g,u)}case"SIGN_MESSAGE":{let{share:n,walletId:r,userId:l,message:g,cosmosSignDoc:u}=o;return N(e,n,r,l,g,u)}case"REFRESH":{let{share:n,walletId:r,userId:l,oldPartnerId:g,newPartnerId:u,keyShareProtocolId:d}=o,{protocolId:f,signer:t}=await j(e,n,r,l,g,u,d);return s?{protocolId:f,signer:t}:t}case"PREKEYGEN":{let{email:n,partnerId:r,secretKey:l,type:g=H.EVM}=o,{pregenIdentifier:u,pregenIdentifierType:d}=o;return n!=="null"&&n!=="undefined"&&n!==""&&n!=null&&(u=n,d="EMAIL"),await D(e,r,u,d,g,l)}case"GET_PRIVATE_KEY":{let{share:n,walletId:r,userId:l}=o;return await G(e,n,r,l)}case"ED25519_KEYGEN":{let{userId:n}=o;return _(e,n)}case"ED25519_SIGN":{let{share:n,walletId:r,userId:l,base64Bytes:g}=o;return L(e,n,l,r,g)}case"ED25519_PREKEYGEN":{let{email:n}=o,{pregenIdentifier:r,pregenIdentifierType:l}=o;return n!=="null"&&n!=="undefined"&&n!==""&&n!=null&&(r=n,l="EMAIL"),O(e,r,l)}default:throw new Error(`functionType: ${a} not supported`)}}async function V(e,i,a){let{env:o,apiKey:s,cosmosPrefix:n="cosmos",offloadMPCComputationURL:r,disableWorkers:l,sessionCookie:g,useDKLS:u,disableWebSockets:d,wasmOverride:f}=e.data;if(!o)return!0;let t={env:o,apiKey:s,cosmosPrefix:n,client:de({env:o,version:fe,apiKey:s,useFetchAdapter:a,retrieveSessionCookie:()=>g}),offloadMPCComputationURL:r,mpcComputationClient:r?me.initClient(r,!!l):void 0,useDKLS:u,disableWebSockets:!!d,wasmOverride:f};(!t.offloadMPCComputationURL||t.useDKLS)&&await pe(t,f);let c=await we(t,e.data);return i(c),!1}async function w(e,i){let a=s=>{s.data.functionType!=="CUSTOM"&&i(s.data)};if(e.disableWorkers)return{postMessage:function(n){(async function(){await V({data:n},r=>a({data:r}),e.disableWorkers)})()},terminate:()=>{}};let o;if(e.useLocalFiles)throw new Error("useLocalFiles only supported locally");{let s=await fetch(`${ye(e)}/static/js/mpcWorker-bundle.js`),n=new Blob([await s.text()],{type:"application/javascript"}),r=URL.createObjectURL(n);o=new Worker(r)}return o.onmessage=a,o}import{distributeNewShare as he,waitUntilTrue as k}from"@getpara/core-sdk";async function F(e,i,a){return!!(await e.client.getWallets(i)).data.wallets.find(n=>n.id===a).address}async function Se(e,i,a,o,s){let{isDone:n}=await e.client.isRefreshDone(i,a,o,s);return n}async function $(e,i,a,o){return!!(await e.client.getPregenWallets({[a]:[i]})).wallets.find(r=>r.id===o).address}function J(e,i,a,o,s=!1,n,r={}){return new Promise(async l=>{let g=await w(e,async u=>{if(await k(async()=>F(e,i,u.walletId),15e3,1e3),s){l({signer:u.signer,walletId:u.walletId,recoveryShare:null}),g.terminate();return}let d=await he({ctx:e,userId:i,walletId:u.walletId,userShare:u.signer,emailProps:r});l({signer:u.signer,walletId:u.walletId,recoveryShare:d}),g.terminate()});g.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:{userId:i,secretKey:o,type:a},functionType:"KEYGEN",offloadMPCComputationURL:e.offloadMPCComputationURL,disableWorkers:e.disableWorkers,sessionCookie:n,useDKLS:e.useDKLS,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}function Y(e,i,a,o,s,n=!1,r,l){return new Promise(async g=>{let u=await w(e,async t=>{await k(async()=>$(e,i,a,t.walletId),15e3,1e3),g({signer:t.signer,walletId:t.walletId,recoveryShare:null}),u.terminate()}),f={pregenIdentifier:i,pregenIdentifierType:a,type:o,secretKey:s,partnerId:r,email:void 0};a==="EMAIL"&&(f.email=i),u.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:f,functionType:"PREKEYGEN",offloadMPCComputationURL:e.offloadMPCComputationURL,disableWorkers:e.disableWorkers,sessionCookie:l,useDKLS:e.useDKLS,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}function q(e,i,a,o,s,n,r,l){return new Promise(async g=>{let u=await w(e,async d=>{if(!await k(async()=>Se(e,a,o,r),15e3,1e3))throw new Error("refresh failed");let{protocolId:f,signer:t}=d;g({signer:t,protocolId:f}),u.terminate()});u.postMessage({env:e.env,apiKey:e.apiKey,params:{userId:a,walletId:o,share:s,oldPartnerId:n,newPartnerId:r,keyShareProtocolId:l},functionType:"REFRESH",disableWorkers:e.disableWorkers,sessionCookie:i,useDKLS:e.useDKLS,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride,returnObject:!0})})}function z(e,i,a,o={}){return new Promise(async s=>{let n=await w(e,async r=>{await k(async()=>F(e,i,r.walletId),15e3,1e3),s({signer:r.signer,walletId:r.walletId,recoveryShare:null}),n.terminate()});n.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:{userId:i},functionType:"ED25519_KEYGEN",disableWorkers:e.disableWorkers,sessionCookie:a,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}function Z(e,i,a,o){return new Promise(async s=>{let n=await w(e,async g=>{await k(async()=>$(e,i,a,g.walletId),15e3,1e3),s({signer:g.signer,walletId:g.walletId,recoveryShare:null}),n.terminate()}),l={pregenIdentifier:i,pregenIdentifierType:a,email:void 0};a==="EMAIL"&&(l.email=i),n.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:l,functionType:"ED25519_PREKEYGEN",disableWorkers:e.disableWorkers,sessionCookie:o,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}async function X(e,i,a,o,s,n,r,l){return await new Promise(async g=>{let u=await w(e,async d=>{g(d),u.terminate()});u.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:{share:o,walletId:a,userId:i,tx:s,chainId:n},functionType:"SIGN_TRANSACTION",offloadMPCComputationURL:e.offloadMPCComputationURL,disableWorkers:e.disableWorkers,sessionCookie:r,useDKLS:l,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}async function Q(e,i,a,o,s,n,r,l){return await new Promise(async g=>{let u=await w(e,async d=>{g(d),u.terminate()});u.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:{share:o,walletId:a,userId:i,tx:s,chainId:n},functionType:"SEND_TRANSACTION",offloadMPCComputationURL:e.offloadMPCComputationURL,disableWorkers:e.disableWorkers,sessionCookie:r,useDKLS:l,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}async function ee(e,i,a,o,s,n,r,l){return await new Promise(async g=>{let u=await w(e,async d=>{g(d),u.terminate()});u.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:{share:o,walletId:a,userId:i,message:s,cosmosSignDoc:l},functionType:"SIGN_MESSAGE",offloadMPCComputationURL:e.offloadMPCComputationURL,disableWorkers:e.disableWorkers,sessionCookie:n,useDKLS:r,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}async function te(e,i,a,o,s,n){return await new Promise(async r=>{let l=await w(e,async g=>{r(g),l.terminate()});l.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:{share:o,walletId:a,userId:i,base64Bytes:s},functionType:"ED25519_SIGN",disableWorkers:e.disableWorkers,sessionCookie:n,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}async function ne(e,i,a,o,s){return await new Promise(async n=>{let r=await w(e,async l=>{n(l),r.terminate()});r.postMessage({env:e.env,apiKey:e.apiKey,cosmosPrefix:e.cosmosPrefix,params:{share:o,walletId:a,userId:i},functionType:"GET_PRIVATE_KEY",offloadMPCComputationURL:e.offloadMPCComputationURL,disableWorkers:e.disableWorkers,sessionCookie:s,useDKLS:e.useDKLS,disableWebSockets:e.disableWebSockets,wasmOverride:e.wasmOverride})})}var E=class{constructor(){this.localStorage=new v;this.sessionStorage=new T;this.secureStorage=null;this.isSyncStorage=!0;this.disableProviderModal=!1}getPrivateKey(i,a,o,s,n){return ne(i,a,o,s,n)}keygen(i,a,o,s,n,r={}){return J(i,a,o,s,!0,n,r)}refresh(i,a,o,s,n,r,l,g){return q(i,a,o,s,n,r,l,g)}preKeygen(i,a,o,s,n,r,l){return Y(i,o,s,n,r,!1,a,l)}signMessage(i,a,o,s,n,r,l,g){return ee(i,a,o,s,n,r,l,g)}signTransaction(i,a,o,s,n,r,l,g){return X(i,a,o,s,n,r,l,g)}sendTransaction(i,a,o,s,n,r,l,g){return Q(i,a,o,s,n,r,l,g)}signHash(i,a){throw new Error("not implemented")}ed25519Keygen(i,a,o,s){return z(i,a,o,s)}ed25519PreKeygen(i,a,o,s){return Z(i,a,o,s)}ed25519Sign(i,a,o,s,n,r){return te(i,a,o,s,n,r)}openPopup(i,a){if(!(typeof window>"u"))if(a){let{type:o}=a,s=550,n;switch(o){case C.LOGIN_PASSKEY:{n=798;break}case C.CREATE_PASSKEY:{n=464;break}case C.SIGN_MESSAGE_REVIEW:{n=585;break}case C.SIGN_TRANSACTION_REVIEW:{n=750;break}case C.OAUTH:default:{n=768;break}}let r=window.screenLeft!==void 0?window.screenLeft:window.screenX,l=window.screenTop!==void 0?window.screenTop:window.screenY,g=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,u=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,d=(g-s)/2+r,f=(u-n)/2+l,t=`toolbar=no, menubar=no, width=${s},
4
+ height=${n}, top=${f}, left=${d}`,c=window.open(i,o.toString(),t);return c||setTimeout(()=>{c=window.open(i,"_blank")},0),c}else{let o=window.open(i,"popup","popup=true,width=400,height=500");return o||setTimeout(()=>{window.open(i,"_blank")},0),o}}};var I=class extends be{getPlatformUtils(){return new E}};import _t from"@getpara/core-sdk";import{Environment as Nt}from"@getpara/core-sdk";import b from"base64url";import*as A from"cbor-web";import S from"node-forge";import{getPortalDomain as re}from"@getpara/core-sdk";var se=-7,ie=-257;function R(e){if(e instanceof ArrayBuffer)return b.encode(e);if(e instanceof Array)return e.map(R);if(e instanceof Object){let i={};for(let a in e)i[a]=R(e[a]);return i}else return e}function Pe(e){let i=e.slice(0,32);e=e.slice(32);let a=e.slice(0,1);e=e.slice(1);let o=a[0],s=e.slice(0,4);e=e.slice(4);let n=s.readUInt32BE(0),r=e.slice(0,16);e=e.slice(16);let l=e.slice(0,2);e=e.slice(2);let g=l.readUInt16BE(0),u=e.slice(0,g);return e=e.slice(g),{rpIdHash:i,flagsBuf:a,flags:o,counter:n,counterBuf:s,aaguid:r,credID:u,COSEPublicKey:e}}function ke(e){let i=b.toBuffer(e);return A.decodeAllSync(i)[0]}function Ce(e){let i=A.decodeAllSync(e)[0],a=Buffer.from([4]),o=i.get(-2),s=i.get(-3);return Buffer.concat([a,o,s])}function ve(e){let i=A.decodeAllSync(e)[0],a=i.get(-1),o=i.get(-2),s=S.util.createBuffer(a.toString("binary")),n=S.util.createBuffer(o.toString("binary")),r=S.pki.setRsaPublicKey(new S.jsbn.BigInteger(s.toHex(),16),new S.jsbn.BigInteger(n.toHex(),16));return Buffer.from(S.pki.publicKeyToPem(r),"utf-8")}function Te(e,i){let a=ke(e.response.attestationObject),{COSEPublicKey:o,aaguid:s}=Pe(a.authData);return i===ie?{cosePublicKey:b.encode(ve(o)),clientDataJSON:e.response.clientDataJSON,aaguid:s.toString("hex")}:{cosePublicKey:b.encode(Ce(o)),clientDataJSON:e.response.clientDataJSON,aaguid:s.toString("hex")}}function We(){let e=new Uint8Array(32);return window.crypto.getRandomValues(e),e}async function Ee(e,i,a,o){if(typeof navigator>"u")return;let s=We(),n={publicKey:{authenticatorSelection:{authenticatorAttachment:"platform",requireResidentKey:!0,residentKey:"required",userVerification:"required"},rp:{id:re(e,o),name:"Para"},user:{id:s,name:a,displayName:a},pubKeyCredParams:[{type:"public-key",alg:se},{type:"public-key",alg:ie}],attestation:"direct",timeout:6e4,challenge:Buffer.from(i,"utf-8")}},r=await navigator.credentials.create(n),l=r.response.getPublicKeyAlgorithm?r.response.getPublicKeyAlgorithm():se,g=b.encode(Buffer.from(s));return{creds:R(r),userHandle:g,algorithm:l}}async function Ie(e,i,a,o){let s={publicKey:{timeout:6e4,challenge:Buffer.from(i,"base64"),allowCredentials:a.map(r=>({id:b.toBuffer(r),type:"public-key"})),userVerification:"required",rpId:re(e,o)}},n=await navigator.credentials.get(s);return R(n)}var Re=/^(0x[a-zA-Z0-9]{4})[a-zA-Z0-9]+([a-zA-Z0-9]{4})$/,Ae=e=>{let i=e.match(Re);return i?`${i[1]}\u2026${i[2]}`:e};function Ke(){return typeof navigator<"u"&&/android/i.test(navigator.userAgent)}function Ue(){return typeof navigator<"u"&&/iPhone|iPod/.test(navigator.userAgent)}function _e(){return typeof navigator<"u"&&(/iPad/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1)}function Wt(){return typeof navigator<"u"&&/(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(navigator.userAgent)}function oe(){return Ue()||_e()}function Oe(){return Ke()||oe()}function Le(){return typeof navigator<"u"&&/AppleWebKit/i.test(navigator.userAgent)&&!/CriOS/i.test(navigator.userAgent)&&!/Chrome/i.test(navigator.userAgent)}function Et(){let e=typeof navigator<"u"&&!navigator.standalone;return typeof navigator<"u"&&oe()&&!e&&!/safari/i.test(navigator.userAgent.toLowerCase())}function It(){return Oe()&&Le()}function Rt(){return typeof window<"u"&&(!!window.TelegramWebviewProxy||!!window.Telegram||!!window.TelegramWebviewProxyProto)}var Ot=I;export{Nt as Environment,_t as ParaCore,I as ParaWeb,Ee as createCredential,Ot as default,Ie as generateSignature,Ke as isAndroid,oe as isIOS,Et as isIOSWebview,_e as isLargeIOS,Oe as isMobile,It as isMobileSafari,Le as isSafari,Ue as isSmallIOS,Wt as isTablet,Rt as isTelegram,Te as parseCredentialCreationRes,Ae as truncateEthAddress};
Binary file
Binary file
@@ -1,128 +1,3 @@
1
- // ANY CHANGES TO THIS FILE REQUIRE A REBUILD OF THE WORKER
2
- // FILE IN THE PORTAL!
3
- // run `yarn build` to rebuild the worker file
4
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
- return new (P || (P = Promise))(function (resolve, reject) {
7
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
- step((generator = generator.apply(thisArg, _arguments || [])).next());
11
- });
12
- };
13
- import '../wasm/wasm_exec.js';
14
- import * as walletUtils from './walletUtils.js';
15
- import { getPortalBaseURL, initClient, mpcComputationClient, paraVersion, WalletType, } from '@getpara/core-sdk';
16
- function loadWasm(ctx, wasmOverride) {
17
- return __awaiter(this, void 0, void 0, function* () {
18
- // @ts-ignore
19
- const goWasm = new self.Go();
20
- let wasmArrayBuffer = wasmOverride;
21
- if (!wasmArrayBuffer) {
22
- if (process.env.DISABLE_WASM_FETCH === 'true') {
23
- throw new Error('fetching wasm file is disabled');
24
- }
25
- const fetchedWasm = yield fetch(`${getPortalBaseURL(ctx)}/static/js/main.wasm`, { mode: 'cors' });
26
- wasmArrayBuffer = yield fetchedWasm.arrayBuffer();
27
- }
28
- const newRes = yield WebAssembly.instantiate(wasmArrayBuffer, goWasm.importObject);
29
- goWasm.run(newRes.instance);
30
- });
31
- }
32
- function executeMessage(ctx, message) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- const { functionType, params, returnObject } = message;
35
- switch (functionType) {
36
- case 'KEYGEN': {
37
- const { userId, secretKey, type = WalletType.EVM } = params;
38
- const keygenRes = yield walletUtils.keygen(ctx, userId, type, secretKey);
39
- return keygenRes;
40
- }
41
- case 'SIGN_TRANSACTION': {
42
- const { share, walletId, userId, tx, chainId } = params;
43
- return walletUtils.signTransaction(ctx, share, walletId, userId, tx, chainId);
44
- }
45
- case 'SEND_TRANSACTION': {
46
- const { share, walletId, userId, tx, chainId } = params;
47
- return walletUtils.sendTransaction(ctx, share, walletId, userId, tx, chainId);
48
- }
49
- case 'SIGN_MESSAGE': {
50
- const { share, walletId, userId, message, cosmosSignDoc } = params;
51
- return walletUtils.signMessage(ctx, share, walletId, userId, message, cosmosSignDoc);
52
- }
53
- case 'REFRESH': {
54
- const { share, walletId, userId, oldPartnerId, newPartnerId, keyShareProtocolId } = params;
55
- const { protocolId, signer } = yield walletUtils.refresh(ctx, share, walletId, userId, oldPartnerId, newPartnerId, keyShareProtocolId);
56
- return returnObject ? { protocolId, signer } : signer;
57
- }
58
- case 'PREKEYGEN': {
59
- const { email, partnerId, secretKey, type = WalletType.EVM } = params;
60
- let { pregenIdentifier, pregenIdentifierType } = params;
61
- if (email !== 'null' && email !== 'undefined' && email !== '' && email != null) {
62
- pregenIdentifier = email;
63
- pregenIdentifierType = 'EMAIL';
64
- }
65
- const keygenRes = yield walletUtils.preKeygen(ctx, partnerId, pregenIdentifier, pregenIdentifierType, type, secretKey);
66
- return keygenRes;
67
- }
68
- case 'GET_PRIVATE_KEY': {
69
- const { share, walletId, userId } = params;
70
- return yield walletUtils.getPrivateKey(ctx, share, walletId, userId);
71
- }
72
- case 'ED25519_KEYGEN': {
73
- const { userId } = params;
74
- return walletUtils.ed25519Keygen(ctx, userId);
75
- }
76
- case 'ED25519_SIGN': {
77
- const { share, walletId, userId, base64Bytes } = params;
78
- return walletUtils.ed25519Sign(ctx, share, userId, walletId, base64Bytes);
79
- }
80
- case 'ED25519_PREKEYGEN': {
81
- const { email } = params;
82
- let { pregenIdentifier, pregenIdentifierType } = params;
83
- if (email !== 'null' && email !== 'undefined' && email !== '' && email != null) {
84
- pregenIdentifier = email;
85
- pregenIdentifierType = 'EMAIL';
86
- }
87
- return walletUtils.ed25519PreKeygen(ctx, pregenIdentifier, pregenIdentifierType);
88
- }
89
- default: {
90
- throw new Error(`functionType: ${functionType} not supported`);
91
- }
92
- }
93
- });
94
- }
95
- export function handleMessage(e, postMessage, useFetchAdapter) {
96
- return __awaiter(this, void 0, void 0, function* () {
97
- const { env, apiKey, cosmosPrefix = 'cosmos', offloadMPCComputationURL, disableWorkers, sessionCookie, useDKLS, disableWebSockets, wasmOverride, } = e.data;
98
- if (!env) {
99
- // this means a message we didn't send was received and we want to ignore it
100
- return true;
101
- }
102
- const ctx = {
103
- env,
104
- apiKey,
105
- cosmosPrefix,
106
- client: initClient({
107
- env,
108
- version: paraVersion,
109
- apiKey,
110
- useFetchAdapter,
111
- retrieveSessionCookie: () => sessionCookie,
112
- }),
113
- offloadMPCComputationURL: offloadMPCComputationURL,
114
- mpcComputationClient: offloadMPCComputationURL
115
- ? mpcComputationClient.initClient(offloadMPCComputationURL, !!disableWorkers)
116
- : undefined,
117
- useDKLS,
118
- disableWebSockets: !!disableWebSockets,
119
- wasmOverride,
120
- };
121
- if (!ctx.offloadMPCComputationURL || ctx.useDKLS) {
122
- yield loadWasm(ctx, wasmOverride);
123
- }
124
- const result = yield executeMessage(ctx, e.data);
125
- postMessage(result);
126
- return false;
127
- });
128
- }
1
+ "use client";
2
+ (()=>{let t=()=>{let a=new Error("not implemented");return a.code="ENOSYS",a};if(!globalThis.fs){let a="";globalThis.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync(r,s){a+=c.decode(s);let i=a.lastIndexOf(`
3
+ `);return i!=-1&&(console.log(a.substring(0,i)),a=a.substring(i+1)),s.length},write(r,s,i,o,g,u){if(i!==0||o!==s.length||g!==null){u(t());return}let d=this.writeSync(r,s);u(null,d)},chmod(r,s,i){i(t())},chown(r,s,i,o){o(t())},close(r,s){s(t())},fchmod(r,s,i){i(t())},fchown(r,s,i,o){o(t())},fstat(r,s){s(t())},fsync(r,s){s(null)},ftruncate(r,s,i){i(t())},lchown(r,s,i,o){o(t())},link(r,s,i){i(t())},lstat(r,s){s(t())},mkdir(r,s,i){i(t())},open(r,s,i,o){o(t())},read(r,s,i,o,g,u){u(t())},readdir(r,s){s(t())},readlink(r,s){s(t())},rename(r,s,i){i(t())},rmdir(r,s){s(t())},stat(r,s){s(t())},symlink(r,s,i){i(t())},truncate(r,s,i){i(t())},unlink(r,s){s(t())},utimes(r,s,i,o){o(t())}}}if(globalThis.process||(globalThis.process={getuid(){return-1},getgid(){return-1},geteuid(){return-1},getegid(){return-1},getgroups(){throw t()},pid:-1,ppid:-1,umask(){throw t()},cwd(){throw t()},chdir(){throw t()}}),!globalThis.crypto)throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)");if(globalThis.performance||(globalThis.performance=Date),!globalThis.TextEncoder)throw new Error("globalThis.TextEncoder is not available, polyfill required");if(!globalThis.TextDecoder)throw new Error("globalThis.TextDecoder is not available, polyfill required");let l=new TextEncoder("utf-8"),c=new TextDecoder("utf-8");globalThis.Go=class{constructor(){this.argv=["js"],this.env={},this.exit=e=>{e!==0&&console.warn("exit code:",e)},this._exitPromise=new Promise(e=>{this._resolveExitPromise=e}),this._pendingEvent=null,this._scheduledTimeouts=new Map,this._nextCallbackTimeoutID=1;let a=(e,n)=>{this.mem.setUint32(e+0,n,!0),this.mem.setUint32(e+4,Math.floor(n/4294967296),!0)},r=(e,n)=>{this.mem.setUint32(e+0,n,!0)},s=e=>{let n=this.mem.getUint32(e+0,!0),m=this.mem.getInt32(e+4,!0);return n+m*4294967296},i=e=>{let n=this.mem.getFloat64(e,!0);if(n===0)return;if(!isNaN(n))return n;let m=this.mem.getUint32(e,!0);return this._values[m]},o=(e,n)=>{if(typeof n=="number"&&n!==0){if(isNaN(n)){this.mem.setUint32(e+4,2146959360,!0),this.mem.setUint32(e,0,!0);return}this.mem.setFloat64(e,n,!0);return}if(n===void 0){this.mem.setFloat64(e,0,!0);return}let h=this._ids.get(n);h===void 0&&(h=this._idPool.pop(),h===void 0&&(h=this._values.length),this._values[h]=n,this._goRefCounts[h]=0,this._ids.set(n,h)),this._goRefCounts[h]++;let w=0;switch(typeof n){case"object":n!==null&&(w=1);break;case"string":w=2;break;case"symbol":w=3;break;case"function":w=4;break}this.mem.setUint32(e+4,2146959360|w,!0),this.mem.setUint32(e,h,!0)},g=e=>{let n=s(e+0),m=s(e+8);return new Uint8Array(this._inst.exports.mem.buffer,n,m)},u=e=>{let n=s(e+0),m=s(e+8),h=new Array(m);for(let w=0;w<m;w++)h[w]=i(n+w*8);return h},d=e=>{let n=s(e+0),m=s(e+8);return c.decode(new DataView(this._inst.exports.mem.buffer,n,m))},f=Date.now()-performance.now();this.importObject={_gotest:{add:(e,n)=>e+n},gojs:{"runtime.wasmExit":e=>{e>>>=0;let n=this.mem.getInt32(e+8,!0);this.exited=!0,delete this._inst,delete this._values,delete this._goRefCounts,delete this._ids,delete this._idPool,this.exit(n)},"runtime.wasmWrite":e=>{e>>>=0;let n=s(e+8),m=s(e+16),h=this.mem.getInt32(e+24,!0);fs.writeSync(n,new Uint8Array(this._inst.exports.mem.buffer,m,h))},"runtime.resetMemoryDataView":e=>{e>>>=0,this.mem=new DataView(this._inst.exports.mem.buffer)},"runtime.nanotime1":e=>{e>>>=0,a(e+8,(f+performance.now())*1e6)},"runtime.walltime":e=>{e>>>=0;let n=new Date().getTime();a(e+8,n/1e3),this.mem.setInt32(e+16,n%1e3*1e6,!0)},"runtime.scheduleTimeoutEvent":e=>{e>>>=0;let n=this._nextCallbackTimeoutID;this._nextCallbackTimeoutID++,this._scheduledTimeouts.set(n,setTimeout(()=>{for(this._resume();this._scheduledTimeouts.has(n);)console.warn("scheduleTimeoutEvent: missed timeout event"),this._resume()},s(e+8))),this.mem.setInt32(e+16,n,!0)},"runtime.clearTimeoutEvent":e=>{e>>>=0;let n=this.mem.getInt32(e+8,!0);clearTimeout(this._scheduledTimeouts.get(n)),this._scheduledTimeouts.delete(n)},"runtime.getRandomData":e=>{e>>>=0,crypto.getRandomValues(g(e+8))},"syscall/js.finalizeRef":e=>{e>>>=0;let n=this.mem.getUint32(e+8,!0);if(this._goRefCounts[n]--,this._goRefCounts[n]===0){let m=this._values[n];this._values[n]=null,this._ids.delete(m),this._idPool.push(n)}},"syscall/js.stringVal":e=>{e>>>=0,o(e+24,d(e+8))},"syscall/js.valueGet":e=>{e>>>=0;let n=Reflect.get(i(e+8),d(e+16));e=this._inst.exports.getsp()>>>0,o(e+32,n)},"syscall/js.valueSet":e=>{e>>>=0,Reflect.set(i(e+8),d(e+16),i(e+32))},"syscall/js.valueDelete":e=>{e>>>=0,Reflect.deleteProperty(i(e+8),d(e+16))},"syscall/js.valueIndex":e=>{e>>>=0,o(e+24,Reflect.get(i(e+8),s(e+16)))},"syscall/js.valueSetIndex":e=>{e>>>=0,Reflect.set(i(e+8),s(e+16),i(e+24))},"syscall/js.valueCall":e=>{e>>>=0;try{let n=i(e+8),m=Reflect.get(n,d(e+16)),h=u(e+32),w=Reflect.apply(m,n,h);e=this._inst.exports.getsp()>>>0,o(e+56,w),this.mem.setUint8(e+64,1)}catch(n){e=this._inst.exports.getsp()>>>0,o(e+56,n),this.mem.setUint8(e+64,0)}},"syscall/js.valueInvoke":e=>{e>>>=0;try{let n=i(e+8),m=u(e+16),h=Reflect.apply(n,void 0,m);e=this._inst.exports.getsp()>>>0,o(e+40,h),this.mem.setUint8(e+48,1)}catch(n){e=this._inst.exports.getsp()>>>0,o(e+40,n),this.mem.setUint8(e+48,0)}},"syscall/js.valueNew":e=>{e>>>=0;try{let n=i(e+8),m=u(e+16),h=Reflect.construct(n,m);e=this._inst.exports.getsp()>>>0,o(e+40,h),this.mem.setUint8(e+48,1)}catch(n){e=this._inst.exports.getsp()>>>0,o(e+40,n),this.mem.setUint8(e+48,0)}},"syscall/js.valueLength":e=>{e>>>=0,a(e+16,parseInt(i(e+8).length))},"syscall/js.valuePrepareString":e=>{e>>>=0;let n=l.encode(String(i(e+8)));o(e+16,n),a(e+24,n.length)},"syscall/js.valueLoadString":e=>{e>>>=0;let n=i(e+8);g(e+16).set(n)},"syscall/js.valueInstanceOf":e=>{e>>>=0,this.mem.setUint8(e+24,i(e+8)instanceof i(e+16)?1:0)},"syscall/js.copyBytesToGo":e=>{e>>>=0;let n=g(e+8),m=i(e+32);if(!(m instanceof Uint8Array||m instanceof Uint8ClampedArray)){this.mem.setUint8(e+48,0);return}let h=m.subarray(0,n.length);n.set(h),a(e+40,h.length),this.mem.setUint8(e+48,1)},"syscall/js.copyBytesToJS":e=>{e>>>=0;let n=i(e+8),m=g(e+16);if(!(n instanceof Uint8Array||n instanceof Uint8ClampedArray)){this.mem.setUint8(e+48,0);return}let h=m.subarray(0,n.length);n.set(h),a(e+40,h.length),this.mem.setUint8(e+48,1)},debug:e=>{console.log(e)}}}}async run(a){if(!(a instanceof WebAssembly.Instance))throw new Error("Go.run: WebAssembly.Instance expected");this._inst=a,this.mem=new DataView(this._inst.exports.mem.buffer),this._values=[NaN,0,null,!0,!1,globalThis,this],this._goRefCounts=new Array(this._values.length).fill(1/0),this._ids=new Map([[0,1],[null,2],[!0,3],[!1,4],[globalThis,5],[this,6]]),this._idPool=[],this.exited=!1;let r=4096,s=f=>{let e=r,n=l.encode(f+"\0");return new Uint8Array(this.mem.buffer,r,n.length).set(n),r+=n.length,r%8!==0&&(r+=8-r%8),e},i=this.argv.length,o=[];this.argv.forEach(f=>{o.push(s(f))}),o.push(0),Object.keys(this.env).sort().forEach(f=>{o.push(s(`${f}=${this.env[f]}`))}),o.push(0);let u=r;if(o.forEach(f=>{this.mem.setUint32(r,f,!0),this.mem.setUint32(r+4,0,!0),r+=8}),r>=12288)throw new Error("total length of command line and environment variables exceeds limit");this._inst.exports.run(i,u),this.exited&&this._resolveExitPromise(),await this._exitPromise}_resume(){if(this.exited)throw new Error("Go program has already exited");this._inst.exports.resume(),this.exited&&this._resolveExitPromise()}_makeFuncWrapper(a){let r=this;return function(){let s={id:a,this:this,args:arguments};return r._pendingEvent=s,r._resume(),s.result}}}})();import{getBaseMPCNetworkUrl as b,WalletScheme as y,WalletType as S}from"@getpara/core-sdk";var D=(t,l,c)=>`{"ServerUrl":"${t}", "WalletId": "${l}", "Id":"${c}", "Ids":["USER","CAPSULE"], "Threshold":1}`,p=(t,l,c)=>`{"walletId": "${t}", "id":"${l}", "otherId":"CAPSULE", "isReceiver": false, "disableWebSockets": ${c}}`;async function L(t,l,c,a){let{data:r}=await t.mpcComputationClient.post("/wallets",{userId:l,walletId:c,protocolId:a});return r}async function M(t,l,c,a,r,s){let{data:i}=await t.mpcComputationClient.post(`/wallets/${c}/messages/sign`,{userId:l,protocolId:a,message:r,signer:s});return i}async function C(t,l,c,a,r,s,i){let{data:o}=await t.mpcComputationClient.post(`/wallets/${c}/transactions/send`,{userId:l,protocolId:a,transaction:r,signer:s,chainId:i});return o}async function T(t,l){let{walletId:c,protocolId:a}=await t.client.createWallet(l,{scheme:y.ED25519,type:S.SOLANA}),r=b(t.env,!t.disableWebSockets);return{signer:await new Promise((i,o)=>globalThis.ed25519CreateAccount(r,c,a,(g,u)=>{g&&o(g),i(u)})),walletId:c}}async function P(t,l,c){let{walletId:a,protocolId:r}=await t.client.createPregenWallet({pregenIdentifier:l,pregenIdentifierType:c,scheme:y.ED25519,type:S.SOLANA}),s=b(t.env,!t.disableWebSockets);return{signer:await new Promise((o,g)=>globalThis.ed25519CreateAccount(s,a,r,(u,d)=>{u&&g(u),o(d)})),walletId:a}}async function _(t,l,c,a,r){let{protocolId:s}=await t.client.preSignMessage(c,a,r,y.ED25519);return{signature:await new Promise((o,g)=>globalThis.ed25519Sign(l,s,r,(u,d)=>{u&&g(u),o(d)}))}}async function I(t,l,c,a){let{walletId:r,protocolId:s}=await t.client.createWallet(l,{useTwoSigners:!0,scheme:t.useDKLS?y.DKLS:y.CGGMP,type:c,cosmosPrefix:c===S.COSMOS?t.cosmosPrefix:void 0});if(t.offloadMPCComputationURL&&!t.useDKLS)return{signer:(await L(t,l,r,s)).signer,walletId:r};let i=b(t.env,!t.disableWebSockets),o=t.useDKLS?p(r,"USER",t.disableWebSockets):D(i,r,"USER"),g=t.useDKLS?globalThis.dklsCreateAccount:globalThis.createAccountV2;return{signer:await new Promise((d,f)=>g(o,i,s,a,()=>{},(e,n)=>{e&&f(e),d(n)})),walletId:r}}async function v(t,l,c,a,r,s){let{walletId:i,protocolId:o}=await t.client.createPregenWallet({pregenIdentifier:c,pregenIdentifierType:a,type:r,cosmosPrefix:r===S.COSMOS?t.cosmosPrefix:void 0}),g=b(t.env,!t.disableWebSockets),u=p(i,"USER",t.disableWebSockets);return{signer:await new Promise((f,e)=>globalThis.dklsCreateAccount(u,g,o,s,()=>{},(n,m)=>{n&&e(n),f(m)})),walletId:i}}async function U(t,l,c,a,r,s){let{protocolId:i,pendingTransactionId:o}=await t.client.preSignMessage(a,c,r,null,s);if(o)return{pendingTransactionId:o};if(t.offloadMPCComputationURL&&!t.useDKLS)return M(t,a,c,i,r,l);let g=b(t.env,!t.disableWebSockets),u=t.useDKLS?globalThis.dklsSignMessage:globalThis.signMessage,d=JSON.parse(l);return!d.disableWebSockets!=!t.disableWebSockets&&(d.disableWebSockets=t.disableWebSockets),l=JSON.stringify(d),new Promise((f,e)=>u(l,g,r,i,(n,m)=>{n&&e(n),f({signature:m})}))}async function k(t,l,c,a,r,s){let{data:{protocolId:i,pendingTransactionId:o}}=await t.client.signTransaction(a,c,{transaction:r,chainId:s});if(o)return{pendingTransactionId:o};if(t.offloadMPCComputationURL&&!t.useDKLS)return C(t,a,c,i,r,l,s);let g=b(t.env,!t.disableWebSockets),u=t.useDKLS?globalThis.dklsSendTransaction:globalThis.sendTransaction,d=JSON.parse(l);return!d.disableWebSockets!=!t.disableWebSockets&&(d.disableWebSockets=t.disableWebSockets),l=JSON.stringify(d),new Promise((f,e)=>u(l,g,r,s,i,(n,m)=>{n&&e(n),f({signature:m})}))}async function E(t,l,c,a,r,s){let{data:{protocolId:i,pendingTransactionId:o}}=await t.client.sendTransaction(a,c,{transaction:r,chainId:s});if(o)return{pendingTransactionId:o};if(t.offloadMPCComputationURL&&!t.useDKLS)return C(t,a,c,i,r,l,s);let g=b(t.env,!t.disableWebSockets),u=t.useDKLS?globalThis.dklsSendTransaction:globalThis.sendTransaction,d=JSON.parse(l);return!d.disableWebSockets!=!t.disableWebSockets&&(d.disableWebSockets=t.disableWebSockets),l=JSON.stringify(d),new Promise((f,e)=>u(l,g,r,s,i,(n,m)=>{n&&e(n),f({signature:m})}))}async function R(t,l,c,a,r,s,i){let{data:{protocolId:o}}=await t.client.refreshKeys(a,c,r,s,i),g=b(t.env,!t.disableWebSockets),u=t.useDKLS?globalThis.dklsRefresh:globalThis.refresh,d=JSON.parse(l);return!d.disableWebSockets!=!t.disableWebSockets&&(d.disableWebSockets=t.disableWebSockets),l=JSON.stringify(d),new Promise((f,e)=>u(l,g,o,(n,m)=>{n&&e(n),f({protocolId:o,signer:m})}))}async function W(t,l,c,a){let r=await t.client.getParaShare(a,c);return r?new Promise((s,i)=>globalThis.getPrivateKey(l,r,(o,g)=>{o&&i(o),s(g)})):""}import{getPortalBaseURL as N,initClient as K,mpcComputationClient as j,paraVersion as x,WalletType as A}from"@getpara/core-sdk";async function G(t,l){if(typeof self>"u")return;let c=new self.Go,a=l;if(!a){if(process.env.DISABLE_WASM_FETCH==="true")throw new Error("fetching wasm file is disabled");a=await(await fetch(`${N(t)}/static/js/main.wasm`,{mode:"cors"})).arrayBuffer()}let r=await WebAssembly.instantiate(a,c.importObject);c.run(r.instance)}async function V(t,l){let{functionType:c,params:a,returnObject:r}=l;switch(c){case"KEYGEN":{let{userId:s,secretKey:i,type:o=A.EVM}=a;return await I(t,s,o,i)}case"SIGN_TRANSACTION":{let{share:s,walletId:i,userId:o,tx:g,chainId:u}=a;return k(t,s,i,o,g,u)}case"SEND_TRANSACTION":{let{share:s,walletId:i,userId:o,tx:g,chainId:u}=a;return E(t,s,i,o,g,u)}case"SIGN_MESSAGE":{let{share:s,walletId:i,userId:o,message:g,cosmosSignDoc:u}=a;return U(t,s,i,o,g,u)}case"REFRESH":{let{share:s,walletId:i,userId:o,oldPartnerId:g,newPartnerId:u,keyShareProtocolId:d}=a,{protocolId:f,signer:e}=await R(t,s,i,o,g,u,d);return r?{protocolId:f,signer:e}:e}case"PREKEYGEN":{let{email:s,partnerId:i,secretKey:o,type:g=A.EVM}=a,{pregenIdentifier:u,pregenIdentifierType:d}=a;return s!=="null"&&s!=="undefined"&&s!==""&&s!=null&&(u=s,d="EMAIL"),await v(t,i,u,d,g,o)}case"GET_PRIVATE_KEY":{let{share:s,walletId:i,userId:o}=a;return await W(t,s,i,o)}case"ED25519_KEYGEN":{let{userId:s}=a;return T(t,s)}case"ED25519_SIGN":{let{share:s,walletId:i,userId:o,base64Bytes:g}=a;return _(t,s,o,i,g)}case"ED25519_PREKEYGEN":{let{email:s}=a,{pregenIdentifier:i,pregenIdentifierType:o}=a;return s!=="null"&&s!=="undefined"&&s!==""&&s!=null&&(i=s,o="EMAIL"),P(t,i,o)}default:throw new Error(`functionType: ${c} not supported`)}}async function Q(t,l,c){let{env:a,apiKey:r,cosmosPrefix:s="cosmos",offloadMPCComputationURL:i,disableWorkers:o,sessionCookie:g,useDKLS:u,disableWebSockets:d,wasmOverride:f}=t.data;if(!a)return!0;let e={env:a,apiKey:r,cosmosPrefix:s,client:K({env:a,version:x,apiKey:r,useFetchAdapter:c,retrieveSessionCookie:()=>g}),offloadMPCComputationURL:i,mpcComputationClient:i?j.initClient(i,!!o):void 0,useDKLS:u,disableWebSockets:!!d,wasmOverride:f};(!e.offloadMPCComputationURL||e.useDKLS)&&await G(e,f);let n=await V(e,t.data);return l(n),!1}export{Q as handleMessage};
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getpara/web-sdk",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,8 +8,8 @@
8
8
  "wasm_exec.js"
9
9
  ],
10
10
  "dependencies": {
11
- "@getpara/core-sdk": "1.2.0",
12
- "@getpara/user-management-client": "1.2.0",
11
+ "@getpara/core-sdk": "1.3.1",
12
+ "@getpara/user-management-client": "1.3.1",
13
13
  "assert": "^2.1.0",
14
14
  "base64url": "3.0.1",
15
15
  "buffer": "6.0.3",
@@ -18,7 +18,9 @@
18
18
  "ua-parser-js": "1.0.39"
19
19
  },
20
20
  "scripts": {
21
- "build": "rm -rf dist && tsc && yarn post-build",
21
+ "build": "rm -rf dist && yarn typegen && node ./scripts/build.mjs && yarn post-build",
22
+ "typegen": "tsc --emitDeclarationOnly",
23
+ "old-build": "rm -rf dist && tsc && yarn post-build",
22
24
  "post-build": "./scripts/post-build.sh",
23
25
  "test": "vitest run --coverage"
24
26
  },
@@ -35,5 +37,5 @@
35
37
  "dist",
36
38
  "package.json"
37
39
  ],
38
- "gitHead": "a9162c59be1456292d46c56787c1d5bf313bf24b"
40
+ "gitHead": "a35e01b55fde3220d50ead988b1c18f8442a9db4"
39
41
  }
@@ -1,34 +0,0 @@
1
- /**
2
- * Implements `StorageUtils` using `localStorage`.
3
- */
4
- export class LocalStorage {
5
- constructor() {
6
- this.get = (key) => {
7
- if (typeof window !== 'undefined') {
8
- return localStorage.getItem(key) || null;
9
- }
10
- return null;
11
- };
12
- this.set = (key, value) => {
13
- if (typeof window !== 'undefined') {
14
- localStorage.setItem(key, value);
15
- }
16
- };
17
- this.removeItem = (key) => {
18
- if (typeof window !== 'undefined') {
19
- localStorage.removeItem(key);
20
- }
21
- };
22
- this.clear = (prefix) => {
23
- if (typeof window !== 'undefined') {
24
- for (let i = 0; i < localStorage.length; i++) {
25
- const key = localStorage.key(i);
26
- if (key && key.startsWith(prefix)) {
27
- localStorage.removeItem(key);
28
- i--;
29
- }
30
- }
31
- }
32
- };
33
- }
34
- }
package/dist/ParaWeb.js DELETED
@@ -1,7 +0,0 @@
1
- import ParaCore from '@getpara/core-sdk';
2
- import { WebUtils } from './WebUtils.js';
3
- export class Para extends ParaCore {
4
- getPlatformUtils() {
5
- return new WebUtils();
6
- }
7
- }
@@ -1,38 +0,0 @@
1
- /**
2
- * Implements `StorageUtils` using `sessionStorage`.
3
- *
4
- * This class will eventually not be exported and should not be used
5
- * by consumers of the library.
6
- * @internal
7
- */
8
- export class SessionStorage {
9
- constructor() {
10
- this.get = (key) => {
11
- if (typeof window !== 'undefined') {
12
- return sessionStorage.getItem(key) || null;
13
- }
14
- return null;
15
- };
16
- this.set = (key, value) => {
17
- if (typeof window !== 'undefined') {
18
- sessionStorage.setItem(key, value);
19
- }
20
- };
21
- this.removeItem = (key) => {
22
- if (typeof window !== 'undefined') {
23
- sessionStorage.removeItem(key);
24
- }
25
- };
26
- this.clear = (prefix) => {
27
- if (typeof window !== 'undefined') {
28
- for (let i = 0; i < sessionStorage.length; i++) {
29
- const key = sessionStorage.key(i);
30
- if (key && key.startsWith(prefix)) {
31
- sessionStorage.removeItem(key);
32
- i--;
33
- }
34
- }
35
- }
36
- };
37
- }
38
- }
package/dist/WebUtils.js DELETED
@@ -1,113 +0,0 @@
1
- import { PopupType } from '@getpara/core-sdk';
2
- import { LocalStorage } from './LocalStorage.js';
3
- import { SessionStorage } from './SessionStorage.js';
4
- import { keygen, preKeygen, ed25519Keygen, ed25519PreKeygen, refresh } from './wallet/keygen.js';
5
- import { signMessage, sendTransaction, signTransaction, ed25519Sign } from './wallet/signing.js';
6
- import { getPrivateKey } from './wallet/privateKey.js';
7
- export class WebUtils {
8
- constructor() {
9
- this.localStorage = new LocalStorage();
10
- this.sessionStorage = new SessionStorage();
11
- this.secureStorage = null;
12
- this.isSyncStorage = true;
13
- this.disableProviderModal = false;
14
- }
15
- getPrivateKey(ctx, userId, walletId, share, sessionCookie) {
16
- return getPrivateKey(ctx, userId, walletId, share, sessionCookie);
17
- }
18
- keygen(ctx, userId, type, secretKey, // should be acceptable as null in RN as we don't pre-gen them
19
- sessionCookie, emailProps = {}) {
20
- return keygen(ctx, userId, type, secretKey, true, sessionCookie, emailProps);
21
- }
22
- refresh(ctx, sessionCookie, userId, walletId, share, oldPartnerId, newPartnerId, keyShareProtocolId) {
23
- return refresh(ctx, sessionCookie, userId, walletId, share, oldPartnerId, newPartnerId, keyShareProtocolId);
24
- }
25
- preKeygen(ctx, partnerId, pregenIdentifier, pregenIdentifierType, type, secretKey, // should be acceptable as null in RN as we don't pre-gen them
26
- sessionCookie) {
27
- return preKeygen(ctx, pregenIdentifier, pregenIdentifierType, type, secretKey, false, partnerId, sessionCookie);
28
- }
29
- signMessage(ctx, userId, walletId, share, message, sessionCookie, isDKLS, cosmosSignDoc) {
30
- return signMessage(ctx, userId, walletId, share, message, sessionCookie, isDKLS, cosmosSignDoc);
31
- }
32
- signTransaction(ctx, userId, walletId, share, tx, chainId, sessionCookie, isDKLS) {
33
- return signTransaction(ctx, userId, walletId, share, tx, chainId, sessionCookie, isDKLS);
34
- }
35
- sendTransaction(ctx, userId, walletId, share, tx, chainId, sessionCookie, isDKLS) {
36
- return sendTransaction(ctx, userId, walletId, share, tx, chainId, sessionCookie, isDKLS);
37
- }
38
- signHash(_address, _hash) {
39
- throw new Error('not implemented');
40
- }
41
- ed25519Keygen(ctx, userId, sessionCookie, emailProps) {
42
- return ed25519Keygen(ctx, userId, sessionCookie, emailProps);
43
- }
44
- ed25519PreKeygen(ctx, pregenIdentifier, pregenIdentifierType, sessionCookie) {
45
- return ed25519PreKeygen(ctx, pregenIdentifier, pregenIdentifierType, sessionCookie);
46
- }
47
- ed25519Sign(ctx, userId, walletId, share, base64Bytes, sessionCookie) {
48
- return ed25519Sign(ctx, userId, walletId, share, base64Bytes, sessionCookie);
49
- }
50
- openPopup(popupUrl, opts) {
51
- if (opts) {
52
- const { type } = opts;
53
- const popUpWidth = 550;
54
- let popUpHeight;
55
- switch (type) {
56
- case PopupType.LOGIN_PASSKEY: {
57
- popUpHeight = 798;
58
- break;
59
- }
60
- case PopupType.CREATE_PASSKEY: {
61
- popUpHeight = 464;
62
- break;
63
- }
64
- case PopupType.SIGN_MESSAGE_REVIEW: {
65
- popUpHeight = 585;
66
- break;
67
- }
68
- case PopupType.SIGN_TRANSACTION_REVIEW: {
69
- popUpHeight = 750;
70
- break;
71
- }
72
- case PopupType.OAUTH:
73
- default: {
74
- popUpHeight = 768;
75
- break;
76
- }
77
- }
78
- // Fixes position when using multiple monitors
79
- const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
80
- const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
81
- const width = window.innerWidth
82
- ? window.innerWidth
83
- : document.documentElement.clientWidth
84
- ? document.documentElement.clientWidth
85
- : screen.width;
86
- const height = window.innerHeight
87
- ? window.innerHeight
88
- : document.documentElement.clientHeight
89
- ? document.documentElement.clientHeight
90
- : screen.height;
91
- const left = (width - popUpWidth) / 2 + dualScreenLeft;
92
- const top = (height - popUpHeight) / 2 + dualScreenTop;
93
- const windowFeatures = `toolbar=no, menubar=no, width=${popUpWidth},
94
- height=${popUpHeight}, top=${top}, left=${left}`;
95
- let popupWindow = window.open(popupUrl, type.toString(), windowFeatures);
96
- if (!popupWindow) {
97
- setTimeout(() => {
98
- popupWindow = window.open(popupUrl, '_blank');
99
- }, 0);
100
- }
101
- return popupWindow;
102
- }
103
- else {
104
- const popupWindow = window.open(popupUrl, 'popup', 'popup=true,width=400,height=500');
105
- if (!popupWindow) {
106
- setTimeout(() => {
107
- window.open(popupUrl, '_blank');
108
- }, 0);
109
- }
110
- return popupWindow;
111
- }
112
- }
113
- }
@@ -1,167 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import base64url from 'base64url';
11
- import * as cbor from 'cbor-web';
12
- import forge from 'node-forge';
13
- import { getPortalDomain } from '@getpara/core-sdk';
14
- const ES256_ALGORITHM = -7;
15
- const RS256_ALGORITHM = -257;
16
- function publicKeyCredentialToJSON(pubKeyCred) {
17
- if (pubKeyCred instanceof ArrayBuffer) {
18
- return base64url.encode(pubKeyCred);
19
- }
20
- else if (pubKeyCred instanceof Array) {
21
- return pubKeyCred.map(publicKeyCredentialToJSON);
22
- }
23
- else if (pubKeyCred instanceof Object) {
24
- const obj = {};
25
- for (const key in pubKeyCred) {
26
- obj[key] = publicKeyCredentialToJSON(pubKeyCred[key]);
27
- }
28
- return obj;
29
- }
30
- else
31
- return pubKeyCred;
32
- }
33
- function parseMakeCredAuthData(buffer) {
34
- const rpIdHash = buffer.slice(0, 32);
35
- buffer = buffer.slice(32);
36
- const flagsBuf = buffer.slice(0, 1);
37
- buffer = buffer.slice(1);
38
- const flags = flagsBuf[0];
39
- const counterBuf = buffer.slice(0, 4);
40
- buffer = buffer.slice(4);
41
- const counter = counterBuf.readUInt32BE(0);
42
- const aaguid = buffer.slice(0, 16);
43
- buffer = buffer.slice(16);
44
- const credIDLenBuf = buffer.slice(0, 2);
45
- buffer = buffer.slice(2);
46
- const credIDLen = credIDLenBuf.readUInt16BE(0);
47
- const credID = buffer.slice(0, credIDLen);
48
- buffer = buffer.slice(credIDLen);
49
- const COSEPublicKey = buffer;
50
- return {
51
- rpIdHash,
52
- flagsBuf,
53
- flags,
54
- counter,
55
- counterBuf,
56
- aaguid,
57
- credID,
58
- COSEPublicKey,
59
- };
60
- }
61
- function parseAttestationObject(attestationObject) {
62
- const attestationObjectBuffer = base64url.toBuffer(attestationObject);
63
- return cbor.decodeAllSync(attestationObjectBuffer)[0];
64
- }
65
- function COSEECDSAtoPKCS(COSEPublicKey) {
66
- const coseStruct = cbor.decodeAllSync(COSEPublicKey)[0];
67
- const tag = Buffer.from([0x04]);
68
- const x = coseStruct.get(-2);
69
- const y = coseStruct.get(-3);
70
- return Buffer.concat([tag, x, y]);
71
- }
72
- function COSERSAtoPKCS(COSEPublicKey) {
73
- const coseStruct = cbor.decodeAllSync(COSEPublicKey)[0];
74
- const n = coseStruct.get(-1);
75
- const e = coseStruct.get(-2);
76
- // Convert to Forge's format:
77
- const nForge = forge.util.createBuffer(n.toString('binary'));
78
- const eForge = forge.util.createBuffer(e.toString('binary'));
79
- // Create a new public key object:
80
- const publicKey = forge.pki.setRsaPublicKey(new forge.jsbn.BigInteger(nForge.toHex(), 16), new forge.jsbn.BigInteger(eForge.toHex(), 16));
81
- // Export as a PKCS#1 public key buffer:
82
- return Buffer.from(forge.pki.publicKeyToPem(publicKey), 'utf-8');
83
- }
84
- export function parseCredentialCreationRes(creds, algorithm) {
85
- const parsedAttestation = parseAttestationObject(creds.response.attestationObject);
86
- const { COSEPublicKey, aaguid } = parseMakeCredAuthData(parsedAttestation.authData);
87
- if (algorithm === RS256_ALGORITHM) {
88
- return {
89
- cosePublicKey: base64url.encode(COSERSAtoPKCS(COSEPublicKey)),
90
- clientDataJSON: creds.response.clientDataJSON,
91
- aaguid: aaguid.toString('hex'),
92
- };
93
- }
94
- return {
95
- cosePublicKey: base64url.encode(COSEECDSAtoPKCS(COSEPublicKey)),
96
- clientDataJSON: creds.response.clientDataJSON,
97
- aaguid: aaguid.toString('hex'),
98
- };
99
- }
100
- // generate a random 32 byte user handle, which is the max for AES-GCM encryption
101
- // supported via window.crypto.subtle
102
- function generateUserHandle() {
103
- const userHandle = new Uint8Array(32);
104
- window.crypto.getRandomValues(userHandle);
105
- return userHandle;
106
- }
107
- export function createCredential(env, userId, identifier, isE2E) {
108
- return __awaiter(this, void 0, void 0, function* () {
109
- const userHandle = generateUserHandle();
110
- const createCredentialDefaultArgs = {
111
- publicKey: {
112
- authenticatorSelection: {
113
- authenticatorAttachment: 'platform',
114
- requireResidentKey: true,
115
- residentKey: 'required',
116
- userVerification: 'required',
117
- },
118
- rp: {
119
- id: getPortalDomain(env, isE2E),
120
- name: 'Para',
121
- },
122
- user: {
123
- id: userHandle,
124
- name: identifier,
125
- displayName: identifier,
126
- },
127
- pubKeyCredParams: [
128
- { type: 'public-key', alg: ES256_ALGORITHM },
129
- // RS256_ALGORITHM should only be needed for windows hello
130
- { type: 'public-key', alg: RS256_ALGORITHM },
131
- ],
132
- attestation: 'direct',
133
- timeout: 60000,
134
- // TODO: don't think we really get value from verifying this, but should revisit
135
- challenge: Buffer.from(userId, 'utf-8'),
136
- },
137
- };
138
- const credential = yield navigator.credentials.create(createCredentialDefaultArgs);
139
- const algorithm = credential.response.getPublicKeyAlgorithm
140
- ? credential.response.getPublicKeyAlgorithm()
141
- : ES256_ALGORITHM;
142
- const userHandleEncoded = base64url.encode(Buffer.from(userHandle));
143
- return {
144
- creds: publicKeyCredentialToJSON(credential),
145
- userHandle: userHandleEncoded,
146
- algorithm,
147
- };
148
- });
149
- }
150
- export function generateSignature(env, challenge, allowedPublicKeys, isE2E) {
151
- return __awaiter(this, void 0, void 0, function* () {
152
- const getCredentialDefaultArgs = {
153
- publicKey: {
154
- timeout: 60000,
155
- challenge: Buffer.from(challenge, 'base64'),
156
- allowCredentials: allowedPublicKeys.map(key => ({
157
- id: base64url.toBuffer(key),
158
- type: 'public-key',
159
- })),
160
- userVerification: 'required',
161
- rpId: getPortalDomain(env, isE2E),
162
- },
163
- };
164
- const assertation = yield navigator.credentials.get(getCredentialDefaultArgs);
165
- return publicKeyCredentialToJSON(assertation);
166
- });
167
- }