@codama/dynamic-instructions 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +97 -0
- package/dist/index.browser.cjs +752 -0
- package/dist/index.browser.cjs.map +1 -0
- package/dist/index.browser.mjs +741 -0
- package/dist/index.browser.mjs.map +1 -0
- package/dist/index.node.cjs +752 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.mjs +741 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/index.react-native.mjs +741 -0
- package/dist/index.react-native.mjs.map +1 -0
- package/dist/types/accounts/create-account-meta.d.ts +11 -0
- package/dist/types/accounts/create-account-meta.d.ts.map +1 -0
- package/dist/types/accounts/index.d.ts +3 -0
- package/dist/types/accounts/index.d.ts.map +1 -0
- package/dist/types/accounts/validate-accounts-input.d.ts +9 -0
- package/dist/types/accounts/validate-accounts-input.d.ts.map +1 -0
- package/dist/types/arguments/encode-instruction-arguments.d.ts +13 -0
- package/dist/types/arguments/encode-instruction-arguments.d.ts.map +1 -0
- package/dist/types/arguments/index.d.ts +4 -0
- package/dist/types/arguments/index.d.ts.map +1 -0
- package/dist/types/arguments/resolve-argument-from-custom-resolvers.d.ts +9 -0
- package/dist/types/arguments/resolve-argument-from-custom-resolvers.d.ts.map +1 -0
- package/dist/types/arguments/shared.d.ts +4 -0
- package/dist/types/arguments/shared.d.ts.map +1 -0
- package/dist/types/arguments/validate-arguments-input.d.ts +11 -0
- package/dist/types/arguments/validate-arguments-input.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/instructions-builder.d.ts +18 -0
- package/dist/types/instructions-builder.d.ts.map +1 -0
- package/dist/types/shared/types.d.ts +15 -0
- package/dist/types/shared/types.d.ts.map +1 -0
- package/dist/types/shared/util.d.ts +14 -0
- package/dist/types/shared/util.d.ts.map +1 -0
- package/dist/types/validators.d.ts +16 -0
- package/dist/types/validators.d.ts.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/util.ts","../src/accounts/create-account-meta.ts","../src/validators.ts","../src/accounts/validate-accounts-input.ts","../src/arguments/shared.ts","../src/arguments/encode-instruction-arguments.ts","../src/arguments/validate-arguments-input.ts","../src/arguments/resolve-argument-from-custom-resolvers.ts","../src/instructions-builder.ts"],"names":["StructError","CodamaError","CODAMA_ERROR__UNEXPECTED_NODE_KIND","CODAMA_ERROR__DYNAMIC_CLIENT__ARGUMENT_MISSING","assert","CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_VALIDATE_INPUT","isNode"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import type { NodeKind } from 'codama';\n\n/**\n * Checks if a value is a plain object record (struct-like).\n */\nexport function isObjectRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && Object.getPrototypeOf(value) === Object.prototype;\n}\n\n/** Returns the `NodeKind` of a node or `null`. */\nexport function getMaybeNodeKind(node: unknown): NodeKind | null {\n if (!isObjectRecord(node)) return null;\n return (node as { kind: NodeKind }).kind ?? null;\n}\n\nexport function formatValueType(value: unknown): string {\n if (value === null) return 'null';\n if (Array.isArray(value)) return `array (length ${value.length})`;\n if (value instanceof Uint8Array) return `Uint8Array (length ${value.length})`;\n if (typeof value === 'object') return 'object';\n return typeof value;\n}\n\n/**\n * Serializes a value for use in error messages and diagnostic output.\n * Converts BigInt to strings, always returns a string and never throws.\n */\nexport function safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value, (_key, v: unknown) => (typeof v === 'bigint' ? String(v) : v));\n } catch {\n return `non-serializable ${formatValueType(value)}`;\n }\n}\n","import type {\n AccountsInput,\n ArgumentsInput,\n ResolverFnInput,\n ResolversInput,\n} from '@codama/dynamic-address-resolution';\nimport { isAddressConvertible, resolveInstructionAccountAddress, toAddress } from '@codama/dynamic-address-resolution';\nimport {\n CODAMA_ERROR__DYNAMIC_CLIENT__ARGUMENT_MISSING,\n CODAMA_ERROR__DYNAMIC_CLIENT__INVALID_ARGUMENT_INPUT,\n CODAMA_ERROR__DYNAMIC_CLIENT__UNEXPECTED_ADDRESS_TYPE,\n CODAMA_ERROR__UNEXPECTED_NODE_KIND,\n CodamaError,\n} from '@codama/errors';\nimport type { Address } from '@solana/addresses';\nimport type { AccountMeta } from '@solana/instructions';\nimport { AccountRole } from '@solana/instructions';\nimport { type InstructionAccountNode, type InstructionNode, isNode, type RootNode } from 'codama';\n\nimport type { EitherSigners } from '../shared/types';\nimport { formatValueType, safeStringify } from '../shared/util';\n\ntype ResolvedAccount = {\n address: Address | null;\n optional: boolean;\n role: AccountRole;\n};\n\ntype ResolvedAccountWithAddress = ResolvedAccount & { address: Address };\n\n/**\n * Resolves account addresses and creates AccountMeta for each account in the instruction by evaluating their default values.\n * Handles optional accounts based on the instruction's optionalAccountStrategy.\n * Throws errors if required accounts are missing or cannot be resolved.\n */\nexport async function createAccountMeta<\n TAccounts extends AccountsInput = AccountsInput,\n TArgs extends ArgumentsInput = ArgumentsInput,\n TResolvers extends ResolverFnInput = ResolversInput,\n>(\n root: RootNode,\n ixNode: InstructionNode,\n argumentsInput?: TArgs,\n accountsInput?: TAccounts,\n signers: EitherSigners = [],\n resolversInput?: TResolvers,\n): Promise<AccountMeta[]> {\n const programAddress = toAddress(root.program.publicKey);\n const resolvedAccounts = await Promise.all(\n ixNode.accounts.map<Promise<ResolvedAccount>>(async ixAccountNode => {\n const finalAddress = await resolveInstructionAccountAddress<TAccounts, TArgs, TResolvers>({\n accountsInput,\n argumentsInput,\n ixAccountNode,\n ixNode,\n resolversInput,\n root,\n });\n\n // Optional accounts resolved via \"programId\" optionalAccountStrategy get the program address,\n // which cannot be writable on-chain — downgrade to readonly.\n // E.g. PMP's setData instruction `buffer` account. (isWritable, isOptional and \"programId\" strategy).\n // But when buffer is null it resolves to the program address which cannot be writable, hence must be downgraded to readonly.\n const accountAddressInput = accountsInput?.[ixAccountNode.name];\n const isAccountProvided = accountAddressInput !== undefined && accountAddressInput !== null;\n const role =\n ixAccountNode.isOptional &&\n !isAccountProvided &&\n ixNode.optionalAccountStrategy === 'programId' &&\n finalAddress === programAddress\n ? getReadonlyAccountRole(ixAccountNode, signers)\n : getAccountRole(ixAccountNode, signers);\n\n return {\n address: finalAddress,\n optional: Boolean(ixAccountNode.isOptional),\n role,\n };\n }),\n );\n\n const accountMetas: AccountMeta[] = resolvedAccounts\n // Filter out optional accounts with \"omitted\" strategy (nulls).\n .filter((acc): acc is ResolvedAccountWithAddress => acc.address !== null)\n .map(acc => ({\n address: acc.address,\n role: acc.role,\n }));\n\n // Resolve remaining accounts from argument values\n // https://github.com/codama-idl/codama/blob/main/packages/nodes/docs/InstructionRemainingAccountsNode.md\n for (const remainingNode of ixNode.remainingAccounts ?? []) {\n if (!isNode(remainingNode.value, 'argumentValueNode')) {\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: ['argumentValueNode'],\n kind: remainingNode.value.kind,\n node: remainingNode.value,\n });\n }\n const addresses = argumentsInput?.[remainingNode.value.name];\n\n if (addresses === undefined) {\n // Required remaining accounts must be provided.\n if (!remainingNode.isOptional) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__ARGUMENT_MISSING, {\n argumentName: remainingNode.value.name,\n instructionName: ixNode.name,\n });\n }\n // Optional remaining accounts can be safely omitted.\n continue;\n }\n\n if (!Array.isArray(addresses)) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__INVALID_ARGUMENT_INPUT, {\n argumentName: remainingNode.value.name,\n expectedType: 'Address[]',\n value: safeStringify(addresses),\n });\n }\n const role = getRemainingAccountRole(remainingNode.isSigner, remainingNode.isWritable);\n for (let i = 0; i < addresses.length; i++) {\n const addr: unknown = addresses[i];\n if (!isAddressConvertible(addr)) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__UNEXPECTED_ADDRESS_TYPE, {\n accountName: `${remainingNode.value.name}[${i}]`,\n actualType: formatValueType(addr),\n expectedType: 'Address | PublicKey',\n });\n }\n accountMetas.push({ address: toAddress(addr), role });\n }\n }\n\n return accountMetas;\n}\n\n// TODO: 'either' is treated as signer — this works for Token Program multisig signers,\n// but may need refinement for programs where 'either' accounts are sometimes non-signers.\nfunction getRemainingAccountRole(isSigner?: boolean | 'either', isWritable?: boolean): AccountRole {\n const signer = isSigner === true || isSigner === 'either';\n const writable = isWritable === true;\n if (writable && signer) return AccountRole.WRITABLE_SIGNER;\n if (writable) return AccountRole.WRITABLE;\n if (signer) return AccountRole.READONLY_SIGNER;\n return AccountRole.READONLY;\n}\n\nfunction getAccountRole(acc: InstructionAccountNode, signers: string[] | undefined): AccountRole {\n const isSigner = isSignerAccount(acc, signers ?? []);\n if (acc.isWritable && isSigner) {\n return AccountRole.WRITABLE_SIGNER;\n }\n if (acc.isWritable) {\n return AccountRole.WRITABLE;\n }\n if (isSigner) {\n return AccountRole.READONLY_SIGNER;\n }\n return AccountRole.READONLY;\n}\n\nfunction getReadonlyAccountRole(acc: InstructionAccountNode, signers: string[] | undefined): AccountRole {\n const isSigner = isSignerAccount(acc, signers ?? []);\n return isSigner ? AccountRole.READONLY_SIGNER : AccountRole.READONLY;\n}\n\nfunction isSignerAccount(acc: InstructionAccountNode, signers: string[]) {\n if (acc.isSigner === 'either') {\n return signers.includes(acc.name);\n }\n return acc.isSigner === true;\n}\n","import { isPublicKeyLike } from '@codama/dynamic-address-resolution';\nimport { isAddress } from '@solana/addresses';\nimport { getUtf8Encoder } from '@solana/codecs';\nimport type {\n ArrayTypeNode,\n CountNode,\n DefinedTypeNode,\n EnumVariantTypeNode,\n InstructionAccountNode,\n InstructionArgumentNode,\n SetTypeNode,\n TypeNode,\n} from 'codama';\nimport {\n array,\n boolean,\n define,\n intersection,\n number,\n object,\n size,\n string,\n Struct,\n StructError,\n tuple,\n} from 'superstruct';\n\nimport { formatValueType, getMaybeNodeKind, safeStringify } from './shared/util';\n\ntype StructUnknown = Struct<unknown, unknown>;\n\n/**\n * Creates a superstruct validator for InstructionAccountNodes.\n *\n * if node is optional, then validate only if it's provided.\n * if node has defaultValue, then consider it as optional and validate only if it's provided because it will be resolved from defaultValue.\n */\nexport function createIxAccountsValidator(ixAccountNodes: InstructionAccountNode[]): StructUnknown {\n const shape = ixAccountNodes.reduce<Record<string, StructUnknown>>((acc, node) => {\n acc[node.name] = node.isOptional || node.defaultValue ? OptionalSolanaAddressValidator : SolanaAddressValidator;\n return acc;\n }, {});\n return object(shape) as StructUnknown;\n}\n\n/**\n * Creates a superstruct validator for instruction InstructionArgumentNodes.\n */\nexport function createIxArgumentsValidator(\n ixNodeName: string,\n ixArgumentNodes: InstructionArgumentNode[],\n definedTypes: DefinedTypeNode[],\n): StructUnknown {\n const shape = ixArgumentNodes.reduce<Record<string, StructUnknown>>((acc, argumentNode, index) => {\n if (!argumentNode.type) {\n throw new Error(`Argument ${argumentNode.name} of instruction ${ixNodeName} does not have a type`);\n }\n acc[argumentNode.name] = createValidatorForTypeNode(\n `${ixNodeName}_${argumentNode.name}_${index}`,\n argumentNode.type,\n definedTypes,\n );\n return acc;\n }, {});\n return object(shape) as StructUnknown;\n}\n\nfunction createValidatorForTypeNode(nodeName: string, node: TypeNode, definedTypes: DefinedTypeNode[]): StructUnknown {\n if (!node) {\n throw new Error(\n `Node ${nodeName} is not defined. ${definedTypes.length} defined types were provided: ${definedTypes.map(t => t.name).join(', ')}`,\n );\n }\n switch (node.kind) {\n case 'arrayTypeNode': {\n return ArrayValidator(`${nodeName}_array`, node, definedTypes);\n }\n case 'booleanTypeNode': {\n return boolean() as StructUnknown;\n }\n case 'numberTypeNode': {\n const format = node.format;\n if (format === 'u64' || format === 'u128' || format === 'i64' || format === 'i128') {\n return NumberOrBigintValidator;\n }\n return number() as StructUnknown;\n }\n case 'publicKeyTypeNode': {\n return SolanaAddressValidator;\n }\n case 'setTypeNode': {\n // array of unique items\n return intersection([\n UniqueItemsValidator,\n ArrayValidator(`${nodeName}_set`, node, definedTypes),\n ]) as StructUnknown;\n }\n case 'stringTypeNode': {\n return string() as StructUnknown;\n }\n case 'fixedSizeTypeNode': {\n // fixedSizeTypeNode wraps an inner type and constrains its byte size\n if (node.type.kind === 'stringTypeNode') {\n // For fixed-size strings, validate that UTF-8 bytes fit within the size\n return StringValidatorForFixedSize(node.size);\n }\n if (node.type.kind === 'bytesTypeNode') {\n // For fixed-size bytes, validate exact byte length\n return BytesWithSizeValidator(node.size);\n }\n // For other types, delegate to the inner type validator\n // The size constraint is handled during encoding\n return createValidatorForTypeNode(`${nodeName}_fixed_size`, node.type, definedTypes);\n }\n case 'bytesTypeNode': {\n return BytesLikeValidator;\n }\n case 'dateTimeTypeNode': {\n return createValidatorForTypeNode(`${nodeName}_date_time`, node.number, definedTypes);\n }\n case 'definedTypeLinkNode': {\n const definedType = definedTypes.find(d => d.name === node.name);\n if (!definedType) {\n throw new Error(`Undefined type: ${node.name} ${node.kind}`);\n }\n return createValidatorForTypeNode(`${nodeName}_defined_type`, definedType.type, definedTypes);\n }\n case 'mapTypeNode': {\n const keyValidator = createValidatorForTypeNode(\n `${nodeName}_map_key_${node.key.kind}`,\n node.key,\n definedTypes,\n );\n const valueValidator = createValidatorForTypeNode(\n `${nodeName}_map_value_${node.value.kind}`,\n node.value,\n definedTypes,\n );\n const sizeValidator = MapCountValidator(node.count);\n const keyValueValidator = KeyValueValidator(nodeName, keyValidator, valueValidator);\n if (sizeValidator) {\n return intersection([keyValueValidator, sizeValidator]) as StructUnknown;\n }\n return keyValueValidator;\n }\n case 'structTypeNode': {\n const structShape = node.fields.reduce<Record<string, StructUnknown>>((acc, field) => {\n acc[field.name] = createValidatorForTypeNode(\n `${nodeName}_struct_${field.name}`,\n field.type,\n definedTypes,\n );\n return acc;\n }, {});\n return object(structShape) as StructUnknown;\n }\n case 'tupleTypeNode': {\n const validators = node.items.map((typeNode, index) =>\n createValidatorForTypeNode(`${nodeName}_tuple${typeNode.kind}_${index}`, typeNode, definedTypes),\n );\n return tuple(validators as [StructUnknown, ...StructUnknown[]]) as StructUnknown;\n }\n case 'zeroableOptionTypeNode': {\n const innerValidator = createValidatorForTypeNode(\n `${nodeName}_zeroable_option_item`,\n node.item,\n definedTypes,\n );\n return ZeroableOptionValidator(`${nodeName}_zeroable_option`, innerValidator);\n }\n case 'optionTypeNode': {\n // TODO: Do we need to validate node.fixed and node.prefix of OptionTypeNode?\n const SomeValueValidator = createValidatorForTypeNode(`${nodeName}_option_item`, node.item, definedTypes);\n return OptionValueValidator(`${nodeName}_option`, SomeValueValidator);\n }\n case 'remainderOptionTypeNode': {\n const innerValidator = RemainderOptionTypeItemValidator(\n `${nodeName}_remainder_option_item`,\n node.item,\n definedTypes,\n );\n return OptionValueValidator(`${nodeName}_remainder_option`, innerValidator);\n }\n case 'hiddenPrefixTypeNode':\n case 'hiddenSuffixTypeNode':\n case 'sentinelTypeNode':\n case 'postOffsetTypeNode':\n case 'preOffsetTypeNode':\n case 'sizePrefixTypeNode': {\n return createValidatorForTypeNode(`${nodeName}_size_prefix`, node.type, definedTypes);\n }\n case 'enumTypeNode': {\n return EnumVariantValidator(nodeName, node.variants, definedTypes);\n }\n case 'amountTypeNode': {\n return AmountTypeValidator(nodeName);\n }\n case 'solAmountTypeNode': {\n return AmountTypeValidator(nodeName);\n }\n default: {\n node['kind'] satisfies never;\n throw new Error(`Validator for TypeNode \"${nodeName}\" kind: ${getMaybeNodeKind(node)} is not implemented!`);\n }\n }\n}\n\nfunction RemainderOptionTypeItemValidator(\n nodeName: string,\n itemNode: TypeNode,\n definedTypes: DefinedTypeNode[],\n): StructUnknown {\n if (itemNode.kind === 'fixedSizeTypeNode' && itemNode.type.kind === 'stringTypeNode') {\n // For fixed-size strings in remainder options, accept any string\n return StringValidatorForFixedSize(itemNode.size);\n }\n\n if (itemNode.kind === 'definedTypeLinkNode') {\n const definedType = definedTypes.find(d => d.name === itemNode.name);\n if (definedType?.type.kind === 'fixedSizeTypeNode' && definedType.type.type.kind === 'stringTypeNode') {\n return StringValidatorForFixedSize(definedType.type.size);\n }\n }\n\n return createValidatorForTypeNode(nodeName, itemNode, definedTypes);\n}\n\nfunction StringValidatorForFixedSize(maxSize: number): StructUnknown {\n return define(`StringForFixedSize_max_${maxSize}`, (value: unknown) => {\n if (typeof value !== 'string') {\n return `Expected a string, received: ${formatValueType(value)}`;\n }\n const encoder = getUtf8Encoder();\n const bytes = encoder.encode(value);\n return (\n bytes.length <= maxSize ||\n `String exceeds max size: ${bytes.length} bytes (UTF-8), limit is ${maxSize} bytes`\n );\n }) as StructUnknown;\n}\n\n/**\n * Validator for enum variants.\n * Handles both scalar enums and enums with data.\n */\nfunction EnumVariantValidator(\n nodeName: string,\n variants: EnumVariantTypeNode[],\n definedTypes: DefinedTypeNode[],\n): StructUnknown {\n const variantMap = new Map<string, EnumVariantTypeNode>(variants.map(v => [v.name, v]));\n const variantNames = Array.from(variantMap.keys());\n\n // Eagerly build per-variant payload validators for struct and tuple variants\n const variantValidators = new Map<string, StructUnknown>();\n for (const variant of variants) {\n if (variant.kind === 'enumStructVariantTypeNode') {\n variantValidators.set(\n variant.name,\n createValidatorForTypeNode(`${nodeName}_${variant.name}`, variant.struct, definedTypes),\n );\n } else if (variant.kind === 'enumTupleVariantTypeNode') {\n variantValidators.set(\n variant.name,\n createValidatorForTypeNode(`${nodeName}_${variant.name}`, variant.tuple, definedTypes),\n );\n }\n }\n\n return define(`${nodeName}_EnumVariant`, (value: unknown) => {\n // Scalar enum: plain string variant name (e.g. 'foo', 'bar')\n if (typeof value === 'string')\n return (\n variantMap.has(value) || `Invalid enum value \"${value}\". Expected one of: ${variantNames.join(', ')}`\n );\n\n // Data enum variant: object with __kind (e.g. { __kind: 'tokenTransfer', amount: 1000 })\n if (typeof value === 'object' && value !== null && '__kind' in value) {\n const kind = (value as Record<string, unknown>)['__kind'];\n if (typeof kind !== 'string') {\n return `Expected __kind to be a string, received: ${formatValueType(kind)}`;\n }\n const variant = variantMap.get(kind);\n if (!variant) {\n return `Invalid enum variant \"${kind}\". Expected one of: ${variantNames.join(', ')}`;\n }\n\n if (variant.kind === 'enumEmptyVariantTypeNode') {\n return true;\n }\n\n // Validations of enum payloads\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { __kind: _, ...rest } = value as Record<string, unknown>;\n const payloadValidator = variantValidators.get(kind);\n if (!payloadValidator) {\n return true;\n }\n\n if (variant.kind === 'enumStructVariantTypeNode') {\n const [structError] = payloadValidator.validate(rest);\n return structError ? formatErrorForEnumTypeNode(kind, structError) : true;\n }\n\n if (variant.kind === 'enumTupleVariantTypeNode') {\n const fields = (rest as { fields?: unknown }).fields;\n const [structError] = payloadValidator.validate(fields);\n return structError ? formatErrorForEnumTypeNode(kind, structError) : true;\n }\n }\n\n return `Expected an enum variant (string or object with __kind), received: ${formatValueType(value)}`;\n }) as StructUnknown;\n}\n\nfunction formatErrorForEnumTypeNode(enumVariantKind: string, error: StructError) {\n const failures = error.failures();\n const first = failures?.[0];\n if (first) {\n return `Enum variant \"${enumVariantKind}\" has invalid \"${String(first.key)}\"`;\n }\n return `Enum variant \"${enumVariantKind}\" has invalid payload`;\n}\n\nconst SolanaAddressValidator: StructUnknown = /* @__PURE__ */ define('SolanaAddress', (value: unknown) => {\n if (typeof value === 'string') {\n return isAddress(value) || `Expected a valid Solana address (base58), received string: \"${value}\"`;\n }\n if (isPublicKeyLike(value)) {\n return isAddress(value.toBase58()) || 'Expected a valid Solana address, received an invalid PublicKey';\n }\n return `Expected a Solana address (base58 string or PublicKey), received: ${formatValueType(value)}`;\n});\n\nconst OptionalSolanaAddressValidator: StructUnknown = /* @__PURE__ */ define(\n 'OptionalSolanaAddress',\n (value: unknown) => {\n if (value === undefined || value === null) return true;\n const [error] = SolanaAddressValidator.validate(value);\n if (!error) return true;\n return error.failures()[0]?.message ?? 'Expected a valid Solana address or null/undefined';\n },\n);\n\nconst NumberOrBigintValidator: StructUnknown = /* @__PURE__ */ define('NumberOrBigint', (value: unknown) => {\n if (typeof value === 'number') {\n return Number.isSafeInteger(value) || `Expected a safe integer, received unsafe number: ${value}`;\n }\n if (typeof value === 'bigint') return true;\n return `Expected a number or bigint, received: ${formatValueType(value)}`;\n});\n\nconst BytesLikeValidator: StructUnknown = /* @__PURE__ */ define('BytesLike', (value: unknown) => {\n if (value instanceof Uint8Array) return true;\n if (!Array.isArray(value)) {\n return `Expected a Uint8Array or number[] (bytes 0-255), received: ${formatValueType(value)}`;\n }\n const invalidIndex = value.findIndex(n => typeof n !== 'number' || !Number.isInteger(n) || n < 0 || n > 255);\n if (invalidIndex !== -1) {\n return `Expected byte values (integers 0-255), invalid element at index ${invalidIndex}: ${String(value[invalidIndex])}`;\n }\n return true;\n});\n\n/**\n * Validator for bytes that must be exactly a specific size.\n * Used for fixedSizeTypeNode wrapping bytesTypeNode.\n */\nfunction BytesWithSizeValidator(exactSize: number): StructUnknown {\n return define(`BytesWithSize_${exactSize}`, (value: unknown) => {\n if (value instanceof Uint8Array) {\n return value.length === exactSize || `Expected exactly ${exactSize} bytes, received ${value.length} bytes`;\n }\n if (!Array.isArray(value)) {\n return `Expected a Uint8Array or number[] of exactly ${exactSize} bytes, received: ${formatValueType(value)}`;\n }\n if (value.length !== exactSize) {\n return `Expected exactly ${exactSize} bytes, received ${value.length} elements`;\n }\n const invalidIndex = value.findIndex(n => typeof n !== 'number' || !Number.isInteger(n) || n < 0 || n > 255);\n if (invalidIndex !== -1) {\n return `Expected byte values (integers 0-255), invalid element at index ${invalidIndex}: ${String(value[invalidIndex])}`;\n }\n return true;\n }) as StructUnknown;\n}\n\n// Validates value only if it is not null or undefined (i.e. if it's provided).\n// SomeValueValidator validates the provided value (i.e. Some(value)).\nfunction OptionValueValidator(name: string, SomeValueValidator: StructUnknown): StructUnknown {\n return define(`${name}_OptionValueValidator`, (value: unknown) => {\n if (value === null || value === undefined) return true;\n const [error] = SomeValueValidator.validate(value);\n if (!error) return true;\n return error.failures()[0]?.message ?? 'Invalid value for optional field';\n }) as StructUnknown;\n}\n\n// Validates zeroable option: null is valid, otherwise validates the inner validator.\nfunction ZeroableOptionValidator(name: string, innerValidator: StructUnknown): StructUnknown {\n return define(name, (value: unknown) => {\n if (value == null) return true;\n const [error] = innerValidator.validate(value);\n if (!error) return true;\n return error.failures()[0]?.message ?? 'Expected a valid value or null for zeroable option';\n }) as StructUnknown;\n}\n\n// Checks that all items in the array are unique.\nconst UniqueItemsValidator: StructUnknown = /* @__PURE__ */ define('UniqueItems', (value: unknown) => {\n if (!Array.isArray(value)) {\n return `Expected an array with unique items, received: ${formatValueType(value)}`;\n }\n\n const unique = new Map<string, number>();\n for (let i = 0; i < value.length; i++) {\n const key = safeStringify(value[i]);\n const index = unique.get(key);\n if (index !== undefined) {\n return `Expected all items to be unique, found duplicate at indices ${index} and ${i}`;\n }\n unique.set(key, i);\n }\n return true;\n}) as StructUnknown;\n\n// Validates every key of an object according to KeyValidator.\n// Validates every value of an object according to ValueValidator.\n// Used in MapTypeNode, where the keys and values are of the same type.\nfunction KeyValueValidator(name: string, KeyValidator: StructUnknown, ValueValidator: StructUnknown): StructUnknown {\n return define(`${name}_KeyValueValidator`, (value: unknown) => {\n if (typeof value !== 'object' || value === null) {\n return `Expected a map (object), received: ${formatValueType(value)}`;\n }\n const record = value as Record<string, unknown>;\n const invalidKeys: string[] = [];\n const invalidValues: string[] = [];\n for (const key of Object.keys(record)) {\n if (KeyValidator.validate(key)[0]) invalidKeys.push(key);\n if (ValueValidator.validate(record[key])[0]) invalidValues.push(key);\n }\n if (!invalidKeys.length && !invalidValues.length) return true;\n const parts: string[] = [];\n if (invalidKeys.length) parts.push(`invalid keys: ${invalidKeys.join(', ')}`);\n if (invalidValues.length) parts.push(`invalid values: ${invalidValues.join(', ')}`);\n return `Map validation failed: ${parts.join('; ')}`;\n }) as StructUnknown;\n}\n\nfunction MapCountValidator(node: CountNode): StructUnknown | null {\n switch (node.kind) {\n case 'fixedCountNode':\n return KeysLengthValidator(node.value);\n case 'remainderCountNode':\n case 'prefixedCountNode':\n return null; // the number of items is unknown or arbitrary, like vec![]\n default:\n throw new Error(`Unsupported map count type: ${getMaybeNodeKind(node)}`);\n }\n}\n\n// Validates the number of keys in an object\n// Can be used in MapTypeNode with \"fixed\" CountNode type\nfunction KeysLengthValidator(count: number): StructUnknown {\n return define(`KeysLengthValidator_len_${count}`, (value: unknown) => {\n if (typeof value !== 'object' || value === null) {\n return `Expected a map with exactly ${count} entries, received: ${formatValueType(value)}`;\n }\n const actual = Object.keys(value).length;\n return actual === count || `Expected exactly ${count} map entries, received ${actual}`;\n }) as StructUnknown;\n}\n\n// Handles both fixed-size and variable-size arrays\nfunction ArrayValidator(\n nodeName: string,\n node: ArrayTypeNode | SetTypeNode,\n definedTypes: DefinedTypeNode[],\n): StructUnknown {\n // First define a validator for every array item\n const itemValidator = createValidatorForTypeNode(nodeName, node.item, definedTypes);\n // Then validate CountNode representing array size:\n // https://github.com/codama-idl/codama/blob/main/packages/nodes/docs/typeNodes/ArrayTypeNode.md\n switch (node.count.kind) {\n case 'fixedCountNode': {\n return size(array(itemValidator), node.count.value) as StructUnknown;\n }\n case 'remainderCountNode':\n case 'prefixedCountNode': {\n return array(itemValidator) as StructUnknown;\n }\n default: {\n // This should be unreachable with the current `CountNode` union but helps\n // guard against future Codama expansions.\n throw new Error(`Node: ${nodeName}. Unsupported array count type`);\n }\n }\n}\n\n/**\n * Validator for amountTypeNode and solAmountTypeNode.\n * Accepts number, bigint.\n */\nfunction AmountTypeValidator(nodeName: string): StructUnknown {\n return define(`AmountType_${nodeName}`, (value: unknown) => {\n if (typeof value === 'number') {\n return Number.isSafeInteger(value) || `Expected a safe integer, received unsafe number: ${value}`;\n }\n if (typeof value === 'bigint') {\n return true;\n }\n return `Expected a number or bigint, received: ${formatValueType(value)}`;\n }) as StructUnknown;\n}\n","import type { AccountsInput } from '@codama/dynamic-address-resolution';\nimport {\n CODAMA_ERROR__DYNAMIC_CLIENT__ACCOUNT_MISSING,\n CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_VALIDATE_INPUT,\n CODAMA_ERROR__DYNAMIC_CLIENT__INVALID_ACCOUNT_ADDRESS,\n CodamaError,\n} from '@codama/errors';\nimport { camelCase, type InstructionNode } from 'codama';\nimport { assert, StructError } from 'superstruct';\n\nimport { safeStringify } from '../shared/util';\nimport { createIxAccountsValidator } from '../validators';\n\n/**\n * Creates a validation function for InstructionAccountNodes.\n * Pre-built superstruct validator ensures all required accounts are provided and have valid addresses.\n * Skips validation for instructions without accounts.\n */\nexport function createAccountsInputValidator(ixNode: InstructionNode) {\n const validator = ixNode.accounts.length ? createIxAccountsValidator(ixNode.accounts) : null;\n\n return (accountsInput: AccountsInput = {}) => {\n if (!validator) return;\n\n try {\n assert(accountsInput, validator);\n } catch (error) {\n if (error instanceof StructError) {\n const key = error.key as string;\n const value = error.value as unknown;\n if (value == null) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__ACCOUNT_MISSING, {\n accountName: camelCase(key),\n instructionName: ixNode.name,\n });\n } else {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__INVALID_ACCOUNT_ADDRESS, {\n accountName: camelCase(key),\n value: safeStringify(value),\n });\n }\n }\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_VALIDATE_INPUT, {\n cause: error,\n message: 'Unexpected validation error',\n });\n }\n };\n}\n","import { OPTIONAL_NODE_KINDS } from '@codama/dynamic-address-resolution';\nimport type { InstructionArgumentNode } from 'codama';\n\nexport function isOmittedArgument(node: InstructionArgumentNode) {\n return node.defaultValueStrategy === 'omitted';\n}\n\nexport function isOptionalArgument(ixArgumentNode: InstructionArgumentNode, input: unknown) {\n return OPTIONAL_NODE_KINDS.includes(ixArgumentNode.type.kind) && (input === null || input === undefined);\n}\n","import {\n type ArgumentsInput,\n createCodecInputTransformer,\n createDefaultValueEncoderVisitor,\n DEFAULT_VALUE_ENCODER_SUPPORTED_NODE_KINDS,\n} from '@codama/dynamic-address-resolution';\nimport { getNodeCodec, type ReadonlyUint8Array } from '@codama/dynamic-codecs';\nimport {\n CODAMA_ERROR__DYNAMIC_CLIENT__ARGUMENT_MISSING,\n CODAMA_ERROR__DYNAMIC_CLIENT__DEFAULT_VALUE_MISSING,\n CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_ENCODE_ARGUMENT,\n CODAMA_ERROR__UNEXPECTED_NODE_KIND,\n CodamaError,\n} from '@codama/errors';\nimport { type Codec, mergeBytes } from '@solana/codecs';\nimport type { InstructionNode, RootNode } from 'codama';\nimport { visitOrElse } from 'codama';\n\nimport { isOmittedArgument, isOptionalArgument } from './shared';\n\n/**\n * Encodes all instruction arguments into a single byte array.\n * Iterates over each InstructionArgumentNode and encodes based on its category:\n *\n * Omitted arguments use their default value.\n * Optional arguments are encoded as null.\n * Required arguments are transformed from user input and then encoded.\n */\nexport function encodeInstructionArguments<TArgs extends ArgumentsInput = ArgumentsInput>(\n root: RootNode,\n ix: InstructionNode,\n argumentsInput?: TArgs,\n): ReadonlyUint8Array {\n const chunks = ix.arguments.map(ixArgumentNode => {\n const input = argumentsInput?.[ixArgumentNode.name];\n const nodeCodec = getNodeCodec([root, root.program, ix, ixArgumentNode]);\n if (isOmittedArgument(ixArgumentNode)) {\n return encodeOmittedArgument(ix, ixArgumentNode, nodeCodec);\n } else if (isOptionalArgument(ixArgumentNode, input)) {\n return encodeOptionalArgument(ix, ixArgumentNode, nodeCodec);\n } else {\n return encodeRequiredArgument(root, ix, ixArgumentNode, input, nodeCodec);\n }\n });\n\n return mergeBytes(chunks.map(chunk => Uint8Array.from(chunk)));\n}\n\nfunction encodeOmittedArgument(\n ix: InstructionNode,\n ixArgumentNode: InstructionNode['arguments'][number],\n nodeCodec: Codec<unknown>,\n): ReadonlyUint8Array {\n const defaultValue = ixArgumentNode.defaultValue;\n if (defaultValue === undefined) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__DEFAULT_VALUE_MISSING, {\n argumentName: ixArgumentNode.name,\n instructionName: ix.name,\n });\n }\n\n const visitor = createDefaultValueEncoderVisitor(nodeCodec);\n return visitOrElse(defaultValue, visitor, node => {\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: [...DEFAULT_VALUE_ENCODER_SUPPORTED_NODE_KINDS],\n kind: node.kind,\n node,\n });\n });\n}\n\nfunction encodeOptionalArgument(\n ix: InstructionNode,\n ixArgumentNode: InstructionNode['arguments'][number],\n nodeCodec: Codec<unknown>,\n): ReadonlyUint8Array {\n try {\n return nodeCodec.encode(null);\n } catch (error) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_ENCODE_ARGUMENT, {\n argumentName: ixArgumentNode.name,\n cause: error,\n instructionName: ix.name,\n });\n }\n}\n\nfunction encodeRequiredArgument(\n root: RootNode,\n ix: InstructionNode,\n ixArgumentNode: InstructionNode['arguments'][number],\n input: ArgumentsInput[string],\n nodeCodec: Codec<unknown>,\n): ReadonlyUint8Array {\n if (input === undefined) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__ARGUMENT_MISSING, {\n argumentName: ixArgumentNode.name,\n instructionName: ix.name,\n });\n }\n\n const transformer = createCodecInputTransformer(ixArgumentNode.type, root, {\n bytesEncoding: 'base16',\n });\n const transformedInput = transformer(input);\n try {\n return nodeCodec.encode(transformedInput);\n } catch (error) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_ENCODE_ARGUMENT, {\n argumentName: ixArgumentNode.name,\n cause: error,\n instructionName: ix.name,\n });\n }\n}\n","import type { ArgumentsInput } from '@codama/dynamic-address-resolution';\nimport { CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_VALIDATE_INPUT, CodamaError } from '@codama/errors';\nimport type { InstructionNode, RootNode } from 'codama';\nimport type { Failure } from 'superstruct';\nimport { assert, StructError } from 'superstruct';\n\nimport { safeStringify } from '../shared/util';\nimport { createIxArgumentsValidator } from '../validators';\nimport { isOmittedArgument } from './shared';\n\n/**\n * Creates a cached validation function for InstructionArgumentNodes.\n *\n * Skips \"omitted\" arguments.\n * Arguments with resolverValueNode defaults are expected to use optionTypeNode and NOT filtered out here.\n * Optional validation allows undefined so custom resolvers will fill default values after validation.\n */\nexport function createArgumentsInputValidator(root: RootNode, ixNode: InstructionNode) {\n const requiredArguments = ixNode.arguments.filter(arg => arg?.defaultValueStrategy !== 'omitted');\n const validator = requiredArguments.length\n ? createIxArgumentsValidator(ixNode.name, requiredArguments, root.program.definedTypes)\n : null;\n\n return (argumentsInput: ArgumentsInput = {}) => {\n // Ensure arguments with \"omitted\" defaultValueStrategy are not provided in argumentsInput.\n validateOmittedArguments(ixNode, argumentsInput);\n\n if (!validator) return;\n\n const filteredInput = filterRemainingAccountArguments(ixNode, argumentsInput);\n\n try {\n assert(filteredInput, validator);\n } catch (error) {\n if (!(error instanceof StructError)) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_VALIDATE_INPUT, {\n cause: error,\n message: 'Unexpected validation error',\n });\n }\n const formattedMessage = error.failures().map(failure => {\n const fieldPath = formatFailurePath(failure);\n const value = formatFailureValue(failure.value);\n return `Invalid argument \"${fieldPath}\", value: ${value}. ${failure.message}\\n`;\n });\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_VALIDATE_INPUT, {\n cause: error,\n message: formattedMessage.join(''),\n });\n }\n };\n}\n\n/**\n * Formats a full dotted path from failure, e.g. \"command\", \"innerStruct.pubkey\", \"enumsArray[1]\"\n */\nfunction formatFailurePath(failure: Failure): string {\n const path = failure.path;\n if (!path || path.length === 0) return String(failure.key ?? '');\n return path\n .map((segment, i) => {\n if (typeof segment === 'number') {\n return `[${segment}]`;\n }\n return `${i === 0 ? '' : '.'}${String(segment)}`;\n })\n .join('');\n}\n\n/**\n * Formats failure values for error messages, truncating long values and stringifying objects.\n */\nconst MAX_VALUE_LENGTH = 120;\nfunction formatFailureValue(value: unknown): string {\n const raw = typeof value === 'object' ? safeStringify(value) : String(value as unknown);\n return raw.length > MAX_VALUE_LENGTH ? `${raw.slice(0, MAX_VALUE_LENGTH)}...` : raw;\n}\n\n/**\n * Ensures that arguments with \"omitted\" defaultValueStrategy are not provided by the user (e.g. discriminator).\n */\nfunction validateOmittedArguments(ixNode: InstructionNode, argumentsInput: ArgumentsInput = {}) {\n ixNode.arguments.filter(isOmittedArgument).forEach(ixArgumentNode => {\n if (Object.hasOwn(argumentsInput, ixArgumentNode.name)) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_VALIDATE_INPUT, {\n message: 'Omitted argument must not be provided',\n });\n }\n });\n}\n\nfunction getRemainingAccountArgNames(ixNode: InstructionNode): string[] {\n return (ixNode.remainingAccounts ?? [])\n .filter(node => node.value.kind === 'argumentValueNode')\n .map(node => node.value.name);\n}\n\n/**\n * Filters out remaining account argument names from the arguments input.\n * So superstruct's object() doesn't reject them as extra keys.\n */\nfunction filterRemainingAccountArguments(ixNode: InstructionNode, argumentsInput: ArgumentsInput): ArgumentsInput {\n const remainingAccountArgNames = getRemainingAccountArgNames(ixNode);\n if (!remainingAccountArgNames.length) {\n return argumentsInput;\n }\n\n const remainingAccountArgNamesSet = new Set(remainingAccountArgNames);\n return Object.fromEntries(Object.entries(argumentsInput).filter(([key]) => !remainingAccountArgNamesSet.has(key)));\n}\n","import type {\n AccountsInput,\n ArgumentsInput,\n ResolverFn,\n ResolverFnInput,\n ResolversInput,\n} from '@codama/dynamic-address-resolution';\nimport { CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_EXECUTE_RESOLVER, CodamaError } from '@codama/errors';\nimport type { InstructionNode } from 'codama';\nimport { isNode } from 'codama';\n\nimport { isOmittedArgument } from './shared';\n\n/**\n * Resolves argument defaults from user-provided resolvers.\n * For each argument that has a ResolverValueNode and is not provided by argumentsInput,\n * try to invoke the corresponding resolver function and fill ArgumentsInput with the resolved values.\n */\nexport async function resolveArgumentDefaultsFromCustomResolvers<\n TArgs extends ArgumentsInput = ArgumentsInput,\n TAccounts extends AccountsInput = AccountsInput,\n TResolvers extends ResolverFnInput = ResolversInput,\n>(\n ixNode: InstructionNode,\n argumentsInput?: TArgs,\n accountsInput?: TAccounts,\n resolversInput?: TResolvers,\n): Promise<TArgs> {\n const resolvedArgumentsInput: Record<string, unknown> = { ...argumentsInput };\n\n const allArguments = [...ixNode.arguments, ...(ixNode.extraArguments ?? [])];\n for (const argumentNode of allArguments) {\n if (resolvedArgumentsInput[argumentNode.name] !== undefined) continue;\n if (isOmittedArgument(argumentNode)) continue;\n if (!isNode(argumentNode.defaultValue, 'resolverValueNode')) continue;\n\n const resolverFn: ResolverFn<TArgs, TAccounts> | undefined = resolversInput?.[argumentNode.defaultValue.name];\n // If no resolver provided — skip and let the encoding step handle it:\n // Optional arguments will be encoded as none\n // Required arguments will emit error\n if (!resolverFn) continue;\n\n try {\n resolvedArgumentsInput[argumentNode.name] = await resolverFn(\n resolvedArgumentsInput as TArgs,\n (accountsInput ?? {}) as TAccounts,\n );\n } catch (error) {\n throw new CodamaError(CODAMA_ERROR__DYNAMIC_CLIENT__FAILED_TO_EXECUTE_RESOLVER, {\n cause: error,\n resolverName: argumentNode.defaultValue.name,\n targetKind: 'instructionArgumentNode',\n targetName: argumentNode.name,\n });\n }\n }\n\n return resolvedArgumentsInput as TArgs;\n}\n","import type {\n AccountsInput,\n ArgumentsInput,\n ResolverFnInput,\n ResolversInput,\n} from '@codama/dynamic-address-resolution';\nimport { address } from '@solana/addresses';\nimport type { InstructionNode, RootNode } from 'codama';\n\nimport { createAccountMeta, createAccountsInputValidator } from './accounts';\nimport {\n createArgumentsInputValidator,\n encodeInstructionArguments,\n resolveArgumentDefaultsFromCustomResolvers,\n} from './arguments';\nimport type { EitherSigners, InstructionsBuilderFn } from './shared/types';\n\n/**\n * Creates an async instruction builder function for a given `InstructionNode`.\n *\n * The returned function validates arguments and accounts against the Codama schema,\n * resolves custom resolver defaults, encodes arguments into a data buffer,\n * and assembles the final `Instruction` with account metas and program address.\n *\n * @example\n * ```ts\n * const build = createInstructionsBuilder(root, ixNode);\n * const instruction = await build(args, accounts, signers, resolvers);\n * ```\n */\nexport function createInstructionsBuilder<\n TArgs extends ArgumentsInput = ArgumentsInput,\n TAccounts extends AccountsInput = AccountsInput,\n TSigners extends EitherSigners = EitherSigners,\n TResolvers extends ResolverFnInput = ResolversInput,\n>(root: RootNode, ixNode: InstructionNode): InstructionsBuilderFn<TArgs, TAccounts, TSigners, TResolvers> {\n const programAddress = address(root.program.publicKey);\n const validateArguments = createArgumentsInputValidator(root, ixNode);\n const validateAccounts = createAccountsInputValidator(ixNode);\n\n return async (argumentsInput, accountsInput, signers, resolversInput) => {\n // Validate arguments according to Codama schema.\n validateArguments(argumentsInput);\n\n // Ensure required accounts are present and validate provided pubkey addresses.\n validateAccounts(accountsInput);\n\n // Resolve arguments that depend on custom resolvers.\n const enrichedArgumentsInput = await resolveArgumentDefaultsFromCustomResolvers<TArgs, TAccounts, TResolvers>(\n ixNode,\n argumentsInput,\n accountsInput,\n resolversInput,\n );\n\n // Encode arguments into buffer.\n const argumentsData = encodeInstructionArguments<TArgs>(root, ixNode, enrichedArgumentsInput);\n\n const accountsData = await createAccountMeta<TAccounts, TArgs, TResolvers>(\n root,\n ixNode,\n enrichedArgumentsInput,\n accountsInput,\n signers,\n resolversInput,\n );\n\n return {\n accounts: accountsData,\n data: argumentsData,\n programAddress,\n };\n };\n}\n"]}
|