UNPKG

@aptos-labs/ts-sdk

Version:
133 lines 6.03 kB
// Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 import { getIssAudAndUidVal, KeylessPublicKey, } from "../core/crypto/keyless.js"; import { Deserializer } from "../bcs/index.js"; import { AbstractKeylessAccount } from "./AbstractKeylessAccount.js"; import { Hex } from "../core/hex.js"; /** * Account implementation for the Keyless authentication scheme. * * Used to represent a Keyless based account and sign transactions with it. * * Use `KeylessAccount.create()` to instantiate a KeylessAccount with a JWT, proof and EphemeralKeyPair. * * When the proof expires or the JWT becomes invalid, the KeylessAccount must be instantiated again with a new JWT, * EphemeralKeyPair, and corresponding proof. * @group Implementation * @category Account (On-Chain Model) */ export class KeylessAccount extends AbstractKeylessAccount { /** * The KeylessPublicKey associated with the account * @group Implementation * @category Account (On-Chain Model) */ publicKey; // Use the static constructor 'create' instead. /** * Use the static generator `create(...)` instead. * Creates an instance of the KeylessAccount with an optional proof. * * @param args - The parameters for creating a KeylessAccount. * @param args.address - Optional account address associated with the KeylessAccount. * @param args.ephemeralKeyPair - The ephemeral key pair used in the account creation. * @param args.iss - A JWT issuer. * @param args.uidKey - The claim on the JWT to identify a user. This is typically 'sub' or 'email'. * @param args.uidVal - The unique id for this user, intended to be a stable user identifier. * @param args.aud - The value of the 'aud' claim on the JWT, also known as client ID. This is the identifier for the dApp's * OIDC registration with the identity provider. * @param args.pepper - A hexadecimal input used for additional security. * @param args.proof - A Zero Knowledge Signature or a promise that resolves to one. * @param args.proofFetchCallback - Optional callback function for fetching proof. * @param args.jwt - A JSON Web Token used for authentication. * @group Implementation * @category Account (On-Chain Model) */ constructor(args) { const publicKey = KeylessPublicKey.create(args); super({ publicKey, ...args }); this.publicKey = publicKey; } /** * Serializes the transaction data into a format suitable for transmission or storage. * This function ensures that both the transaction bytes and the proof are properly serialized. * * @param serializer - The serializer instance used to convert the transaction data into bytes. * @group Implementation * @category Account (On-Chain Model) */ serialize(serializer) { super.serialize(serializer); } /** * Deserializes the provided deserializer to create a KeylessAccount instance. * This function extracts necessary components such as the JWT, UID key, pepper, ephemeral key pair, and proof from the deserializer. * * @param deserializer - The deserializer instance used to retrieve the serialized data. * @returns A KeylessAccount instance created from the deserialized data. * @group Implementation * @category Account (On-Chain Model) */ static deserialize(deserializer) { const { address, proof, ephemeralKeyPair, jwt, uidKey, pepper, verificationKeyHash } = AbstractKeylessAccount.partialDeserialize(deserializer); const { iss, aud, uidVal } = getIssAudAndUidVal({ jwt, uidKey }); return new KeylessAccount({ address, proof, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, jwt, verificationKeyHash, }); } /** * Deserialize bytes using this account's information. * * @param bytes The bytes being interpreted. * @returns */ static fromBytes(bytes) { return KeylessAccount.deserialize(new Deserializer(Hex.hexInputToUint8Array(bytes))); } /** * Creates a KeylessAccount instance using the provided parameters. * This function allows you to set up a KeylessAccount with specific attributes such as address, proof, and JWT. * This is used instead of the KeylessAccount constructor. * * @param args - The parameters for creating a KeylessAccount. * @param args.address - Optional account address associated with the KeylessAccount. * @param args.proof - A Zero Knowledge Signature or a promise that resolves to one. * @param args.jwt - A JSON Web Token used for authentication. * @param args.ephemeralKeyPair - The ephemeral key pair used in the account creation. * @param args.pepper - A hexadecimal input used for additional security. * @param args.uidKey - Optional key for user identification, defaults to "sub". * @param args.proofFetchCallback - Optional callback function for fetching proof. * @group Implementation * @category Account (On-Chain Model) */ static create(args) { const { address, proof, jwt, ephemeralKeyPair, pepper, uidKey = "sub", proofFetchCallback, verificationKey, verificationKeyHash, } = args; if (verificationKeyHash && verificationKey) { throw new Error("Cannot provide both verificationKey and verificationKeyHash"); } const { iss, aud, uidVal } = getIssAudAndUidVal({ jwt, uidKey }); return new KeylessAccount({ address, proof, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, jwt, proofFetchCallback, verificationKeyHash: verificationKeyHash ?? (verificationKey ? verificationKey.hash() : undefined), }); } } //# sourceMappingURL=KeylessAccount.js.map