PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@aptos-labs/ts-sdk/src/api

Просмотр файла: keyless.ts

// Copyright © Aptos Foundation
// SPDX-License-Identifier: Apache-2.0

import { Account, EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account";
import { FederatedKeylessAccount } from "../account/FederatedKeylessAccount";
import { AccountAddressInput, ZeroKnowledgeSig } from "../core";
import {
  deriveKeylessAccount,
  getPepper,
  getProof,
  updateFederatedKeylessJwkSetTransaction,
} from "../internal/keyless";
import { InputGenerateTransactionOptions, SimpleTransaction } from "../transactions";
import { HexInput } from "../types";
import { AptosConfig } from "./aptosConfig";

/**
 * A class to query all `Keyless` related queries on Aptos.
 *
 * More documentation on how to integrate Keyless Accounts see the below
 * [Aptos Keyless Integration Guide](https://aptos.dev/guides/keyless-accounts/#aptos-keyless-integration-guide).
 */
export class Keyless {
  /**
   * Initializes a new instance of the Aptos class with the provided configuration.
   * This allows you to interact with the Aptos blockchain using the specified network settings.
   *
   * @param config - The configuration settings for connecting to the Aptos network.
   *
   * @example
   * ```typescript
   * import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
   *
   * async function runExample() {
   *     // Create a new configuration for the Aptos client
   *     const config = new AptosConfig({ network: Network.TESTNET }); // Specify your desired network
   *
   *     // Initialize the Aptos client with the configuration
   *     const aptos = new Aptos(config);
   *
   *     console.log("Aptos client initialized:", aptos);
   * }
   * runExample().catch(console.error);
   * ```
   */
  constructor(readonly config: AptosConfig) {}

  /**
   * Fetches the pepper from the Aptos pepper service API.
   *
   * @param args - The arguments for fetching the pepper.
   * @param args.jwt - JWT token.
   * @param args.ephemeralKeyPair - The EphemeralKeyPair used to generate the nonce in the JWT token.
   * @param args.derivationPath - A derivation path used for creating multiple accounts per user via the BIP-44 standard. Defaults
   * to "m/44'/637'/0'/0'/0".
   * @returns The pepper which is a Uint8Array of length 31.
   *
   * @example
   * ```typescript
   * import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
   *
   * const config = new AptosConfig({ network: Network.TESTNET });
   * const aptos = new Aptos(config);
   *
   * async function runExample() {
   *   const ephemeralKeyPair = new EphemeralKeyPair(); // create a new ephemeral key pair
   *   const jwt = "your_jwt_token"; // replace with a real JWT token
   *
   *   // Fetching the pepper using the provided JWT and ephemeral key pair
   *   const pepper = await aptos.getPepper({
   *     jwt,
   *     ephemeralKeyPair,
   *     // derivationPath: "m/44'/637'/0'/0'/0" // specify your own if needed
   *   });
   *
   *   console.log("Fetched pepper:", pepper);
   * }
   * runExample().catch(console.error);
   * ```
   */
  async getPepper(args: {
    jwt: string;
    ephemeralKeyPair: EphemeralKeyPair;
    derivationPath?: string;
  }): Promise<Uint8Array> {
    return getPepper({ aptosConfig: this.config, ...args });
  }

  /**
   * Fetches a proof from the Aptos prover service API.
   *
   * @param args - The arguments for fetching the proof.
   * @param args.jwt - JWT token.
   * @param args.ephemeralKeyPair - The EphemeralKeyPair used to generate the nonce in the JWT token.
   * @param args.pepper - The pepper used for the account. If not provided, it will be fetched from the Aptos pepper service.
   * @param args.uidKey - A key in the JWT token to use to set the uidVal in the IdCommitment.
   *
   * @returns The proof which is represented by a ZeroKnowledgeSig.
   *
   * @example
   * ```typescript
   * import { Aptos, AptosConfig, Network, EphemeralKeyPair, getPepper } from "@aptos-labs/ts-sdk";
   *
   * const config = new AptosConfig({ network: Network.TESTNET });
   * const aptos = new Aptos(config);
   *
   * async function runExample() {
   *   const jwt = "your_jwt_token"; // replace with a real JWT token
   *   const ephemeralKeyPair = new EphemeralKeyPair(); // create a new ephemeral key pair
   *
   *   // Fetch the proof using the getProof function
   *   const proof = await aptos.getProof({
   *     jwt,
   *     ephemeralKeyPair,
   *     pepper: await getPepper({}), // fetch the pepper if not provided
   *     uidKey: "sub", // specify the uid key
   *   });
   *
   *   console.log("Fetched proof:", proof);
   * }
   * runExample().catch(console.error);
   * ```
   */
  async getProof(args: {
    jwt: string;
    ephemeralKeyPair: EphemeralKeyPair;
    pepper?: HexInput;
    uidKey?: string;
  }): Promise<ZeroKnowledgeSig> {
    return getProof({ aptosConfig: this.config, ...args });
  }

  async deriveKeylessAccount(args: {
    jwt: string;
    ephemeralKeyPair: EphemeralKeyPair;
    uidKey?: string;
    pepper?: HexInput;
    proofFetchCallback?: ProofFetchCallback;
  }): Promise<KeylessAccount>;

  async deriveKeylessAccount(args: {
    jwt: string;
    ephemeralKeyPair: EphemeralKeyPair;
    jwkAddress: AccountAddressInput;
    uidKey?: string;
    pepper?: HexInput;
    proofFetchCallback?: ProofFetchCallback;
  }): Promise<FederatedKeylessAccount>;

  /**
   * Derives a Keyless Account from the provided JWT token and corresponding EphemeralKeyPair. This function computes the proof
   * via the proving service and can fetch the pepper from the pepper service if not explicitly provided.
   *
   * @param args - The arguments required to derive the Keyless Account.
   * @param args.jwt - The JWT token used for deriving the account.
   * @param args.ephemeralKeyPair - The EphemeralKeyPair used to generate the nonce in the JWT token.
   * @param args.jwkAddress - The address the where the JWKs used to verify signatures are found.  Setting the value derives a
   * FederatedKeylessAccount.
   * @param args.uidKey - An optional key in the JWT token to set the uidVal in the IdCommitment.
   * @param args.pepper - An optional pepper value.
   * @param args.proofFetchCallback - An optional callback function for fetching the proof in the background, allowing for a more
   * responsive user experience.
   *
   * @returns A KeylessAccount that can be used to sign transactions.
   *
   * @example
   * ```typescript
   * import { Aptos, AptosConfig, Network, deriveKeylessAccount } from "@aptos-labs/ts-sdk";
   *
   * const config = new AptosConfig({ network: Network.TESTNET });
   * const aptos = new Aptos(config);
   *
   * async function runExample() {
   *   const jwt = "your_jwt_token"; // replace with a real JWT token
   *   const ephemeralKeyPair = new EphemeralKeyPair(); // create a new ephemeral key pair
   *
   *   // Deriving the Keyless Account
   *   const keylessAccount = await deriveKeylessAccount({
   *     jwt,
   *     ephemeralKeyPair,
   *     uidKey: "your_uid_key", // optional
   *     pepper: "your_pepper", // optional
   *   });
   *
   *   console.log("Keyless Account derived:", keylessAccount);
   * }
   * runExample().catch(console.error);
   * ```
   */
  async deriveKeylessAccount(args: {
    jwt: string;
    ephemeralKeyPair: EphemeralKeyPair;
    jwkAddress?: AccountAddressInput;
    uidKey?: string;
    pepper?: HexInput;
    proofFetchCallback?: ProofFetchCallback;
  }): Promise<KeylessAccount | FederatedKeylessAccount> {
    return deriveKeylessAccount({ aptosConfig: this.config, ...args });
  }

  /**
   * This installs a set of FederatedJWKs at an address for a given iss.
   *
   * It will fetch the JSON Web Keyset (JWK) set from the well-known endpoint and update the FederatedJWKs at the sender's address
   * to reflect it.
   *
   * @param args.sender The account that will install the JWKs
   * @param args.iss the iss claim of the federated OIDC provider.
   * @param args.jwksUrl the URL to find the corresponding JWKs. For supported IDP providers this parameter in not necessary.
   *
   * @returns The pending transaction that results from submission.
   */
  async updateFederatedKeylessJwkSetTransaction(args: {
    sender: Account;
    iss: string;
    jwksUrl?: string;
    options?: InputGenerateTransactionOptions;
  }): Promise<SimpleTransaction> {
    return updateFederatedKeylessJwkSetTransaction({ aptosConfig: this.config, ...args });
  }
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!