// Copyright © Aptos // SPDX-License-Identifier: Apache-2.0 import { Deserializer, Network, Serializer } from '@aptos-labs/ts-sdk'; import { AptosSignInInput } from '@aptos-labs/wallet-standard'; import { isSupportedNetwork } from '../../helpers'; import { DappInfo, ExtendedNetwork } from '../../shared'; import { deserializeAptosSignInInput, serializeAptosSignInInput, } from '../../shared/AptosSignInInput'; import { deserializeWalletRequestWithArgs, SerializedWalletRequest, serializeWalletRequestWithArgs, WalletRequest, } from '../../WalletRequest'; export interface SignInRequest extends WalletRequest< SignInRequest.RequestName, SignInRequest.SupportedVersions > { args: SignInRequest.Args; } export namespace SignInRequest { export const name = 'signIn' as const; export type RequestName = typeof name; export const supportedVersions = [1, 2, 3] as const; export type SupportedVersions = (typeof supportedVersions)[number]; export const currentVersion = 3 as const; export type CurrentVersion = typeof currentVersion; // region Args export type Args = AptosSignInInput & { network: ExtendedNetwork; }; export function serializeArgs(serializer: Serializer, value: Args) { if (value.network !== undefined && !isSupportedNetwork(value.network)) { throw new Error( `Unsupported network '${value.network}' in SignInRequest.serializeArgs`, ); } serializeAptosSignInInput(serializer, value); serializer.serializeStr(value.network); } export function deserializeArgs( deserializer: Deserializer, _: SupportedVersions, ): Args { return { ...deserializeAptosSignInInput(deserializer), network: deserializer.deserializeStr() as Network, }; } // endregion export function serialize( dappInfo: DappInfo, args: SignInRequest.Args, ): SerializedWalletRequest { return serializeWalletRequestWithArgs( { args, dappInfo, name, version: currentVersion }, serializeArgs, ); } export function deserialize( request: SerializedWalletRequest, ): SignInRequest { return deserializeWalletRequestWithArgs(request, (d) => deserializeArgs(d, request.version), ); } export function isSerialized( request: SerializedWalletRequest, ): request is SerializedWalletRequest { return ( request.name === name && supportedVersions.includes(request.version as SupportedVersions) ); } }