@silencelaboratories/walletprovider-sdk 1.4.0 → 1.6.0
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/README.md +130 -121
- package/dist/auth/EOAauthentication.d.ts +2 -5
- package/dist/auth/authentication.d.ts +5 -10
- package/dist/auth/ephemeralAuthentication.d.ts +2 -2
- package/dist/auth/passkeyAuthentication.d.ts +1 -3
- package/dist/builder/userAuth.d.ts +2 -1
- package/dist/client/networkRequest.d.ts +5 -2
- package/dist/client/networkSigner.d.ts +11 -7
- package/dist/client/walletProviderServiceClient.d.ts +45 -1
- package/dist/client/walletProviderServiceClientInterface.d.ts +21 -4
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.esm.js +1 -1
- package/dist/setupMessage.d.ts +31 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/validator.d.ts +2 -0
- package/package.json +4 -2
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { AuthModule } from '../auth/authentication';
|
|
2
2
|
import { type KeygenResponse, type SignResponse, type AddEphKeyResponse, type RegisterPasskeyResponse, RevokeEphKeyResponse, KeyRefreshResponse } from './networkResponse';
|
|
3
3
|
import { KeygenSetupOpts, SignSetupOpts } from '../setupMessage';
|
|
4
|
-
import { ApiVersion, type ClientConfig, IWalletProviderServiceClient, Slug, RequestPayloadV1, RequestPayloadV2 } from './walletProviderServiceClientInterface';
|
|
4
|
+
import { ApiVersion, type ClientConfig, IWalletProviderServiceClient, Slug, RequestPayloadV1, RequestPayloadV2, INoAuthWpServiceClient, NoAuthSlug, NoAuthRequestPayload } from './walletProviderServiceClientInterface';
|
|
5
5
|
import { AddEphKeyRequest, KeyRefreshRequest, RegisterPasskeyRequest, RevokeEphKeyRequest } from './networkRequest';
|
|
6
|
+
declare enum ProtocolState {
|
|
7
|
+
initiated = 0,
|
|
8
|
+
waitingForSign = 1,
|
|
9
|
+
waitingForResult = 2,
|
|
10
|
+
finished = 3
|
|
11
|
+
}
|
|
6
12
|
/**
|
|
7
13
|
* The Websocket client to the Wallet Provider backend service.
|
|
8
14
|
* All requests are relayed by this entity to the MPC network.
|
|
@@ -43,4 +49,42 @@ export declare class WalletProviderServiceClient implements IWalletProviderServi
|
|
|
43
49
|
}): Promise<RegisterPasskeyResponse>;
|
|
44
50
|
connect(slug: Slug, payload: RequestPayloadV1, authModule: AuthModule): Promise<string>;
|
|
45
51
|
connectV2(slug: Slug, payload: RequestPayloadV2, authModule: AuthModule): Promise<string>;
|
|
52
|
+
/**
|
|
53
|
+
* Common function to transition to finished state and reject the promise.
|
|
54
|
+
* Also handles closing the connection if it's not already closed/closing.
|
|
55
|
+
*
|
|
56
|
+
* @param {WebSocket} connection - The WebSocket connection to close.
|
|
57
|
+
* @param {ProtocolState} state - The current protocol state.
|
|
58
|
+
* @param {any} error - The error to reject with.
|
|
59
|
+
* @param {string} source - Where the error originated (for logging/clarity).
|
|
60
|
+
* @param {function} reject - The promise reject function to use.
|
|
61
|
+
*/
|
|
62
|
+
finishWithError(connection: WebSocket, state: ProtocolState, error: any, source: string, reject: (error: Error) => void): void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The Websocket client to the Wallet Provider backend service.
|
|
66
|
+
* With NO AUTHENTICATION REQUIRE
|
|
67
|
+
* All requests are relayed by this entity to the MPC network.
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export declare class NoAuthWalletProviderServiceClient implements INoAuthWpServiceClient {
|
|
71
|
+
walletProviderUrl: string;
|
|
72
|
+
apiVersion: ApiVersion;
|
|
73
|
+
/**
|
|
74
|
+
* Create new client that connects to the backend service
|
|
75
|
+
* @param config - config containing information about backend service
|
|
76
|
+
*/
|
|
77
|
+
constructor(config: ClientConfig);
|
|
78
|
+
getVersion(): ApiVersion;
|
|
79
|
+
startKeygen({ setups }: {
|
|
80
|
+
setups: KeygenSetupOpts[];
|
|
81
|
+
}): Promise<KeygenResponse[]>;
|
|
82
|
+
startSigngen({ setup }: {
|
|
83
|
+
setup: SignSetupOpts;
|
|
84
|
+
}): Promise<SignResponse[]>;
|
|
85
|
+
startKeyRefresh({ payload }: {
|
|
86
|
+
payload: KeyRefreshRequest;
|
|
87
|
+
}): Promise<KeyRefreshResponse>;
|
|
88
|
+
connect(slug: NoAuthSlug, payload: NoAuthRequestPayload): Promise<string>;
|
|
46
89
|
}
|
|
90
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AuthModule, UserAuthentication } from '../auth/authentication';
|
|
2
2
|
import { KeygenResponse, SignResponse, AddEphKeyResponse, RegisterPasskeyResponse, RevokeEphKeyResponse, KeyRefreshResponse } from './networkResponse';
|
|
3
|
-
import { KeygenSetupOpts, SignSetupOpts } from '../setupMessage';
|
|
3
|
+
import { KeygenSetupOpts, SignSetupOpts, InitPresignOpts, FinishPresignOpts } from '../setupMessage';
|
|
4
4
|
import { AddEphKeyRequest, KeyRefreshRequest, QuorumChangeRequest, RegisterPasskeyRequest, RevokeEphKeyRequest } from './networkRequest';
|
|
5
5
|
/**
|
|
6
6
|
* The config used to create Wallet Provider Service backend client.
|
|
@@ -55,10 +55,27 @@ export interface IWalletProviderServiceClient {
|
|
|
55
55
|
authModule: AuthModule;
|
|
56
56
|
}): Promise<RegisterPasskeyResponse>;
|
|
57
57
|
}
|
|
58
|
-
export type Slug = 'signgen' | 'keygen' | 'keyRefresh' | 'quorumChange' | 'addEphemeralKey' | 'revokeEphemeralKey' | 'registerPasskey';
|
|
59
|
-
export type RequestPayloadV1 = KeygenSetupOpts[] | KeyRefreshRequest | QuorumChangeRequest | SignSetupOpts | AddEphKeyRequest | RevokeEphKeyRequest | RegisterPasskeyRequest;
|
|
60
|
-
export type RequestPayloadV2 = KeygenSetupOpts[] | SignSetupOpts | AddEphKeyRequest | RevokeEphKeyRequest;
|
|
58
|
+
export type Slug = 'signgen' | 'keygen' | 'keyRefresh' | 'quorumChange' | 'addEphemeralKey' | 'revokeEphemeralKey' | 'registerPasskey' | 'initPresign' | 'finishPresign';
|
|
59
|
+
export type RequestPayloadV1 = KeygenSetupOpts[] | KeyRefreshRequest | QuorumChangeRequest | SignSetupOpts | AddEphKeyRequest | RevokeEphKeyRequest | RegisterPasskeyRequest | FinishPresignOpts;
|
|
60
|
+
export type RequestPayloadV2 = KeygenSetupOpts[] | SignSetupOpts | AddEphKeyRequest | RevokeEphKeyRequest | InitPresignOpts | FinishPresignOpts;
|
|
61
61
|
export interface WpRequest {
|
|
62
62
|
payload: RequestPayloadV1 | RequestPayloadV2;
|
|
63
63
|
userSigs: Record<string, UserAuthentication> | undefined;
|
|
64
64
|
}
|
|
65
|
+
/** Interface for client of Wallet Provider Service
|
|
66
|
+
* @public
|
|
67
|
+
*/
|
|
68
|
+
export interface INoAuthWpServiceClient {
|
|
69
|
+
getVersion(): ApiVersion;
|
|
70
|
+
startKeygen({ setups }: {
|
|
71
|
+
setups: KeygenSetupOpts[];
|
|
72
|
+
}): Promise<KeygenResponse[]>;
|
|
73
|
+
startSigngen({ setup }: {
|
|
74
|
+
setup: SignSetupOpts;
|
|
75
|
+
}): Promise<SignResponse[]>;
|
|
76
|
+
startKeyRefresh({ payload }: {
|
|
77
|
+
payload: KeyRefreshRequest;
|
|
78
|
+
}): Promise<KeyRefreshResponse>;
|
|
79
|
+
}
|
|
80
|
+
export type NoAuthSlug = 'signgen' | 'keygen' | 'keyRefresh';
|
|
81
|
+
export type NoAuthRequestPayload = KeygenSetupOpts[] | SignSetupOpts | InitPresignOpts | FinishPresignOpts | KeyRefreshRequest;
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var J=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var De=Object.getOwnPropertyNames;var Ve=Object.prototype.hasOwnProperty;var _e=(s,e,t)=>e in s?J(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var Be=(s,e)=>{for(var t in e)J(s,t,{get:e[t],enumerable:!0})},Le=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of De(e))!Ve.call(s,r)&&r!==t&&J(s,r,{get:()=>e[r],enumerable:!(n=Me(e,r))||n.enumerable});return s};var $e=s=>Le(J({},"__esModule",{value:!0}),s);var p=(s,e,t)=>_e(s,typeof e!="symbol"?e+"":e,t);var Ze={};Be(Ze,{EOAAuth:()=>V,EphAuth:()=>_,EphKeyClaim:()=>S,HttpClient:()=>D,KeygenSetupOpts:()=>f,NetworkSigner:()=>C,PasskeyAuth:()=>B,PasskeyRegister:()=>L,SignRequestBuilder:()=>P,UserSignatures:()=>R,WalletProviderServiceClient:()=>M,computeAddress:()=>se,default:()=>Ye,flattenSignature:()=>X,generateEphPrivateKey:()=>W,getEphPublicKey:()=>k,parseEphKeyOperationResult:()=>O,parseKeygenResult:()=>U,parseSigngenResult:()=>T});module.exports=$e(Ze);var be=require("json-canonicalize");var g=(s,e)=>{l(typeof e!="string",`${s} must be string`),l((e==null?void 0:e.trim().length)===0,`${s} cannot be empty`)},we=(s,e)=>{if(l(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")l(s.length!==65,"secp256k1: key length must be 65 bytes, got "+s.length);else if(e==="ed25519")l(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},Re=(s,e)=>{if(l(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")l(s.length!==32,"secp256k1: key length must be 32 bytes, got "+s.length);else if(e==="ed25519")l(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},xe=s=>{l(s!=="ed25519"&&s!=="secp256k1",'signAlg must be either "ed25519" or "secp256k"')},l=(s,e)=>{if(s)throw new Error(e)};var P=class{constructor(){p(this,"signRequest",new Map)}setRequest(e,t,n){if(g("transactionId",e),g("message",t),g("requestType",n),this.signRequest.has(e))throw new Error(`Transaction ID ${e} is already set.`);return this.signRequest.set(e,{signingMessage:t,requestType:n}),this}build(){let e={};if(this.signRequest.forEach((t,n)=>{e[n]=t}),Object.keys(e).length===0)throw new Error("No sign request is set.");return(0,be.canonicalize)(e)}};var ce=require("json-canonicalize");var ke=require("js-base64");function Ne(s){return s instanceof Uint8Array||ArrayBuffer.isView(s)&&s.constructor.name==="Uint8Array"}function re(s,...e){if(!Ne(s))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(s.length))throw new Error("Uint8Array expected of length "+e+", got length="+s.length)}function ie(s,e=!0){if(s.destroyed)throw new Error("Hash instance has been destroyed");if(e&&s.finished)throw new Error("Hash#digest() has already been called")}function Ae(s,e){re(s);let t=e.outputLen;if(s.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var G=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),y=(s,e)=>s<<32-e|s>>>e;function He(s){if(typeof s!="string")throw new Error("utf8ToBytes expected string, got "+typeof s);return new Uint8Array(new TextEncoder().encode(s))}function oe(s){return typeof s=="string"&&(s=He(s)),re(s),s}var z=class{clone(){return this._cloneInto()}};function Se(s){let e=n=>s().update(oe(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function We(s,e,t,n){if(typeof s.setBigUint64=="function")return s.setBigUint64(e,t,n);let r=BigInt(32),o=BigInt(4294967295),i=Number(t>>r&o),a=Number(t&o),u=n?4:0,h=n?0:4;s.setUint32(e+u,i,n),s.setUint32(e+h,a,n)}var Pe=(s,e,t)=>s&e^~s&t,Ee=(s,e,t)=>s&e^s&t^e&t,Q=class extends z{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=G(this.buffer)}update(e){ie(this);let{view:t,buffer:n,blockLen:r}=this;e=oe(e);let o=e.length;for(let i=0;i<o;){let a=Math.min(r-this.pos,o-i);if(a===r){let u=G(e);for(;r<=o-i;i+=r)this.process(u,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ie(this),Ae(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:o}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>r-i&&(this.process(n,0),i=0);for(let c=i;c<r;c++)t[c]=0;We(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=G(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let h=u/4,d=this.get();if(h>d.length)throw new Error("_sha2: outputLen bigger than state");for(let c=0;c<h;c++)a.setUint32(4*c,d[c],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:o,destroyed:i,pos:a}=this;return e.length=r,e.pos=a,e.finished=o,e.destroyed=i,r%t&&e.buffer.set(n),e}};var Fe=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),x=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),b=new Uint32Array(64),ae=class extends Q{constructor(){super(64,32,8,!1),this.A=x[0]|0,this.B=x[1]|0,this.C=x[2]|0,this.D=x[3]|0,this.E=x[4]|0,this.F=x[5]|0,this.G=x[6]|0,this.H=x[7]|0}get(){let{A:e,B:t,C:n,D:r,E:o,F:i,G:a,H:u}=this;return[e,t,n,r,o,i,a,u]}set(e,t,n,r,o,i,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=o|0,this.F=i|0,this.G=a|0,this.H=u|0}process(e,t){for(let c=0;c<16;c++,t+=4)b[c]=e.getUint32(t,!1);for(let c=16;c<64;c++){let m=b[c-15],v=b[c-2],me=y(m,7)^y(m,18)^m>>>3,ne=y(v,17)^y(v,19)^v>>>10;b[c]=ne+b[c-7]+me+b[c-16]|0}let{A:n,B:r,C:o,D:i,E:a,F:u,G:h,H:d}=this;for(let c=0;c<64;c++){let m=y(a,6)^y(a,11)^y(a,25),v=d+m+Pe(a,u,h)+Fe[c]+b[c]|0,ne=(y(n,2)^y(n,13)^y(n,22))+Ee(n,r,o)|0;d=h,h=u,u=a,a=i+v|0,i=o,o=r,r=n,n=v+ne|0}n=n+this.A|0,r=r+this.B|0,o=o+this.C|0,i=i+this.D|0,a=a+this.E|0,u=u+this.F|0,h=h+this.G|0,d=d+this.H|0,this.set(n,r,o,i,a,u,h,d)}roundClean(){b.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var pe=Se(()=>new ae);var j=require("viem"),w=s=>ke.Base64.fromUint8Array(new Uint8Array(s),!0),ue=s=>{let e=(0,j.stringToBytes)(s),t=pe(pe(e));return(0,j.toHex)(t,{size:32}).slice(2)};var R=class{constructor(e,t){p(this,"userAuthentications");p(this,"authModule");p(this,"apiVersion");this.authModule=e,this.userAuthentications=new Map,this.apiVersion=t}async setDefaultAuth(e,t){let n=await this.authModule.authenticate({payload:e,challenge:t!=null?t:ue((0,ce.canonicalize)(e))});this.userAuthentications.set("default",n)}async setKeygenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for keygen");for(let n of e){let r=n.signAlg,o=t?t[r]:ue((0,ce.canonicalize)(n));if(o){let i=await this.authModule.authenticate({payload:n,challenge:o});this.userAuthentications.set(r,i)}else throw new Error(`no final challenge found in response for ${r}`)}}async setSigngenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for signgen v1");await this.setDefaultAuth(e,t)}async setAddEphKeyUserSigs(e,t){await this.setDefaultAuth(e,t)}async setRevokeEphKeyUserSigs(e,t){await this.setDefaultAuth(e,t)}async setRegisterPasskeyUserSigs(e,t){if(!t)throw new Error("missing challenge response for registerPasskey");await this.setDefaultAuth(e,t)}async setKeyRefreshUserSigs(e,t){if(!t)throw new Error("missing challenge response for keyRefresh");await this.setDefaultAuth(e,t)}async setQcUserSigs(e,t){if(!t)throw new Error("missing challenge response for quorumChange");await this.setDefaultAuth(e,t)}async build(e,t,n){if(e==="keygen"){let r=n?JSON.parse(n):void 0;await this.setKeygenUserSigs(t,r)}else e==="signgen"?await this.setSigngenUserSigs(t,n):e==="addEphemeralKey"?await this.setAddEphKeyUserSigs(t,n):e==="revokeEphemeralKey"?await this.setRevokeEphKeyUserSigs(t,n):e==="registerPasskey"?await this.setRegisterPasskeyUserSigs(t,n):e==="keyRefresh"?await this.setKeyRefreshUserSigs(t,n):e==="quorumChange"&&await this.setQcUserSigs(t,n);return Object.fromEntries(this.userAuthentications)}};var X=s=>{let{sign:e,recid:t}=s,n=(27+t).toString(16);return`0x${e}${n}`};var Je=[{name:"tag",type:"uint16"},{name:"value",type:"string"}],f=class{constructor({t:e,n:t,permissions:n,signAlg:r}){p(this,"t");p(this,"n");p(this,"metadata");p(this,"signAlg");g("signAlg",r),this.t=e,this.n=t,this.signAlg=r,this.metadata=[],n&&this.metadata.push({tag:1,value:n})}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeygenSetupOpts"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],KeygenSetupOpts:[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:Je}}},K=class{constructor({t:e,key_id:t,signAlg:n,message:r}){p(this,"t");p(this,"key_id");p(this,"message");p(this,"signAlg");g("keyId",t),g("signAlg",n),g("signRequest",r),this.t=e,this.key_id=t,this.message=r,this.signAlg=n}};var A=class{constructor(e){p(this,"key_id");g("keyId",e),this.key_id=e}get eoaRequestSchema(){return{Request:[{name:"setup",type:"RevokeEphKeyRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],RevokeEphKeyRequest:[{name:"key_id",type:"string"}]}}},E=class{constructor(e){p(this,"key_id_list");for(let t of e)g("keyId",t);this.key_id_list=e}get eoaRequestSchema(){return{Request:[{name:"setup",type:"AddEphKeyRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],AddEphKeyRequest:[{name:"key_id_list",type:"string[]"}]}}},I=class{constructor(e){p(this,"options");g("options",e),this.options=e}},Y=class{constructor({newT:e,newN:t,keyId:n,signAlg:r}){p(this,"new_t");p(this,"new_n");p(this,"key_id");p(this,"sign_alg");g("keyId",n),g("signAlg",r),this.new_t=e,this.new_n=t,this.key_id=n,this.sign_alg=r}get eoaRequestSchema(){return{Request:[{name:"setup",type:"QuorumChangeRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],QuorumChangeRequest:[{name:"new_t",type:"uint32"},{name:"new_n",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}},q=class{constructor({t:e,keyId:t,signAlg:n}){p(this,"t");p(this,"key_id");p(this,"sign_alg");g("keyId",t),g("signAlg",n),this.t=e,this.key_id=t,this.sign_alg=n}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeyRefreshRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],KeyRefreshRequest:[{name:"t",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}};var C=class{constructor(e,t){p(this,"authModule");p(this,"wpClient");this.authModule=t,this.wpClient=e}validateQuorumSetup({threshold:e,totalNodes:t}){e&&l(e<2,`Threshold = ${e} must be at least 2`),e&&t&&l(t<e,`Total nodes = ${t} must be greater or equal to threshold = ${e}`)}async generateKey(e,t,n,r){this.validateQuorumSetup({threshold:e,totalNodes:t});let o=n.map(a=>new f({t:e,n:t,permissions:r,signAlg:a}));return await this.wpClient.startKeygen({setups:o,authModule:this.authModule})}async signMessage(e,t,n,r){this.validateQuorumSetup({threshold:e}),xe(n);let o=new K({t:e,key_id:t,signAlg:n,message:r});return await this.wpClient.startSigngen({setup:o,authModule:this.authModule})}async refreshKey(e,t,n){let r=new q({t:e,keyId:t,signAlg:n});return await this.wpClient.startKeyRefresh({payload:r,authModule:this.authModule})}async addEphemeralKey(e){let t=new E(e);return await this.wpClient.addEphemeralKey({payload:t,authModule:this.authModule})}async revokeEphemeralKey(e){g("keyId",e);let t=new A(e);return await this.wpClient.revokeEphemeralKey({payload:t,authModule:this.authModule})}async registerPasskey(e){let t=new I(e!=null?e:"passkey options");return await this.wpClient.registerPasskey({payload:t,authModule:this.authModule})}};var he=s=>{var o,i,a;let e=s.split(":");l(e.length!==3,"Invalid keygen response from network");let t=(o=e[0])==null?void 0:o.split("=")[1],n=(i=e[1])==null?void 0:i.split("=")[1],r=(a=e[2])==null?void 0:a.split("=")[1];return{publicKey:n,keyId:t,signAlg:r}},U=(s,e)=>{let t=s.split(";");return l(t.length!==e,"Invalid keygen response from network, not all keys were generated"),t.map(n=>he(n))},T=(s,e)=>s.split(";").map(n=>{var r,o,i,a,u;if(e==="secp256k1"){let h=n.split(":");l(h.length!==3,"Invalid signgen response from network");let d=(r=h[0])==null?void 0:r.split("=")[1],c=(o=h[1])==null?void 0:o.split("=")[1],m=(i=h[2])==null?void 0:i.split("=")[1];if(d===void 0||c===void 0||m===void 0)throw new Error("Invalid signgen response from network");return{transactionId:m,sign:d,recid:parseInt(c)}}else{let h=n.split(":");l(h.length!==2,"Invalid signgen response from network");let d=(a=h[0])==null?void 0:a.split("=")[1],c=(u=h[1])==null?void 0:u.split("=")[1];if(d===void 0||c===void 0)throw new Error("Invalid signgen response from network");return{transactionId:c,sign:d,recid:0}}}),O=s=>{let e=s.split(";"),t=[];return e.forEach(n=>{let r=n.split(":");l(r.length!==2,"Invalid eph key operation response from network");let o=r[0],i=r[1];t.push({keyId:o,status:i})}),t};var Z=require("json-canonicalize");var M=class{constructor(e){p(this,"walletProviderUrl");p(this,"apiVersion","v1");this.walletProviderUrl=`${e.walletProviderUrl}/${e.apiVersion}`,this.apiVersion=e.apiVersion}getVersion(){return this.apiVersion}async startKeygen({setups:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("keygen",e,t).then(r=>U(r,e.length))}async startKeyRefresh({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Key refresh is not supported in v2 API");return this.connect.bind(this)("keyRefresh",e,t).then(r=>he(r))}async startSigngen({setup:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("signgen",e,t).then(r=>T(r,e.signAlg))}async addEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("addEphemeralKey",e,t).then(r=>O(r))}async revokeEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("revokeEphemeralKey",e,t).then(r=>({status:r}))}async registerPasskey({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Passkey registration is not supported in v2 API");return this.connect.bind(this)("registerPasskey",e,t).then(r=>({passkeyCredentialId:r}))}connect(e,t,n){return new Promise((r,o)=>{let i=0,a=new WebSocket(`${this.walletProviderUrl}/${e}`);a.addEventListener("open",u=>{switch(console.debug(`Connection opened in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i){case 0:i=1,a.send((0,Z.canonicalize)({payload:t}));break;case 1:case 2:i=3,o("Incorrect protocol state");break;case 3:break}}),a.addEventListener("message",async u=>{switch(console.debug(`Connection message in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i){case 0:i=3,o("Incorrect protocol state");break;case 1:{i=2;try{let h=u.data,d=await new R(n,this.apiVersion).build(e,t,h);a.send((0,Z.canonicalize)(d))}catch(h){o(h)}break}case 2:{i=3,a.close(),r(u.data);break}case 3:break}}),a.addEventListener("error",u=>{console.debug(`Connection error in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i!=3&&(i=3,o("Incorrect protocol state"))}),a.addEventListener("close",u=>{console.debug(`Connection closed in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i!=3&&(i=3,o("Incorrect protocol state"))})})}connectV2(e,t,n){return new Promise((r,o)=>{let i=0,a=new WebSocket(`${this.walletProviderUrl}/${e}`);a.addEventListener("open",async u=>{switch(console.debug(`Connection opened in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i){case 0:i=2;try{let h=await new R(n,this.apiVersion).build(e,t);a.send((0,Z.canonicalize)({payload:t,userSigs:h}))}catch(h){o(h)}break;case 2:i=3,o("Incorrect protocol state");break;case 3:break}}),a.addEventListener("message",async u=>{switch(console.debug(`Connection message in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i){case 0:i=3,o("Incorrect protocol state");break;case 2:{i=3,a.close(),r(u.data);break}case 3:break}}),a.addEventListener("error",u=>{console.debug(`Connection error in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i!=3&&(i=3,o("Incorrect protocol state"))}),a.addEventListener("close",u=>{console.debug(`Connection closed in state ${i} with event ${JSON.stringify(u,void 0," ")}`),i!=3&&(i=3,o("Incorrect protocol state"))})})}};var ve=require("json-canonicalize");var le=class extends Error{constructor(t,n,r){super(r||n);this.status=t;this.statusText=n;this.name="HttpError"}},D=class{constructor(e="",t={}){p(this,"baseURL");p(this,"defaultHeaders");this.baseURL=e,this.validateHeaders(t),this.defaultHeaders={"Content-Type":"application/json",...t}}validateHeaders(e){if(typeof e!="object"||e===null)throw new Error("Headers must be an object.");for(let[t,n]of Object.entries(e))if(typeof t!="string"||typeof n!="string")throw new Error(`Invalid header: ${t}. Header names and values must be strings.`)}setDefaultHeaders(e){this.defaultHeaders={...this.defaultHeaders,...e}}buildUrl(e){return`${this.baseURL}${e}`}async handleResponse(e){if(!e.ok){let n;try{n=(await e.json()).message||e.statusText}catch{n=e.statusText}throw new le(e.status,e.statusText,n)}let t=e.headers.get("content-type");return t&&t.includes("application/json")?e.json():e.text()}async request(e,t,n,r={}){let o=this.buildUrl(t),i={...this.defaultHeaders,...r.headers},a={method:e,headers:i,...r,body:n?(0,ve.canonicalize)(n):null},u=await fetch(o,a);return this.handleResponse(u)}async get(e,t){return this.request("GET",e,void 0,t)}async post(e,t,n){return this.request("POST",e,t,n)}async put(e,t,n){return this.request("PUT",e,t,n)}async patch(e,t,n){return this.request("PATCH",e,t,n)}async delete(e,t){return this.request("DELETE",e,void 0,t)}};var ze={name:"SilentShard authentication",version:"0.1.0"},Ge=[{name:"name",type:"string"},{name:"version",type:"string"}];function Qe(s,e,t){return{types:{EIP712Domain:Ge,...s.eoaRequestSchema},domain:ze,primaryType:"Request",message:{setup:s,challenge:e,eph_claim:t}}}async function Ke({setup:s,eoa:e,challenge:t,browserWallet:n,ephClaim:r}){let o=Qe(s,t,r?r.toJSON():""),i=await n.signTypedData(e,o);return{credentials:{credentials:r?r.toJSON():"",method:"eoa",id:e},signature:i}}var ge=require("js-base64"),de=require("viem"),N=require("json-canonicalize");async function Ie({user:s,challenge:e,rpConfig:t}){let n=(0,de.hexToBytes)(`0x${e}`,{size:32}),r={publicKey:{authenticatorSelection:{residentKey:"preferred",userVerification:"required"},challenge:n,excludeCredentials:[],pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],rp:{name:t.rpName,id:t.rpId},user:{...s,id:ge.Base64.toUint8Array(s.id)}}},o=await navigator.credentials.create(r);if(o===null)throw new Error("No credential returned");let i=w(o.response.attestationObject),u={rawCredential:(0,N.canonicalize)({authenticatorAttachment:o.authenticatorAttachment,id:o.id,rawId:w(o.rawId),response:{attestationObject:i,clientDataJSON:w(o.response.clientDataJSON)},type:o.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:"",method:"passkey",id:o.id},signature:(0,N.canonicalize)(u)}}async function qe({challenge:s,allowCredentialId:e,rpConfig:t,ephClaim:n}){let r=(0,de.hexToBytes)(`0x${s}`,{size:32}),o=e?[{type:"public-key",id:ge.Base64.toUint8Array(e)}]:[],i={publicKey:{userVerification:"required",challenge:r,allowCredentials:o}},a=await navigator.credentials.get(i);if(a===null)throw new Error("Failed to get navigator credentials");let u=a.response,h=u.userHandle;if(h===null)throw new Error("User handle cannot be null");let d=w(u.signature),m={rawCredential:(0,N.canonicalize)({authenticatorAttachment:a.authenticatorAttachment,id:a.id,rawId:w(a.rawId),response:{authenticatorData:w(u.authenticatorData),clientDataJSON:w(u.clientDataJSON),signature:d,userHandle:w(h)},type:a.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:n.toJSON(),method:"passkey",id:a.id},signature:(0,N.canonicalize)(m)}}var H=require("viem"),ee=require("@noble/curves/ed25519"),ye=require("@noble/curves/secp256k1");var Ce=require("viem/accounts"),fe=require("json-canonicalize");var S=class s{constructor(e,t,n,r=Math.floor(Date.now()/1e3)+3600){p(this,"ephId");p(this,"ephPK");p(this,"signAlg");p(this,"expiry");this.validateInputs(e,t,n,r),this.ephId=e,this.ephPK=(0,H.toHex)(t),this.signAlg=n,this.expiry=r}validateInputs(e,t,n,r){g("ephId",e),we(t,n),l(Number.isInteger(r)===!1,"expiry must be an integer");let o=Math.floor(Date.now()/1e3),i=r-o,a=i>0&&i<=365*24*60*60;l(!a,`lifetime must be greater than 0 and less than or equal to 365 days expiry - now ${i}, expiry ${r} now secs ${o}`)}toJSON(){return(0,fe.canonicalize)({ephId:this.ephId,ephPK:this.ephPK,expiry:this.expiry,signAlg:this.signAlg})}static generateKeys(e,t){let n=W(e),r=k(n,e),o=new s((0,H.toHex)(r),r,e,t);return{privKey:n,pubKey:r,ephClaim:o}}};async function Ue({setup:s,challenge:e,ephSK:t,ephClaim:n}){let r={setup:s,challenge:e},o=new TextEncoder().encode((0,fe.canonicalize)(r)),i=await je(o,t,n.signAlg);return{credentials:{credentials:n.toJSON(),method:"ephemeral",id:n.ephId},signature:i}}async function je(s,e,t){switch(t){case"ed25519":return(0,H.toHex)(ee.ed25519.sign(s,e));case"secp256k1":return await(0,Ce.signMessage)({message:{raw:s},privateKey:(0,H.toHex)(e)});default:throw new Error("Invalid signature algorithm")}}function W(s){switch(s){case"ed25519":return ee.ed25519.utils.randomPrivateKey();case"secp256k1":return ye.secp256k1.utils.randomPrivateKey();default:throw new Error("Invalid signature algorithm")}}function k(s,e){switch(e){case"ed25519":return ee.ed25519.getPublicKey(s);case"secp256k1":return ye.secp256k1.getPublicKey(s,!1);default:throw new Error("Invalid signature algorithm")}}var Te=require("viem");var F=require("json-canonicalize");var V=class{constructor(e,t,n){p(this,"browserWallet");p(this,"eoa");p(this,"ephClaim");this.validateInputs(e,t),this.ephClaim=n,this.browserWallet=t,this.eoa=e}validateInputs(e,t){l(!(0,Te.isAddress)(e),"invalid Ethereum address format"),l(!((t==null?void 0:t.signTypedData)instanceof Function),"invalid browserWallet")}async authenticate({payload:e,challenge:t}){return l(!(e instanceof f||e instanceof q||e instanceof Y||e instanceof E||e instanceof A),`invalid payload for EOA auth. Requires KeygenSetupOpts or KeyRefreshRequest or QuorumChangeRequest or AddEphKeyRequest or RevokeEphKeyRequest but found ${(0,F.canonicalize)(e)}`),await Ke({setup:e,eoa:this.eoa,challenge:t,browserWallet:this.browserWallet,ephClaim:this.ephClaim})}},_=class{constructor(e,t,n){p(this,"ephSK");p(this,"ephClaim");Re(t,n),this.ephSK=t;let r=k(this.ephSK,n);this.ephClaim=new S(e,r,n)}async authenticate({payload:e,challenge:t}){return l(!(e instanceof K||e instanceof A),`invalid payload for Ephemeral auth. Requires SignSetupOpts or RevokeEphKeyRequest but found ${(0,F.canonicalize)(e)}`),await Ue({setup:e,challenge:t,ephSK:this.ephSK,ephClaim:this.ephClaim})}},B=class{constructor(e,t,n){p(this,"rpConfig");p(this,"allowCredentialId");p(this,"ephClaim");this.ephClaim=n,this.rpConfig=e,this.allowCredentialId=t}async authenticate({payload:e,challenge:t}){return l(!(e instanceof f||e instanceof E||e instanceof A),`invalid payload for Passkey login. Requires KeygenSetupOpts or AddEphKeyRequest or RevokeEphKeyRequest but found ${(0,F.canonicalize)(e)}`),await qe({allowCredentialId:this.allowCredentialId,challenge:t,rpConfig:this.rpConfig,ephClaim:this.ephClaim})}},L=class{constructor(e,t){p(this,"rpConfig");p(this,"user");this.rpConfig=e,this.user=t}async authenticate({payload:e,challenge:t}){return l(!(e instanceof I),`invalid payload for Passkey register. Requires PasskeyRegisterRequest but found ${(0,F.canonicalize)(e)}`),await Ie({user:this.user,challenge:t,rpConfig:this.rpConfig})}};var te=require("viem/accounts"),Oe=require("@noble/curves/secp256k1"),$=require("viem"),Xe=require("js-base64");function se(s){if(s.startsWith("0x")&&(s=s.slice(2)),s.startsWith("04"))return(0,te.publicKeyToAddress)(`0x${s} `);if(s.startsWith("02")||s.startsWith("03")){let e=Oe.secp256k1.ProjectivePoint.fromHex(s).toHex(!1);return(0,te.publicKeyToAddress)(`0x${e}`)}else throw new Error("Invalid public key")}var Ye={KeygenSetupOpts:f,UserSignatures:R,NetworkSigner:C,SignRequestBuilder:P,WalletProviderServiceClient:M,HttpClient:D,EOAAuth:V,EphAuth:_,PasskeyAuth:B,PasskeyRegister:L,generateEphPrivateKey:W,getEphPublicKey:k,EphKeyClaim:S,computeAddress:se,flattenSignature:X,parseSigngenResult:T,parseKeygenResult:U,parseEphKeyOperationResult:O};0&&(module.exports={EOAAuth,EphAuth,EphKeyClaim,HttpClient,KeygenSetupOpts,NetworkSigner,PasskeyAuth,PasskeyRegister,SignRequestBuilder,UserSignatures,WalletProviderServiceClient,computeAddress,flattenSignature,generateEphPrivateKey,getEphPublicKey,parseEphKeyOperationResult,parseKeygenResult,parseSigngenResult});
|
|
1
|
+
"use strict";var j=Object.defineProperty;var Ne=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var De=Object.prototype.hasOwnProperty;var _e=(s,e,t)=>e in s?j(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var Be=(s,e)=>{for(var t in e)j(s,t,{get:e[t],enumerable:!0})},Le=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of We(e))!De.call(s,r)&&r!==t&&j(s,r,{get:()=>e[r],enumerable:!(n=Ne(e,r))||n.enumerable});return s};var Fe=s=>Le(j({},"__esModule",{value:!0}),s);var c=(s,e,t)=>_e(s,typeof e!="symbol"?e+"":e,t);var st={};Be(st,{EOAAuth:()=>D,EphAuth:()=>_,EphKeyClaim:()=>E,FinishPresignOpts:()=>x,HttpClient:()=>W,InitPresignOpts:()=>T,KeygenSetupOpts:()=>f,NetworkSigner:()=>N,NoAuthWalletProviderServiceClient:()=>R,PasskeyAuth:()=>B,PasskeyRegister:()=>L,SignRequestBuilder:()=>v,UserSignatures:()=>w,WalletProviderServiceClient:()=>V,computeAddress:()=>oe,default:()=>nt,flattenSignature:()=>te,generateEphPrivateKey:()=>Q,getEphPublicKey:()=>I,parseEphKeyOperationResult:()=>$,parseKeygenResult:()=>K,parseSigngenResult:()=>C});module.exports=Fe(st);var Pe=require("json-canonicalize");var d=(s,e)=>{g(typeof e!="string",`${s} must be string`),g((e==null?void 0:e.trim().length)===0,`${s} cannot be empty`)},be=(s,e)=>{if(g(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")g(s.length!==65,"secp256k1: key length must be 65 bytes, got "+s.length);else if(e==="ed25519")g(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},Ae=(s,e)=>{if(g(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")g(s.length!==32,"secp256k1: key length must be 32 bytes, got "+s.length);else if(e==="ed25519")g(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},xe=s=>{g(s!=="ed25519"&&s!=="secp256k1",'signAlg must be either "ed25519" or "secp256k"')},g=(s,e)=>{if(s)throw new Error(e)},He=(s,e)=>`Invalid payload ${JSON.stringify(s)}, cannot be authenticated by ${e.toLocaleUpperCase()} method.`,H=(s,e,t)=>{g(!e.some(n=>s instanceof n),He(s,t))};var v=class{constructor(){c(this,"signRequest",new Map)}setRequest(e,t,n){if(d("transactionId",e),d("message",t),d("requestType",n),this.signRequest.has(e))throw new Error(`Transaction ID ${e} is already set.`);return this.signRequest.set(e,{signingMessage:t,requestType:n}),this}build(){let e={};if(this.signRequest.forEach((t,n)=>{e[n]=t}),Object.keys(e).length===0)throw new Error("No sign request is set.");return(0,Pe.canonicalize)(e)}};var de=require("json-canonicalize");var Ce=require("js-base64");function Je(s){return s instanceof Uint8Array||ArrayBuffer.isView(s)&&s.constructor.name==="Uint8Array"}function ce(s,...e){if(!Je(s))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(s.length))throw new Error("Uint8Array expected of length "+e+", got length="+s.length)}function ue(s,e=!0){if(s.destroyed)throw new Error("Hash instance has been destroyed");if(e&&s.finished)throw new Error("Hash#digest() has already been called")}function Ee(s,e){ce(s);let t=e.outputLen;if(s.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var Y=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),y=(s,e)=>s<<32-e|s>>>e;function Ge(s){if(typeof s!="string")throw new Error("utf8ToBytes expected string, got "+typeof s);return new Uint8Array(new TextEncoder().encode(s))}function pe(s){return typeof s=="string"&&(s=Ge(s)),ce(s),s}var X=class{clone(){return this._cloneInto()}};function ve(s){let e=n=>s().update(pe(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function ze(s,e,t,n){if(typeof s.setBigUint64=="function")return s.setBigUint64(e,t,n);let r=BigInt(32),o=BigInt(4294967295),i=Number(t>>r&o),a=Number(t&o),u=n?4:0,p=n?0:4;s.setUint32(e+u,i,n),s.setUint32(e+p,a,n)}var ke=(s,e,t)=>s&e^~s&t,Ke=(s,e,t)=>s&e^s&t^e&t,Z=class extends X{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Y(this.buffer)}update(e){ue(this);let{view:t,buffer:n,blockLen:r}=this;e=pe(e);let o=e.length;for(let i=0;i<o;){let a=Math.min(r-this.pos,o-i);if(a===r){let u=Y(e);for(;r<=o-i;i+=r)this.process(u,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ue(this),Ee(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:o}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>r-i&&(this.process(n,0),i=0);for(let h=i;h<r;h++)t[h]=0;ze(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=Y(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let p=u/4,l=this.get();if(p>l.length)throw new Error("_sha2: outputLen bigger than state");for(let h=0;h<p;h++)a.setUint32(4*h,l[h],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:o,destroyed:i,pos:a}=this;return e.length=r,e.pos=a,e.finished=o,e.destroyed=i,r%t&&e.buffer.set(n),e}};var Qe=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),b=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),A=new Uint32Array(64),he=class extends Z{constructor(){super(64,32,8,!1),this.A=b[0]|0,this.B=b[1]|0,this.C=b[2]|0,this.D=b[3]|0,this.E=b[4]|0,this.F=b[5]|0,this.G=b[6]|0,this.H=b[7]|0}get(){let{A:e,B:t,C:n,D:r,E:o,F:i,G:a,H:u}=this;return[e,t,n,r,o,i,a,u]}set(e,t,n,r,o,i,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=o|0,this.F=i|0,this.G=a|0,this.H=u|0}process(e,t){for(let h=0;h<16;h++,t+=4)A[h]=e.getUint32(t,!1);for(let h=16;h<64;h++){let S=A[h-15],U=A[h-2],Se=y(S,7)^y(S,18)^S>>>3,ae=y(U,17)^y(U,19)^U>>>10;A[h]=ae+A[h-7]+Se+A[h-16]|0}let{A:n,B:r,C:o,D:i,E:a,F:u,G:p,H:l}=this;for(let h=0;h<64;h++){let S=y(a,6)^y(a,11)^y(a,25),U=l+S+ke(a,u,p)+Qe[h]+A[h]|0,ae=(y(n,2)^y(n,13)^y(n,22))+Ke(n,r,o)|0;l=p,p=u,u=a,a=i+U|0,i=o,o=r,r=n,n=U+ae|0}n=n+this.A|0,r=r+this.B|0,o=o+this.C|0,i=i+this.D|0,a=a+this.E|0,u=u+this.F|0,p=p+this.G|0,l=l+this.H|0,this.set(n,r,o,i,a,u,p,l)}roundClean(){A.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var le=ve(()=>new he);var ee=require("viem"),m=s=>Ce.Base64.fromUint8Array(new Uint8Array(s),!0),ge=s=>{let e=(0,ee.stringToBytes)(s),t=le(le(e));return(0,ee.toHex)(t,{size:32}).slice(2)};var w=class{constructor(e,t){c(this,"userAuthentications");c(this,"authModule");c(this,"apiVersion");this.authModule=e,this.userAuthentications=new Map,this.apiVersion=t}async setDefaultAuth(e,t){let n=await this.authModule.authenticate({payload:e,challenge:t!=null?t:ge((0,de.canonicalize)(e))});this.userAuthentications.set("default",n)}async setKeygenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for keygen");for(let n of e){let r=n.signAlg,o=t?t[r]:ge((0,de.canonicalize)(n));if(o){let i=await this.authModule.authenticate({payload:n,challenge:o});this.userAuthentications.set(r,i)}else throw new Error(`no final challenge found in response for ${r}`)}}async setSigngenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for signgen v1");await this.setDefaultAuth(e,t)}async setAddEphKeyUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for add ephemeral key v1");await this.setDefaultAuth(e,t)}async setRevokeEphKeyUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for revoke ephemeral key v1");await this.setDefaultAuth(e,t)}async setRegisterPasskeyUserSigs(e,t){if(!t)throw new Error("missing challenge response for registerPasskey");await this.setDefaultAuth(e,t)}async setKeyRefreshUserSigs(e,t){if(!t)throw new Error("missing challenge response for keyRefresh");await this.setDefaultAuth(e,t)}async setQcUserSigs(e,t){if(!t)throw new Error("missing challenge response for quorumChange");await this.setDefaultAuth(e,t)}async setFinishPresignUserSigs(e,t){await this.setDefaultAuth(e,t)}async build(e,t,n){if(e==="keygen"){let r=n?JSON.parse(n):void 0;await this.setKeygenUserSigs(t,r)}else e==="signgen"?await this.setSigngenUserSigs(t,n):e==="addEphemeralKey"?await this.setAddEphKeyUserSigs(t,n):e==="revokeEphemeralKey"?await this.setRevokeEphKeyUserSigs(t,n):e==="registerPasskey"?await this.setRegisterPasskeyUserSigs(t,n):e==="keyRefresh"?await this.setKeyRefreshUserSigs(t,n):e==="quorumChange"?await this.setQcUserSigs(t,n):e==="finishPresign"&&await this.setFinishPresignUserSigs(t,n);return Object.fromEntries(this.userAuthentications)}};var te=s=>{let{sign:e,recid:t}=s,n=(27+t).toString(16);return`0x${e}${n}`};var je=[{name:"tag",type:"uint16"},{name:"value",type:"string"}],f=class{constructor({t:e,n:t,ephClaim:n,permissions:r,signAlg:o}){c(this,"t");c(this,"n");c(this,"ephClaim");c(this,"metadata");c(this,"signAlg");d("signAlg",o),this.t=e,this.n=t,this.signAlg=o,this.ephClaim=n==null?void 0:n.toJSON(),this.metadata=[],r&&this.metadata.push({tag:1,value:r})}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeygenSetupOpts"},{name:"challenge",type:"string"}],KeygenSetupOpts:this.ephClaim?[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"ephClaim",type:"string"},{name:"metadata",type:"TaggedValue[]"}]:[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:je}}},q=class{constructor({t:e,key_id:t,signAlg:n,message:r}){c(this,"t");c(this,"key_id");c(this,"message");c(this,"signAlg");d("keyId",t),d("signAlg",n),d("message",r),this.t=e,this.key_id=t,this.message=r,this.signAlg=n}},T=class{constructor({amount:e,keyId:t,t:n,expiryInSecs:r}){c(this,"amount");c(this,"key_id");c(this,"t");c(this,"expiry");if(e<=0)throw new Error("Amount must be greater than 0");d("keyId",t),this.amount=e,this.key_id=t,this.t=n,this.expiry=r!=null?r:Math.floor(Date.now()/1e3)+7*24*3600}},x=class{constructor({presignSessionId:e,message:t}){c(this,"presignSessionId");c(this,"message");d("presignSessionId",e),d("message",t),this.presignSessionId=e,this.message=t}};var P=class{constructor(e,t){c(this,"key_id");c(this,"eph_claim");d("keyId",e),this.key_id=e,this.eph_claim=t.toJSON()}get eoaRequestSchema(){return{Request:[{name:"setup",type:"RevokeEphKeyRequest"},{name:"challenge",type:"string"}],RevokeEphKeyRequest:[{name:"key_id",type:"string"},{name:"eph_claim",type:"string"}]}}},k=class{constructor(e,t){c(this,"key_id_list");c(this,"eph_claim");for(let n of e)d("keyId",n);this.key_id_list=e,this.eph_claim=t.toJSON()}get eoaRequestSchema(){return{Request:[{name:"setup",type:"AddEphKeyRequest"},{name:"challenge",type:"string"}],AddEphKeyRequest:[{name:"key_id_list",type:"string[]"},{name:"eph_claim",type:"string"}]}}},O=class{constructor(e){c(this,"options");d("options",e),this.options=e}},ne=class{constructor({newT:e,newN:t,keyId:n,signAlg:r}){c(this,"new_t");c(this,"new_n");c(this,"key_id");c(this,"sign_alg");d("keyId",n),d("signAlg",r),this.new_t=e,this.new_n=t,this.key_id=n,this.sign_alg=r}get eoaRequestSchema(){return{Request:[{name:"setup",type:"QuorumChangeRequest"},{name:"challenge",type:"string"}],QuorumChangeRequest:[{name:"new_t",type:"uint32"},{name:"new_n",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}},M=class{constructor({t:e,keyId:t,signAlg:n}){c(this,"t");c(this,"key_id");c(this,"sign_alg");d("keyId",t),d("signAlg",n),this.t=e,this.key_id=t,this.sign_alg=n}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeyRefreshRequest"},{name:"challenge",type:"string"}],KeyRefreshRequest:[{name:"t",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}};var se=s=>{var o,i,a;let e=s.split(":");g(e.length!==3,"Invalid keygen response from network");let t=(o=e[0])==null?void 0:o.split("=")[1],n=(i=e[1])==null?void 0:i.split("=")[1],r=(a=e[2])==null?void 0:a.split("=")[1];return{publicKey:n,keyId:t,signAlg:r}},K=(s,e)=>{let t=s.split(";");return g(t.length!==e,"Invalid keygen response from network, not all keys were generated"),t.map(n=>se(n))},C=(s,e)=>s.split(";").map(n=>{var r,o,i,a,u;if(e==="secp256k1"){let p=n.split(":");g(p.length!==3,"Invalid signgen response from network");let l=(r=p[0])==null?void 0:r.split("=")[1],h=(o=p[1])==null?void 0:o.split("=")[1],S=(i=p[2])==null?void 0:i.split("=")[1];if(l===void 0||h===void 0||S===void 0)throw new Error("Invalid signgen response from network");return{transactionId:S,sign:l,recid:parseInt(h)}}else{let p=n.split(":");g(p.length!==2,"Invalid signgen response from network");let l=(a=p[0])==null?void 0:a.split("=")[1],h=(u=p[1])==null?void 0:u.split("=")[1];if(l===void 0||h===void 0)throw new Error("Invalid signgen response from network");return{transactionId:h,sign:l,recid:0}}}),$=s=>{let e=s.split(";"),t=[];return e.forEach(n=>{let r=n.split(":");g(r.length!==2,"Invalid eph key operation response from network");let o=r[0],i=r[1];t.push({keyId:o,status:i})}),t};var J=require("json-canonicalize");var V=class{constructor(e){c(this,"walletProviderUrl");c(this,"apiVersion","v1");this.walletProviderUrl=`${e.walletProviderUrl}/${e.apiVersion}`,this.apiVersion=e.apiVersion}getVersion(){return this.apiVersion}async startKeygen({setups:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("keygen",e,t).then(r=>K(r,e.length))}async startKeyRefresh({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Key refresh is not supported in v2 API");return this.connect.bind(this)("keyRefresh",e,t).then(r=>se(r))}async startSigngen({setup:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("signgen",e,t).then(r=>C(r,e.signAlg))}async addEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("addEphemeralKey",e,t).then(r=>$(r))}async revokeEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("revokeEphemeralKey",e,t).then(r=>({status:r}))}async registerPasskey({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Passkey registration is not supported in v2 API");return this.connect.bind(this)("registerPasskey",e,t).then(r=>({passkeyCredentialId:r}))}connect(e,t,n){return new Promise((r,o)=>{let i=new WebSocket(`${this.walletProviderUrl}/${e}`),a=0;return console.debug("Connecting to ",i.url),i.addEventListener("open",u=>{switch(console.debug(`Connection opened in state ${a} with event ${JSON.stringify(u,void 0," ")}`),a){case 0:{a=1;try{let p=(0,J.canonicalize)({payload:t});console.debug("Sending request:",p),i.send(p)}catch(p){this.finishWithError(i,a,p,"open event",o)}break}case 1:case 2:this.finishWithError(i,a,"Unexpected message in state waitingForResult.","open event",o);break;case 3:break}}),i.addEventListener("message",async u=>{switch(console.debug(`Connection message in state ${a} with event data ${JSON.stringify(u.data,void 0," ")}`),a){case 0:this.finishWithError(i,a,"Unexpected message in state initiated.","message event",o);break;case 1:{a=2;try{let p=u.data,l=await new w(n,this.apiVersion).build(e,t,p);i.send((0,J.canonicalize)(l))}catch(p){this.finishWithError(i,a,p,"message event",o)}break}case 2:{a=3,i.close(),r(u.data);break}case 3:break}}),i.addEventListener("error",u=>{console.debug(`Connection error in state ${a} with event ${JSON.stringify(u,void 0," ")}`),this.finishWithError(i,a,`Connection encountered an error event: ${u}`,"error event",o)}),i.addEventListener("close",u=>{let p=u.reason||"No specific reason provided.",l=u.code;console.debug(`Connection closed. State: ${a}, Code: ${l}, Reason: '${p}'`);let h=l>=4e3?`Application Error ${l}: ${p}`:l===1006?"Connection Abnormality (Code 1006): Server closed connection unexpectedly or network issue.":`WebSocket Closed Unexpectedly (Code ${l}): ${p}`;this.finishWithError(i,a,new Error(h),"close event",o)}),()=>{(i.readyState===WebSocket.OPEN||i.readyState===WebSocket.CONNECTING)&&i.close(1001,"Cleanup/Unmount")}})}connectV2(e,t,n){return new Promise((r,o)=>{let i=new WebSocket(`${this.walletProviderUrl}/${e}`),a=0;return console.debug("Connecting to ",i.url),i.addEventListener("open",async u=>{switch(console.debug(`Connection opened in state ${a} with event ${JSON.stringify(u,void 0," ")}`),a){case 0:a=2;try{let p=await new w(n,this.apiVersion).build(e,t);i.send((0,J.canonicalize)({payload:t,userSigs:p}))}catch(p){this.finishWithError(i,a,p,"open event",o)}break;case 2:a=3,this.finishWithError(i,a,"Unexpected message in state waitingForResult.","open event",o);break;case 3:break}}),i.addEventListener("message",async u=>{switch(console.debug(`Connection message in state ${a} with event ${JSON.stringify(u,void 0," ")}`),a){case 0:this.finishWithError(i,a,"Unexpected message in state initiated.","message event",o);break;case 2:{a=3,i.close(),r(u.data);break}case 3:break}}),i.addEventListener("error",u=>{console.debug(`Connection error in state ${a} with event ${JSON.stringify(u,void 0," ")}`),this.finishWithError(i,a,`Connection encountered an error event: ${u}`,"error event",o)}),i.addEventListener("close",u=>{let p=u.reason||"No specific reason provided.",l=u.code;console.debug(`Connection closed. State: ${a}, Code: ${l}, Reason: '${p}'`);let h=l>=4e3?`Application Error ${l}: ${p}`:l===1006?"Connection Abnormality (Code 1006): Server closed connection unexpectedly or network issue.":`WebSocket Closed Unexpectedly (Code ${l}): ${p}`;this.finishWithError(i,a,new Error(h),"close event",o)}),()=>{(i.readyState===WebSocket.OPEN||i.readyState===WebSocket.CONNECTING)&&i.close(1001,"Cleanup/Unmount")}})}finishWithError(e,t,n,r,o){console.error(`Error from ${r} in state ${t}:`,n),t!==3&&(t=3),e.readyState===WebSocket.OPEN&&e.close(1011,`Protocol run failed. Client attempted to close connection in state ${t}`),o(n instanceof Error?n:new Error(String(n)))}},R=class{constructor(e){c(this,"walletProviderUrl");c(this,"apiVersion","v1");this.walletProviderUrl=`${e.walletProviderUrl}/${e.apiVersion}`,this.apiVersion=e.apiVersion}getVersion(){return this.apiVersion}async startKeygen({setups:e}){return this.connect.bind(this)("keygen",e).then(n=>K(n,e.length))}async startSigngen({setup:e}){return this.connect.bind(this)("signgen",e).then(n=>C(n,e.signAlg))}async startKeyRefresh({payload:e}){if(this.apiVersion==="v2")throw new Error("Key refresh is not supported in v2 API");return this.connect.bind(this)("keyRefresh",e).then(n=>se(n))}connect(e,t){return new Promise((n,r)=>{let o=0,i=new WebSocket(`${this.walletProviderUrl}/${e}`);i.addEventListener("open",async a=>{switch(console.debug(`Connection opened in state ${o} with event ${JSON.stringify(a,void 0," ")}`),o){case 0:o=2;try{i.send((0,J.canonicalize)({payload:t}))}catch(u){r(u)}break;case 2:o=3,r("Incorrect protocol state");break;case 3:break}}),i.addEventListener("message",async a=>{switch(console.debug(`Connection message in state ${o} with event ${JSON.stringify(a,void 0," ")}`),o){case 0:o=3,r("Incorrect protocol state");break;case 2:{o=3,i.close(),n(a.data);break}case 3:break}}),i.addEventListener("error",a=>{console.debug(`Connection error in state ${o} with event ${JSON.stringify(a,void 0," ")}`),o!=3&&(o=3,r("Incorrect protocol state"))}),i.addEventListener("close",a=>{console.debug(`Connection closed in state ${o} with event ${JSON.stringify(a,void 0," ")}`),o!=3&&(o=3,r("Incorrect protocol state"))})})}};var N=class{constructor(e,t){c(this,"authModule");c(this,"wpClient");if(!t&&!(e instanceof R))throw new Error("missing authModule for wallet provider client in auth mode");if(t&&e instanceof R)throw new Error("authModule is required but using wallet provider client in no-auth mode");this.authModule=t,this.wpClient=e}validateQuorumSetup({threshold:e,totalNodes:t}){e&&g(e<2,`Threshold = ${e} must be at least 2`),e&&t&&g(t<e,`Total nodes = ${t} must be greater or equal to threshold = ${e}`)}async generateKey(e,t,n,r,o){this.validateQuorumSetup({threshold:e,totalNodes:t});let i=n.map(a=>new f({t:e,n:t,ephClaim:r,permissions:o,signAlg:a}));return this.authModule?await this.wpClient.startKeygen({setups:i,authModule:this.authModule}):await this.wpClient.startKeygen({setups:i})}async signMessage(e,t,n,r){this.validateQuorumSetup({threshold:e}),xe(n);let o=new q({t:e,key_id:t,signAlg:n,message:r});return this.authModule?await this.wpClient.startSigngen({setup:o,authModule:this.authModule}):await this.wpClient.startSigngen({setup:o})}async refreshKey(e,t,n){let r=new M({t:e,keyId:t,signAlg:n});return this.authModule?await this.wpClient.startKeyRefresh({payload:r,authModule:this.authModule}):await this.wpClient.startKeyRefresh({payload:r})}async addEphemeralKey(e,t){let n=new k(e,t);if(!this.authModule)throw new Error("Add ephemeral key is not supported in no auth mode");return await this.wpClient.addEphemeralKey({payload:n,authModule:this.authModule})}async revokeEphemeralKey(e,t){d("keyId",e);let n=new P(e,t);if(!this.authModule)throw new Error("Revoke ephemeral key is not supported in no auth mode");return await this.wpClient.revokeEphemeralKey({payload:n,authModule:this.authModule})}async registerPasskey(e){let t=new O(e!=null?e:"passkey options");if(!this.authModule)throw new Error("Register passkey is not supported in no auth mode");return await this.wpClient.registerPasskey({payload:t,authModule:this.authModule})}};var Ie=require("json-canonicalize");var ye=class extends Error{constructor(t,n,r){super(r||n);this.status=t;this.statusText=n;this.name="HttpError"}},W=class{constructor(e="",t={}){c(this,"baseURL");c(this,"defaultHeaders");this.baseURL=e,this.validateHeaders(t),this.defaultHeaders={"Content-Type":"application/json",...t}}validateHeaders(e){if(typeof e!="object"||e===null)throw new Error("Headers must be an object.");for(let[t,n]of Object.entries(e))if(typeof t!="string"||typeof n!="string")throw new Error(`Invalid header: ${t}. Header names and values must be strings.`)}setDefaultHeaders(e){this.defaultHeaders={...this.defaultHeaders,...e}}buildUrl(e){return`${this.baseURL}${e}`}async handleResponse(e){if(!e.ok){let n;try{n=(await e.json()).message||e.statusText}catch{n=e.statusText}throw new ye(e.status,e.statusText,n)}let t=e.headers.get("content-type");return t&&t.includes("application/json")?e.json():e.text()}async request(e,t,n,r={}){let o=this.buildUrl(t),i={...this.defaultHeaders,...r.headers},a={method:e,headers:i,...r,body:n?(0,Ie.canonicalize)(n):null},u=await fetch(o,a);return this.handleResponse(u)}async get(e,t){return this.request("GET",e,void 0,t)}async post(e,t,n){return this.request("POST",e,t,n)}async put(e,t,n){return this.request("PUT",e,t,n)}async patch(e,t,n){return this.request("PATCH",e,t,n)}async delete(e,t){return this.request("DELETE",e,void 0,t)}};var Xe={name:"SilentShard authentication",version:"0.1.0"},Ye=[{name:"name",type:"string"},{name:"version",type:"string"}];function Ze(s,e){let t={setup:s,challenge:e};return{types:{EIP712Domain:Ye,...s.eoaRequestSchema},domain:Xe,primaryType:"Request",message:t}}async function Ue({setup:s,eoa:e,challenge:t,browserWallet:n}){let r=Ze(s,t),o=await n.signTypedData(e,r);return{credentials:{credentials:"",method:"eoa",id:e},signature:o}}var fe=require("js-base64"),me=require("viem"),G=require("json-canonicalize");async function qe({user:s,challenge:e,rpConfig:t}){let n=(0,me.hexToBytes)(`0x${e}`,{size:32}),r={publicKey:{authenticatorSelection:{residentKey:"preferred",userVerification:"required"},challenge:n,excludeCredentials:[],pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],rp:{name:t.rpName,id:t.rpId},user:{...s,id:fe.Base64.toUint8Array(s.id)}}},o=await navigator.credentials.create(r);if(o===null)throw new Error("No credential returned");let i=m(o.response.attestationObject),u={rawCredential:(0,G.canonicalize)({authenticatorAttachment:o.authenticatorAttachment,id:o.id,rawId:m(o.rawId),response:{attestationObject:i,clientDataJSON:m(o.response.clientDataJSON)},type:o.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:"",method:"passkey",id:o.id},signature:(0,G.canonicalize)(u)}}async function Te({challenge:s,allowCredentialId:e,rpConfig:t}){let n=(0,me.hexToBytes)(`0x${s}`,{size:32}),r=e?[{type:"public-key",id:fe.Base64.toUint8Array(e)}]:[],o={publicKey:{userVerification:"required",challenge:n,allowCredentials:r}},i=await navigator.credentials.get(o);if(i===null)throw new Error("Failed to get navigator credentials");let a=i.response,u=a.userHandle;if(u===null)throw new Error("User handle cannot be null");let p=m(a.signature),h={rawCredential:(0,G.canonicalize)({authenticatorAttachment:i.authenticatorAttachment,id:i.id,rawId:m(i.rawId),response:{authenticatorData:m(a.authenticatorData),clientDataJSON:m(a.clientDataJSON),signature:p,userHandle:m(u)},type:i.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:"",method:"passkey",id:i.id},signature:(0,G.canonicalize)(h)}}var z=require("viem"),re=require("@noble/curves/ed25519"),we=require("@noble/curves/secp256k1");var Oe=require("viem/accounts"),Re=require("json-canonicalize");var E=class s{constructor(e,t,n,r=Math.floor(Date.now()/1e3)+3600){c(this,"ephId");c(this,"ephPK");c(this,"signAlg");c(this,"expiry");this.validateInputs(e,t,n,r),this.ephId=e,this.ephPK=(0,z.toHex)(t),this.signAlg=n,this.expiry=r}validateInputs(e,t,n,r){d("ephId",e),be(t,n),g(Number.isInteger(r)===!1,"expiry must be an integer");let o=Math.floor(Date.now()/1e3),i=r-o,a=i>0&&i<=365*24*60*60;g(!a,`lifetime must be greater than 0 and less than or equal to 365 days expiry - now ${i}, expiry ${r} now secs ${o}`)}toJSON(){return(0,Re.canonicalize)({ephId:this.ephId,ephPK:this.ephPK,expiry:this.expiry,signAlg:this.signAlg})}static generateKeys(e,t){let n=Q(e),r=I(n,e),o=new s((0,z.toHex)(r),r,e,t);return{privKey:n,pubKey:r,ephClaim:o}}};async function Me({setup:s,challenge:e,ephSK:t,ephClaim:n}){let r={setup:s,challenge:e},o=new TextEncoder().encode((0,Re.canonicalize)(r)),i=await et(o,t,n.signAlg);return{credentials:{credentials:n.toJSON(),method:"ephemeral",id:n.ephId},signature:i}}async function et(s,e,t){switch(t){case"ed25519":return(0,z.toHex)(re.ed25519.sign(s,e));case"secp256k1":return await(0,Oe.signMessage)({message:{raw:s},privateKey:(0,z.toHex)(e)});default:throw new Error("Invalid signature algorithm")}}function Q(s){switch(s){case"ed25519":return re.ed25519.utils.randomPrivateKey();case"secp256k1":return we.secp256k1.utils.randomPrivateKey();default:throw new Error("Invalid signature algorithm")}}function I(s,e){switch(e){case"ed25519":return re.ed25519.getPublicKey(s);case"secp256k1":return we.secp256k1.getPublicKey(s,!1);default:throw new Error("Invalid signature algorithm")}}var $e=require("viem");var D=class{constructor(e,t){c(this,"browserWallet");c(this,"eoa");this.validateInputs(e,t),this.browserWallet=t,this.eoa=e}validateInputs(e,t){g(!(0,$e.isAddress)(e),"invalid Ethereum address format"),g(!((t==null?void 0:t.signTypedData)instanceof Function),"invalid browserWallet")}async authenticate({payload:e,challenge:t}){return H(e,[f,M,ne,k,P],"eoa"),await Ue({setup:e,eoa:this.eoa,challenge:t,browserWallet:this.browserWallet})}},_=class{constructor(e,t,n){c(this,"ephSK");c(this,"ephClaim");Ae(t,n),this.ephSK=t;let r=I(this.ephSK,n);this.ephClaim=new E(e,r,n)}async authenticate({payload:e,challenge:t}){return H(e,[q,P,x],"ephemeral"),await Me({setup:e,challenge:t,ephSK:this.ephSK,ephClaim:this.ephClaim})}},B=class{constructor(e,t){c(this,"rpConfig");c(this,"allowCredentialId");this.rpConfig=e,this.allowCredentialId=t}async authenticate({payload:e,challenge:t}){return H(e,[f,k,P],"passkey"),await Te({allowCredentialId:this.allowCredentialId,challenge:t,rpConfig:this.rpConfig})}},L=class{constructor(e,t){c(this,"rpConfig");c(this,"user");this.rpConfig=e,this.user=t}async authenticate({payload:e,challenge:t}){return H(e,[O],"passkey"),await qe({user:this.user,challenge:t,rpConfig:this.rpConfig})}};var ie=require("viem/accounts"),Ve=require("@noble/curves/secp256k1"),F=require("viem"),tt=require("js-base64");function oe(s){if(s.startsWith("0x")&&(s=s.slice(2)),s.startsWith("04"))return(0,ie.publicKeyToAddress)(`0x${s} `);if(s.startsWith("02")||s.startsWith("03")){let e=Ve.secp256k1.ProjectivePoint.fromHex(s).toHex(!1);return(0,ie.publicKeyToAddress)(`0x${e}`)}else throw new Error("Invalid public key")}var nt={KeygenSetupOpts:f,InitPresignOpts:T,FinishPresignOpts:x,UserSignatures:w,NetworkSigner:N,SignRequestBuilder:v,WalletProviderServiceClient:V,NoAuthWalletProviderServiceClient:R,HttpClient:W,EOAAuth:D,EphAuth:_,PasskeyAuth:B,PasskeyRegister:L,generateEphPrivateKey:Q,getEphPublicKey:I,EphKeyClaim:E,computeAddress:oe,flattenSignature:te,parseSigngenResult:C,parseKeygenResult:K,parseEphKeyOperationResult:$};0&&(module.exports={EOAAuth,EphAuth,EphKeyClaim,FinishPresignOpts,HttpClient,InitPresignOpts,KeygenSetupOpts,NetworkSigner,NoAuthWalletProviderServiceClient,PasskeyAuth,PasskeyRegister,SignRequestBuilder,UserSignatures,WalletProviderServiceClient,computeAddress,flattenSignature,generateEphPrivateKey,getEphPublicKey,parseEphKeyOperationResult,parseKeygenResult,parseSigngenResult});
|
|
2
2
|
/*! Bundled license information:
|
|
3
3
|
|
|
4
4
|
@noble/hashes/esm/utils.js:
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { SignRequestType } from './builder/signRequest';
|
|
2
|
-
export type { ApiVersion, ClientConfig, IWalletProviderServiceClient, } from './client/walletProviderServiceClientInterface';
|
|
2
|
+
export type { ApiVersion, ClientConfig, IWalletProviderServiceClient, INoAuthWpServiceClient, } from './client/walletProviderServiceClientInterface';
|
|
3
3
|
export type { IBrowserWallet, TypedData } from './auth/EOAauthentication';
|
|
4
4
|
export type { PasskeyUser, RelyingPartyConfig } from './auth/passkeyAuthentication';
|
|
5
5
|
export type { UserAuthentication } from './auth/authentication';
|
|
@@ -11,28 +11,31 @@ export { SignRequestBuilder } from './builder/signRequest';
|
|
|
11
11
|
export { UserSignatures } from './builder/userAuth';
|
|
12
12
|
export { flattenSignature } from './client/ethUtil';
|
|
13
13
|
export { NetworkSigner } from './client/networkSigner';
|
|
14
|
-
export { WalletProviderServiceClient } from './client/walletProviderServiceClient';
|
|
14
|
+
export { WalletProviderServiceClient, NoAuthWalletProviderServiceClient } from './client/walletProviderServiceClient';
|
|
15
15
|
export { parseSigngenResult, parseKeygenResult, parseEphKeyOperationResult } from './client/networkResponse';
|
|
16
16
|
export { HttpClient } from './client/httpClient';
|
|
17
17
|
export { EOAAuth, EphAuth, PasskeyAuth, PasskeyRegister } from './auth/authentication';
|
|
18
18
|
export { generateEphPrivateKey, getEphPublicKey, EphKeyClaim } from './auth/ephemeralAuthentication';
|
|
19
19
|
export { computeAddress } from './viemSigner';
|
|
20
|
-
export { KeygenSetupOpts } from './setupMessage';
|
|
20
|
+
export { KeygenSetupOpts, InitPresignOpts, FinishPresignOpts } from './setupMessage';
|
|
21
21
|
import { SignRequestBuilder } from './builder/signRequest';
|
|
22
22
|
import { UserSignatures } from './builder/userAuth';
|
|
23
23
|
import { NetworkSigner } from './client/networkSigner';
|
|
24
|
-
import { WalletProviderServiceClient } from './client/walletProviderServiceClient';
|
|
24
|
+
import { WalletProviderServiceClient, NoAuthWalletProviderServiceClient } from './client/walletProviderServiceClient';
|
|
25
25
|
import { HttpClient } from './client/httpClient';
|
|
26
26
|
import { EOAAuth, EphAuth, PasskeyAuth, PasskeyRegister } from './auth/authentication';
|
|
27
27
|
import { generateEphPrivateKey, getEphPublicKey, EphKeyClaim } from './auth/ephemeralAuthentication';
|
|
28
28
|
import { computeAddress } from './viemSigner';
|
|
29
|
-
import { KeygenSetupOpts } from './setupMessage';
|
|
29
|
+
import { KeygenSetupOpts, InitPresignOpts, FinishPresignOpts } from './setupMessage';
|
|
30
30
|
declare const _default: {
|
|
31
31
|
KeygenSetupOpts: typeof KeygenSetupOpts;
|
|
32
|
+
InitPresignOpts: typeof InitPresignOpts;
|
|
33
|
+
FinishPresignOpts: typeof FinishPresignOpts;
|
|
32
34
|
UserSignatures: typeof UserSignatures;
|
|
33
35
|
NetworkSigner: typeof NetworkSigner;
|
|
34
36
|
SignRequestBuilder: typeof SignRequestBuilder;
|
|
35
37
|
WalletProviderServiceClient: typeof WalletProviderServiceClient;
|
|
38
|
+
NoAuthWalletProviderServiceClient: typeof NoAuthWalletProviderServiceClient;
|
|
36
39
|
HttpClient: typeof HttpClient;
|
|
37
40
|
EOAAuth: typeof EOAAuth;
|
|
38
41
|
EphAuth: typeof EphAuth;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var qe=Object.defineProperty,Ce=Object.defineProperties;var Ue=Object.getOwnPropertyDescriptors;var le=Object.getOwnPropertySymbols;var Te=Object.prototype.hasOwnProperty,Oe=Object.prototype.propertyIsEnumerable;var Y=(s,e,t)=>e in s?qe(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,y=(s,e)=>{for(var t in e||(e={}))Te.call(e,t)&&Y(s,t,e[t]);if(le)for(var t of le(e))Oe.call(e,t)&&Y(s,t,e[t]);return s},U=(s,e)=>Ce(s,Ue(e));var p=(s,e,t)=>Y(s,typeof e!="symbol"?e+"":e,t);import{canonicalize as Me}from"json-canonicalize";var g=(s,e)=>{l(typeof e!="string","".concat(s," must be string")),l((e==null?void 0:e.trim().length)===0,"".concat(s," cannot be empty"))},ge=(s,e)=>{if(l(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")l(s.length!==65,"secp256k1: key length must be 65 bytes, got "+s.length);else if(e==="ed25519")l(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},de=(s,e)=>{if(l(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")l(s.length!==32,"secp256k1: key length must be 32 bytes, got "+s.length);else if(e==="ed25519")l(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},ye=s=>{l(s!=="ed25519"&&s!=="secp256k1",'signAlg must be either "ed25519" or "secp256k"')},l=(s,e)=>{if(s)throw new Error(e)};var v=class{constructor(){p(this,"signRequest",new Map)}setRequest(e,t,n){if(g("transactionId",e),g("message",t),g("requestType",n),this.signRequest.has(e))throw new Error("Transaction ID ".concat(e," is already set."));return this.signRequest.set(e,{signingMessage:t,requestType:n}),this}build(){let e={};if(this.signRequest.forEach((t,n)=>{e[n]=t}),Object.keys(e).length===0)throw new Error("No sign request is set.");return Me(e)}};import{canonicalize as xe}from"json-canonicalize";import{Base64 as Le}from"js-base64";function De(s){return s instanceof Uint8Array||ArrayBuffer.isView(s)&&s.constructor.name==="Uint8Array"}function Z(s,...e){if(!De(s))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(s.length))throw new Error("Uint8Array expected of length "+e+", got length="+s.length)}function ee(s,e=!0){if(s.destroyed)throw new Error("Hash instance has been destroyed");if(e&&s.finished)throw new Error("Hash#digest() has already been called")}function fe(s,e){Z(s);let t=e.outputLen;if(s.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var W=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),f=(s,e)=>s<<32-e|s>>>e;function Ve(s){if(typeof s!="string")throw new Error("utf8ToBytes expected string, got "+typeof s);return new Uint8Array(new TextEncoder().encode(s))}function te(s){return typeof s=="string"&&(s=Ve(s)),Z(s),s}var H=class{clone(){return this._cloneInto()}};function me(s){let e=n=>s().update(te(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function _e(s,e,t,n){if(typeof s.setBigUint64=="function")return s.setBigUint64(e,t,n);let r=BigInt(32),o=BigInt(4294967295),i=Number(t>>r&o),a=Number(t&o),u=n?4:0,h=n?0:4;s.setUint32(e+u,i,n),s.setUint32(e+h,a,n)}var we=(s,e,t)=>s&e^~s&t,Re=(s,e,t)=>s&e^s&t^e&t,F=class extends H{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=W(this.buffer)}update(e){ee(this);let{view:t,buffer:n,blockLen:r}=this;e=te(e);let o=e.length;for(let i=0;i<o;){let a=Math.min(r-this.pos,o-i);if(a===r){let u=W(e);for(;r<=o-i;i+=r)this.process(u,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ee(this),fe(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:o}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>r-i&&(this.process(n,0),i=0);for(let c=i;c<r;c++)t[c]=0;_e(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=W(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let h=u/4,d=this.get();if(h>d.length)throw new Error("_sha2: outputLen bigger than state");for(let c=0;c<h;c++)a.setUint32(4*c,d[c],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:o,destroyed:i,pos:a}=this;return e.length=r,e.pos=a,e.finished=o,e.destroyed=i,r%t&&e.buffer.set(n),e}};var Be=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),x=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),b=new Uint32Array(64),se=class extends F{constructor(){super(64,32,8,!1),this.A=x[0]|0,this.B=x[1]|0,this.C=x[2]|0,this.D=x[3]|0,this.E=x[4]|0,this.F=x[5]|0,this.G=x[6]|0,this.H=x[7]|0}get(){let{A:e,B:t,C:n,D:r,E:o,F:i,G:a,H:u}=this;return[e,t,n,r,o,i,a,u]}set(e,t,n,r,o,i,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=o|0,this.F=i|0,this.G=a|0,this.H=u|0}process(e,t){for(let c=0;c<16;c++,t+=4)b[c]=e.getUint32(t,!1);for(let c=16;c<64;c++){let m=b[c-15],k=b[c-2],he=f(m,7)^f(m,18)^m>>>3,X=f(k,17)^f(k,19)^k>>>10;b[c]=X+b[c-7]+he+b[c-16]|0}let{A:n,B:r,C:o,D:i,E:a,F:u,G:h,H:d}=this;for(let c=0;c<64;c++){let m=f(a,6)^f(a,11)^f(a,25),k=d+m+we(a,u,h)+Be[c]+b[c]|0,X=(f(n,2)^f(n,13)^f(n,22))+Re(n,r,o)|0;d=h,h=u,u=a,a=i+k|0,i=o,o=r,r=n,n=k+X|0}n=n+this.A|0,r=r+this.B|0,o=o+this.C|0,i=i+this.D|0,a=a+this.E|0,u=u+this.F|0,h=h+this.G|0,d=d+this.H|0,this.set(n,r,o,i,a,u,h,d)}roundClean(){b.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ne=me(()=>new se);import{stringToBytes as $e,toHex as Ne}from"viem";var R=s=>Le.fromUint8Array(new Uint8Array(s),!0),re=s=>{let e=$e(s),t=ne(ne(e));return Ne(t,{size:32}).slice(2)};var A=class{constructor(e,t){p(this,"userAuthentications");p(this,"authModule");p(this,"apiVersion");this.authModule=e,this.userAuthentications=new Map,this.apiVersion=t}async setDefaultAuth(e,t){let n=await this.authModule.authenticate({payload:e,challenge:t!=null?t:re(xe(e))});this.userAuthentications.set("default",n)}async setKeygenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for keygen");for(let n of e){let r=n.signAlg,o=t?t[r]:re(xe(n));if(o){let i=await this.authModule.authenticate({payload:n,challenge:o});this.userAuthentications.set(r,i)}else throw new Error("no final challenge found in response for ".concat(r))}}async setSigngenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for signgen v1");await this.setDefaultAuth(e,t)}async setAddEphKeyUserSigs(e,t){await this.setDefaultAuth(e,t)}async setRevokeEphKeyUserSigs(e,t){await this.setDefaultAuth(e,t)}async setRegisterPasskeyUserSigs(e,t){if(!t)throw new Error("missing challenge response for registerPasskey");await this.setDefaultAuth(e,t)}async setKeyRefreshUserSigs(e,t){if(!t)throw new Error("missing challenge response for keyRefresh");await this.setDefaultAuth(e,t)}async setQcUserSigs(e,t){if(!t)throw new Error("missing challenge response for quorumChange");await this.setDefaultAuth(e,t)}async build(e,t,n){if(e==="keygen"){let r=n?JSON.parse(n):void 0;await this.setKeygenUserSigs(t,r)}else e==="signgen"?await this.setSigngenUserSigs(t,n):e==="addEphemeralKey"?await this.setAddEphKeyUserSigs(t,n):e==="revokeEphemeralKey"?await this.setRevokeEphKeyUserSigs(t,n):e==="registerPasskey"?await this.setRegisterPasskeyUserSigs(t,n):e==="keyRefresh"?await this.setKeyRefreshUserSigs(t,n):e==="quorumChange"&&await this.setQcUserSigs(t,n);return Object.fromEntries(this.userAuthentications)}};var ie=s=>{let{sign:e,recid:t}=s,n=(27+t).toString(16);return"0x".concat(e).concat(n)};var He=[{name:"tag",type:"uint16"},{name:"value",type:"string"}],w=class{constructor({t:e,n:t,permissions:n,signAlg:r}){p(this,"t");p(this,"n");p(this,"metadata");p(this,"signAlg");g("signAlg",r),this.t=e,this.n=t,this.signAlg=r,this.metadata=[],n&&this.metadata.push({tag:1,value:n})}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeygenSetupOpts"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],KeygenSetupOpts:[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:He}}},K=class{constructor({t:e,key_id:t,signAlg:n,message:r}){p(this,"t");p(this,"key_id");p(this,"message");p(this,"signAlg");g("keyId",t),g("signAlg",n),g("signRequest",r),this.t=e,this.key_id=t,this.message=r,this.signAlg=n}};var S=class{constructor(e){p(this,"key_id");g("keyId",e),this.key_id=e}get eoaRequestSchema(){return{Request:[{name:"setup",type:"RevokeEphKeyRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],RevokeEphKeyRequest:[{name:"key_id",type:"string"}]}}},P=class{constructor(e){p(this,"key_id_list");for(let t of e)g("keyId",t);this.key_id_list=e}get eoaRequestSchema(){return{Request:[{name:"setup",type:"AddEphKeyRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],AddEphKeyRequest:[{name:"key_id_list",type:"string[]"}]}}},I=class{constructor(e){p(this,"options");g("options",e),this.options=e}},J=class{constructor({newT:e,newN:t,keyId:n,signAlg:r}){p(this,"new_t");p(this,"new_n");p(this,"key_id");p(this,"sign_alg");g("keyId",n),g("signAlg",r),this.new_t=e,this.new_n=t,this.key_id=n,this.sign_alg=r}get eoaRequestSchema(){return{Request:[{name:"setup",type:"QuorumChangeRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],QuorumChangeRequest:[{name:"new_t",type:"uint32"},{name:"new_n",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}},q=class{constructor({t:e,keyId:t,signAlg:n}){p(this,"t");p(this,"key_id");p(this,"sign_alg");g("keyId",t),g("signAlg",n),this.t=e,this.key_id=t,this.sign_alg=n}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeyRefreshRequest"},{name:"challenge",type:"string"},{name:"eph_claim",type:"string"}],KeyRefreshRequest:[{name:"t",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}};var T=class{constructor(e,t){p(this,"authModule");p(this,"wpClient");this.authModule=t,this.wpClient=e}validateQuorumSetup({threshold:e,totalNodes:t}){e&&l(e<2,"Threshold = ".concat(e," must be at least 2")),e&&t&&l(t<e,"Total nodes = ".concat(t," must be greater or equal to threshold = ").concat(e))}async generateKey(e,t,n,r){this.validateQuorumSetup({threshold:e,totalNodes:t});let o=n.map(a=>new w({t:e,n:t,permissions:r,signAlg:a}));return await this.wpClient.startKeygen({setups:o,authModule:this.authModule})}async signMessage(e,t,n,r){this.validateQuorumSetup({threshold:e}),ye(n);let o=new K({t:e,key_id:t,signAlg:n,message:r});return await this.wpClient.startSigngen({setup:o,authModule:this.authModule})}async refreshKey(e,t,n){let r=new q({t:e,keyId:t,signAlg:n});return await this.wpClient.startKeyRefresh({payload:r,authModule:this.authModule})}async addEphemeralKey(e){let t=new P(e);return await this.wpClient.addEphemeralKey({payload:t,authModule:this.authModule})}async revokeEphemeralKey(e){g("keyId",e);let t=new S(e);return await this.wpClient.revokeEphemeralKey({payload:t,authModule:this.authModule})}async registerPasskey(e){let t=new I(e!=null?e:"passkey options");return await this.wpClient.registerPasskey({payload:t,authModule:this.authModule})}};var oe=s=>{var o,i,a;let e=s.split(":");l(e.length!==3,"Invalid keygen response from network");let t=(o=e[0])==null?void 0:o.split("=")[1],n=(i=e[1])==null?void 0:i.split("=")[1],r=(a=e[2])==null?void 0:a.split("=")[1];return{publicKey:n,keyId:t,signAlg:r}},O=(s,e)=>{let t=s.split(";");return l(t.length!==e,"Invalid keygen response from network, not all keys were generated"),t.map(n=>oe(n))},M=(s,e)=>s.split(";").map(n=>{var r,o,i,a,u;if(e==="secp256k1"){let h=n.split(":");l(h.length!==3,"Invalid signgen response from network");let d=(r=h[0])==null?void 0:r.split("=")[1],c=(o=h[1])==null?void 0:o.split("=")[1],m=(i=h[2])==null?void 0:i.split("=")[1];if(d===void 0||c===void 0||m===void 0)throw new Error("Invalid signgen response from network");return{transactionId:m,sign:d,recid:parseInt(c)}}else{let h=n.split(":");l(h.length!==2,"Invalid signgen response from network");let d=(a=h[0])==null?void 0:a.split("=")[1],c=(u=h[1])==null?void 0:u.split("=")[1];if(d===void 0||c===void 0)throw new Error("Invalid signgen response from network");return{transactionId:c,sign:d,recid:0}}}),D=s=>{let e=s.split(";"),t=[];return e.forEach(n=>{let r=n.split(":");l(r.length!==2,"Invalid eph key operation response from network");let o=r[0],i=r[1];t.push({keyId:o,status:i})}),t};import{canonicalize as ae}from"json-canonicalize";var V=class{constructor(e){p(this,"walletProviderUrl");p(this,"apiVersion","v1");this.walletProviderUrl="".concat(e.walletProviderUrl,"/").concat(e.apiVersion),this.apiVersion=e.apiVersion}getVersion(){return this.apiVersion}async startKeygen({setups:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("keygen",e,t).then(r=>O(r,e.length))}async startKeyRefresh({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Key refresh is not supported in v2 API");return this.connect.bind(this)("keyRefresh",e,t).then(r=>oe(r))}async startSigngen({setup:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("signgen",e,t).then(r=>M(r,e.signAlg))}async addEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("addEphemeralKey",e,t).then(r=>D(r))}async revokeEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("revokeEphemeralKey",e,t).then(r=>({status:r}))}async registerPasskey({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Passkey registration is not supported in v2 API");return this.connect.bind(this)("registerPasskey",e,t).then(r=>({passkeyCredentialId:r}))}connect(e,t,n){return new Promise((r,o)=>{let i=0,a=new WebSocket("".concat(this.walletProviderUrl,"/").concat(e));a.addEventListener("open",u=>{switch(console.debug("Connection opened in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i){case 0:i=1,a.send(ae({payload:t}));break;case 1:case 2:i=3,o("Incorrect protocol state");break;case 3:break}}),a.addEventListener("message",async u=>{switch(console.debug("Connection message in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i){case 0:i=3,o("Incorrect protocol state");break;case 1:{i=2;try{let h=u.data,d=await new A(n,this.apiVersion).build(e,t,h);a.send(ae(d))}catch(h){o(h)}break}case 2:{i=3,a.close(),r(u.data);break}case 3:break}}),a.addEventListener("error",u=>{console.debug("Connection error in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i!=3&&(i=3,o("Incorrect protocol state"))}),a.addEventListener("close",u=>{console.debug("Connection closed in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i!=3&&(i=3,o("Incorrect protocol state"))})})}connectV2(e,t,n){return new Promise((r,o)=>{let i=0,a=new WebSocket("".concat(this.walletProviderUrl,"/").concat(e));a.addEventListener("open",async u=>{switch(console.debug("Connection opened in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i){case 0:i=2;try{let h=await new A(n,this.apiVersion).build(e,t);a.send(ae({payload:t,userSigs:h}))}catch(h){o(h)}break;case 2:i=3,o("Incorrect protocol state");break;case 3:break}}),a.addEventListener("message",async u=>{switch(console.debug("Connection message in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i){case 0:i=3,o("Incorrect protocol state");break;case 2:{i=3,a.close(),r(u.data);break}case 3:break}}),a.addEventListener("error",u=>{console.debug("Connection error in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i!=3&&(i=3,o("Incorrect protocol state"))}),a.addEventListener("close",u=>{console.debug("Connection closed in state ".concat(i," with event ").concat(JSON.stringify(u,void 0," "))),i!=3&&(i=3,o("Incorrect protocol state"))})})}};import{canonicalize as We}from"json-canonicalize";var pe=class extends Error{constructor(t,n,r){super(r||n);this.status=t;this.statusText=n;this.name="HttpError"}},_=class{constructor(e="",t={}){p(this,"baseURL");p(this,"defaultHeaders");this.baseURL=e,this.validateHeaders(t),this.defaultHeaders=y({"Content-Type":"application/json"},t)}validateHeaders(e){if(typeof e!="object"||e===null)throw new Error("Headers must be an object.");for(let[t,n]of Object.entries(e))if(typeof t!="string"||typeof n!="string")throw new Error("Invalid header: ".concat(t,". Header names and values must be strings."))}setDefaultHeaders(e){this.defaultHeaders=y(y({},this.defaultHeaders),e)}buildUrl(e){return"".concat(this.baseURL).concat(e)}async handleResponse(e){if(!e.ok){let n;try{n=(await e.json()).message||e.statusText}catch(r){n=e.statusText}throw new pe(e.status,e.statusText,n)}let t=e.headers.get("content-type");return t&&t.includes("application/json")?e.json():e.text()}async request(e,t,n,r={}){let o=this.buildUrl(t),i=y(y({},this.defaultHeaders),r.headers),a=U(y({method:e,headers:i},r),{body:n?We(n):null}),u=await fetch(o,a);return this.handleResponse(u)}async get(e,t){return this.request("GET",e,void 0,t)}async post(e,t,n){return this.request("POST",e,t,n)}async put(e,t,n){return this.request("PUT",e,t,n)}async patch(e,t,n){return this.request("PATCH",e,t,n)}async delete(e,t){return this.request("DELETE",e,void 0,t)}};var Fe={name:"SilentShard authentication",version:"0.1.0"},Je=[{name:"name",type:"string"},{name:"version",type:"string"}];function ze(s,e,t){return{types:y({EIP712Domain:Je},s.eoaRequestSchema),domain:Fe,primaryType:"Request",message:{setup:s,challenge:e,eph_claim:t}}}async function be({setup:s,eoa:e,challenge:t,browserWallet:n,ephClaim:r}){let o=ze(s,t,r?r.toJSON():""),i=await n.signTypedData(e,o);return{credentials:{credentials:r?r.toJSON():"",method:"eoa",id:e},signature:i}}import{Base64 as Ae}from"js-base64";import{hexToBytes as Se}from"viem";import{canonicalize as z}from"json-canonicalize";async function Pe({user:s,challenge:e,rpConfig:t}){let n=Se("0x".concat(e),{size:32}),r={publicKey:{authenticatorSelection:{residentKey:"preferred",userVerification:"required"},challenge:n,excludeCredentials:[],pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],rp:{name:t.rpName,id:t.rpId},user:U(y({},s),{id:Ae.toUint8Array(s.id)})}},o=await navigator.credentials.create(r);if(o===null)throw new Error("No credential returned");let i=R(o.response.attestationObject),u={rawCredential:z({authenticatorAttachment:o.authenticatorAttachment,id:o.id,rawId:R(o.rawId),response:{attestationObject:i,clientDataJSON:R(o.response.clientDataJSON)},type:o.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:"",method:"passkey",id:o.id},signature:z(u)}}async function Ee({challenge:s,allowCredentialId:e,rpConfig:t,ephClaim:n}){let r=Se("0x".concat(s),{size:32}),o=e?[{type:"public-key",id:Ae.toUint8Array(e)}]:[],i={publicKey:{userVerification:"required",challenge:r,allowCredentials:o}},a=await navigator.credentials.get(i);if(a===null)throw new Error("Failed to get navigator credentials");let u=a.response,h=u.userHandle;if(h===null)throw new Error("User handle cannot be null");let d=R(u.signature),m={rawCredential:z({authenticatorAttachment:a.authenticatorAttachment,id:a.id,rawId:R(a.rawId),response:{authenticatorData:R(u.authenticatorData),clientDataJSON:R(u.clientDataJSON),signature:d,userHandle:R(h)},type:a.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:n.toJSON(),method:"passkey",id:a.id},signature:z(m)}}import{toHex as G}from"viem";import{ed25519 as ue}from"@noble/curves/ed25519";import{secp256k1 as ke}from"@noble/curves/secp256k1";import{signMessage as Ge}from"viem/accounts";import{canonicalize as ve}from"json-canonicalize";var E=class s{constructor(e,t,n,r=Math.floor(Date.now()/1e3)+3600){p(this,"ephId");p(this,"ephPK");p(this,"signAlg");p(this,"expiry");this.validateInputs(e,t,n,r),this.ephId=e,this.ephPK=G(t),this.signAlg=n,this.expiry=r}validateInputs(e,t,n,r){g("ephId",e),ge(t,n),l(Number.isInteger(r)===!1,"expiry must be an integer");let o=Math.floor(Date.now()/1e3),i=r-o,a=i>0&&i<=365*24*60*60;l(!a,"lifetime must be greater than 0 and less than or equal to 365 days expiry - now ".concat(i,", expiry ").concat(r," now secs ").concat(o))}toJSON(){return ve({ephId:this.ephId,ephPK:this.ephPK,expiry:this.expiry,signAlg:this.signAlg})}static generateKeys(e,t){let n=Q(e),r=C(n,e),o=new s(G(r),r,e,t);return{privKey:n,pubKey:r,ephClaim:o}}};async function Ke({setup:s,challenge:e,ephSK:t,ephClaim:n}){let r={setup:s,challenge:e},o=new TextEncoder().encode(ve(r)),i=await Qe(o,t,n.signAlg);return{credentials:{credentials:n.toJSON(),method:"ephemeral",id:n.ephId},signature:i}}async function Qe(s,e,t){switch(t){case"ed25519":return G(ue.sign(s,e));case"secp256k1":return await Ge({message:{raw:s},privateKey:G(e)});default:throw new Error("Invalid signature algorithm")}}function Q(s){switch(s){case"ed25519":return ue.utils.randomPrivateKey();case"secp256k1":return ke.utils.randomPrivateKey();default:throw new Error("Invalid signature algorithm")}}function C(s,e){switch(e){case"ed25519":return ue.getPublicKey(s);case"secp256k1":return ke.getPublicKey(s,!1);default:throw new Error("Invalid signature algorithm")}}import{isAddress as je}from"viem";import{canonicalize as j}from"json-canonicalize";var B=class{constructor(e,t,n){p(this,"browserWallet");p(this,"eoa");p(this,"ephClaim");this.validateInputs(e,t),this.ephClaim=n,this.browserWallet=t,this.eoa=e}validateInputs(e,t){l(!je(e),"invalid Ethereum address format"),l(!((t==null?void 0:t.signTypedData)instanceof Function),"invalid browserWallet")}async authenticate({payload:e,challenge:t}){return l(!(e instanceof w||e instanceof q||e instanceof J||e instanceof P||e instanceof S),"invalid payload for EOA auth. Requires KeygenSetupOpts or KeyRefreshRequest or QuorumChangeRequest or AddEphKeyRequest or RevokeEphKeyRequest but found ".concat(j(e))),await be({setup:e,eoa:this.eoa,challenge:t,browserWallet:this.browserWallet,ephClaim:this.ephClaim})}},L=class{constructor(e,t,n){p(this,"ephSK");p(this,"ephClaim");de(t,n),this.ephSK=t;let r=C(this.ephSK,n);this.ephClaim=new E(e,r,n)}async authenticate({payload:e,challenge:t}){return l(!(e instanceof K||e instanceof S),"invalid payload for Ephemeral auth. Requires SignSetupOpts or RevokeEphKeyRequest but found ".concat(j(e))),await Ke({setup:e,challenge:t,ephSK:this.ephSK,ephClaim:this.ephClaim})}},$=class{constructor(e,t,n){p(this,"rpConfig");p(this,"allowCredentialId");p(this,"ephClaim");this.ephClaim=n,this.rpConfig=e,this.allowCredentialId=t}async authenticate({payload:e,challenge:t}){return l(!(e instanceof w||e instanceof P||e instanceof S),"invalid payload for Passkey login. Requires KeygenSetupOpts or AddEphKeyRequest or RevokeEphKeyRequest but found ".concat(j(e))),await Ee({allowCredentialId:this.allowCredentialId,challenge:t,rpConfig:this.rpConfig,ephClaim:this.ephClaim})}},N=class{constructor(e,t){p(this,"rpConfig");p(this,"user");this.rpConfig=e,this.user=t}async authenticate({payload:e,challenge:t}){return l(!(e instanceof I),"invalid payload for Passkey register. Requires PasskeyRegisterRequest but found ".concat(j(e))),await Pe({user:this.user,challenge:t,rpConfig:this.rpConfig})}};import{publicKeyToAddress as Ie,toAccount as ks}from"viem/accounts";import{secp256k1 as Xe}from"@noble/curves/secp256k1";import{hashMessage as qs,hashTypedData as Cs,keccak256 as Us,serializeSignature as Ts,serializeTransaction as Os,toHex as Ds}from"viem";import{Base64 as _s}from"js-base64";function ce(s){if(s.startsWith("0x")&&(s=s.slice(2)),s.startsWith("04"))return Ie("0x".concat(s," "));if(s.startsWith("02")||s.startsWith("03")){let e=Xe.ProjectivePoint.fromHex(s).toHex(!1);return Ie("0x".concat(e))}else throw new Error("Invalid public key")}var Zs={KeygenSetupOpts:w,UserSignatures:A,NetworkSigner:T,SignRequestBuilder:v,WalletProviderServiceClient:V,HttpClient:_,EOAAuth:B,EphAuth:L,PasskeyAuth:$,PasskeyRegister:N,generateEphPrivateKey:Q,getEphPublicKey:C,EphKeyClaim:E,computeAddress:ce,flattenSignature:ie,parseSigngenResult:M,parseKeygenResult:O,parseEphKeyOperationResult:D};export{B as EOAAuth,L as EphAuth,E as EphKeyClaim,_ as HttpClient,w as KeygenSetupOpts,T as NetworkSigner,$ as PasskeyAuth,N as PasskeyRegister,v as SignRequestBuilder,A as UserSignatures,V as WalletProviderServiceClient,ce as computeAddress,Zs as default,ie as flattenSignature,Q as generateEphPrivateKey,C as getEphPublicKey,D as parseEphKeyOperationResult,O as parseKeygenResult,M as parseSigngenResult};
|
|
1
|
+
var Te=Object.defineProperty,Oe=Object.defineProperties;var Me=Object.getOwnPropertyDescriptors;var ye=Object.getOwnPropertySymbols;var $e=Object.prototype.hasOwnProperty,Ve=Object.prototype.propertyIsEnumerable;var se=(s,e,t)=>e in s?Te(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,y=(s,e)=>{for(var t in e||(e={}))$e.call(e,t)&&se(s,t,e[t]);if(ye)for(var t of ye(e))Ve.call(e,t)&&se(s,t,e[t]);return s},$=(s,e)=>Oe(s,Me(e));var c=(s,e,t)=>se(s,typeof e!="symbol"?e+"":e,t);import{canonicalize as We}from"json-canonicalize";var d=(s,e)=>{g(typeof e!="string","".concat(s," must be string")),g((e==null?void 0:e.trim().length)===0,"".concat(s," cannot be empty"))},fe=(s,e)=>{if(g(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")g(s.length!==65,"secp256k1: key length must be 65 bytes, got "+s.length);else if(e==="ed25519")g(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},me=(s,e)=>{if(g(!(s instanceof Uint8Array),"key must be an Uint8Array"),e==="secp256k1")g(s.length!==32,"secp256k1: key length must be 32 bytes, got "+s.length);else if(e==="ed25519")g(s.length!==32,"ed25519: key length must be 32 bytes, got "+s.length);else throw new Error("Invalid signature algorithm")},we=s=>{g(s!=="ed25519"&&s!=="secp256k1",'signAlg must be either "ed25519" or "secp256k"')},g=(s,e)=>{if(s)throw new Error(e)},Ne=(s,e)=>"Invalid payload ".concat(JSON.stringify(s),", cannot be authenticated by ").concat(e.toLocaleUpperCase()," method."),V=(s,e,t)=>{g(!e.some(n=>s instanceof n),Ne(s,t))};var C=class{constructor(){c(this,"signRequest",new Map)}setRequest(e,t,n){if(d("transactionId",e),d("message",t),d("requestType",n),this.signRequest.has(e))throw new Error("Transaction ID ".concat(e," is already set."));return this.signRequest.set(e,{signingMessage:t,requestType:n}),this}build(){let e={};if(this.signRequest.forEach((t,n)=>{e[n]=t}),Object.keys(e).length===0)throw new Error("No sign request is set.");return We(e)}};import{canonicalize as xe}from"json-canonicalize";import{Base64 as Fe}from"js-base64";function De(s){return s instanceof Uint8Array||ArrayBuffer.isView(s)&&s.constructor.name==="Uint8Array"}function re(s,...e){if(!De(s))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(s.length))throw new Error("Uint8Array expected of length "+e+", got length="+s.length)}function ie(s,e=!0){if(s.destroyed)throw new Error("Hash instance has been destroyed");if(e&&s.finished)throw new Error("Hash#digest() has already been called")}function Re(s,e){re(s);let t=e.outputLen;if(s.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var z=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),f=(s,e)=>s<<32-e|s>>>e;function _e(s){if(typeof s!="string")throw new Error("utf8ToBytes expected string, got "+typeof s);return new Uint8Array(new TextEncoder().encode(s))}function oe(s){return typeof s=="string"&&(s=_e(s)),re(s),s}var G=class{clone(){return this._cloneInto()}};function Se(s){let e=n=>s().update(oe(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Be(s,e,t,n){if(typeof s.setBigUint64=="function")return s.setBigUint64(e,t,n);let r=BigInt(32),o=BigInt(4294967295),i=Number(t>>r&o),a=Number(t&o),u=n?4:0,p=n?0:4;s.setUint32(e+u,i,n),s.setUint32(e+p,a,n)}var be=(s,e,t)=>s&e^~s&t,Ae=(s,e,t)=>s&e^s&t^e&t,Q=class extends G{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=z(this.buffer)}update(e){ie(this);let{view:t,buffer:n,blockLen:r}=this;e=oe(e);let o=e.length;for(let i=0;i<o;){let a=Math.min(r-this.pos,o-i);if(a===r){let u=z(e);for(;r<=o-i;i+=r)this.process(u,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ie(this),Re(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:o}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>r-i&&(this.process(n,0),i=0);for(let h=i;h<r;h++)t[h]=0;Be(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=z(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let p=u/4,l=this.get();if(p>l.length)throw new Error("_sha2: outputLen bigger than state");for(let h=0;h<p;h++)a.setUint32(4*h,l[h],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:o,destroyed:i,pos:a}=this;return e.length=r,e.pos=a,e.finished=o,e.destroyed=i,r%t&&e.buffer.set(n),e}};var Le=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),S=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),b=new Uint32Array(64),ae=class extends Q{constructor(){super(64,32,8,!1),this.A=S[0]|0,this.B=S[1]|0,this.C=S[2]|0,this.D=S[3]|0,this.E=S[4]|0,this.F=S[5]|0,this.G=S[6]|0,this.H=S[7]|0}get(){let{A:e,B:t,C:n,D:r,E:o,F:i,G:a,H:u}=this;return[e,t,n,r,o,i,a,u]}set(e,t,n,r,o,i,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=o|0,this.F=i|0,this.G=a|0,this.H=u|0}process(e,t){for(let h=0;h<16;h++,t+=4)b[h]=e.getUint32(t,!1);for(let h=16;h<64;h++){let R=b[h-15],K=b[h-2],de=f(R,7)^f(R,18)^R>>>3,ne=f(K,17)^f(K,19)^K>>>10;b[h]=ne+b[h-7]+de+b[h-16]|0}let{A:n,B:r,C:o,D:i,E:a,F:u,G:p,H:l}=this;for(let h=0;h<64;h++){let R=f(a,6)^f(a,11)^f(a,25),K=l+R+be(a,u,p)+Le[h]+b[h]|0,ne=(f(n,2)^f(n,13)^f(n,22))+Ae(n,r,o)|0;l=p,p=u,u=a,a=i+K|0,i=o,o=r,r=n,n=K+ne|0}n=n+this.A|0,r=r+this.B|0,o=o+this.C|0,i=i+this.D|0,a=a+this.E|0,u=u+this.F|0,p=p+this.G|0,l=l+this.H|0,this.set(n,r,o,i,a,u,p,l)}roundClean(){b.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ce=Se(()=>new ae);import{stringToBytes as He,toHex as Je}from"viem";var w=s=>Fe.fromUint8Array(new Uint8Array(s),!0),ue=s=>{let e=He(s),t=ce(ce(e));return Je(t,{size:32}).slice(2)};var A=class{constructor(e,t){c(this,"userAuthentications");c(this,"authModule");c(this,"apiVersion");this.authModule=e,this.userAuthentications=new Map,this.apiVersion=t}async setDefaultAuth(e,t){let n=await this.authModule.authenticate({payload:e,challenge:t!=null?t:ue(xe(e))});this.userAuthentications.set("default",n)}async setKeygenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for keygen");for(let n of e){let r=n.signAlg,o=t?t[r]:ue(xe(n));if(o){let i=await this.authModule.authenticate({payload:n,challenge:o});this.userAuthentications.set(r,i)}else throw new Error("no final challenge found in response for ".concat(r))}}async setSigngenUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for signgen v1");await this.setDefaultAuth(e,t)}async setAddEphKeyUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for add ephemeral key v1");await this.setDefaultAuth(e,t)}async setRevokeEphKeyUserSigs(e,t){if(this.apiVersion==="v1"&&!t)throw new Error("no challenge response for revoke ephemeral key v1");await this.setDefaultAuth(e,t)}async setRegisterPasskeyUserSigs(e,t){if(!t)throw new Error("missing challenge response for registerPasskey");await this.setDefaultAuth(e,t)}async setKeyRefreshUserSigs(e,t){if(!t)throw new Error("missing challenge response for keyRefresh");await this.setDefaultAuth(e,t)}async setQcUserSigs(e,t){if(!t)throw new Error("missing challenge response for quorumChange");await this.setDefaultAuth(e,t)}async setFinishPresignUserSigs(e,t){await this.setDefaultAuth(e,t)}async build(e,t,n){if(e==="keygen"){let r=n?JSON.parse(n):void 0;await this.setKeygenUserSigs(t,r)}else e==="signgen"?await this.setSigngenUserSigs(t,n):e==="addEphemeralKey"?await this.setAddEphKeyUserSigs(t,n):e==="revokeEphemeralKey"?await this.setRevokeEphKeyUserSigs(t,n):e==="registerPasskey"?await this.setRegisterPasskeyUserSigs(t,n):e==="keyRefresh"?await this.setKeyRefreshUserSigs(t,n):e==="quorumChange"?await this.setQcUserSigs(t,n):e==="finishPresign"&&await this.setFinishPresignUserSigs(t,n);return Object.fromEntries(this.userAuthentications)}};var pe=s=>{let{sign:e,recid:t}=s,n=(27+t).toString(16);return"0x".concat(e).concat(n)};var Ge=[{name:"tag",type:"uint16"},{name:"value",type:"string"}],m=class{constructor({t:e,n:t,ephClaim:n,permissions:r,signAlg:o}){c(this,"t");c(this,"n");c(this,"ephClaim");c(this,"metadata");c(this,"signAlg");d("signAlg",o),this.t=e,this.n=t,this.signAlg=o,this.ephClaim=n==null?void 0:n.toJSON(),this.metadata=[],r&&this.metadata.push({tag:1,value:r})}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeygenSetupOpts"},{name:"challenge",type:"string"}],KeygenSetupOpts:this.ephClaim?[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"ephClaim",type:"string"},{name:"metadata",type:"TaggedValue[]"}]:[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:Ge}}},I=class{constructor({t:e,key_id:t,signAlg:n,message:r}){c(this,"t");c(this,"key_id");c(this,"message");c(this,"signAlg");d("keyId",t),d("signAlg",n),d("message",r),this.t=e,this.key_id=t,this.message=r,this.signAlg=n}},N=class{constructor({amount:e,keyId:t,t:n,expiryInSecs:r}){c(this,"amount");c(this,"key_id");c(this,"t");c(this,"expiry");if(e<=0)throw new Error("Amount must be greater than 0");d("keyId",t),this.amount=e,this.key_id=t,this.t=n,this.expiry=r!=null?r:Math.floor(Date.now()/1e3)+7*24*3600}},E=class{constructor({presignSessionId:e,message:t}){c(this,"presignSessionId");c(this,"message");d("presignSessionId",e),d("message",t),this.presignSessionId=e,this.message=t}};var x=class{constructor(e,t){c(this,"key_id");c(this,"eph_claim");d("keyId",e),this.key_id=e,this.eph_claim=t.toJSON()}get eoaRequestSchema(){return{Request:[{name:"setup",type:"RevokeEphKeyRequest"},{name:"challenge",type:"string"}],RevokeEphKeyRequest:[{name:"key_id",type:"string"},{name:"eph_claim",type:"string"}]}}},v=class{constructor(e,t){c(this,"key_id_list");c(this,"eph_claim");for(let n of e)d("keyId",n);this.key_id_list=e,this.eph_claim=t.toJSON()}get eoaRequestSchema(){return{Request:[{name:"setup",type:"AddEphKeyRequest"},{name:"challenge",type:"string"}],AddEphKeyRequest:[{name:"key_id_list",type:"string[]"},{name:"eph_claim",type:"string"}]}}},U=class{constructor(e){c(this,"options");d("options",e),this.options=e}},j=class{constructor({newT:e,newN:t,keyId:n,signAlg:r}){c(this,"new_t");c(this,"new_n");c(this,"key_id");c(this,"sign_alg");d("keyId",n),d("signAlg",r),this.new_t=e,this.new_n=t,this.key_id=n,this.sign_alg=r}get eoaRequestSchema(){return{Request:[{name:"setup",type:"QuorumChangeRequest"},{name:"challenge",type:"string"}],QuorumChangeRequest:[{name:"new_t",type:"uint32"},{name:"new_n",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}},q=class{constructor({t:e,keyId:t,signAlg:n}){c(this,"t");c(this,"key_id");c(this,"sign_alg");d("keyId",t),d("signAlg",n),this.t=e,this.key_id=t,this.sign_alg=n}get eoaRequestSchema(){return{Request:[{name:"setup",type:"KeyRefreshRequest"},{name:"challenge",type:"string"}],KeyRefreshRequest:[{name:"t",type:"uint32"},{name:"key_id",type:"string"},{name:"sign_alg",type:"string"}]}}};var X=s=>{var o,i,a;let e=s.split(":");g(e.length!==3,"Invalid keygen response from network");let t=(o=e[0])==null?void 0:o.split("=")[1],n=(i=e[1])==null?void 0:i.split("=")[1],r=(a=e[2])==null?void 0:a.split("=")[1];return{publicKey:n,keyId:t,signAlg:r}},T=(s,e)=>{let t=s.split(";");return g(t.length!==e,"Invalid keygen response from network, not all keys were generated"),t.map(n=>X(n))},O=(s,e)=>s.split(";").map(n=>{var r,o,i,a,u;if(e==="secp256k1"){let p=n.split(":");g(p.length!==3,"Invalid signgen response from network");let l=(r=p[0])==null?void 0:r.split("=")[1],h=(o=p[1])==null?void 0:o.split("=")[1],R=(i=p[2])==null?void 0:i.split("=")[1];if(l===void 0||h===void 0||R===void 0)throw new Error("Invalid signgen response from network");return{transactionId:R,sign:l,recid:parseInt(h)}}else{let p=n.split(":");g(p.length!==2,"Invalid signgen response from network");let l=(a=p[0])==null?void 0:a.split("=")[1],h=(u=p[1])==null?void 0:u.split("=")[1];if(l===void 0||h===void 0)throw new Error("Invalid signgen response from network");return{transactionId:h,sign:l,recid:0}}}),W=s=>{let e=s.split(";"),t=[];return e.forEach(n=>{let r=n.split(":");g(r.length!==2,"Invalid eph key operation response from network");let o=r[0],i=r[1];t.push({keyId:o,status:i})}),t};import{canonicalize as Y}from"json-canonicalize";var D=class{constructor(e){c(this,"walletProviderUrl");c(this,"apiVersion","v1");this.walletProviderUrl="".concat(e.walletProviderUrl,"/").concat(e.apiVersion),this.apiVersion=e.apiVersion}getVersion(){return this.apiVersion}async startKeygen({setups:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("keygen",e,t).then(r=>T(r,e.length))}async startKeyRefresh({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Key refresh is not supported in v2 API");return this.connect.bind(this)("keyRefresh",e,t).then(r=>X(r))}async startSigngen({setup:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("signgen",e,t).then(r=>O(r,e.signAlg))}async addEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("addEphemeralKey",e,t).then(r=>W(r))}async revokeEphemeralKey({payload:e,authModule:t}){return(this.apiVersion==="v1"?this.connect.bind(this):this.connectV2.bind(this))("revokeEphemeralKey",e,t).then(r=>({status:r}))}async registerPasskey({payload:e,authModule:t}){if(this.apiVersion==="v2")throw new Error("Passkey registration is not supported in v2 API");return this.connect.bind(this)("registerPasskey",e,t).then(r=>({passkeyCredentialId:r}))}connect(e,t,n){return new Promise((r,o)=>{let i=new WebSocket("".concat(this.walletProviderUrl,"/").concat(e)),a=0;return console.debug("Connecting to ",i.url),i.addEventListener("open",u=>{switch(console.debug("Connection opened in state ".concat(a," with event ").concat(JSON.stringify(u,void 0," "))),a){case 0:{a=1;try{let p=Y({payload:t});console.debug("Sending request:",p),i.send(p)}catch(p){this.finishWithError(i,a,p,"open event",o)}break}case 1:case 2:this.finishWithError(i,a,"Unexpected message in state waitingForResult.","open event",o);break;case 3:break}}),i.addEventListener("message",async u=>{switch(console.debug("Connection message in state ".concat(a," with event data ").concat(JSON.stringify(u.data,void 0," "))),a){case 0:this.finishWithError(i,a,"Unexpected message in state initiated.","message event",o);break;case 1:{a=2;try{let p=u.data,l=await new A(n,this.apiVersion).build(e,t,p);i.send(Y(l))}catch(p){this.finishWithError(i,a,p,"message event",o)}break}case 2:{a=3,i.close(),r(u.data);break}case 3:break}}),i.addEventListener("error",u=>{console.debug("Connection error in state ".concat(a," with event ").concat(JSON.stringify(u,void 0," "))),this.finishWithError(i,a,"Connection encountered an error event: ".concat(u),"error event",o)}),i.addEventListener("close",u=>{let p=u.reason||"No specific reason provided.",l=u.code;console.debug("Connection closed. State: ".concat(a,", Code: ").concat(l,", Reason: '").concat(p,"'"));let h=l>=4e3?"Application Error ".concat(l,": ").concat(p):l===1006?"Connection Abnormality (Code 1006): Server closed connection unexpectedly or network issue.":"WebSocket Closed Unexpectedly (Code ".concat(l,"): ").concat(p);this.finishWithError(i,a,new Error(h),"close event",o)}),()=>{(i.readyState===WebSocket.OPEN||i.readyState===WebSocket.CONNECTING)&&i.close(1001,"Cleanup/Unmount")}})}connectV2(e,t,n){return new Promise((r,o)=>{let i=new WebSocket("".concat(this.walletProviderUrl,"/").concat(e)),a=0;return console.debug("Connecting to ",i.url),i.addEventListener("open",async u=>{switch(console.debug("Connection opened in state ".concat(a," with event ").concat(JSON.stringify(u,void 0," "))),a){case 0:a=2;try{let p=await new A(n,this.apiVersion).build(e,t);i.send(Y({payload:t,userSigs:p}))}catch(p){this.finishWithError(i,a,p,"open event",o)}break;case 2:a=3,this.finishWithError(i,a,"Unexpected message in state waitingForResult.","open event",o);break;case 3:break}}),i.addEventListener("message",async u=>{switch(console.debug("Connection message in state ".concat(a," with event ").concat(JSON.stringify(u,void 0," "))),a){case 0:this.finishWithError(i,a,"Unexpected message in state initiated.","message event",o);break;case 2:{a=3,i.close(),r(u.data);break}case 3:break}}),i.addEventListener("error",u=>{console.debug("Connection error in state ".concat(a," with event ").concat(JSON.stringify(u,void 0," "))),this.finishWithError(i,a,"Connection encountered an error event: ".concat(u),"error event",o)}),i.addEventListener("close",u=>{let p=u.reason||"No specific reason provided.",l=u.code;console.debug("Connection closed. State: ".concat(a,", Code: ").concat(l,", Reason: '").concat(p,"'"));let h=l>=4e3?"Application Error ".concat(l,": ").concat(p):l===1006?"Connection Abnormality (Code 1006): Server closed connection unexpectedly or network issue.":"WebSocket Closed Unexpectedly (Code ".concat(l,"): ").concat(p);this.finishWithError(i,a,new Error(h),"close event",o)}),()=>{(i.readyState===WebSocket.OPEN||i.readyState===WebSocket.CONNECTING)&&i.close(1001,"Cleanup/Unmount")}})}finishWithError(e,t,n,r,o){console.error("Error from ".concat(r," in state ").concat(t,":"),n),t!==3&&(t=3),e.readyState===WebSocket.OPEN&&e.close(1011,"Protocol run failed. Client attempted to close connection in state ".concat(t)),o(n instanceof Error?n:new Error(String(n)))}},P=class{constructor(e){c(this,"walletProviderUrl");c(this,"apiVersion","v1");this.walletProviderUrl="".concat(e.walletProviderUrl,"/").concat(e.apiVersion),this.apiVersion=e.apiVersion}getVersion(){return this.apiVersion}async startKeygen({setups:e}){return this.connect.bind(this)("keygen",e).then(n=>T(n,e.length))}async startSigngen({setup:e}){return this.connect.bind(this)("signgen",e).then(n=>O(n,e.signAlg))}async startKeyRefresh({payload:e}){if(this.apiVersion==="v2")throw new Error("Key refresh is not supported in v2 API");return this.connect.bind(this)("keyRefresh",e).then(n=>X(n))}connect(e,t){return new Promise((n,r)=>{let o=0,i=new WebSocket("".concat(this.walletProviderUrl,"/").concat(e));i.addEventListener("open",async a=>{switch(console.debug("Connection opened in state ".concat(o," with event ").concat(JSON.stringify(a,void 0," "))),o){case 0:o=2;try{i.send(Y({payload:t}))}catch(u){r(u)}break;case 2:o=3,r("Incorrect protocol state");break;case 3:break}}),i.addEventListener("message",async a=>{switch(console.debug("Connection message in state ".concat(o," with event ").concat(JSON.stringify(a,void 0," "))),o){case 0:o=3,r("Incorrect protocol state");break;case 2:{o=3,i.close(),n(a.data);break}case 3:break}}),i.addEventListener("error",a=>{console.debug("Connection error in state ".concat(o," with event ").concat(JSON.stringify(a,void 0," "))),o!=3&&(o=3,r("Incorrect protocol state"))}),i.addEventListener("close",a=>{console.debug("Connection closed in state ".concat(o," with event ").concat(JSON.stringify(a,void 0," "))),o!=3&&(o=3,r("Incorrect protocol state"))})})}};var _=class{constructor(e,t){c(this,"authModule");c(this,"wpClient");if(!t&&!(e instanceof P))throw new Error("missing authModule for wallet provider client in auth mode");if(t&&e instanceof P)throw new Error("authModule is required but using wallet provider client in no-auth mode");this.authModule=t,this.wpClient=e}validateQuorumSetup({threshold:e,totalNodes:t}){e&&g(e<2,"Threshold = ".concat(e," must be at least 2")),e&&t&&g(t<e,"Total nodes = ".concat(t," must be greater or equal to threshold = ").concat(e))}async generateKey(e,t,n,r,o){this.validateQuorumSetup({threshold:e,totalNodes:t});let i=n.map(a=>new m({t:e,n:t,ephClaim:r,permissions:o,signAlg:a}));return this.authModule?await this.wpClient.startKeygen({setups:i,authModule:this.authModule}):await this.wpClient.startKeygen({setups:i})}async signMessage(e,t,n,r){this.validateQuorumSetup({threshold:e}),we(n);let o=new I({t:e,key_id:t,signAlg:n,message:r});return this.authModule?await this.wpClient.startSigngen({setup:o,authModule:this.authModule}):await this.wpClient.startSigngen({setup:o})}async refreshKey(e,t,n){let r=new q({t:e,keyId:t,signAlg:n});return this.authModule?await this.wpClient.startKeyRefresh({payload:r,authModule:this.authModule}):await this.wpClient.startKeyRefresh({payload:r})}async addEphemeralKey(e,t){let n=new v(e,t);if(!this.authModule)throw new Error("Add ephemeral key is not supported in no auth mode");return await this.wpClient.addEphemeralKey({payload:n,authModule:this.authModule})}async revokeEphemeralKey(e,t){d("keyId",e);let n=new x(e,t);if(!this.authModule)throw new Error("Revoke ephemeral key is not supported in no auth mode");return await this.wpClient.revokeEphemeralKey({payload:n,authModule:this.authModule})}async registerPasskey(e){let t=new U(e!=null?e:"passkey options");if(!this.authModule)throw new Error("Register passkey is not supported in no auth mode");return await this.wpClient.registerPasskey({payload:t,authModule:this.authModule})}};import{canonicalize as ze}from"json-canonicalize";var he=class extends Error{constructor(t,n,r){super(r||n);this.status=t;this.statusText=n;this.name="HttpError"}},B=class{constructor(e="",t={}){c(this,"baseURL");c(this,"defaultHeaders");this.baseURL=e,this.validateHeaders(t),this.defaultHeaders=y({"Content-Type":"application/json"},t)}validateHeaders(e){if(typeof e!="object"||e===null)throw new Error("Headers must be an object.");for(let[t,n]of Object.entries(e))if(typeof t!="string"||typeof n!="string")throw new Error("Invalid header: ".concat(t,". Header names and values must be strings."))}setDefaultHeaders(e){this.defaultHeaders=y(y({},this.defaultHeaders),e)}buildUrl(e){return"".concat(this.baseURL).concat(e)}async handleResponse(e){if(!e.ok){let n;try{n=(await e.json()).message||e.statusText}catch(r){n=e.statusText}throw new he(e.status,e.statusText,n)}let t=e.headers.get("content-type");return t&&t.includes("application/json")?e.json():e.text()}async request(e,t,n,r={}){let o=this.buildUrl(t),i=y(y({},this.defaultHeaders),r.headers),a=$(y({method:e,headers:i},r),{body:n?ze(n):null}),u=await fetch(o,a);return this.handleResponse(u)}async get(e,t){return this.request("GET",e,void 0,t)}async post(e,t,n){return this.request("POST",e,t,n)}async put(e,t,n){return this.request("PUT",e,t,n)}async patch(e,t,n){return this.request("PATCH",e,t,n)}async delete(e,t){return this.request("DELETE",e,void 0,t)}};var Qe={name:"SilentShard authentication",version:"0.1.0"},je=[{name:"name",type:"string"},{name:"version",type:"string"}];function Xe(s,e){let t={setup:s,challenge:e};return{types:y({EIP712Domain:je},s.eoaRequestSchema),domain:Qe,primaryType:"Request",message:t}}async function Pe({setup:s,eoa:e,challenge:t,browserWallet:n}){let r=Xe(s,t),o=await n.signTypedData(e,r);return{credentials:{credentials:"",method:"eoa",id:e},signature:o}}import{Base64 as Ee}from"js-base64";import{hexToBytes as ve}from"viem";import{canonicalize as Z}from"json-canonicalize";async function ke({user:s,challenge:e,rpConfig:t}){let n=ve("0x".concat(e),{size:32}),r={publicKey:{authenticatorSelection:{residentKey:"preferred",userVerification:"required"},challenge:n,excludeCredentials:[],pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],rp:{name:t.rpName,id:t.rpId},user:$(y({},s),{id:Ee.toUint8Array(s.id)})}},o=await navigator.credentials.create(r);if(o===null)throw new Error("No credential returned");let i=w(o.response.attestationObject),u={rawCredential:Z({authenticatorAttachment:o.authenticatorAttachment,id:o.id,rawId:w(o.rawId),response:{attestationObject:i,clientDataJSON:w(o.response.clientDataJSON)},type:o.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:"",method:"passkey",id:o.id},signature:Z(u)}}async function Ke({challenge:s,allowCredentialId:e,rpConfig:t}){let n=ve("0x".concat(s),{size:32}),r=e?[{type:"public-key",id:Ee.toUint8Array(e)}]:[],o={publicKey:{userVerification:"required",challenge:n,allowCredentials:r}},i=await navigator.credentials.get(o);if(i===null)throw new Error("Failed to get navigator credentials");let a=i.response,u=a.userHandle;if(u===null)throw new Error("User handle cannot be null");let p=w(a.signature),h={rawCredential:Z({authenticatorAttachment:i.authenticatorAttachment,id:i.id,rawId:w(i.rawId),response:{authenticatorData:w(a.authenticatorData),clientDataJSON:w(a.clientDataJSON),signature:p,userHandle:w(u)},type:i.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:"",method:"passkey",id:i.id},signature:Z(h)}}import{toHex as ee}from"viem";import{ed25519 as le}from"@noble/curves/ed25519";import{secp256k1 as Ce}from"@noble/curves/secp256k1";import{signMessage as Ye}from"viem/accounts";import{canonicalize as Ie}from"json-canonicalize";var k=class s{constructor(e,t,n,r=Math.floor(Date.now()/1e3)+3600){c(this,"ephId");c(this,"ephPK");c(this,"signAlg");c(this,"expiry");this.validateInputs(e,t,n,r),this.ephId=e,this.ephPK=ee(t),this.signAlg=n,this.expiry=r}validateInputs(e,t,n,r){d("ephId",e),fe(t,n),g(Number.isInteger(r)===!1,"expiry must be an integer");let o=Math.floor(Date.now()/1e3),i=r-o,a=i>0&&i<=365*24*60*60;g(!a,"lifetime must be greater than 0 and less than or equal to 365 days expiry - now ".concat(i,", expiry ").concat(r," now secs ").concat(o))}toJSON(){return Ie({ephId:this.ephId,ephPK:this.ephPK,expiry:this.expiry,signAlg:this.signAlg})}static generateKeys(e,t){let n=te(e),r=M(n,e),o=new s(ee(r),r,e,t);return{privKey:n,pubKey:r,ephClaim:o}}};async function Ue({setup:s,challenge:e,ephSK:t,ephClaim:n}){let r={setup:s,challenge:e},o=new TextEncoder().encode(Ie(r)),i=await Ze(o,t,n.signAlg);return{credentials:{credentials:n.toJSON(),method:"ephemeral",id:n.ephId},signature:i}}async function Ze(s,e,t){switch(t){case"ed25519":return ee(le.sign(s,e));case"secp256k1":return await Ye({message:{raw:s},privateKey:ee(e)});default:throw new Error("Invalid signature algorithm")}}function te(s){switch(s){case"ed25519":return le.utils.randomPrivateKey();case"secp256k1":return Ce.utils.randomPrivateKey();default:throw new Error("Invalid signature algorithm")}}function M(s,e){switch(e){case"ed25519":return le.getPublicKey(s);case"secp256k1":return Ce.getPublicKey(s,!1);default:throw new Error("Invalid signature algorithm")}}import{isAddress as et}from"viem";var L=class{constructor(e,t){c(this,"browserWallet");c(this,"eoa");this.validateInputs(e,t),this.browserWallet=t,this.eoa=e}validateInputs(e,t){g(!et(e),"invalid Ethereum address format"),g(!((t==null?void 0:t.signTypedData)instanceof Function),"invalid browserWallet")}async authenticate({payload:e,challenge:t}){return V(e,[m,q,j,v,x],"eoa"),await Pe({setup:e,eoa:this.eoa,challenge:t,browserWallet:this.browserWallet})}},F=class{constructor(e,t,n){c(this,"ephSK");c(this,"ephClaim");me(t,n),this.ephSK=t;let r=M(this.ephSK,n);this.ephClaim=new k(e,r,n)}async authenticate({payload:e,challenge:t}){return V(e,[I,x,E],"ephemeral"),await Ue({setup:e,challenge:t,ephSK:this.ephSK,ephClaim:this.ephClaim})}},H=class{constructor(e,t){c(this,"rpConfig");c(this,"allowCredentialId");this.rpConfig=e,this.allowCredentialId=t}async authenticate({payload:e,challenge:t}){return V(e,[m,v,x],"passkey"),await Ke({allowCredentialId:this.allowCredentialId,challenge:t,rpConfig:this.rpConfig})}},J=class{constructor(e,t){c(this,"rpConfig");c(this,"user");this.rpConfig=e,this.user=t}async authenticate({payload:e,challenge:t}){return V(e,[U],"passkey"),await ke({user:this.user,challenge:t,rpConfig:this.rpConfig})}};import{publicKeyToAddress as qe,toAccount as Un}from"viem/accounts";import{secp256k1 as tt}from"@noble/curves/secp256k1";import{hashMessage as Mn,hashTypedData as $n,keccak256 as Vn,serializeSignature as Nn,serializeTransaction as Wn,toHex as _n}from"viem";import{Base64 as Ln}from"js-base64";function ge(s){if(s.startsWith("0x")&&(s=s.slice(2)),s.startsWith("04"))return qe("0x".concat(s," "));if(s.startsWith("02")||s.startsWith("03")){let e=tt.ProjectivePoint.fromHex(s).toHex(!1);return qe("0x".concat(e))}else throw new Error("Invalid public key")}var rs={KeygenSetupOpts:m,InitPresignOpts:N,FinishPresignOpts:E,UserSignatures:A,NetworkSigner:_,SignRequestBuilder:C,WalletProviderServiceClient:D,NoAuthWalletProviderServiceClient:P,HttpClient:B,EOAAuth:L,EphAuth:F,PasskeyAuth:H,PasskeyRegister:J,generateEphPrivateKey:te,getEphPublicKey:M,EphKeyClaim:k,computeAddress:ge,flattenSignature:pe,parseSigngenResult:O,parseKeygenResult:T,parseEphKeyOperationResult:W};export{L as EOAAuth,F as EphAuth,k as EphKeyClaim,E as FinishPresignOpts,B as HttpClient,N as InitPresignOpts,m as KeygenSetupOpts,_ as NetworkSigner,P as NoAuthWalletProviderServiceClient,H as PasskeyAuth,J as PasskeyRegister,C as SignRequestBuilder,A as UserSignatures,D as WalletProviderServiceClient,ge as computeAddress,rs as default,pe as flattenSignature,te as generateEphPrivateKey,M as getEphPublicKey,W as parseEphKeyOperationResult,T as parseKeygenResult,O as parseSigngenResult};
|
|
2
2
|
/*! Bundled license information:
|
|
3
3
|
|
|
4
4
|
@noble/hashes/esm/utils.js:
|
package/dist/setupMessage.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EoaAuthPayload } from './auth/EOAauthentication';
|
|
2
|
+
import { EphKeyClaim } from './auth/ephemeralAuthentication';
|
|
2
3
|
/**
|
|
3
4
|
* This tagged value is part of key share extra,
|
|
4
5
|
* and never directly part of setup message.
|
|
@@ -18,15 +19,18 @@ export declare class KeygenSetupOpts implements EoaAuthPayload {
|
|
|
18
19
|
t: number;
|
|
19
20
|
/** Total number of nodes that participate in Key generation, must be greater or equal than `t` */
|
|
20
21
|
n: number;
|
|
22
|
+
/** Optional eph key attached to the newly generated key */
|
|
23
|
+
ephClaim: string | undefined;
|
|
21
24
|
/** Metadata for a key. Currently they store the permissions, can be set in a constructor of this class.
|
|
22
25
|
If permissions are not set, all operations are allowed.
|
|
23
26
|
*/
|
|
24
27
|
private metadata;
|
|
25
28
|
/** Signature algorithm chosen for key generation */
|
|
26
29
|
signAlg: string;
|
|
27
|
-
constructor({ t, n, permissions, signAlg, }: {
|
|
30
|
+
constructor({ t, n, ephClaim, permissions, signAlg, }: {
|
|
28
31
|
t: number;
|
|
29
32
|
n: number;
|
|
33
|
+
ephClaim: EphKeyClaim | undefined;
|
|
30
34
|
permissions: string | undefined;
|
|
31
35
|
signAlg: string;
|
|
32
36
|
});
|
|
@@ -61,3 +65,29 @@ export declare class SignSetupOpts {
|
|
|
61
65
|
signAlg: string;
|
|
62
66
|
});
|
|
63
67
|
}
|
|
68
|
+
export declare class InitPresignOpts {
|
|
69
|
+
/** Number of presigns that will be generated in this batch */
|
|
70
|
+
readonly amount: number;
|
|
71
|
+
/** DKG key ID */
|
|
72
|
+
readonly key_id: string;
|
|
73
|
+
/** Number of nodes that will participate in the signature execution */
|
|
74
|
+
readonly t: number;
|
|
75
|
+
/** Expiry date of the generated presigns in seconds. Default is 1 week. */
|
|
76
|
+
readonly expiry: number;
|
|
77
|
+
constructor({ amount, keyId, t, expiryInSecs }: {
|
|
78
|
+
amount: number;
|
|
79
|
+
keyId: string;
|
|
80
|
+
t: number;
|
|
81
|
+
expiryInSecs?: number;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export declare class FinishPresignOpts {
|
|
85
|
+
/** Select presigns using it's session ID */
|
|
86
|
+
readonly presignSessionId: string;
|
|
87
|
+
/** The message to sign */
|
|
88
|
+
readonly message: string;
|
|
89
|
+
constructor({ presignSessionId, message }: {
|
|
90
|
+
presignSessionId: string;
|
|
91
|
+
message: string;
|
|
92
|
+
});
|
|
93
|
+
}
|