import { expectTypeOf, test } from 'vp/test' import type * as Hex from '../core/Hex.js' import * as MultisigOperation from './MultisigOperation.js' import type * as TxEnvelopeTempo from './TxEnvelopeTempo.js' declare const transaction: MultisigOperation.TransactionOperation declare const transactionRpc: MultisigOperation.TransactionRpc declare const keyAuthorization: MultisigOperation.KeyAuthorizationOperation declare const keyAuthorizationRpc: MultisigOperation.KeyAuthorizationRpc declare const operation: MultisigOperation.Operation declare const operationRpc: MultisigOperation.Rpc declare const getHashOptions: MultisigOperation.getHash.Options declare const selectApprovalsOptions: MultisigOperation.selectApprovals.Options declare const serializedKeyAuthorization: Hex.Hex declare const serializeKeyAuthorizationOptions: MultisigOperation.serializeKeyAuthorization.Options declare const serializeTransactionOptions: MultisigOperation.serializeTransaction.Options test('preserves operation kinds during validation', () => { expectTypeOf( MultisigOperation.from(transaction), ).toEqualTypeOf() expectTypeOf( MultisigOperation.from(keyAuthorization), ).toEqualTypeOf() expectTypeOf( MultisigOperation.from(operation), ).toEqualTypeOf() }) test('preserves operation kinds during RPC conversion', () => { expectTypeOf( MultisigOperation.fromRpc(transactionRpc), ).toEqualTypeOf() expectTypeOf( MultisigOperation.fromRpc(keyAuthorizationRpc), ).toEqualTypeOf() expectTypeOf( MultisigOperation.toRpc(transaction), ).toEqualTypeOf() expectTypeOf( MultisigOperation.toRpc(keyAuthorization), ).toEqualTypeOf() expectTypeOf( MultisigOperation.fromRpc(operationRpc), ).toEqualTypeOf() expectTypeOf( MultisigOperation.toRpc(operation), ).toEqualTypeOf() }) test('uses JSON-RPC quantities only in RPC operations', () => { expectTypeOf< MultisigOperation.Operation['config']['version'] >().toEqualTypeOf() expectTypeOf< MultisigOperation.Rpc['config']['version'] >().toEqualTypeOf() }) test('operation helpers return narrow types', async () => { expectTypeOf( MultisigOperation.getHash(getHashOptions), ).toEqualTypeOf() expectTypeOf( await MultisigOperation.selectApprovals(selectApprovalsOptions), ).toEqualTypeOf() expectTypeOf( MultisigOperation.serializeKeyAuthorization( serializedKeyAuthorization, serializeKeyAuthorizationOptions, ), ).toEqualTypeOf() expectTypeOf( MultisigOperation.serializeTransaction( transaction, serializeTransactionOptions, ), ).toEqualTypeOf() })