@tuwaio/siwx-solana 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,43 +1,21 @@
1
1
  import { SiwxVerifyPayload, SiwxVerifyResult } from '@tuwaio/siwx-core';
2
2
 
3
- /**
4
- * @fileoverview Solana signer adapter for SIWX authentication.
5
- */
6
3
  /**
7
4
  * Target input for the Solana SIWX signer.
8
- * Supports Wallet Standard (`signMessages`), Web3 v2 (`modifyAndSignMessages`), and Legacy (`signMessage`) signers.
5
+ * Accepts raw wallet and account objects.
9
6
  */
10
7
  interface SolanaSiwxSignerTarget {
11
- address?: string;
12
- name?: string;
13
- publicKey?: Uint8Array | unknown;
14
- account?: unknown;
15
- wallet?: unknown;
16
- features?: Record<string, unknown>;
17
- signMessages?: (messages: Uint8Array[]) => Promise<{
18
- signature: Uint8Array;
19
- }[]>;
20
- modifyAndSignMessages?: (messages: unknown[]) => Promise<{
21
- signatures: Record<string, Uint8Array>;
22
- }[]>;
23
- signMessage?: (message: Uint8Array) => Promise<Uint8Array | {
24
- signature: Uint8Array;
25
- }>;
8
+ account: any;
9
+ wallet: any;
26
10
  }
27
11
  /**
28
12
  * Creates a standard SIWX signer callback for Solana chains.
29
13
  * Automatically adapts to Wallet Standard, Web3 v2 (gill), or legacy Solana signers.
30
14
  *
31
- * @param signer - A Solana signer object containing signing capabilities.
15
+ * @param target - A Solana signer target containing the raw wallet and account.
32
16
  * @returns A standardized signer function accepting a message string and returning a promise with the base58 signature.
33
- *
34
- * @example
35
- * ```ts
36
- * const signer = createSolanaSiwxSigner(connectedAccount);
37
- * const signature = await signer("Mini-Session Login: ...");
38
- * ```
39
17
  */
40
- declare function createSolanaSiwxSigner(signer: SolanaSiwxSignerTarget): (message: string) => Promise<string>;
18
+ declare function createSolanaSiwxSigner(target: SolanaSiwxSignerTarget): (message: string) => Promise<string>;
41
19
 
42
20
  /**
43
21
  * @fileoverview Solana-specific types for the @tuwaio/siwx-solana package.
package/dist/index.d.ts CHANGED
@@ -1,43 +1,21 @@
1
1
  import { SiwxVerifyPayload, SiwxVerifyResult } from '@tuwaio/siwx-core';
2
2
 
3
- /**
4
- * @fileoverview Solana signer adapter for SIWX authentication.
5
- */
6
3
  /**
7
4
  * Target input for the Solana SIWX signer.
8
- * Supports Wallet Standard (`signMessages`), Web3 v2 (`modifyAndSignMessages`), and Legacy (`signMessage`) signers.
5
+ * Accepts raw wallet and account objects.
9
6
  */
10
7
  interface SolanaSiwxSignerTarget {
11
- address?: string;
12
- name?: string;
13
- publicKey?: Uint8Array | unknown;
14
- account?: unknown;
15
- wallet?: unknown;
16
- features?: Record<string, unknown>;
17
- signMessages?: (messages: Uint8Array[]) => Promise<{
18
- signature: Uint8Array;
19
- }[]>;
20
- modifyAndSignMessages?: (messages: unknown[]) => Promise<{
21
- signatures: Record<string, Uint8Array>;
22
- }[]>;
23
- signMessage?: (message: Uint8Array) => Promise<Uint8Array | {
24
- signature: Uint8Array;
25
- }>;
8
+ account: any;
9
+ wallet: any;
26
10
  }
27
11
  /**
28
12
  * Creates a standard SIWX signer callback for Solana chains.
29
13
  * Automatically adapts to Wallet Standard, Web3 v2 (gill), or legacy Solana signers.
30
14
  *
31
- * @param signer - A Solana signer object containing signing capabilities.
15
+ * @param target - A Solana signer target containing the raw wallet and account.
32
16
  * @returns A standardized signer function accepting a message string and returning a promise with the base58 signature.
33
- *
34
- * @example
35
- * ```ts
36
- * const signer = createSolanaSiwxSigner(connectedAccount);
37
- * const signature = await signer("Mini-Session Login: ...");
38
- * ```
39
17
  */
