// Copyright © Aptos // SPDX-License-Identifier: Apache-2.0 /* eslint-disable no-inner-declarations */ import { Deserializer, Serializer } from '@aptos-labs/ts-sdk'; import { AptosSignInOutput } from '@aptos-labs/wallet-standard'; import { deserializeAptosSignInOutput, deserializeAptosSignInOutputV1, serializeAptosSignInOutput, serializeAptosSignInOutputV1, } from '../../shared/AptosSignInOutput'; import { makeUserResponseDeserializeFn, makeUserResponseSerializeFn, UserResponse, } from '../../UserResponse'; import { deserializeWalletResponse, SerializedWalletResponse, serializeWalletResponse, WalletResponseWithArgs, } from '../../WalletResponse'; export interface SignInResponse extends WalletResponseWithArgs {} export namespace SignInResponse { export const supportedVersions = [1, 2] as const; export type SupportedVersions = (typeof supportedVersions)[number]; export const currentVersion = 2 as const; export type CurrentVersion = typeof currentVersion; // region ApprovalArgs export interface ApprovalArgsV1 extends AptosSignInOutput { plainText: string; signingMessage: Uint8Array; } export interface ApprovalArgs extends AptosSignInOutput {} function serializeApprovalArgsV1( serializer: Serializer, value: ApprovalArgsV1, ) { serializeAptosSignInOutputV1(serializer, value); } function deserializeApprovalArgsV1( deserializer: Deserializer, ): ApprovalArgsV1 { return deserializeAptosSignInOutputV1(deserializer); } function serializeApprovalArgs(serializer: Serializer, value: ApprovalArgs) { serializeAptosSignInOutput(serializer, value); } function deserializeApprovalArgs(deserializer: Deserializer): ApprovalArgs { return deserializeAptosSignInOutput(deserializer); } // endregion // region ResponseArgs export type Args = UserResponse; const serializeArgsV1 = makeUserResponseSerializeFn(serializeApprovalArgsV1); const serializeArgs = makeUserResponseSerializeFn(serializeApprovalArgs); const deserializeArgsV1 = makeUserResponseDeserializeFn( deserializeApprovalArgsV1, ); const deserializeArgs = makeUserResponseDeserializeFn( deserializeApprovalArgs, ); // endregion type _Response = SignInResponse; export function serialize( args: Args, version: SupportedVersions = currentVersion, ): SerializedWalletResponse { return serializeWalletResponse( args as any, version === 1 ? serializeArgsV1 : serializeArgs, ); } export function deserialize( serializedResponse: SerializedWalletResponse, version: SupportedVersions = currentVersion, ): _Response { return deserializeWalletResponse( serializedResponse, version === 1 ? deserializeArgsV1 : deserializeArgs, ); } }