@aptos-labs/siwa
@aptos-labs/siwa
is a TypeScript library that provides a set of utilities for working with SIWA.
Getting Started
Install
To use @aptos-labs/siwa
in your project, you can install it using your preferred package manager. The package is available via npm.
npm i -D @aptos-labs/siwa
Constructing a SIWA Message
To construct a SIWA message, you can use the createSignInMessageText
function. This object will
take in an AptosSignInInput
with AptosSignInBoundFields
from the @aptos-labs/wallet-standard
package and return a plain text string.
import { createSignInMessageText, generateNonce } from "@aptos-labs/siwa";
import type {
AptosSignInInput,
AptosSignInBoundFields,
} from "@aptos-labs/wallet-standard";
// Output:
// example.com wants you to sign in with your Aptos account:
// 0x10d7cf502f8571b5b6e402221cafb142547103da9c2847ffcf708f065a78b8d1
//
// URI: https://example.com
// Version: 1
// Nonce: abc123
// Chain ID: aptos:mainnet
const plainText = createSignInMessageText({
address: "0x10d7cf502f8571b5b6e402221cafb142547103da9c2847ffcf708f065a78b8d1",
chainId: "aptos:mainnet",
domain: "example.com",
nonce: generateNonce(),
uri: "https://example.com",
version: "1",
} satisfies AptosSignInInput & AptosSignInBoundFields);
Verifying a SIWA Message
You can also verify a SIWA Message with AptosSignInInput
using the verifySignInMessage
function.
import { verifySignInMessage } from "@aptos-labs/siwa";
import type {
AptosSignInInput,
AptosSignInBoundFields,
} from "@aptos-labs/wallet-standard";
const input = {
domain: "example.com",
uri: "https://example.com",
address: "0x123",
version: "1",
chainId: "aptos:mainnet",
nonce: "abc123",
} satisfies AptosSignInInput & AptosSignInBoundFields;
const plainText = `example.com wants you to sign in with your Aptos account:
0x10d7cf502f8571b5b6e402221cafb142547103da9c2847ffcf708f065a78b8d1
URI: https://example.com
Version: 1
Nonce: abc123
Chain ID: aptos:mainnet`;
// Output:
// {
// valid: true,
// data: {
// address: '0x123',
// chainId: 'aptos:mainnet',
// domain: 'example.com',
// nonce: 'abc123',
// version: '1',
// uri: 'https://example.com',
// },
// }
const result = verifySignInMessage(input, plainText);
Last updated on