40
- declare function createSolanaSiwxSigner(signer: SolanaSiwxSignerTarget): (message: string) => Promise<string>;
18
+ declare function createSolanaSiwxSigner(target: SolanaSiwxSignerTarget): (message: string) => Promise<string>;
41
19
 
42
20
  /**
43
21
  * @fileoverview Solana-specific types for the @tuwaio/siwx-solana package.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var gill=require('gill'),siwxCore=require('@tuwaio/siwx-core');function h(e){return async c=>{try{let g=gill.getUtf8Encoder().encode(c),r,t=s=>{if(!s||typeof s!="object")return;let i=s.features??s;if(i&&typeof i=="object"&&!Array.isArray(i)){let o=i;return o["solana:signMessage"]??o["standard:signMessage"]}},n=t(e)??t(e.wallet)??t(e.account)??t(e.features),d=typeof n=="function"?n:typeof n?.signMessage=="function"?n.signMessage:void 0,l=e.modifyAndSignMessages??e.wallet?.modifyAndSignMessages,w=e.signMessages??e.wallet?.signMessages,y=e.signMessage??e.wallet?.signMessage;if(d){let s=e.account??(e.address?e:void 0),o=(await d([{message:g,account:s}]))[0];if(!o?.signature)throw new Error("[SIWX-SOLANA] Wallet returned invalid solana:signMessage output.");r=o.signature;}else if(l){if(!e.address)throw new Error("[SIWX-SOLANA] modifyAndSignMessages requires signer.address to be defined.");let s=gill.createSignableMessage(g),o=(await l([s]))[0];if(!o)throw new Error("[SIWX-SOLANA] No signed message returned.");let u=o.signatures[e.address];if(!u)throw new Error(`[SIWX-SOLANA] Signature missing for address: ${e.address}`);r=u;}else if(w){let i=(await w([g]))[0];if(!i?.signature)throw new Error("[SIWX-SOLANA] Wallet returned invalid signMessages output.");r=i.signature;}else if(y){let s=await y(g);if(s instanceof Uint8Array||s&&s.buffer instanceof ArrayBuffer)r=s;else if(s&&"signature"in s)r=s.signature;else throw new Error("[SIWX-SOLANA] Unexpected legacy signMessage result format.")}else if(typeof window<"u"){let s=e.wallet?.name??e.account?.name??e?.name??"",i=String(s).toLowerCase(),o=window,u;if(i.includes("phantom")?u=o.phantom?.solana:i.includes("solflare")?u=o.solflare:i.includes("backpack")?u=o.backpack:i.includes("glow")?u=o.glow:i.includes("trust")&&(u=o.trustwallet),!u&&i){let f=i.replace(/\s+/g,""),m=o[f];m&&typeof m.signMessage=="function"&&(u=m);}if(u||(u=o.solana),u&&typeof u.signMessage=="function"){let f=await u.signMessage(g,"utf8");if(f instanceof Uint8Array||f&&f.buffer instanceof ArrayBuffer)r=f;else if(f&&"signature"in f)r=f.signature;else throw new Error("[SIWX-SOLANA] Unexpected window provider signMessage result format.")}else throw new Error(`[SIWX-SOLANA] Wallet ${s?`"${s}" `:""}lacks known message signing capabilities.`)}else throw new Error("[SIWX-SOLANA] Signer lacks known message signing capabilities.");return gill.getSignatureFromBytes(r)}catch(a){throw new Error(`[SIWX-SOLANA] Signing failed: ${a.message}`,{cause:a})}}}function A(e){let c="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",a=new Map(c.split("").map((n,d)=>[n,BigInt(d)])),g=BigInt(0);for(let n of e){let d=a.get(n);if(d===void 0)throw new siwxCore.SiwxVerificationError(`Invalid base58 character: "${n}"`);g=g*BigInt(58)+d;}let r=g.toString(16).padStart(64,"0"),t=new Uint8Array(r.length/2);for(let n=0;n<r.length;n+=2)t[n/2]=parseInt(r.slice(n,n+2),16);return t}function I(e){let c=e.split(":");if(c.length!==3||c[0]!=="solana")throw new siwxCore.SiwxVerificationError(`Expected solana CAIP-10 address format. Got: "${e}"`);return c[2]}function P(e){let c="output"in e?e.output:e,a="signedMessage"in c?c.signedMessage:c.message,g=c.signature,r,t;a instanceof Uint8Array?(t=a,r=new TextDecoder().decode(a)):(r=a,t=new TextEncoder().encode(a));let n;return g instanceof Uint8Array?n=g:n=A(g),{messageString:r,messageBytes:t,signatureBytes:n}}async function v(e,c){try{let{messageString:a,messageBytes:g,signatureBytes:r}=P(e),t=siwxCore.parseMessage(a);if(!t.chainId.startsWith("solana:"))throw new siwxCore.SiwxUnsupportedNamespaceError(t.chainId.split(":")[0]??"unknown");let n=siwxCore.validateMessage(t,{skipExpiration:c?.skipExpiration});if(!n.valid)throw new siwxCore.SiwxValidationError(n.errors);let d=I(t.address),l=gill.address(d),w=A(l),y=await globalThis.crypto.subtle.importKey("raw",w.buffer,{name:"Ed25519"},!1,["verify"]);if(!await globalThis.crypto.subtle.verify({name:"Ed25519"},y,r.buffer,g.buffer))throw new siwxCore.SiwxVerificationError(`ed25519 signature verification failed for address: ${d}`);return {success:!0,data:t}}catch(a){return a instanceof siwxCore.SiwxVerificationError||a instanceof siwxCore.SiwxValidationError?{success:false,error:a.message}:{success:false,error:`ed25519 verification failed: ${String(a)}`}}}exports.createSolanaSiwxSigner=h;exports.verifyEd25519=v;
1
+ 'use strict';var gill=require('gill'),siwxCore=require('@tuwaio/siwx-core');function v(n,s){if(n===s)return true;if(n.length!==s.length)return false;for(let e=0;e<n.length;e++)if(n[e]!==s[e])return false;return true}function W(n,s){let e=s.address;if(!e)throw new Error("[SIWX-SOLANA] Account address is missing.");let i=s.features,t=n.features,a;Array.isArray(i)&&i.includes("solana:signMessage")&&t&&typeof t=="object"&&!Array.isArray(t)&&(a=t["solana:signMessage"]);let r=n?.adapter,o=n?.signMessage??r?.signMessage;if(!a&&!o)throw new Error("[SIWX-SOLANA] Wallet lacks known message signing capabilities.");return {address:e,async modifyAndSignMessages(c,p={}){if(p.abortSignal?.aborted)throw new Error("Aborted");if(c.length===0)return c;let d=[];for(let w=0;w<c.length;w++){let l=c[w],u,f;if(a){let g=[{account:s,message:l.content}],y=(await a.signMessage(...g))[0];if(!y||!y.signature)throw new Error("[SIWX-SOLANA] Wallet returned invalid signMessage output.");u=y.signature,f=y.signedMessage??l.content;}else if(o){let g=await o.call(r??n,l.content);if(f=l.content,g instanceof Uint8Array||g&&g.buffer instanceof ArrayBuffer)u=g;else if(g&&"signature"in g)u=g.signature;else throw new Error("[SIWX-SOLANA] Unexpected legacy signMessage result format.")}else throw new Error("[SIWX-SOLANA] Missing signing implementation.");let M=l.content.length!==f.length||l.content.some((g,h)=>g!==f[h]),m=l.signatures[e];if(!(m===void 0||!v(m,u))&&!M){d.push(l);continue}let E=M?{[e]:u}:{...l.signatures,[e]:u};d.push(Object.freeze({content:f,signatures:Object.freeze(E)}));}return d}}}function N(n){return async s=>{try{if(!n||!n.wallet||!n.account)throw new Error("[SIWX-SOLANA] Invalid signer target. Wallet and Account are required.");let i=gill.getUtf8Encoder().encode(s),t=W(n.wallet,n.account),a=gill.createSignableMessage(i),o=(await t.modifyAndSignMessages([a]))[0];if(!o)throw new Error("[SIWX-SOLANA] No signed message returned.");let c=o.signatures[t.address];if(!c)throw new Error(`[SIWX-SOLANA] Signature missing for address: ${t.address}`);return gill.getSignatureFromBytes(c)}catch(e){throw new Error(`[SIWX-SOLANA] Signing failed: ${e.message}`,{cause:e})}}}function b(n){let s="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",e=new Map(s.split("").map((r,o)=>[r,BigInt(o)])),i=BigInt(0);for(let r of n){let o=e.get(r);if(o===void 0)throw new siwxCore.SiwxVerificationError(`Invalid base58 character: "${r}"`);i=i*BigInt(58)+o;}let t=i.toString(16).padStart(64,"0"),a=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)a[r/2]=parseInt(t.slice(r,r+2),16);return a}function V(n){let s=n.split(":");if(s.length!==3||s[0]!=="solana")throw new siwxCore.SiwxVerificationError(`Expected solana CAIP-10 address format. Got: "${n}"`);return s[2]}function T(n){let s="output"in n?n.output:n,e="signedMessage"in s?s.signedMessage:s.message,i=s.signature,t,a;e instanceof Uint8Array?(a=e,t=new TextDecoder().decode(e)):(t=e,a=new TextEncoder().encode(e));let r;return i instanceof Uint8Array?r=i:r=b(i),{messageString:t,messageBytes:a,signatureBytes:r}}async function X(n,s){try{let{messageString:e,messageBytes:i,signatureBytes:t}=T(n),a=siwxCore.parseMessage(e);if(!a.chainId.startsWith("solana:"))throw new siwxCore.SiwxUnsupportedNamespaceError(a.chainId.split(":")[0]??"unknown");let r=siwxCore.validateMessage(a,{skipExpiration:s?.skipExpiration});if(!r.valid)throw new siwxCore.SiwxValidationError(r.errors);let o=V(a.address),c=gill.address(o),p=b(c),A=await globalThis.crypto.subtle.importKey("raw",p.buffer,{name:"Ed25519"},!1,["verify"]);if(!await globalThis.crypto.subtle.verify({name:"Ed25519"},A,t.buffer,i.buffer))throw new siwxCore.SiwxVerificationError(`ed25519 signature verification failed for address: ${o}`);return {success:!0,data:a}}catch(e){return e instanceof siwxCore.SiwxVerificationError||e instanceof siwxCore.SiwxValidationError?{success:false,error:e.message}:{success:false,error:`ed25519 verification failed: ${String(e)}`}}}exports.createSolanaSiwxSigner=N;exports.verifyEd25519=X;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import {getUtf8Encoder,createSignableMessage,getSignatureFromBytes,address}from'gill';import {parseMessage,SiwxUnsupportedNamespaceError,validateMessage,SiwxValidationError,SiwxVerificationError}from'@tuwaio/siwx-core';function h(e){return async c=>{try{let g=getUtf8Encoder().encode(c),r,t=s=>{if(!s||typeof s!="object")return;let i=s.features??s;if(i&&typeof i=="object"&&!Array.isArray(i)){let o=i;return o["solana:signMessage"]??o["standard:signMessage"]}},n=t(e)??t(e.wallet)??t(e.account)??t(e.features),d=typeof n=="function"?n:typeof n?.signMessage=="function"?n.signMessage:void 0,l=e.modifyAndSignMessages??e.wallet?.modifyAndSignMessages,w=e.signMessages??e.wallet?.signMessages,y=e.signMessage??e.wallet?.signMessage;if(d){let s=e.account??(e.address?e:void 0),o=(await d([{message:g,account:s}]))[0];if(!o?.signature)throw new Error("[SIWX-SOLANA] Wallet returned invalid solana:signMessage output.");r=o.signature;}else if(l){if(!e.address)throw new Error("[SIWX-SOLANA] modifyAndSignMessages requires signer.address to be defined.");let s=createSignableMessage(g),o=(await l([s]))[0];if(!o)throw new Error("[SIWX-SOLANA] No signed message returned.");let u=o.signatures[e.address];if(!u)throw new Error(`[SIWX-SOLANA] Signature missing for address: ${e.address}`);r=u;}else if(w){let i=(await w([g]))[0];if(!i?.signature)throw new Error("[SIWX-SOLANA] Wallet returned invalid signMessages output.");r=i.signature;}else if(y){let s=await y(g);if(s instanceof Uint8Array||s&&s.buffer instanceof ArrayBuffer)r=s;else if(s&&"signature"in s)r=s.signature;else throw new Error("[SIWX-SOLANA] Unexpected legacy signMessage result format.")}else if(typeof window<"u"){let s=e.wallet?.name??e.account?.name??e?.name??"",i=String(s).toLowerCase(),o=window,u;if(i.includes("phantom")?u=o.phantom?.solana:i.includes("solflare")?u=o.solflare:i.includes("backpack")?u=o.backpack:i.includes("glow")?u=o.glow:i.includes("trust")&&(u=o.trustwallet),!u&&i){let f=i.replace(/\s+/g,""),m=o[f];m&&typeof m.signMessage=="function"&&(u=m);}if(u||(u=o.solana),u&&typeof u.signMessage=="function"){let f=await u.signMessage(g,"utf8");if(f instanceof Uint8Array||f&&f.buffer instanceof ArrayBuffer)r=f;else if(f&&"signature"in f)r=f.signature;else throw new Error("[SIWX-SOLANA] Unexpected window provider signMessage result format.")}else throw new Error(`[SIWX-SOLANA] Wallet ${s?`"${s}" `:""}lacks known message signing capabilities.`)}else throw new Error("[SIWX-SOLANA] Signer lacks known message signing capabilities.");return getSignatureFromBytes(r)}catch(a){throw new Error(`[SIWX-SOLANA] Signing failed: ${a.message}`,{cause:a})}}}function A(e){let c="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",a=new Map(c.split("").map((n,d)=>[n,BigInt(d)])),g=BigInt(0);for(let n of e){let d=a.get(n);if(d===void 0)throw new SiwxVerificationError(`Invalid base58 character: "${n}"`);g=g*BigInt(58)+d;}let r=g.toString(16).padStart(64,"0"),t=new Uint8Array(r.length/2);for(let n=0;n<r.length;n+=2)t[n/2]=parseInt(r.slice(n,n+2),16);return t}function I(e){let c=e.split(":");if(c.length!==3||c[0]!=="solana")throw new SiwxVerificationError(`Expected solana CAIP-10 address format. Got: "${e}"`);return c[2]}function P(e){let c="output"in e?e.output:e,a="signedMessage"in c?c.signedMessage:c.message,g=c.signature,r,t;a instanceof Uint8Array?(t=a,r=new TextDecoder().decode(a)):(r=a,t=new TextEncoder().encode(a));let n;return g instanceof Uint8Array?n=g:n=A(g),{messageString:r,messageBytes:t,signatureBytes:n}}async function v(e,c){try{let{messageString:a,messageBytes:g,signatureBytes:r}=P(e),t=parseMessage(a);if(!t.chainId.startsWith("solana:"))throw new SiwxUnsupportedNamespaceError(t.chainId.split(":")[0]??"unknown");let n=validateMessage(t,{skipExpiration:c?.skipExpiration});if(!n.valid)throw new SiwxValidationError(n.errors);let d=I(t.address),l=address(d),w=A(l),y=await globalThis.crypto.subtle.importKey("raw",w.buffer,{name:"Ed25519"},!1,["verify"]);if(!await globalThis.crypto.subtle.verify({name:"Ed25519"},y,r.buffer,g.buffer))throw new SiwxVerificationError(`ed25519 signature verification failed for address: ${d}`);return {success:!0,data:t}}catch(a){return a instanceof SiwxVerificationError||a instanceof SiwxValidationError?{success:false,error:a.message}:{success:false,error:`ed25519 verification failed: ${String(a)}`}}}export{h as createSolanaSiwxSigner,v as verifyEd25519};
1
+ import {getUtf8Encoder,createSignableMessage,getSignatureFromBytes,address}from'gill';import {parseMessage,SiwxUnsupportedNamespaceError,validateMessage,SiwxValidationError,SiwxVerificationError}from'@tuwaio/siwx-core';function v(n,s){if(n===s)return true;if(n.length!==s.length)return false;for(let e=0;e<n.length;e++)if(n[e]!==s[e])return false;return true}function W(n,s){let e=s.address;if(!e)throw new Error("[SIWX-SOLANA] Account address is missing.");let i=s.features,t=n.features,a;Array.isArray(i)&&i.includes("solana:signMessage")&&t&&typeof t=="object"&&!Array.isArray(t)&&(a=t["solana:signMessage"]);let r=n?.adapter,o=n?.signMessage??r?.signMessage;if(!a&&!o)throw new Error("[SIWX-SOLANA] Wallet lacks known message signing capabilities.");return {address:e,async modifyAndSignMessages(c,p={}){if(p.abortSignal?.aborted)throw new Error("Aborted");if(c.length===0)return c;let d=[];for(let w=0;w<c.length;w++){let l=c[w],u,f;if(a){let g=[{account:s,message:l.content}],y=(await a.signMessage(...g))[0];if(!y||!y.signature)throw new Error("[SIWX-SOLANA] Wallet returned invalid signMessage output.");u=y.signature,f=y.signedMessage??l.content;}else if(o){let g=await o.call(r??n,l.content);if(f=l.content,g instanceof Uint8Array||g&&g.buffer instanceof ArrayBuffer)u=g;else if(g&&"signature"in g)u=g.signature;else throw new Error("[SIWX-SOLANA] Unexpected legacy signMessage result format.")}else throw new Error("[SIWX-SOLANA] Missing signing implementation.");let M=l.content.length!==f.length||l.content.some((g,h)=>g!==f[h]),m=l.signatures[e];if(!(m===void 0||!v(m,u))&&!M){d.push(l);continue}let E=M?{[e]:u}:{...l.signatures,[e]:u};d.push(Object.freeze({content:f,signatures:Object.freeze(E)}));}return d}}}function N(n){return async s=>{try{if(!n||!n.wallet||!n.account)throw new Error("[SIWX-SOLANA] Invalid signer target. Wallet and Account are required.");let i=getUtf8Encoder().encode(s),t=W(n.wallet,n.account),a=createSignableMessage(i),o=(await t.modifyAndSignMessages([a]))[0];if(!o)throw new Error("[SIWX-SOLANA] No signed message returned.");let c=o.signatures[t.address];if(!c)throw new Error(`[SIWX-SOLANA] Signature missing for address: ${t.address}`);return getSignatureFromBytes(c)}catch(e){throw new Error(`[SIWX-SOLANA] Signing failed: ${e.message}`,{cause:e})}}}function b(n){let s="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",e=new Map(s.split("").map((r,o)=>[r,BigInt(o)])),i=BigInt(0);for(let r of n){let o=e.get(r);if(o===void 0)throw new SiwxVerificationError(`Invalid base58 character: "${r}"`);i=i*BigInt(58)+o;}let t=i.toString(16).padStart(64,"0"),a=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)a[r/2]=parseInt(t.slice(r,r+2),16);return a}function V(n){let s=n.split(":");if(s.length!==3||s[0]!=="solana")throw new SiwxVerificationError(`Expected solana CAIP-10 address format. Got: "${n}"`);return s[2]}function T(n){let s="output"in n?n.output:n,e="signedMessage"in s?s.signedMessage:s.message,i=s.signature,t,a;e instanceof Uint8Array?(a=e,t=new TextDecoder().decode(e)):(t=e,a=new TextEncoder().encode(e));let r;return i instanceof Uint8Array?r=i:r=b(i),{messageString:t,messageBytes:a,signatureBytes:r}}async function X(n,s){try{let{messageString:e,messageBytes:i,signatureBytes:t}=T(n),a=parseMessage(e);if(!a.chainId.startsWith("solana:"))throw new SiwxUnsupportedNamespaceError(a.chainId.split(":")[0]??"unknown");let r=validateMessage(a,{skipExpiration:s?.skipExpiration});if(!r.valid)throw new SiwxValidationError(r.errors);let o=V(a.address),c=address(o),p=b(c),A=await globalThis.crypto.subtle.importKey("raw",p.buffer,{name:"Ed25519"},!1,["verify"]);if(!await globalThis.crypto.subtle.verify({name:"Ed25519"},A,t.buffer,i.buffer))throw new SiwxVerificationError(`ed25519 signature verification failed for address: ${o}`);return {success:!0,data:a}}catch(e){return e instanceof SiwxVerificationError||e instanceof SiwxValidationError?{success:false,error:e.message}:{success:false,error:`ed25519 verification failed: ${String(e)}`}}}export{N as createSolanaSiwxSigner,X as verifyEd25519};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuwaio/siwx-solana",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "private": false,
5
5
  "author": "Oleksandr Tkach",
6
6
  "license": "Apache-2.0",