@hsuite/smart-engines-sdk 3.0.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/CHANGELOG.md +20 -0
- package/README.md +373 -0
- package/dist/index.d.ts +2881 -0
- package/dist/index.js +4350 -0
- package/dist/index.js.map +1 -0
- package/dist/nestjs/index.d.ts +2341 -0
- package/dist/nestjs/index.js +3338 -0
- package/dist/nestjs/index.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/_vendor/chain.schema.ts","../../src/_vendor/network-types.ts","../../src/_vendor/capabilities.schema.ts","../../src/_vendor/account.schema.ts","../../src/_vendor/sovereignty.schema.ts","../../src/_vendor/transaction.schema.ts","../../src/_vendor/token.schema.ts","../../src/_vendor/api.schema.ts","../../src/discovery/mirror-node.ts","../../src/discovery/validator-discovery.ts","../../src/auth/validator-auth.ts","../../src/http/index.ts","../../src/subscription/index.ts","../../src/tss/index.ts","../../src/ipfs/index.ts","../../src/transactions/index.ts","../../src/snapshots/index.ts","../../src/settlement/index.ts","../../src/client.ts","../../src/gateway/routing/index.ts","../../src/gateway/domains/index.ts","../../src/gateway/dns/index.ts","../../src/gateway/client.ts","../../src/baas/database/index.ts","../../src/baas/storage/index.ts","../../src/baas/functions/index.ts","../../src/baas/messaging/index.ts","../../src/baas/deployment/index.ts","../../src/baas/agents/index.ts","../../src/baas/client.ts","../../src/nestjs/smart-engine.service.ts","../../src/nestjs/smart-engine.module.ts"],"names":["z","SmartEngineError","validateUrl","SmartEngineService","Logger","Injectable","Optional","SmartEngineModule","Module"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * Supported blockchain types\n */\nexport const ChainTypeSchema = z.enum([\n 'hedera',\n 'xrpl',\n 'polkadot',\n 'solana',\n 'stellar',\n 'ethereum',\n 'polygon',\n 'bitcoin',\n 'cardano',\n]);\n\nexport type ChainType = z.infer<typeof ChainTypeSchema>;\n\n/**\n * Network environment types\n */\nexport const NetworkTypeSchema = z.enum(['mainnet', 'testnet', 'devnet', 'local']);\n\nexport type NetworkType = z.infer<typeof NetworkTypeSchema>;\n\n/**\n * Chain metadata schema\n */\nexport const ChainMetadataSchema = z.object({\n chain: ChainTypeSchema,\n network: NetworkTypeSchema,\n nativeCurrency: z.object({\n name: z.string(),\n symbol: z.string(),\n decimals: z.number().int().min(0),\n }),\n blockTime: z.number().optional(),\n rpcEndpoint: z.string().url().optional(),\n});\n\nexport type ChainMetadata = z.infer<typeof ChainMetadataSchema>;\n","/**\n * Network Membership Types\n *\n * Defines types for multi-network membership in the Smart Engines ecosystem.\n * Supports three network types: validators, hosts, and gateways.\n *\n * @packageDocumentation\n */\nimport { z } from 'zod';\nimport type { ChainType } from './chain.schema';\n\n/**\n * Alias for backward compatibility with multi-chain-core\n */\nexport type SupportedChain = ChainType;\n\n// =============================================================================\n// Network Type Definition\n// =============================================================================\n\n/**\n * Network membership type - determines the role of a node in the network\n *\n * - validator: Full validator nodes that participate in TSS signing and consensus\n * - host: Infrastructure hosts that run smart engines for decentralized applications\n * - gateway: API gateway nodes that provide external access to the network\n */\nexport type NetworkMembershipType = 'validator' | 'host' | 'gateway';\n\n/**\n * Zod schema for NetworkMembershipType validation\n */\nexport const NetworkMembershipTypeSchema = z.enum(['validator', 'host', 'gateway']);\n\n// =============================================================================\n// Membership NFT Metadata\n// =============================================================================\n\n/**\n * Membership status for NFT metadata\n */\nexport type MembershipStatus = 'pending' | 'active' | 'exiting' | 'exited' | 'banned';\n\n/**\n * Zod schema for MembershipStatus validation\n */\nexport const MembershipStatusSchema = z.enum(['pending', 'active', 'exiting', 'exited', 'banned']);\n\n/**\n * Membership NFT Metadata\n *\n * Metadata structure for membership NFTs that represent network participation.\n * This metadata is stored on-chain and used to verify membership.\n */\nexport interface MembershipNftMetadata {\n /** Unique identifier for the node */\n nodeId: string;\n /** Type of network membership */\n networkType: NetworkMembershipType;\n /** Blockchain chain where membership was established */\n chain: SupportedChain;\n /** Node's endpoint URL for network communication */\n endpoint: string;\n /** Node's public key for cryptographic verification */\n publicKey: string;\n /** ISO 8601 timestamp when the node joined the network */\n joinedAt: string;\n /** Transaction ID of the deposit that activated membership */\n depositTxId: string;\n /** Current membership status */\n status: MembershipStatus;\n /** Network-specific configuration (optional) */\n networkConfig?: NetworkSpecificConfig;\n}\n\n/**\n * Zod schema for MembershipNftMetadata validation\n */\nexport const MembershipNftMetadataSchema = z.object({\n nodeId: z.string().min(1),\n networkType: NetworkMembershipTypeSchema,\n chain: z.enum(['hedera', 'xrpl', 'polkadot', 'solana']),\n endpoint: z.string().url(),\n publicKey: z.string().min(1),\n joinedAt: z.string().datetime(),\n depositTxId: z.string().min(1),\n status: MembershipStatusSchema,\n networkConfig: z.record(z.unknown()).optional(),\n});\n\n// =============================================================================\n// Network-Specific Configuration\n// =============================================================================\n\n/**\n * Network-specific configuration that can be attached to membership metadata\n */\nexport type NetworkSpecificConfig = Record<string, unknown>;\n\n/**\n * Validator-specific configuration\n */\nexport interface ValidatorNetworkConfig {\n /** TSS participation threshold */\n tssThreshold?: number;\n /** Supported chains for validation */\n supportedChains?: SupportedChain[];\n /** Validator capabilities */\n capabilities?: string[];\n}\n\n/**\n * Host-specific configuration\n */\nexport interface HostNetworkConfig {\n /** Maximum number of smart engines this host can run */\n maxEngines?: number;\n /** Supported engine types */\n supportedEngineTypes?: string[];\n /** Host region for geographic distribution */\n region?: string;\n}\n\n/**\n * Gateway-specific configuration\n */\nexport interface GatewayNetworkConfig {\n /** Rate limiting configuration */\n rateLimits?: {\n requestsPerSecond: number;\n burstLimit: number;\n };\n /** Supported API versions */\n supportedApiVersions?: string[];\n /** Geographic region */\n region?: string;\n}\n\n// =============================================================================\n// Network Deposit Configuration\n// =============================================================================\n\n/**\n * Deposit configuration for a specific network type\n */\nexport interface NetworkDepositRequirements {\n /** Required deposit amount in smallest unit (e.g., tinybars for HBAR) */\n depositAmount: string;\n /** Lock duration in days */\n lockDurationDays: number;\n /** Minimum renewal window in days before expiry */\n renewalWindowDays?: number;\n}\n\n/**\n * Complete deposit configuration for all network types\n */\nexport interface NetworkDepositConfig {\n validator: NetworkDepositRequirements;\n host: NetworkDepositRequirements;\n gateway: NetworkDepositRequirements;\n}\n\n/**\n * Zod schema for NetworkDepositRequirements validation\n */\nexport const NetworkDepositRequirementsSchema = z.object({\n depositAmount: z.string().min(1),\n lockDurationDays: z.number().int().positive(),\n renewalWindowDays: z.number().int().positive().optional(),\n});\n\n/**\n * Zod schema for NetworkDepositConfig validation\n */\nexport const NetworkDepositConfigSchema = z.object({\n validator: NetworkDepositRequirementsSchema,\n host: NetworkDepositRequirementsSchema,\n gateway: NetworkDepositRequirementsSchema,\n});\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\n/**\n * Type guard to check if a value is a valid NetworkMembershipType\n */\nexport function isNetworkMembershipType(value: unknown): value is NetworkMembershipType {\n return value === 'validator' || value === 'host' || value === 'gateway';\n}\n\n/**\n * Type guard to check if a value is a valid MembershipStatus\n */\nexport function isMembershipStatus(value: unknown): value is MembershipStatus {\n return (\n value === 'pending' ||\n value === 'active' ||\n value === 'exiting' ||\n value === 'exited' ||\n value === 'banned'\n );\n}\n\n/**\n * Type guard to check if metadata matches MembershipNftMetadata structure\n */\nexport function isMembershipNftMetadata(value: unknown): value is MembershipNftMetadata {\n const result = MembershipNftMetadataSchema.safeParse(value);\n return result.success;\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Get human-readable label for network membership type\n */\nexport function getNetworkTypeLabel(type: NetworkMembershipType): string {\n const labels: Record<NetworkMembershipType, string> = {\n validator: 'Validator Node',\n host: 'Host Node',\n gateway: 'Gateway Node',\n };\n return labels[type];\n}\n\n/**\n * Get human-readable description for network membership type\n */\nexport function getNetworkTypeDescription(type: NetworkMembershipType): string {\n const descriptions: Record<NetworkMembershipType, string> = {\n validator:\n 'Full validator nodes that participate in TSS signing and consensus operations across multiple chains.',\n host: 'Infrastructure hosts that run smart engines for decentralized applications and services.',\n gateway:\n 'API gateway nodes that provide external access to the network and handle rate limiting.',\n };\n return descriptions[type];\n}\n\n/**\n * Check if a network type requires TSS participation\n */\nexport function requiresTssParticipation(type: NetworkMembershipType): boolean {\n return type === 'validator';\n}\n\n/**\n * Get the default deposit configuration for a network type\n */\nexport function getDefaultDepositConfig(): NetworkDepositConfig {\n return {\n validator: {\n depositAmount: '10000000',\n lockDurationDays: 365,\n renewalWindowDays: 30,\n },\n host: {\n depositAmount: '5000000',\n lockDurationDays: 365,\n renewalWindowDays: 30,\n },\n gateway: {\n depositAmount: '2000000',\n lockDurationDays: 365,\n renewalWindowDays: 30,\n },\n };\n}\n","/**\n * Token Capabilities Schema\n *\n * Defines universal token capabilities that are chain-agnostic.\n * Each capability maps to chain-specific implementations.\n */\nimport { z } from 'zod';\n\n/**\n * Token Capabilities Schema\n *\n * These capabilities define what operations a token supports.\n * The validator layer translates these to chain-specific implementations.\n */\nexport const TokenCapabilitiesSchema = z.object({\n /**\n * Pause all token operations globally\n * - Hedera: Adds pauseKey to token\n * - XRPL: Enables GlobalFreeze flag on issuer account\n */\n pausable: z.boolean().default(false),\n\n /**\n * Freeze/restrict specific accounts from transacting\n * - Hedera: Adds freezeKey to token\n * - XRPL: Enables trust line freeze capability\n */\n restrictable: z.boolean().default(false),\n\n /**\n * KYC/compliance controls for accounts\n * - Hedera: Adds kycKey to token\n * - XRPL: Requires authorized trust lines (RequireAuth)\n */\n compliant: z.boolean().default(false),\n\n /**\n * Force remove tokens from accounts (compliance wipe)\n * - Hedera: Adds wipeKey to token\n * - XRPL: Enables clawback (lsfAllowTrustLineClawback)\n */\n wipeable: z.boolean().default(false),\n\n /**\n * Mint additional supply after creation\n * - Hedera: Adds supplyKey to token\n * - XRPL: Issuer can always issue more via Payment\n */\n mintable: z.boolean().default(true),\n\n /**\n * Burn tokens (reduce supply)\n * - Hedera: Requires supplyKey\n * - XRPL: Send back to issuer (reduces supply)\n */\n burnable: z.boolean().default(true),\n\n /**\n * Allow transfers between accounts\n * - All chains: Generally always supported\n */\n transferable: z.boolean().default(true),\n});\n\nexport type TokenCapabilities = z.infer<typeof TokenCapabilitiesSchema>;\n\n/**\n * Capability names as a type\n */\nexport type CapabilityName = keyof TokenCapabilities;\n\n/**\n * List of all capability names\n */\nexport const CAPABILITY_NAMES: CapabilityName[] = [\n 'pausable',\n 'restrictable',\n 'compliant',\n 'wipeable',\n 'mintable',\n 'burnable',\n 'transferable',\n];\n","import { z } from 'zod';\nimport { ChainTypeSchema } from './chain.schema';\n\n/**\n * Account identifier schema - generic string that works across chains\n */\nexport const AccountIdSchema = z.string().min(1);\n\n// Note: Export as AccountIdString to avoid collision with AccountId value object\nexport type AccountIdString = z.infer<typeof AccountIdSchema>;\n\n/**\n * Account information schema\n */\nexport const AccountInfoSchema = z.object({\n accountId: AccountIdSchema,\n balance: z.string(), // String to handle large numbers and decimals\n chain: ChainTypeSchema,\n publicKey: z.string().optional(),\n metadata: z.record(z.any()).optional(),\n createdAt: z.date().optional(),\n updatedAt: z.date().optional(),\n});\n\nexport type AccountInfo = z.infer<typeof AccountInfoSchema>;\n\n/**\n * Account balance schema with token details\n */\nexport const AccountBalanceSchema = z.object({\n accountId: AccountIdSchema,\n chain: ChainTypeSchema,\n nativeBalance: z.string(),\n tokens: z\n .array(\n z.object({\n tokenId: z.string(),\n balance: z.string(),\n decimals: z.number().int().min(0),\n symbol: z.string().optional(),\n })\n )\n .optional(),\n timestamp: z.date(),\n});\n\nexport type AccountBalance = z.infer<typeof AccountBalanceSchema>;\n","import { z } from 'zod';\n\n/**\n * Sovereignty mode for entity creation.\n * - 'none': user/smart-app only signs; on-chain = single user key\n * - 'partial': user + validator both sign; on-chain = nested KeyList/SignerList\n * - 'full': validator-only signs; on-chain = validator multisig alone\n *\n * \"partial\" is product-facing \"mixed\".\n */\nexport const SecurityModeSchema = z.enum(['none', 'partial', 'full']);\nexport type SecurityMode = z.infer<typeof SecurityModeSchema>;\n\n/**\n * Single source of truth for the sovereignty field invariant.\n *\n * - partial: requires BOTH entityId and appOwnerPublicKey\n * - full: requires entityId (appOwnerPublicKey is ignored, not an error)\n * - none: both fields are ignored\n *\n * Exported so merged schemas in api.schema.ts can delegate here\n * instead of duplicating the predicate logic.\n */\nexport const sovereigntyRefinePredicate = (v: {\n securityMode: SecurityMode;\n entityId?: string;\n appOwnerPublicKey?: string;\n}): boolean => {\n if (v.securityMode === 'partial') {\n return !!v.entityId && !!v.appOwnerPublicKey;\n }\n if (v.securityMode === 'full') {\n return !!v.entityId;\n }\n return true;\n};\n\nexport const SOVEREIGNTY_REFINE_MESSAGE =\n \"securityMode='partial' requires entityId+appOwnerPublicKey; 'full' requires entityId\";\n\n/**\n * Shared fragment for every entity-creation prepare schema.\n *\n * Invariants enforced via refine:\n * - partial mode requires BOTH entityId and appOwnerPublicKey\n * - full mode requires entityId (appOwnerPublicKey ignored)\n * - none mode ignores both\n */\n// Internal: the raw object so callers can `.merge()` it without needing\n// Zod-version-specific `.innerType()` unwrapping (v3 vs v4 API drift).\nexport const SovereigntyFieldsRawSchema = z.object({\n securityMode: SecurityModeSchema.default('none'),\n entityId: z.string().optional(),\n appOwnerPublicKey: z.string().optional(),\n});\n\nexport const SovereigntyFieldsSchema = SovereigntyFieldsRawSchema\n .refine(sovereigntyRefinePredicate, { message: SOVEREIGNTY_REFINE_MESSAGE });\n\nexport type SovereigntyFields = z.infer<typeof SovereigntyFieldsSchema>;\n\n/**\n * ---------------------------------------------------------------------------\n * Response-side metadata: the `sovereignty` block on PreparedTransaction\n * ---------------------------------------------------------------------------\n *\n * Every `PreparedTransactionResponse` carries a `sovereignty` block so smart-\n * apps and tests can inspect the on-chain authorization topology the\n * validator is building, without decoding raw chain-native bytes.\n *\n * - `mode: 'none'` carries nothing else; the tx is a user-only flow.\n * - `mode: 'partial'|'full'` carries the entity id, the raw BLS hex pubkeys\n * from the entity's DKG binding, and a chain-native authorization-set\n * descriptor (KeyList for Hedera, SignerList for XRPL, weighted signer set\n * for Stellar).\n */\n\n/**\n * Recursive JSON shape for a Hedera authorization key.\n *\n * A Hedera `adminKey` / `supplyKey` / capability-key value is either a single\n * ed25519 public key or a threshold KeyList whose members are themselves\n * keys. Kept JSON-serializable (ed25519 keys as hex strings) so callers can\n * walk the structure without a `@hashgraph/sdk` dep.\n */\nexport type HederaKeyShape =\n | { type: 'ed25519'; key: string }\n | { type: 'keyList'; threshold: number; keys: HederaKeyShape[] };\n\nexport const HederaKeyShapeSchema: z.ZodType<HederaKeyShape> = z.lazy(() =>\n z.union([\n z.object({ type: z.literal('ed25519'), key: z.string() }),\n z.object({\n type: z.literal('keyList'),\n threshold: z.number().int().nonnegative(),\n keys: z.array(HederaKeyShapeSchema),\n }),\n ]),\n);\n\nexport const HederaAuthorizationSetShapeSchema = z.object({\n chain: z.literal('hedera'),\n adminKey: HederaKeyShapeSchema,\n supplyKey: HederaKeyShapeSchema.optional(),\n freezeKey: HederaKeyShapeSchema.optional(),\n wipeKey: HederaKeyShapeSchema.optional(),\n pauseKey: HederaKeyShapeSchema.optional(),\n kycKey: HederaKeyShapeSchema.optional(),\n});\n\nexport const XrplAuthorizationSetShapeSchema = z.object({\n chain: z.literal('xrpl'),\n signerEntries: z.array(\n z.object({\n account: z.string(),\n weight: z.number().int().nonnegative(),\n }),\n ),\n signerQuorum: z.number().int().nonnegative(),\n masterDisabled: z.boolean(),\n});\n\nexport const StellarAuthorizationSetShapeSchema = z.object({\n chain: z.literal('stellar'),\n signers: z.array(\n z.object({\n key: z.string(),\n weight: z.number().int().nonnegative(),\n }),\n ),\n thresholds: z.object({\n low: z.number().int().nonnegative(),\n med: z.number().int().nonnegative(),\n high: z.number().int().nonnegative(),\n }),\n masterWeight: z.number().int().nonnegative(),\n});\n\n/**\n * Recursive JSON shape for a Polkadot authorization signatory.\n *\n * A Polkadot sovereignty set resolves to a single on-chain controlling\n * `address`. That address is either a lone sr25519 account (`'none'`) or a\n * native `pallet_multisig` address whose signatories may themselves be\n * multisig accounts (`'full'` = flat validator multisig; `'partial'` = nested\n * outer multisig `[userAddress, innerValidatorMultisig]`).\n *\n * Kept JSON-serializable (SS58 addresses as strings) so callers can walk the\n * structure without a `@polkadot/*` dep.\n */\nexport type PolkadotSignatoryShape =\n | { type: 'account'; address: string }\n | {\n type: 'multisig';\n address: string;\n threshold: number;\n signatories: PolkadotSignatoryShape[];\n };\n\nexport const PolkadotSignatoryShapeSchema: z.ZodType<PolkadotSignatoryShape> = z.lazy(() =>\n z.union([\n z.object({ type: z.literal('account'), address: z.string() }),\n z.object({\n type: z.literal('multisig'),\n address: z.string(),\n threshold: z.number().int().positive(),\n signatories: z.array(PolkadotSignatoryShapeSchema),\n }),\n ]),\n);\n\nexport const PolkadotAuthorizationSetShapeSchema = z.object({\n chain: z.literal('polkadot'),\n address: z.string(),\n signatory: PolkadotSignatoryShapeSchema,\n ss58Format: z.number().int().nonnegative(),\n});\n\nexport const PreparedTransactionAuthorizationSetSchema = z.discriminatedUnion('chain', [\n HederaAuthorizationSetShapeSchema,\n XrplAuthorizationSetShapeSchema,\n StellarAuthorizationSetShapeSchema,\n PolkadotAuthorizationSetShapeSchema,\n]);\n\nexport type HederaAuthorizationSetShape = z.infer<typeof HederaAuthorizationSetShapeSchema>;\nexport type XrplAuthorizationSetShape = z.infer<typeof XrplAuthorizationSetShapeSchema>;\nexport type StellarAuthorizationSetShape = z.infer<typeof StellarAuthorizationSetShapeSchema>;\nexport type PolkadotAuthorizationSetShape = z.infer<typeof PolkadotAuthorizationSetShapeSchema>;\nexport type PreparedTransactionAuthorizationSet = z.infer<\n typeof PreparedTransactionAuthorizationSetSchema\n>;\n\n/**\n * `authorizationSet` is REQUIRED for prepare endpoints that build the on-chain\n * authorization at create time (token create, account create, account setup)\n * and OPTIONAL for prepare endpoints that invoke an already-configured\n * authorization (mint, burn, transfer, payment). In the latter case the\n * authorization set lives on-chain from a prior create and smart-apps already\n * have its shape from the original create response.\n */\nexport const PreparedTransactionSovereigntySchema = z.discriminatedUnion('mode', [\n z.object({ mode: z.literal('none') }),\n z.object({\n mode: z.literal('partial'),\n entityId: z.string(),\n validatorPublicKeys: z.array(z.string()),\n authorizationSet: PreparedTransactionAuthorizationSetSchema.optional(),\n }),\n z.object({\n mode: z.literal('full'),\n entityId: z.string(),\n validatorPublicKeys: z.array(z.string()),\n authorizationSet: PreparedTransactionAuthorizationSetSchema.optional(),\n }),\n]);\n\nexport type PreparedTransactionSovereignty = z.infer<typeof PreparedTransactionSovereigntySchema>;\n","import { z } from 'zod';\nimport { ChainTypeSchema } from './chain.schema';\nimport { AccountIdSchema } from './account.schema';\n\n/**\n * Transaction status\n */\nexport const TransactionStatusSchema = z.enum(['pending', 'success', 'failed', 'expired']);\n\nexport type TransactionStatus = z.infer<typeof TransactionStatusSchema>;\n\n/**\n * Transaction type\n */\nexport const TransactionTypeSchema = z.enum([\n 'transfer',\n 'token_transfer',\n 'account_create',\n 'token_create',\n 'token_mint',\n 'token_burn',\n 'contract_call',\n 'contract_create',\n 'topic_message',\n 'other',\n]);\n\nexport type TransactionType = z.infer<typeof TransactionTypeSchema>;\n\n/**\n * Base transaction schema\n */\nexport const TransactionSchema = z.object({\n id: z.string(),\n chain: ChainTypeSchema,\n type: TransactionTypeSchema,\n status: TransactionStatusSchema,\n timestamp: z.date(),\n from: AccountIdSchema,\n to: AccountIdSchema.optional(),\n amount: z.string().optional(),\n fee: z.string(),\n memo: z.string().optional(),\n metadata: z.record(z.any()).optional(),\n});\n\nexport type Transaction = z.infer<typeof TransactionSchema>;\n\n/**\n * Transaction receipt schema\n */\nexport const TransactionReceiptSchema = z.object({\n transactionId: z.string(),\n chain: ChainTypeSchema,\n status: TransactionStatusSchema,\n blockNumber: z.number().optional(),\n blockHash: z.string().optional(),\n timestamp: z.date(),\n gasUsed: z.string().optional(),\n effectiveFee: z.string(),\n logs: z.array(z.any()).optional(),\n metadata: z.record(z.any()).optional(),\n});\n\nexport type TransactionReceipt = z.infer<typeof TransactionReceiptSchema>;\n","import { z } from 'zod';\nimport { ChainTypeSchema } from './chain.schema';\nimport { AccountIdSchema } from './account.schema';\n\n/**\n * Token type\n */\nexport const TokenTypeSchema = z.enum(['fungible', 'nft', 'semi_fungible']);\n\nexport type TokenType = z.infer<typeof TokenTypeSchema>;\n\n/**\n * Token schema\n */\nexport const TokenSchema = z.object({\n tokenId: z.string(),\n chain: ChainTypeSchema,\n name: z.string(),\n symbol: z.string(),\n decimals: z.number().int().min(0),\n totalSupply: z.string(),\n type: TokenTypeSchema,\n creator: AccountIdSchema.optional(),\n metadata: z.record(z.any()).optional(),\n createdAt: z.date().optional(),\n});\n\nexport type Token = z.infer<typeof TokenSchema>;\n\n/**\n * NFT metadata schema\n */\nexport const NFTMetadataSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n image: z.string().url().optional(),\n attributes: z\n .array(\n z.object({\n trait_type: z.string(),\n value: z.union([z.string(), z.number(), z.boolean()]),\n })\n )\n .optional(),\n external_url: z.string().url().optional(),\n});\n\nexport type NFTMetadata = z.infer<typeof NFTMetadataSchema>;\n\n/**\n * Token info with holder details\n */\nexport const TokenInfoSchema = TokenSchema.extend({\n holders: z.number().optional(),\n transferCount: z.number().optional(),\n circulatingSupply: z.string().optional(),\n});\n\nexport type TokenInfo = z.infer<typeof TokenInfoSchema>;\n","import { z } from 'zod';\nimport { ChainTypeSchema } from './chain.schema';\nimport { AccountIdSchema } from './account.schema';\nimport { TokenCapabilitiesSchema } from './capabilities.schema';\nimport {\n SovereigntyFieldsRawSchema,\n sovereigntyRefinePredicate,\n SOVEREIGNTY_REFINE_MESSAGE,\n PreparedTransactionSovereigntySchema,\n} from './sovereignty.schema';\n\n/**\n * Create account request schema\n *\n * @important validatorTimestamp is REQUIRED - all entities must be bound to a validator.\n * The validator rules are stored on HCS and referenced by consensus timestamp.\n */\nexport const CreateAccountRequestSchema = z.object({\n chain: ChainTypeSchema,\n initialBalance: z.string(),\n publicKey: z.string().optional(),\n memo: z.string().optional(),\n /**\n * Who pays the chain fee for this transaction. Resolution happens in the\n * controller layer (`resolvePayerAccountId`): explicit `payerAccountId`\n * wins, else the JWT-authenticated smart-app's wallet address, else the\n * request is rejected with 400. The validator **never** silently falls\n * back to its own operator account.\n */\n payerAccountId: z.string().optional(),\n /**\n * HCS consensus timestamp of the validator rules (REQUIRED).\n * Format: \"1766490325.123456789\"\n */\n validatorTimestamp: z.string().min(1, 'validatorTimestamp is required'),\n /**\n * HCS topic ID where validator rules are stored (REQUIRED).\n */\n validatorTopicId: z.string().min(1, 'validatorTopicId is required'),\n /**\n * Whether to remove admin key after creation (makes entity immutable).\n * Default: true for production-grade immutability.\n */\n immutable: z.boolean().default(true),\n /**\n * Smart node security mode for the account key structure.\n * - 'none': Owner-only key (no validator involvement)\n * - 'partial': threshold(2, [appOwnerKey, tssKeyList]) — co-control\n * - 'full': TSS KeyList only — full validator network control\n * Default: 'none' for basic account creation via SDK.\n */\n securityMode: z.enum(['none', 'partial', 'full']).default('none'),\n /**\n * App owner's public key (required for 'partial' security mode).\n * The owner key + TSS network key form a threshold-2 multi-sig.\n */\n appOwnerPublicKey: z.string().optional(),\n metadata: z.record(z.any()).optional(),\n});\n\nexport type CreateAccountRequest = z.infer<typeof CreateAccountRequestSchema>;\n\n/**\n * Create account response schema\n */\nexport const CreateAccountResponseSchema = z.object({\n accountId: AccountIdSchema,\n publicKey: z.string().optional(),\n privateKey: z.string().optional(), // Only returned on creation, store securely!\n transactionId: z.string(),\n chain: ChainTypeSchema,\n timestamp: z.date().optional(),\n});\n\nexport type CreateAccountResponse = z.infer<typeof CreateAccountResponseSchema>;\n\n/**\n * Transfer request schema\n */\nexport const TransferRequestSchema = z.object({\n chain: ChainTypeSchema,\n from: AccountIdSchema,\n to: AccountIdSchema,\n amount: z.string(),\n tokenId: z.string().optional(), // undefined = native token\n memo: z.string().optional(),\n /** See CreateAccountRequestSchema.payerAccountId — same resolution rules. */\n payerAccountId: z.string().optional(),\n metadata: z.record(z.any()).optional(),\n});\n\nexport type TransferRequest = z.infer<typeof TransferRequestSchema>;\n\n/**\n * Transfer response schema\n */\nexport const TransferResponseSchema = z.object({\n transactionId: z.string(),\n status: z.enum(['pending', 'success', 'failed']),\n chain: ChainTypeSchema,\n fee: z.string().optional(),\n timestamp: z.date().optional(),\n});\n\nexport type TransferResponse = z.infer<typeof TransferResponseSchema>;\n\n/**\n * Query balance request schema\n */\nexport const QueryBalanceRequestSchema = z.object({\n chain: ChainTypeSchema,\n accountId: AccountIdSchema,\n});\n\nexport type QueryBalanceRequest = z.infer<typeof QueryBalanceRequestSchema>;\n\n/**\n * Query transaction request schema\n */\nexport const QueryTransactionRequestSchema = z.object({\n chain: ChainTypeSchema,\n transactionId: z.string(),\n});\n\nexport type QueryTransactionRequest = z.infer<typeof QueryTransactionRequestSchema>;\n\n/**\n * Create token request schema (v2 with capabilities)\n *\n * Supports universal token capabilities that are validated against chain support.\n * If a capability is requested but not supported on the target chain, an error is thrown.\n */\nexport const CreateTokenRequestSchema = z.object({\n chain: ChainTypeSchema,\n name: z.string().min(1).max(100),\n symbol: z.string().min(1).max(10),\n decimals: z.number().int().min(0).max(18),\n initialSupply: z.string(),\n type: z.enum(['fungible', 'nft']),\n treasury: AccountIdSchema.optional(),\n /**\n * Token capabilities define what operations the token supports.\n * These are validated against chain support and translated to native implementations.\n *\n * @example\n * ```typescript\n * capabilities: {\n * pausable: true, // Hedera: pauseKey, XRPL: GlobalFreeze\n * restrictable: true, // Hedera: freezeKey, XRPL: TrustLineFreeze\n * compliant: true, // Hedera: kycKey, XRPL: RequireAuth\n * wipeable: true, // Hedera: wipeKey, XRPL: Clawback\n * mintable: true, // Allow additional minting\n * burnable: true, // Allow burning\n * }\n * ```\n */\n capabilities: TokenCapabilitiesSchema.optional().default({\n pausable: false,\n restrictable: false,\n compliant: false,\n wipeable: false,\n mintable: true,\n burnable: true,\n transferable: true,\n }),\n /**\n * HCS consensus timestamp of the validator rules (REQUIRED).\n * Format: \"1766490325.123456789\"\n */\n validatorTimestamp: z.string().min(1, 'validatorTimestamp is required'),\n /**\n * HCS topic ID where validator rules are stored (REQUIRED).\n */\n validatorTopicId: z.string().min(1, 'validatorTopicId is required'),\n /**\n * Whether to remove admin key after creation (makes entity immutable).\n * Default: true for production-grade immutability.\n */\n immutable: z.boolean().default(true),\n /** See CreateAccountRequestSchema.payerAccountId — same resolution rules. */\n payerAccountId: z.string().optional(),\n metadata: z.record(z.any()).optional(),\n});\n\nexport type CreateTokenRequest = z.infer<typeof CreateTokenRequestSchema>;\n\n/**\n * Create token response schema\n */\nexport const CreateTokenResponseSchema = z.object({\n tokenId: z.string(),\n transactionId: z.string(),\n chain: ChainTypeSchema,\n timestamp: z.date().optional(),\n});\n\nexport type CreateTokenResponse = z.infer<typeof CreateTokenResponseSchema>;\n\n/**\n * Mint token request schema\n */\n/**\n * Mint token request schema\n *\n * Supports both fungible and non-fungible token minting:\n * - Fungible: requires `amount` (e.g. \"1000\")\n * - NFT: requires `nftMetadata` (array of byte-encodable entries, one per NFT to mint)\n *\n * The chain adapter determines the appropriate native operation based on the token type.\n */\nexport const MintTokenRequestSchema = z.object({\n chain: ChainTypeSchema,\n tokenId: z.string(),\n\n /** Amount to mint (fungible tokens). Ignored for NFTs. */\n amount: z.string().optional(),\n\n /** Recipient account (fungible: transfer after mint; NFT: Hedera mints to treasury). */\n recipient: AccountIdSchema.optional(),\n\n /**\n * NFT metadata entries — one per NFT to mint.\n * Each entry becomes on-chain metadata (e.g. IPFS CID, encoded memo).\n * On Hedera: passed to TokenMintTransaction.setMetadata().\n * On XRPL: used as URI in NFTokenMint.\n */\n nftMetadata: z.array(z.string()).optional(),\n\n /** Additional chain-specific options. */\n metadata: z.record(z.any()).optional(),\n /** See CreateAccountRequestSchema.payerAccountId — same resolution rules. */\n payerAccountId: z.string().optional(),\n});\n\nexport type MintTokenRequest = z.infer<typeof MintTokenRequestSchema>;\n\n/**\n * Burn token request schema\n */\nexport const BurnTokenRequestSchema = z.object({\n chain: ChainTypeSchema,\n tokenId: z.string(),\n amount: z.string(),\n /** See CreateAccountRequestSchema.payerAccountId — same resolution rules. */\n payerAccountId: z.string().optional(),\n metadata: z.record(z.any()).optional(),\n});\n\nexport type BurnTokenRequest = z.infer<typeof BurnTokenRequestSchema>;\n\n/**\n * Token action request schema (for pause, restrict, etc.)\n */\nexport const TokenActionRequestSchema = z.object({\n chain: ChainTypeSchema,\n tokenId: z.string(),\n accountId: AccountIdSchema.optional(), // Required for account-specific actions\n amount: z.string().optional(), // Required for wipe action\n /** See CreateAccountRequestSchema.payerAccountId — same resolution rules. */\n payerAccountId: z.string().optional(),\n metadata: z.record(z.any()).optional(),\n});\n\nexport type TokenActionRequest = z.infer<typeof TokenActionRequestSchema>;\n\n/**\n * Action result schema - unified response for all token actions\n */\nexport const ActionResultSchema = z.object({\n success: z.boolean(),\n transactionId: z.string(),\n chain: ChainTypeSchema,\n /** The native chain operation that was executed */\n chainOperation: z.string(),\n /** Additional context or notes about the operation */\n notes: z.array(z.string()).optional(),\n /** Timestamp of the operation */\n timestamp: z.date().optional(),\n});\n\nexport type ActionResult = z.infer<typeof ActionResultSchema>;\n\n/**\n * Create token result schema - extends ActionResult with token info\n */\nexport const CreateTokenResultSchema = ActionResultSchema.extend({\n tokenId: z.string(),\n /** The capabilities that were enabled for this token */\n enabledCapabilities: z.array(z.string()),\n});\n\nexport type CreateTokenResult = z.infer<typeof CreateTokenResultSchema>;\n\n// =============================================================================\n// PREPARED TRANSACTION RESPONSE TYPES (v3 API - Transaction Sovereignty)\n// =============================================================================\n\n/**\n * Validator signature for a prepared transaction\n */\nexport const ValidatorSignatureSchema = z.object({\n /** Validator's node ID */\n validatorId: z.string(),\n /** Validator's public key (hex-encoded) */\n publicKey: z.string(),\n /** Signature over the transaction bytes (hex-encoded) */\n signature: z.string(),\n /** When this signature was created */\n signedAt: z.date(),\n /** Signature algorithm used */\n algorithm: z.enum(['ed25519', 'ecdsa-secp256k1', 'bls12-381']).optional(),\n});\n\nexport type ValidatorSignature = z.infer<typeof ValidatorSignatureSchema>;\n\n/**\n * Hedera-specific metadata for prepared transactions\n */\nexport const HederaPreparedMetadataSchema = z.object({\n /** Hedera node account IDs that will process this transaction */\n nodeAccountIds: z.array(z.string()).optional(),\n /** Maximum transaction fee in tinybars */\n maxTransactionFee: z.string().optional(),\n /** Transaction memo */\n memo: z.string().optional(),\n /** Schedule info if this is a scheduled transaction */\n scheduleInfo: z\n .object({\n scheduleId: z.string(),\n adminKey: z.string().optional(),\n })\n .optional(),\n});\n\nexport type HederaPreparedMetadata = z.infer<typeof HederaPreparedMetadataSchema>;\n\n/**\n * XRPL-specific metadata for prepared transactions\n */\nexport const XRPLPreparedMetadataSchema = z.object({\n /** Sequence number for this transaction */\n sequence: z.number().optional(),\n /** Last ledger sequence for expiration */\n lastLedgerSequence: z.number().optional(),\n /** Signer list info for multi-sig */\n signerList: z\n .array(\n z.object({\n account: z.string(),\n signerWeight: z.number(),\n })\n )\n .optional(),\n /** Quorum weight required */\n signerQuorum: z.number().optional(),\n});\n\nexport type XRPLPreparedMetadata = z.infer<typeof XRPLPreparedMetadataSchema>;\n\n/**\n * Solana-specific metadata for prepared transactions\n */\nexport const SolanaPreparedMetadataSchema = z.object({\n /** Recent blockhash for transaction validity */\n recentBlockhash: z.string().optional(),\n /** Fee payer account */\n feePayer: z.string().optional(),\n /** Program IDs involved */\n programIds: z.array(z.string()).optional(),\n /** Squads v4 multisig PDA address (partial/full modes) */\n squadsMultisigPda: z.string().optional(),\n /** Squads v4 vault PDA address (partial/full modes) */\n squadsVaultPda: z.string().optional(),\n /** Index of the vault transaction proposal */\n squadsTransactionIndex: z.number().optional(),\n /** Proposal PDA address */\n squadsProposalAddress: z.string().optional(),\n /** Whether the multisig was created in this call (vs already existed) */\n multisigCreated: z.boolean().optional(),\n /** Security mode used to prepare this transaction */\n securityMode: z.enum(['none', 'partial', 'full']).optional(),\n /** SPL Token mint address (token-create and all SPL operations) */\n splMint: z.string().optional(),\n});\n\nexport type SolanaPreparedMetadata = z.infer<typeof SolanaPreparedMetadataSchema>;\n\n/**\n * Polkadot-specific metadata for prepared transactions\n */\nexport const PolkadotPreparedMetadataSchema = z.object({\n /** Era for transaction mortality */\n era: z.string().optional(),\n /** Nonce for the sender */\n nonce: z.number().optional(),\n /** Tip for priority */\n tip: z.string().optional(),\n /** Spec version for runtime */\n specVersion: z.number().optional(),\n});\n\nexport type PolkadotPreparedMetadata = z.infer<typeof PolkadotPreparedMetadataSchema>;\n\n/**\n * Union of all chain-specific metadata types\n */\nexport const ChainPreparedMetadataSchema = z.union([\n HederaPreparedMetadataSchema,\n XRPLPreparedMetadataSchema,\n SolanaPreparedMetadataSchema,\n PolkadotPreparedMetadataSchema,\n z.record(z.any()), // Allow extension for future chains\n]);\n\nexport type ChainPreparedMetadata = z.infer<typeof ChainPreparedMetadataSchema>;\n\n/**\n * Prepared transaction response - the core type for v3 API\n *\n * IMPORTANT: This is the unified response type for all transaction operations.\n * The transaction is frozen/prepared but NOT submitted. The caller is responsible\n * for submitting the transaction to the network.\n *\n * SECURITY PRINCIPLES:\n * 1. Validators NEVER pay fees - caller provides payerAccountId\n * 2. Validators NEVER submit transactions - they return signed bytes\n * 3. All operations use multi-sig - no single-key fallbacks\n * 4. Transaction ID is pre-assigned for deterministic tracking\n */\nexport const PreparedTransactionResponseSchema = z.object({\n /** The blockchain this transaction is for */\n chain: ChainTypeSchema,\n /** Type of transaction (e.g., 'TokenCreate', 'Payment', 'NFTMint') */\n transactionType: z.string(),\n /** Pre-assigned transaction ID for tracking */\n transactionId: z.string(),\n /** Base64-encoded frozen transaction bytes ready for submission */\n transactionBytes: z.string(),\n /** When this prepared transaction expires */\n expiresAt: z.date(),\n /** Validator signatures collected for this transaction */\n validatorSignatures: z.array(ValidatorSignatureSchema),\n /** Required payer account ID (caller must fund this account) */\n payerAccountId: z.string().optional(),\n /** Estimated network fee */\n estimatedFee: z.string().optional(),\n /** Number of signatures required for submission */\n requiredSignatures: z.number().optional(),\n /** Whether the transaction has enough signatures to submit */\n readyToSubmit: z.boolean().default(false),\n /** Chain-specific metadata */\n metadata: ChainPreparedMetadataSchema.optional(),\n /**\n * Sovereignty metadata: the mode and (for partial/full) the on-chain\n * authorization set the validator is binding to. Lets smart-apps and tests\n * inspect the authorization topology without decoding chain-native bytes.\n */\n sovereignty: PreparedTransactionSovereigntySchema.optional(),\n});\n\nexport type PreparedTransactionResponse = z.infer<typeof PreparedTransactionResponseSchema>;\n\n/**\n * Generic prepared transaction response with typed metadata\n */\nexport type PreparedTransactionResponseWithMetadata<T extends ChainPreparedMetadata> = Omit<\n PreparedTransactionResponse,\n 'metadata'\n> & {\n metadata?: T;\n};\n\n/**\n * Type-safe prepared transaction responses for each chain\n */\nexport type HederaPreparedTransaction =\n PreparedTransactionResponseWithMetadata<HederaPreparedMetadata>;\n/**\n * XRPL prepared transaction response.\n *\n * Includes `transactionJson` alongside `transactionBytes` so xrpl.js-native\n * clients can sign the autofilled transaction object directly without having\n * to decode the binary blob. See Transaction Sovereignty Parity Part A.4.\n *\n * `transactionJson` is typed as the structural minimum — the fields every\n * autofilled XRPL tx carries — so `@hsuite/smart-engines-shared` stays\n * decoupled from the xrpl.js package. Callers that need the full\n * `SubmittableTransaction` union (see xrpl.js) should consume the stronger\n * local type exported from `@hsuite/smart-engines-chain-xrpl`, which is\n * typed against xrpl.js directly.\n */\nexport type XRPLPreparedTransactionJson = {\n TransactionType: string;\n Account: string;\n Fee?: string;\n Sequence?: number;\n LastLedgerSequence?: number;\n [extra: string]: unknown;\n};\n\nexport type XRPLPreparedTransaction = PreparedTransactionResponseWithMetadata<XRPLPreparedMetadata> & {\n /** Autofilled XRPL transaction object (post-autofill, pre-sign) for xrpl.js-native callers */\n transactionJson: XRPLPreparedTransactionJson;\n};\nexport type SolanaPreparedTransaction =\n PreparedTransactionResponseWithMetadata<SolanaPreparedMetadata>;\nexport type PolkadotPreparedTransaction =\n PreparedTransactionResponseWithMetadata<PolkadotPreparedMetadata>;\n\n/**\n * Submission result after caller submits the prepared transaction\n */\nexport const TransactionSubmissionResultSchema = z.object({\n /** The original transaction ID */\n transactionId: z.string(),\n /** The blockchain */\n chain: ChainTypeSchema,\n /** Whether submission was successful */\n success: z.boolean(),\n /** Consensus timestamp (Hedera) or ledger/block info */\n consensusTimestamp: z.string().optional(),\n /** Block or ledger number */\n blockNumber: z.number().optional(),\n /** Actual fee paid */\n actualFee: z.string().optional(),\n /** Receipt or confirmation data */\n receipt: z.record(z.any()).optional(),\n /** Error message if submission failed */\n error: z.string().optional(),\n});\n\nexport type TransactionSubmissionResult = z.infer<typeof TransactionSubmissionResultSchema>;\n\n// =============================================================================\n// PREPARE REQUEST SCHEMAS (v3 API - Transaction Sovereignty Mixed Layer)\n// =============================================================================\n\n/**\n * Prepare token-create request schema (Hedera HTS).\n *\n * Merges SovereigntyFieldsSchema so securityMode, entityId, and\n * appOwnerPublicKey carry the same cross-chain invariants.\n */\nexport const PrepareTokenCreateRequestSchema = z\n .object({\n chain: z.literal('hedera'),\n payerAccountId: z.string().optional(),\n name: z.string().min(1).max(100),\n symbol: z.string().min(1).max(10),\n decimals: z.number().int().min(0).max(18),\n initialSupply: z.string(),\n treasuryAccountId: z.string().min(1, 'treasuryAccountId is required'),\n memo: z.string().optional(),\n tokenType: z.enum(['FUNGIBLE_COMMON', 'NON_FUNGIBLE_UNIQUE']).default('FUNGIBLE_COMMON'),\n supplyKey: z.string().optional(),\n adminKey: z.string().optional(),\n pauseKey: z.string().optional(),\n freezeKey: z.string().optional(),\n kycKey: z.string().optional(),\n wipeKey: z.string().optional(),\n validatorTimestamp: z.string().min(1),\n validatorTopicId: z.string().min(1),\n })\n // SovereigntyFieldsRawSchema is the unrefined object (no .refine wrapping)\n // the sovereignty invariant is re-applied by the .refine() below.\n .merge(SovereigntyFieldsRawSchema)\n .refine(sovereigntyRefinePredicate, { message: SOVEREIGNTY_REFINE_MESSAGE });\n\nexport type PrepareTokenCreateRequest = z.infer<typeof PrepareTokenCreateRequestSchema>;\n\n/**\n * Prepare XRPL account-setup request schema.\n *\n * Used to configure the authorization (signer list / AccountSet flags) on an\n * existing XRPL account as part of the sovereignty key setup.\n */\nexport const PrepareXrplAccountSetupRequestSchema = z\n .object({\n chain: z.literal('xrpl'),\n payerAccountId: z.string().optional(),\n // User's XRPL account whose authorization we're configuring.\n accountAddress: z.string().min(25).max(34),\n validatorTimestamp: z.string().min(1),\n validatorTopicId: z.string().min(1),\n })\n .merge(SovereigntyFieldsRawSchema)\n .refine(sovereigntyRefinePredicate, { message: SOVEREIGNTY_REFINE_MESSAGE });\n\nexport type PrepareXrplAccountSetupRequest = z.infer<typeof PrepareXrplAccountSetupRequestSchema>;\n\n/**\n * Prepare Stellar account-create request schema.\n *\n * Creates a new Stellar account and optionally configures sovereignty signers.\n */\nexport const PrepareStellarAccountCreateRequestSchema = z\n .object({\n chain: z.literal('stellar'),\n payerAccountId: z.string().optional(),\n // The master public key of the new Stellar account.\n publicKey: z.string().min(56).max(56),\n startingBalance: z.string().regex(/^\\d+(\\.\\d+)?$/),\n validatorTimestamp: z.string().min(1),\n validatorTopicId: z.string().min(1),\n })\n .merge(SovereigntyFieldsRawSchema)\n // Stellar's partial mode uses the new account's OWN master key as the\n // \"user\" signer (via SetOptions(masterWeight=2)) — there is NO separate\n // appOwnerPublicKey because Stellar allows the master key to satisfy\n // authorization directly. Only entityId is required for partial/full.\n .refine(\n (v) => {\n if (v.securityMode === 'partial' || v.securityMode === 'full') {\n return !!v.entityId;\n }\n return true;\n },\n { message: \"securityMode='partial'/'full' requires entityId\" },\n );\n\nexport type PrepareStellarAccountCreateRequest = z.infer<\n typeof PrepareStellarAccountCreateRequestSchema\n>;\n","/**\n * Hedera Mirror Node Client\n *\n * Lightweight client for querying Hedera mirror node REST API.\n * Used for validator discovery by reading HCS topic messages.\n */\n\n/**\n * Mirror node configuration\n */\nexport interface MirrorNodeConfig {\n /** Mirror node base URL (e.g., https://testnet.mirrornode.hedera.com) */\n baseUrl: string;\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Allow HTTP (insecure) connections - default false */\n allowInsecure?: boolean;\n}\n\n/**\n * Validate and sanitize a URL\n * Prevents SSRF and ensures HTTPS for security\n */\nfunction validateUrl(url: string, allowInsecure = false): URL {\n try {\n const parsed = new URL(url);\n\n // Only allow http/https protocols\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n throw new Error(`Invalid protocol: ${parsed.protocol}`);\n }\n\n // Enforce HTTPS unless explicitly allowed\n if (!allowInsecure && parsed.protocol !== 'https:') {\n throw new Error(\n 'HTTPS is required for secure connections. Set allowInsecure=true to override.'\n );\n }\n\n // Block private/internal IP ranges to prevent SSRF\n const hostname = parsed.hostname.toLowerCase();\n const blockedPatterns = [\n /^localhost$/i,\n /^127\\./,\n /^10\\./,\n /^172\\.(1[6-9]|2[0-9]|3[01])\\./,\n /^192\\.168\\./,\n /^169\\.254\\./,\n /^::1$/,\n /^fe80:/i,\n /^fc00:/i,\n /^fd00:/i,\n ];\n\n // Allow localhost only in development with explicit flag\n const isPrivate = blockedPatterns.some((pattern) => pattern.test(hostname));\n if (isPrivate && !allowInsecure) {\n throw new Error(\n 'Private/internal URLs are blocked. Set allowInsecure=true for local development.'\n );\n }\n\n return parsed;\n } catch (error) {\n if (error instanceof Error && error.message.includes('Invalid URL')) {\n throw new MirrorNodeError(`Invalid URL format: ${url}`, 400);\n }\n throw error;\n }\n}\n\n/**\n * Validate Hedera topic ID format\n */\nfunction validateTopicId(topicId: string): void {\n // Format: shard.realm.num (e.g., 0.0.123456)\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(topicId)) {\n throw new MirrorNodeError(\n `Invalid topic ID format: ${topicId}. Expected format: 0.0.123456`,\n 400\n );\n }\n}\n\n/**\n * HCS topic message from mirror node API\n */\nexport interface TopicMessage {\n /** Consensus timestamp */\n consensus_timestamp: string;\n /** Message content (base64 encoded) */\n message: string;\n /** Payer account ID */\n payer_account_id: string;\n /** Running hash */\n running_hash: string;\n /** Running hash version */\n running_hash_version: number;\n /** Sequence number */\n sequence_number: number;\n /** Topic ID */\n topic_id: string;\n}\n\n/**\n * Mirror node API response for topic messages\n */\nexport interface TopicMessagesResponse {\n messages: TopicMessage[];\n links: {\n next?: string;\n };\n}\n\n/**\n * Default mirror node URLs by network\n */\nexport const MIRROR_NODE_URLS: Record<string, string> = {\n mainnet: 'https://mainnet-public.mirrornode.hedera.com',\n testnet: 'https://testnet.mirrornode.hedera.com',\n previewnet: 'https://previewnet.mirrornode.hedera.com',\n};\n\n/**\n * Hedera Mirror Node Client\n *\n * Query HCS topic messages via REST API for validator discovery.\n */\nexport class MirrorNodeClient {\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly allowInsecure: boolean;\n\n constructor(config: MirrorNodeConfig) {\n this.allowInsecure = config.allowInsecure ?? false;\n\n // Validate the base URL\n const validatedUrl = validateUrl(config.baseUrl, this.allowInsecure);\n this.baseUrl = validatedUrl.origin;\n this.timeout = config.timeout || 30000;\n }\n\n /**\n * Create client for a specific network\n */\n static forNetwork(network: 'mainnet' | 'testnet' | 'previewnet'): MirrorNodeClient {\n const baseUrl = MIRROR_NODE_URLS[network];\n if (!baseUrl) {\n throw new Error(`Unknown network: ${network}`);\n }\n return new MirrorNodeClient({ baseUrl });\n }\n\n /**\n * Get topic messages from mirror node\n *\n * @param topicId - HCS topic ID (e.g., '0.0.123456')\n * @param options - Query options\n * @returns Topic messages\n */\n async getTopicMessages(\n topicId: string,\n options?: {\n /** Limit number of messages */\n limit?: number;\n /** Order (asc or desc) */\n order?: 'asc' | 'desc';\n /** Timestamp to start from */\n timestampStart?: string;\n /** Timestamp to end at */\n timestampEnd?: string;\n /** Sequence number to start from */\n sequenceNumberStart?: number;\n }\n ): Promise<TopicMessage[]> {\n // Validate topic ID format to prevent injection\n validateTopicId(topicId);\n\n const params = new URLSearchParams();\n\n if (options?.limit) {\n params.set('limit', options.limit.toString());\n }\n if (options?.order) {\n params.set('order', options.order);\n }\n if (options?.timestampStart) {\n params.set('timestamp', `gte:${options.timestampStart}`);\n }\n if (options?.timestampEnd) {\n params.set('timestamp', `lte:${options.timestampEnd}`);\n }\n if (options?.sequenceNumberStart) {\n params.set('sequencenumber', `gte:${options.sequenceNumberStart}`);\n }\n\n const url = `${this.baseUrl}/api/v1/topics/${topicId}/messages?${params.toString()}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new MirrorNodeError(\n `Mirror node error: ${response.status} ${response.statusText}`,\n response.status\n );\n }\n\n const data = (await response.json()) as TopicMessagesResponse;\n return data.messages;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof MirrorNodeError) {\n throw error;\n }\n const err = error as Error;\n if (err.name === 'AbortError') {\n throw new MirrorNodeError('Mirror node request timeout', 408);\n }\n throw new MirrorNodeError(`Mirror node network error: ${err.message}`, 0);\n }\n }\n\n /**\n * Get all topic messages with pagination\n *\n * @param topicId - HCS topic ID\n * @param maxMessages - Maximum messages to fetch (default: 1000)\n * @returns All topic messages\n */\n async getAllTopicMessages(topicId: string, maxMessages: number = 1000): Promise<TopicMessage[]> {\n // Validate topic ID format\n validateTopicId(topicId);\n\n // Enforce reasonable limits to prevent DoS\n const safeMaxMessages = Math.min(maxMessages, 10000);\n\n const allMessages: TopicMessage[] = [];\n let nextPath: string | undefined = `/api/v1/topics/${topicId}/messages?limit=100&order=desc`;\n\n while (nextPath && allMessages.length < safeMaxMessages) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n // Construct full URL safely - only use path from pagination\n const fullUrl = `${this.baseUrl}${nextPath}`;\n\n const response = await fetch(fullUrl, {\n method: 'GET',\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new MirrorNodeError(\n `Mirror node error: ${response.status} ${response.statusText}`,\n response.status\n );\n }\n\n const data = (await response.json()) as TopicMessagesResponse;\n allMessages.push(...data.messages);\n\n // Validate and sanitize pagination link\n // Only accept relative paths starting with /api/v1/\n if (data.links.next) {\n const nextLink = data.links.next;\n if (nextLink.startsWith('/api/v1/topics/')) {\n nextPath = nextLink;\n } else {\n // Invalid pagination link - stop pagination\n nextPath = undefined;\n }\n } else {\n nextPath = undefined;\n }\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof MirrorNodeError) {\n throw error;\n }\n const err = error as Error;\n throw new MirrorNodeError(`Mirror node error: ${err.message}`, 0);\n }\n }\n\n return allMessages.slice(0, safeMaxMessages);\n }\n\n /**\n * Decode base64 message content\n */\n static decodeMessage(base64Message: string): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(base64Message, 'base64').toString('utf-8');\n }\n // Browser environment\n return atob(base64Message);\n }\n}\n\n/**\n * Mirror node error\n */\nexport class MirrorNodeError extends Error {\n constructor(\n message: string,\n public statusCode: number\n ) {\n super(message);\n this.name = 'MirrorNodeError';\n }\n}\n","/**\n * Validator Discovery Client\n *\n * Discover smart-engine validators by reading the HCS validator registry topic.\n * Provides methods to list validators and select random validators for connection.\n */\n\nimport { MirrorNodeClient, MIRROR_NODE_URLS } from './mirror-node';\n\n/**\n * Network endpoints for validator connectivity\n */\nexport interface ValidatorNetworkEndpoints {\n /** HTTP API endpoint (e.g., https://validator.example.com:3000) */\n apiEndpoint: string;\n /** NATS endpoint for peer-to-peer messaging */\n natsEndpoint?: string;\n /** Public IP for NAT traversal */\n publicIp?: string;\n /** NATS port if different from default */\n natsPort?: number;\n}\n\n/**\n * Validator metadata\n */\nexport interface ValidatorMetadata {\n /** Human-readable description */\n description?: string;\n /** Version string */\n version?: string;\n /** Tags for categorization */\n tags?: string[];\n /** Author/operator name */\n author?: string;\n}\n\n/**\n * Validator registry entry parsed from HCS\n */\nexport interface ValidatorInfo {\n /** Validator consensus timestamp (unique ID) */\n validatorTimestamp: string;\n /** Node ID (e.g., validator-1) */\n nodeId: string;\n /** Validator type */\n type: 'consensus' | 'tokens' | 'accounts' | 'network';\n /** Network endpoints for connectivity */\n networkEndpoints?: ValidatorNetworkEndpoints;\n /** Public key for peer authentication (Ed25519 hex) */\n publicKey?: string;\n /** Membership NFT serial number */\n membershipNftSerial?: number;\n /** Supported blockchain capabilities */\n capabilities?: string[];\n /** Validator metadata */\n metadata: ValidatorMetadata;\n /** When registered */\n registeredAt: string;\n /** Message type */\n messageType?: 'validator.join' | 'validator.leave' | 'validator.update';\n}\n\n/**\n * Validator discovery configuration\n */\nexport interface ValidatorDiscoveryConfig {\n /** Hedera network (mainnet, testnet, previewnet) */\n network: 'mainnet' | 'testnet' | 'previewnet';\n /** HCS topic ID for validator registry */\n registryTopicId: string;\n /** Cache TTL in milliseconds (default: 60000 = 1 minute) */\n cacheTtlMs?: number;\n /** Custom mirror node URL (optional) */\n mirrorNodeUrl?: string;\n /** Allow HTTP (insecure) connections - only for local development */\n allowInsecure?: boolean;\n}\n\n/**\n * Cached validators data\n */\ninterface ValidatorCache {\n validators: ValidatorInfo[];\n lastUpdated: number;\n}\n\n/**\n * Validator Discovery Client\n *\n * Discovers validators by reading the HCS validator registry topic\n * via Hedera mirror node API.\n *\n * @example\n * ```typescript\n * const discovery = new ValidatorDiscoveryClient({\n * network: 'testnet',\n * registryTopicId: '0.0.123456',\n * });\n *\n * const validators = await discovery.getValidators();\n * const randomValidator = await discovery.getRandomValidator();\n * ```\n */\nexport class ValidatorDiscoveryClient {\n private readonly mirrorNode: MirrorNodeClient;\n private readonly registryTopicId: string;\n private readonly cacheTtlMs: number;\n private cache: ValidatorCache | null = null;\n\n constructor(config: ValidatorDiscoveryConfig) {\n const mirrorNodeUrl = config.mirrorNodeUrl || MIRROR_NODE_URLS[config.network];\n if (!mirrorNodeUrl) {\n throw new Error(`Unknown network: ${config.network}`);\n }\n\n this.mirrorNode = new MirrorNodeClient({\n baseUrl: mirrorNodeUrl,\n allowInsecure: config.allowInsecure,\n });\n this.registryTopicId = config.registryTopicId;\n this.cacheTtlMs = config.cacheTtlMs ?? 60000; // 1 minute default\n }\n\n /**\n * Get all active validators from the registry\n *\n * Results are cached for efficiency. Use `forceRefresh` to bypass cache.\n *\n * @param forceRefresh - Force refresh from mirror node\n * @returns List of active validators\n */\n async getValidators(forceRefresh = false): Promise<ValidatorInfo[]> {\n // Return cached data if valid\n if (!forceRefresh && this.cache && this.isCacheValid()) {\n return this.cache.validators;\n }\n\n // Fetch from mirror node\n const messages = await this.mirrorNode.getAllTopicMessages(\n this.registryTopicId,\n 500 // Max messages to fetch\n );\n\n // Parse and deduplicate validators\n const validatorMap = new Map<string, ValidatorInfo>();\n const leftValidators = new Set<string>();\n\n // Process messages (newest first since we fetch desc order)\n for (const msg of messages) {\n try {\n const content = MirrorNodeClient.decodeMessage(msg.message);\n const raw = JSON.parse(content) as Record<string, unknown>;\n const entry = normalizeRegistryEntry(raw);\n if (!entry) continue;\n\n // Track leave events\n if (entry.messageType === 'validator.leave') {\n leftValidators.add(entry.nodeId);\n continue;\n }\n\n // Skip if validator has left\n if (leftValidators.has(entry.nodeId)) {\n continue;\n }\n\n // Keep only the latest entry per nodeId\n if (!validatorMap.has(entry.nodeId)) {\n validatorMap.set(entry.nodeId, entry);\n }\n } catch {\n // Skip unparseable messages\n continue;\n }\n }\n\n const validators = Array.from(validatorMap.values());\n\n // Update cache\n this.cache = {\n validators,\n lastUpdated: Date.now(),\n };\n\n return validators;\n }\n\n /**\n * Get validators with API endpoints available\n *\n * @param forceRefresh - Force refresh from mirror node\n * @returns Validators with apiEndpoint configured\n */\n async getValidatorsWithEndpoints(forceRefresh = false): Promise<ValidatorInfo[]> {\n const validators = await this.getValidators(forceRefresh);\n return validators.filter((v) => v.networkEndpoints?.apiEndpoint);\n }\n\n /**\n * Get a random validator from the registry\n *\n * @param forceRefresh - Force refresh from mirror node\n * @returns Random validator info or null if none available\n */\n async getRandomValidator(forceRefresh = false): Promise<ValidatorInfo | null> {\n const validators = await this.getValidatorsWithEndpoints(forceRefresh);\n\n if (validators.length === 0) {\n return null;\n }\n\n // Use crypto.getRandomValues for cryptographically secure random selection\n const randomBytes = new Uint32Array(1);\n crypto.getRandomValues(randomBytes);\n const randomIndex = randomBytes[0] % validators.length;\n return validators[randomIndex];\n }\n\n /**\n * Get a random validator API endpoint URL\n *\n * @param forceRefresh - Force refresh from mirror node\n * @returns Random validator API URL or null if none available\n */\n async getRandomValidatorUrl(forceRefresh = false): Promise<string | null> {\n const validator = await this.getRandomValidator(forceRefresh);\n return validator?.networkEndpoints?.apiEndpoint ?? null;\n }\n\n /**\n * Get validator by node ID\n *\n * @param nodeId - Validator node ID (e.g., 'validator-1')\n * @param forceRefresh - Force refresh from mirror node\n * @returns Validator info or null if not found\n */\n async getValidatorByNodeId(nodeId: string, forceRefresh = false): Promise<ValidatorInfo | null> {\n const validators = await this.getValidators(forceRefresh);\n return validators.find((v) => v.nodeId === nodeId) ?? null;\n }\n\n /**\n * Get validators by capability\n *\n * @param capability - Required capability (e.g., 'hedera', 'xrpl', 'dkg')\n * @param forceRefresh - Force refresh from mirror node\n * @returns Validators with the specified capability\n */\n async getValidatorsByCapability(\n capability: string,\n forceRefresh = false\n ): Promise<ValidatorInfo[]> {\n const validators = await this.getValidatorsWithEndpoints(forceRefresh);\n return validators.filter((v) => v.capabilities?.includes(capability));\n }\n\n /**\n * Clear the validator cache\n */\n clearCache(): void {\n this.cache = null;\n }\n\n /**\n * Check if cache is still valid\n */\n private isCacheValid(): boolean {\n if (!this.cache) return false;\n return Date.now() - this.cache.lastUpdated < this.cacheTtlMs;\n }\n}\n\n/**\n * Normalize a raw registry message into a ValidatorInfo.\n *\n * Accepts two shapes observed on real HCS registry topics:\n *\n * 1. Canonical (emitted by chain-hedera ValidatorRegistryService):\n * { messageType: 'validator.join'|'validator.leave'|'validator.update',\n * nodeId, networkEndpoints: { apiEndpoint, ... }, ... }\n *\n * 2. Legacy / multisig-consensus (emitted by ops / genesis scripts):\n * { type: 'validator.register', validatorId, endpoint, capabilities,\n * publicKey, accountId, network, ... }\n *\n * Token-scoped validator registrations (validatorType === 'token') are ignored\n * — those are DAO token validators, not node validators. Returns null when the\n * entry doesn't represent a node validator.\n */\nfunction normalizeRegistryEntry(raw: Record<string, unknown>): ValidatorInfo | null {\n // Canonical shape: already a ValidatorInfo\n if (raw.messageType && typeof raw.nodeId === 'string') {\n return raw as unknown as ValidatorInfo;\n }\n\n // Legacy shape: { type: 'validator.register', validatorId, endpoint, ... }\n if (raw.type === 'validator.register') {\n // Skip token validator registrations - they aren't nodes\n if (raw.validatorType && raw.validatorType !== undefined && raw.validatorType !== null) {\n if (typeof raw.validatorType === 'string' && raw.validatorType !== 'node') {\n return null;\n }\n }\n\n const nodeId =\n (typeof raw.validatorId === 'string' && raw.validatorId) ||\n (typeof raw.nodeId === 'string' && raw.nodeId) ||\n null;\n if (!nodeId) return null;\n\n const endpoint = typeof raw.endpoint === 'string' ? raw.endpoint : undefined;\n if (!endpoint) return null;\n\n const capabilities = Array.isArray(raw.capabilities)\n ? (raw.capabilities as unknown[]).filter((c): c is string => typeof c === 'string')\n : undefined;\n\n return {\n validatorTimestamp: typeof raw.timestamp === 'string' ? raw.timestamp : '',\n nodeId,\n type: 'consensus',\n networkEndpoints: { apiEndpoint: endpoint },\n publicKey: typeof raw.publicKey === 'string' ? raw.publicKey : undefined,\n capabilities,\n metadata: {},\n registeredAt: typeof raw.timestamp === 'string' ? raw.timestamp : '',\n messageType: 'validator.join',\n };\n }\n\n // Unknown / unrelated message type (e.g., token validator registrations)\n return null;\n}\n","/**\n * Validator Authentication Client\n *\n * Web3-style authentication for connecting to smart-engine validators.\n * Supports challenge-response authentication with Hedera, XRPL, Polkadot,\n * Stellar, or Solana wallets.\n */\n\n/**\n * Supported blockchain types for authentication.\n *\n * All five are verified end-to-end server-side by {@link Web3AuthService}\n * (Hedera ed25519, XRPL secp256k1/ed25519, Polkadot sr25519/ed25519,\n * Stellar ed25519, Solana ed25519). The partial-mode prepare guards\n * enforce `session.chain === request.chain`, so a caller who wants to\n * prepare sovereignty on chain X must authenticate with chain X's wallet.\n */\nexport type AuthChain = 'hedera' | 'xrpl' | 'polkadot' | 'stellar' | 'solana';\n\nconst SUPPORTED_AUTH_CHAINS: readonly AuthChain[] = [\n 'hedera',\n 'xrpl',\n 'polkadot',\n 'stellar',\n 'solana',\n];\n\n/**\n * Security configuration for auth client\n */\nexport interface SecurityConfig {\n /** Allow HTTP (insecure) connections - default false, use only for local development */\n allowInsecure?: boolean;\n}\n\n/**\n * Validate and sanitize a validator URL\n */\nfunction validateValidatorUrl(url: string, allowInsecure = false): string {\n try {\n const parsed = new URL(url);\n\n // Only allow http/https protocols\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n throw new ValidatorAuthError(`Invalid protocol: ${parsed.protocol}`, 400);\n }\n\n // Enforce HTTPS unless explicitly allowed for development\n if (!allowInsecure && parsed.protocol !== 'https:') {\n throw new ValidatorAuthError(\n 'HTTPS is required for validator connections. Set allowInsecure=true for local development.',\n 400\n );\n }\n\n // Block private IP ranges in production to prevent SSRF\n const hostname = parsed.hostname.toLowerCase();\n const isLocalhost = hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1';\n\n if (isLocalhost && !allowInsecure) {\n throw new ValidatorAuthError(\n 'Localhost connections blocked in secure mode. Set allowInsecure=true for local development.',\n 400\n );\n }\n\n return parsed.origin;\n } catch (error) {\n if (error instanceof ValidatorAuthError) {\n throw error;\n }\n throw new ValidatorAuthError(`Invalid validator URL: ${url}`, 400);\n }\n}\n\n/**\n * Sanitize input to prevent injection attacks\n */\nfunction sanitizeInput(input: string, fieldName: string, maxLength = 256): string {\n if (typeof input !== 'string') {\n throw new ValidatorAuthError(`${fieldName} must be a string`, 400);\n }\n\n if (input.length > maxLength) {\n throw new ValidatorAuthError(`${fieldName} exceeds maximum length of ${maxLength}`, 400);\n }\n\n // Remove any control characters\n return input.replace(/[\\x00-\\x1F\\x7F]/g, '');\n}\n\n/**\n * Challenge response from validator\n */\nexport interface ChallengeResponse {\n /** Whether the request was successful */\n success: boolean;\n /** Challenge string to sign */\n challenge: string;\n /** Informational message */\n message: string;\n /** Challenge expiration time */\n expiresIn: string;\n}\n\n/**\n * Authentication request payload\n */\nexport interface AuthenticateRequest {\n /** Blockchain type */\n chain: AuthChain;\n /** Wallet address (account ID for Hedera, address for XRPL) */\n address: string;\n /** Public key (hex encoded) */\n publicKey: string;\n /** Signed challenge (hex encoded signature) */\n signature: string;\n /** Original challenge string */\n challenge: string;\n /** Optional metadata */\n metadata?: {\n nodeId?: string;\n endpoint?: string;\n capabilities?: string[];\n appId?: string;\n appName?: string;\n };\n}\n\n/**\n * Authentication response with session token\n */\nexport interface AuthenticateResponse {\n /** JWT session token */\n token: string;\n /** Session ID */\n sessionId: string;\n /** Assigned validator ID */\n validatorId: string;\n /** Token expiration timestamp */\n expiresAt: string;\n /** Informational message */\n message: string;\n}\n\n/**\n * Session information\n */\nexport interface SessionInfo {\n /** Session ID */\n sessionId: string;\n /** Validator ID */\n validatorId: string;\n /** Wallet address */\n address: string;\n /** Blockchain type */\n chain: AuthChain;\n /** Session creation time */\n createdAt: string;\n /** Session expiration time */\n expiresAt: string;\n /** Whether session is valid */\n isValid: boolean;\n}\n\n/**\n * Validator auth configuration\n */\nexport interface ValidatorAuthConfig {\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Security configuration */\n security?: SecurityConfig;\n}\n\n/**\n * Validator Authentication Client\n *\n * Implements Web3-style challenge-response authentication:\n * 1. Request challenge from validator\n * 2. Sign challenge with wallet private key\n * 3. Authenticate with signed challenge to get session token\n *\n * @example\n * ```typescript\n * const auth = new ValidatorAuthClient();\n *\n * // Request challenge\n * const challenge = await auth.requestChallenge(\n * 'https://validator.example.com',\n * 'hedera',\n * '0.0.123456'\n * );\n *\n * // Sign challenge (using @hashgraph/sdk)\n * const signature = auth.signChallengeHedera(challenge.challenge, privateKey);\n *\n * // Authenticate\n * const session = await auth.authenticate('https://validator.example.com', {\n * chain: 'hedera',\n * address: '0.0.123456',\n * publicKey: publicKeyHex,\n * signature,\n * challenge: challenge.challenge,\n * });\n *\n * console.log('Token:', session.token);\n * ```\n */\nexport class ValidatorAuthClient {\n private readonly timeout: number;\n private readonly allowInsecure: boolean;\n\n constructor(config?: ValidatorAuthConfig) {\n this.timeout = config?.timeout ?? 30000;\n this.allowInsecure = config?.security?.allowInsecure ?? false;\n }\n\n /**\n * Request authentication challenge from validator\n *\n * @param validatorUrl - Validator API base URL\n * @param chain - Blockchain type\n * @param address - Wallet address\n * @returns Challenge to sign\n */\n async requestChallenge(\n validatorUrl: string,\n chain: AuthChain,\n address: string\n ): Promise<ChallengeResponse> {\n // Validate and sanitize inputs\n const safeUrl = validateValidatorUrl(validatorUrl, this.allowInsecure);\n const safeAddress = sanitizeInput(address, 'address', 128);\n\n if (!SUPPORTED_AUTH_CHAINS.includes(chain)) {\n throw new ValidatorAuthError(`Invalid chain type: ${chain}`, 400);\n }\n\n const url = `${safeUrl}/auth/validator/challenge`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ chain, address: safeAddress }),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new ValidatorAuthError(\n `Challenge request failed: ${response.status} ${response.statusText}`,\n response.status,\n error\n );\n }\n\n return (await response.json()) as ChallengeResponse;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof ValidatorAuthError) {\n throw error;\n }\n const err = error as Error;\n if (err.name === 'AbortError') {\n throw new ValidatorAuthError('Challenge request timeout', 408);\n }\n throw new ValidatorAuthError(`Challenge request failed: ${err.message}`, 0);\n }\n }\n\n /**\n * Authenticate with signed challenge\n *\n * @param validatorUrl - Validator API base URL\n * @param request - Authentication request with signature\n * @returns Session token and info\n */\n async authenticate(\n validatorUrl: string,\n request: AuthenticateRequest\n ): Promise<AuthenticateResponse> {\n // Validate URL\n const safeUrl = validateValidatorUrl(validatorUrl, this.allowInsecure);\n\n // Validate and sanitize request fields\n const sanitizedRequest: AuthenticateRequest = {\n chain: request.chain,\n address: sanitizeInput(request.address, 'address', 128),\n publicKey: sanitizeInput(request.publicKey, 'publicKey', 512),\n signature: sanitizeInput(request.signature, 'signature', 1024),\n challenge: sanitizeInput(request.challenge, 'challenge', 512),\n metadata: request.metadata\n ? {\n nodeId: request.metadata.nodeId\n ? sanitizeInput(request.metadata.nodeId, 'nodeId', 64)\n : undefined,\n endpoint: request.metadata.endpoint\n ? sanitizeInput(request.metadata.endpoint, 'endpoint', 256)\n : undefined,\n capabilities: request.metadata.capabilities,\n appId: request.metadata.appId\n ? sanitizeInput(request.metadata.appId, 'appId', 64)\n : undefined,\n appName: request.metadata.appName\n ? sanitizeInput(request.metadata.appName, 'appName', 128)\n : undefined,\n }\n : undefined,\n };\n\n if (!SUPPORTED_AUTH_CHAINS.includes(sanitizedRequest.chain)) {\n throw new ValidatorAuthError(`Invalid chain type: ${sanitizedRequest.chain}`, 400);\n }\n\n // Validate signature is hex\n if (!/^[0-9a-fA-F]+$/.test(sanitizedRequest.signature.replace(/_.*$/, ''))) {\n throw new ValidatorAuthError('Invalid signature format: must be hex encoded', 400);\n }\n\n const url = `${safeUrl}/auth/validator/authenticate`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(sanitizedRequest),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new ValidatorAuthError(\n `Authentication failed: ${response.status} ${response.statusText}`,\n response.status,\n error\n );\n }\n\n return (await response.json()) as AuthenticateResponse;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof ValidatorAuthError) {\n throw error;\n }\n const err = error as Error;\n if (err.name === 'AbortError') {\n throw new ValidatorAuthError('Authentication request timeout', 408);\n }\n throw new ValidatorAuthError(`Authentication failed: ${err.message}`, 0);\n }\n }\n\n /**\n * Get current session info\n *\n * @param validatorUrl - Validator API base URL\n * @param token - Session token\n * @returns Session information\n */\n async getSession(validatorUrl: string, token: string): Promise<SessionInfo> {\n // Validate URL and token\n const safeUrl = validateValidatorUrl(validatorUrl, this.allowInsecure);\n const safeToken = sanitizeInput(token, 'token', 2048);\n\n const url = `${safeUrl}/auth/validator/session`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${safeToken}`,\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new ValidatorAuthError(\n `Session request failed: ${response.status} ${response.statusText}`,\n response.status,\n error\n );\n }\n\n return (await response.json()) as SessionInfo;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof ValidatorAuthError) {\n throw error;\n }\n const err = error as Error;\n if (err.name === 'AbortError') {\n throw new ValidatorAuthError('Session request timeout', 408);\n }\n throw new ValidatorAuthError(`Session request failed: ${err.message}`, 0);\n }\n }\n\n /**\n * Sign challenge with Hedera private key\n *\n * @param challenge - Challenge string from validator\n * @param privateKey - Hedera PrivateKey instance from @hashgraph/sdk\n * @returns Hex-encoded signature\n */\n signChallengeHedera(challenge: string, privateKey: any): string {\n // privateKey should be a PrivateKey from @hashgraph/sdk\n const messageBytes = Buffer.from(challenge, 'utf-8');\n const signature = privateKey.sign(messageBytes);\n return Buffer.from(signature).toString('hex');\n }\n\n /**\n * Sign challenge with XRPL wallet\n *\n * @param challenge - Challenge string from validator\n * @param wallet - XRPL Wallet instance from xrpl library\n * @returns Hex-encoded signature\n */\n signChallengeXRPL(challenge: string, wallet: any): string {\n // wallet should be a Wallet from xrpl library\n // XRPL uses sign() method which returns base58 or hex\n const signature = wallet.sign(challenge);\n // If it's already hex, return as-is, otherwise convert\n if (typeof signature === 'string' && /^[0-9A-Fa-f]+$/.test(signature)) {\n return signature;\n }\n return Buffer.from(signature).toString('hex');\n }\n\n /**\n * Complete authentication flow in one call\n *\n * @param validatorUrl - Validator API base URL\n * @param chain - Blockchain type\n * @param address - Wallet address\n * @param publicKey - Public key (hex)\n * @param signFn - Function to sign the challenge\n * @param metadata - Optional metadata\n * @returns Session token and info\n */\n async authenticateWithSigner(\n validatorUrl: string,\n chain: AuthChain,\n address: string,\n publicKey: string,\n signFn: (challenge: string) => string | Promise<string>,\n metadata?: AuthenticateRequest['metadata']\n ): Promise<AuthenticateResponse> {\n // Step 1: Request challenge\n const challengeResponse = await this.requestChallenge(validatorUrl, chain, address);\n\n // Step 2: Sign challenge\n const signature = await signFn(challengeResponse.challenge);\n\n // Step 3: Authenticate\n return this.authenticate(validatorUrl, {\n chain,\n address,\n publicKey,\n signature,\n challenge: challengeResponse.challenge,\n metadata,\n });\n }\n}\n\n/**\n * Authentication error\n */\nexport class ValidatorAuthError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public details?: any\n ) {\n super(message);\n this.name = 'ValidatorAuthError';\n }\n}\n","/**\n * Shared HTTP Client\n *\n * Unified HTTP layer used by all SDK clients (SmartEngineClient, SmartGatewayClient, BaasClient).\n * Handles authentication headers, timeouts, error handling, and multipart uploads.\n */\n\n/**\n * HTTP client interface consumed by all sub-clients.\n * Sub-clients only depend on this interface, never on fetch directly.\n */\nexport type HttpClient = {\n post<T = any>(path: string, body: unknown): Promise<T>;\n get<T = any>(path: string): Promise<T>;\n put<T = any>(path: string, body: unknown): Promise<T>;\n delete<T = any>(path: string): Promise<T>;\n /** Upload a file with multipart/form-data */\n upload<T = any>(path: string, file: Blob | Buffer, filename: string, metadata?: Record<string, string>): Promise<T>;\n};\n\n/**\n * Configuration for creating an HttpClient instance\n */\nexport type HttpClientConfig = {\n /** Base URL for all requests (e.g. https://validator.example.com/api/v3) */\n baseUrl: string;\n /** Bearer token for Authorization header */\n authToken?: string;\n /** API key for X-API-Key header */\n apiKey?: string;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n};\n\n/**\n * SDK-level error class used across all clients\n */\nexport class SdkHttpError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly details?: any\n ) {\n super(message);\n this.name = 'SdkHttpError';\n }\n}\n\n/**\n * Create a concrete HttpClient from config.\n * This is the single place where `fetch` is called in the entire SDK.\n */\nexport function createHttpClient(config: HttpClientConfig): HttpClient {\n const timeout = config.timeout ?? 30000;\n\n function getHeaders(contentType?: string): Record<string, string> {\n const headers: Record<string, string> = {};\n if (contentType) {\n headers['Content-Type'] = contentType;\n }\n if (config.authToken) {\n headers['Authorization'] = `Bearer ${config.authToken}`;\n }\n if (config.apiKey) {\n headers['X-API-Key'] = config.apiKey;\n }\n return headers;\n }\n\n /** Update auth token (e.g. after authentication flow) */\n function setAuthToken(token: string): void {\n config.authToken = token;\n }\n\n async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${config.baseUrl}${path}`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const init: RequestInit = {\n method,\n headers: getHeaders('application/json'),\n signal: controller.signal,\n };\n\n if (body !== undefined) {\n init.body = JSON.stringify(body);\n }\n\n const response = await fetch(url, init);\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({})) as Record<string, unknown>;\n throw new SdkHttpError(\n (errorData.message as string) || `API error: ${response.status} ${response.statusText}`,\n response.status,\n errorData\n );\n }\n\n // Handle empty responses (204 No Content)\n const text = await response.text();\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof SdkHttpError) throw error;\n const err = error as Error;\n if (err.name === 'AbortError') {\n throw new SdkHttpError('Request timeout', 408);\n }\n throw new SdkHttpError(`Network error: ${err.message}`, 0, error);\n }\n }\n\n async function upload<T>(\n path: string,\n file: Blob | Buffer,\n filename: string,\n metadata?: Record<string, string>\n ): Promise<T> {\n const url = `${config.baseUrl}${path}`;\n const controller = new AbortController();\n // Uploads get 2x timeout\n const timeoutId = setTimeout(() => controller.abort(), timeout * 2);\n\n try {\n const formData = new FormData();\n const blob = file instanceof Blob ? file : new Blob([new Uint8Array(file as Buffer)]);\n formData.append('file', blob, filename);\n\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n formData.append(key, value);\n }\n }\n\n // Don't set Content-Type — browser/node will set multipart boundary\n const headers: Record<string, string> = {};\n if (config.authToken) {\n headers['Authorization'] = `Bearer ${config.authToken}`;\n }\n if (config.apiKey) {\n headers['X-API-Key'] = config.apiKey;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: formData,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({})) as Record<string, unknown>;\n throw new SdkHttpError(\n (errorData.message as string) || `Upload error: ${response.status} ${response.statusText}`,\n response.status,\n errorData\n );\n }\n\n return response.json() as Promise<T>;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof SdkHttpError) throw error;\n const err = error as Error;\n if (err.name === 'AbortError') {\n throw new SdkHttpError('Upload timeout', 408);\n }\n throw new SdkHttpError(`Upload error: ${err.message}`, 0, error);\n }\n }\n\n const client: HttpClient & { setAuthToken: typeof setAuthToken } = {\n post: <T>(path: string, body: unknown) => request<T>('POST', path, body),\n get: <T>(path: string) => request<T>('GET', path),\n put: <T>(path: string, body: unknown) => request<T>('PUT', path, body),\n delete: <T>(path: string) => request<T>('DELETE', path),\n upload,\n setAuthToken,\n };\n\n return client;\n}\n\n/**\n * Encode a path parameter to prevent injection attacks.\n * Removes path traversal attempts and encodes special characters.\n */\nexport function encodePathParam(param: string): string {\n return encodeURIComponent(param).replace(/%2F/gi, '');\n}\n","/**\n * Subscription Sub-Client\n *\n * Manages application subscriptions for using the validator network.\n */\n\n/**\n * Subscription tier names\n *\n * - free_testnet: Free tier limited to testnet/previewnet\n * - starter: Entry-level paid tier\n * - professional: Mid-tier with advanced features\n * - enterprise: Full-featured enterprise tier\n */\nexport type SubscriptionTierName = 'free_testnet' | 'starter' | 'professional' | 'enterprise';\n\n/**\n * Subscription statuses\n */\nexport type SubscriptionStatus =\n | 'pending_deposit'\n | 'deposit_confirmed'\n | 'active'\n | 'expired'\n | 'cancelled';\n\n/**\n * Deposit wallet statuses\n */\nexport type DepositWalletStatus = 'pending' | 'locked' | 'expired' | 'slashed' | 'released';\n\n/**\n * Subscription tier information for API responses\n */\nexport type SubscriptionTierInfo = {\n /** Tier name identifier */\n name: SubscriptionTierName;\n /** Display name for UI */\n displayName: string;\n /** Tier description */\n description: string;\n /** Monthly price in USD */\n priceUsd: number;\n /** Deposit amount in HSUITE tokens */\n depositAmount: string;\n /** API calls per day limit */\n apiCallsPerDay: number;\n /** Supported networks for this tier */\n supportedNetworks: ('hedera' | 'xrpl')[];\n /** Additional features included in this tier */\n features: string[];\n};\n\n/**\n * Subscription request\n */\nexport type SubscriptionRequest = {\n /** Application ID */\n appId: string;\n /** Application name */\n appName: string;\n /** Developer's account ID on the chosen chain */\n developerAccountId: string;\n /** Chain for deposit */\n chain: 'hedera' | 'xrpl';\n /** Selected subscription tier */\n selectedTier: SubscriptionTierName;\n /** Selected networks to support */\n selectedNetworks: ('hedera' | 'xrpl')[];\n /** App logo URL (optional) */\n logoUrl?: string;\n /** App description (optional) */\n appDescription?: string;\n /** Additional metadata (optional) */\n metadata?: Record<string, unknown>;\n};\n\n/**\n * Subscription response\n */\nexport type SubscriptionResponse = {\n success: boolean;\n subscriptionId?: string;\n status?: SubscriptionStatus;\n depositInstructions?: {\n walletAddress: string;\n tokenId: string;\n amount: string;\n chain: string;\n };\n message: string;\n};\n\n/**\n * Subscription status response\n */\nexport type SubscriptionStatusResponse = {\n appId: string;\n hasSubscription: boolean;\n subscriptionId?: string;\n appName?: string;\n status: SubscriptionStatus | 'not_found';\n depositWallet?: {\n walletAddress: string;\n chain: string;\n depositAmount: string;\n actualDepositAmount?: string;\n status: DepositWalletStatus;\n lockedUntil?: string;\n };\n subscriptionNftSerial?: number;\n expiresAt?: string;\n remainingBalance?: string;\n createdAt?: string;\n /** Current subscription tier */\n tier?: SubscriptionTierName;\n /** Networks selected for this subscription */\n selectedNetworks?: string[];\n /** API calls made today */\n apiCallsToday?: number;\n /** Daily API call limit based on tier */\n apiCallsLimit?: number;\n};\n\n/**\n * Mint NFT response\n */\nexport type MintNftResponse = {\n success: boolean;\n subscriptionId?: string;\n appId?: string;\n expiresAt?: string;\n message: string;\n};\n\n/**\n * Subscription renewal request\n */\nexport type SubscriptionRenewalRequest = {\n appId: string;\n additionalDays?: number;\n};\n\n/**\n * Subscription renewal response\n */\nexport type SubscriptionRenewalResponse = {\n success: boolean;\n appId: string;\n status?: string;\n newExpiresAt?: string;\n message: string;\n};\n\n/**\n * Subscription configuration\n */\nexport type SubscriptionConfig = {\n subscriptionDepositAmount: string;\n lockDurationDays: number;\n renewalWindowDays: number;\n hsuiteTokenIds: Record<string, string>;\n /** Available subscription tiers */\n availableTiers: SubscriptionTierInfo[];\n};\n\n/**\n * Subscription list response\n */\nexport type SubscriptionListResponse = {\n count: number;\n subscriptions: Array<{\n subscriptionId: string;\n appId: string;\n appName: string;\n status: SubscriptionStatus;\n expiresAt?: string;\n createdAt: string;\n }>;\n};\n\n/**\n * Balance response\n */\nexport type BalanceResponse = {\n appId: string;\n subscriptionId: string;\n status: SubscriptionStatus;\n remainingBalance: string;\n expiresAt?: string;\n};\n\nimport type { HttpClient } from '../http';\n\n/**\n * Subscription Sub-Client\n *\n * Manages application subscriptions including:\n * - Subscription requests with deposit wallets\n * - Deposit verification and NFT minting\n * - Subscription renewal\n * - Balance checking\n */\nexport class SubscriptionClient {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Request a new subscription.\n * Creates a deposit wallet and returns deposit instructions.\n */\n async request(request: SubscriptionRequest): Promise<SubscriptionResponse> {\n return this.http.post('/subscription/request', request);\n }\n\n /**\n * Get subscription status by app ID\n */\n async getStatus(appId: string): Promise<SubscriptionStatusResponse> {\n return this.http.get(`/subscription/status/${encodeURIComponent(appId)}`);\n }\n\n /**\n * Mint subscription NFT after deposit is confirmed\n */\n async mintNft(appId: string): Promise<MintNftResponse> {\n return this.http.post(`/subscription/mint/${encodeURIComponent(appId)}`, {});\n }\n\n /**\n * Renew subscription by extending period\n */\n async renew(request: SubscriptionRenewalRequest): Promise<SubscriptionRenewalResponse> {\n return this.http.post('/subscription/renew', request);\n }\n\n /**\n * Fetch available subscription tiers from the network.\n *\n * Use this instead of hard-coding tier names -- the validator returns the\n * canonical list of tiers together with pricing, limits, and features.\n *\n * @returns Array of {@link SubscriptionTierInfo} objects.\n *\n * @example\n * ```typescript\n * const tiers = await subscription.getTiers();\n * console.log(tiers.map(t => `${t.name}: $${t.priceUsd}/mo`));\n * ```\n */\n async getTiers(): Promise<SubscriptionTierInfo[]> {\n try {\n return await this.http.get<SubscriptionTierInfo[]>('/subscription/tiers');\n } catch (err) {\n // Backwards compatibility: older validator builds don't have the\n // dedicated /tiers endpoint yet. Fall back to /config, which\n // returns the same tiers under `availableTiers` (though in the\n // raw pricing-core shape rather than SubscriptionTierInfo).\n const isNotFound =\n err != null &&\n typeof err === 'object' &&\n 'statusCode' in err &&\n (err as { statusCode?: number }).statusCode === 404;\n if (!isNotFound) throw err;\n const cfg = await this.http.get<{\n availableTiers: Array<Record<string, unknown>>;\n }>('/subscription/config');\n // Normalize: pricing-core's SubscriptionTierConfig uses\n // { tier, name, monthlyPriceHsuite, allowedNetworks, ... } — map\n // to the SDK contract so callers see a stable shape across\n // server versions.\n return (cfg.availableTiers || []).map((raw) => {\n const tier = (raw.tier ?? raw.name) as SubscriptionTierName;\n const displayName = (raw.name ?? raw.displayName ?? String(tier)) as string;\n const monthlyPriceHsuite = Number(\n raw.monthlyPriceHsuite ?? raw.depositAmount ?? 0\n );\n const apiCallsPerDay = Number(raw.apiCallsPerDay ?? 0);\n const rawNetworks = (raw.allowedNetworks ?? raw.supportedNetworks ?? []) as string[];\n const supportedNetworks: ('hedera' | 'xrpl')[] = rawNetworks.some(\n (n) => n === 'mainnet'\n )\n ? ['hedera', 'xrpl']\n : ['hedera'];\n return {\n name: tier,\n displayName,\n description:\n (raw.description as string | undefined) ??\n `${displayName} tier`,\n priceUsd: Number(raw.priceUsd ?? 0),\n depositAmount: String(monthlyPriceHsuite),\n apiCallsPerDay: Number.isFinite(apiCallsPerDay)\n ? apiCallsPerDay\n : Number.MAX_SAFE_INTEGER,\n supportedNetworks,\n features: (raw.features as string[]) ?? [],\n };\n });\n }\n }\n\n /**\n * Get subscription configuration\n */\n async getConfig(): Promise<SubscriptionConfig> {\n return this.http.get('/subscription/config');\n }\n\n /**\n * List all subscriptions\n */\n async list(): Promise<SubscriptionListResponse> {\n return this.http.get('/subscription/list');\n }\n\n /**\n * List subscriptions by status\n */\n async listByStatus(status: SubscriptionStatus): Promise<SubscriptionListResponse> {\n return this.http.get(`/subscription/list/status/${encodeURIComponent(status)}`);\n }\n\n /**\n * Get subscription balance\n */\n async getBalance(appId: string): Promise<BalanceResponse> {\n return this.http.get(`/subscription/balance/${encodeURIComponent(appId)}`);\n }\n}\n","/**\n * TSS (Threshold Signature Scheme) Sub-Client\n *\n * Provides access to TSS/MPC operations for multi-sig entity management.\n * All operations are chain-agnostic — pass `chain` as a parameter.\n */\nimport type {\n EntityCreationOptions,\n EntityCreationResponse,\n ReshareRequest,\n ReshareResponse,\n EntityDetails,\n MPCSigningRequest,\n MPCSigningResponse,\n ValidatorListResponse,\n TSSStats,\n EntityListResponse,\n TSSHealthResponse,\n CeremonyListResponse,\n MultiSigStatusResponse,\n} from './types';\nimport type { HttpClient } from '../http';\n\nexport * from './types';\n\n/**\n * TSS Sub-Client\n *\n * Manages Threshold Signature Scheme operations including:\n * - Multi-sig entity creation (chain-agnostic)\n * - Key resharing for membership changes\n * - MPC transaction signing for any supported chain\n * - DKG ceremony monitoring\n *\n * @example\n * ```typescript\n * // Sign a transaction on any chain\n * const result = await client.tss.signMPC({\n * chain: 'hedera',\n * entityId: 'entity-123',\n * transactionBytes: '0x...',\n * });\n * ```\n */\nexport class TSSClient {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a multi-sig entity with TSS\n */\n async createEntity(options: EntityCreationOptions): Promise<EntityCreationResponse> {\n return this.http.post('/tss/entity/create', options);\n }\n\n /**\n * Reshare keys when cluster membership changes.\n * Redistributes secret shares WITHOUT changing public keys.\n */\n async reshareCluster(request: ReshareRequest): Promise<ReshareResponse> {\n return this.http.post('/tss/cluster/reshare', request);\n }\n\n /**\n * Get entity details by ID\n */\n async getEntity(entityId: string): Promise<EntityDetails> {\n return this.http.get(`/tss/entity/${encodeURIComponent(entityId)}`);\n }\n\n /**\n * Sign a transaction using MPC — chain-agnostic.\n * Routes to the correct chain backend based on the `chain` parameter.\n *\n * @param request - MPC signing request with chain, entityId, and transaction bytes\n */\n async signMPC(request: MPCSigningRequest): Promise<MPCSigningResponse> {\n const chain = request.chain || 'hedera';\n return this.http.post(`/tss/${encodeURIComponent(chain)}/sign-mpc`, request);\n }\n\n /**\n * Get known validators and their public keys\n */\n async getValidators(): Promise<ValidatorListResponse> {\n return this.http.get('/tss/validators');\n }\n\n /**\n * Force announcement of this node's public key\n */\n async announceKey(): Promise<{ success: boolean; message: string }> {\n return this.http.post('/tss/announce', {});\n }\n\n /**\n * Get TSS statistics\n */\n async getStats(): Promise<TSSStats> {\n return this.http.get('/tss/stats');\n }\n\n /**\n * List all TSS entities\n */\n async listEntities(): Promise<EntityListResponse> {\n return this.http.get('/tss/entities');\n }\n\n /**\n * TSS health check\n */\n async getHealth(): Promise<TSSHealthResponse> {\n return this.http.get('/tss/health');\n }\n\n /**\n * List DKG ceremonies and their statistics\n */\n async listCeremonies(): Promise<CeremonyListResponse> {\n return this.http.get('/tss/multisig/ceremonies');\n }\n\n /**\n * Get multi-sig transaction status by transaction ID\n */\n async getMultiSigStatus(txId: string): Promise<MultiSigStatusResponse> {\n return this.http.get(`/tss/multisig/transactions/${encodeURIComponent(txId)}`);\n }\n}\n","/**\n * IPFS Sub-Client\n *\n * Provides access to IPFS operations for decentralized file storage.\n *\n * @example\n * ```typescript\n * // Upload a file\n * const result = await client.ipfs.upload(fileBuffer, 'document.pdf');\n *\n * // Pin content\n * await client.ipfs.pin(result.cid);\n *\n * // Get file\n * const file = await client.ipfs.getFile(result.cid);\n * ```\n */\nimport type { HttpClient } from '../http';\nimport type {\n IpfsUploadResult,\n IpfsPinResult,\n IpfsFileMetadata,\n IpfsPinListResponse,\n IpfsStatusResponse,\n IpfsStorageUsageResponse,\n} from './types';\n\nexport * from './types';\n\n/**\n * IPFS Sub-Client\n *\n * Manages IPFS operations including:\n * - File upload and retrieval\n * - Content pinning and unpinning\n * - Metadata queries\n * - Storage usage monitoring\n */\nexport class IPFSClient {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Upload a file to IPFS\n *\n * @param file - File data as Blob or Buffer\n * @param filename - Name of the file\n * @param metadata - Optional metadata key-value pairs\n * @returns Upload result with CID\n */\n async upload(\n file: Blob | Buffer,\n filename: string,\n metadata?: Record<string, string>\n ): Promise<IpfsUploadResult> {\n return this.http.upload('/ipfs/upload', file, filename, metadata);\n }\n\n /**\n * Pin content by CID to ensure it persists\n */\n async pin(cid: string): Promise<IpfsPinResult> {\n return this.http.post(`/ipfs/pin/${encodeURIComponent(cid)}`, {});\n }\n\n /**\n * Unpin content by CID\n */\n async unpin(cid: string): Promise<IpfsPinResult> {\n return this.http.delete(`/ipfs/unpin/${encodeURIComponent(cid)}`);\n }\n\n /**\n * Get a file by CID\n */\n async getFile(cid: string): Promise<any> {\n return this.http.get(`/ipfs/file/${encodeURIComponent(cid)}`);\n }\n\n /**\n * Get raw content by CID\n */\n async getContent(cid: string): Promise<any> {\n return this.http.get(`/ipfs/${encodeURIComponent(cid)}`);\n }\n\n /**\n * Get file metadata by CID\n */\n async getMetadata(cid: string): Promise<IpfsFileMetadata> {\n return this.http.get(`/ipfs/metadata/${encodeURIComponent(cid)}`);\n }\n\n /**\n * List all pinned content\n */\n async listPins(): Promise<IpfsPinListResponse> {\n return this.http.get('/ipfs/pins');\n }\n\n /**\n * Get IPFS node status\n */\n async getStatus(): Promise<IpfsStatusResponse> {\n return this.http.get('/ipfs/status');\n }\n\n /**\n * Get storage usage information\n */\n async getStorageUsage(): Promise<IpfsStorageUsageResponse> {\n return this.http.get('/ipfs/storage');\n }\n}\n","/**\n * Transactions Sub-Client\n *\n * Provides transaction preparation for the sovereignty model:\n * transactions are prepared on the validator but signed locally by the user.\n *\n * @example\n * ```typescript\n * // Prepare a transfer\n * const prepared = await client.transactions.prepareTransfer({\n * chain: 'hedera',\n * from: '0.0.123',\n * to: '0.0.456',\n * amount: '100',\n * });\n *\n * // Sign locally with your private key\n * const signed = privateKey.sign(Buffer.from(prepared.transactionBytes, 'hex'));\n *\n * // Submit the signed transaction\n * ```\n */\nimport type { HttpClient } from '../http';\nimport type {\n PreparedTransaction,\n PrepareTransferRequest,\n PrepareNftMintRequest,\n PrepareNftBurnRequest,\n PrepareNftTransferRequest,\n PrepareTokenCreateRequest,\n PrepareTokenMintRequest,\n PrepareTokenBurnRequest,\n PrepareTokenAssociationRequest,\n PrepareTokenPauseRequest,\n PrepareTokenUnpauseRequest,\n PrepareTokenRestrictRequest,\n PrepareTokenUnrestrictRequest,\n PrepareTokenComplianceEnableRequest,\n PrepareTokenComplianceDisableRequest,\n PrepareTokenWipeRequest,\n PrepareTopicCreateRequest,\n PrepareTopicMessageRequest,\n PrepareTrustLineRequest,\n TransactionInfoResponse,\n} from './types';\n\nexport * from './types';\n\n/**\n * Transactions Sub-Client\n *\n * Transaction sovereignty: prepare on validator, sign locally.\n * Covers all transaction types across all supported chains.\n *\n * NOTE: This client uses /api/transactions (not /api/v3).\n * The HttpClient must be configured with the correct base URL.\n */\nexport class TransactionsClient {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Get transaction preparation service info\n */\n async getInfo(): Promise<TransactionInfoResponse> {\n return this.http.get('/info');\n }\n\n /**\n * Prepare a transfer transaction for local signing\n */\n async prepareTransfer(request: PrepareTransferRequest): Promise<PreparedTransaction> {\n return this.http.post('/transfer/prepare', request);\n }\n\n /**\n * Prepare an NFT mint transaction\n */\n async prepareNftMint(request: PrepareNftMintRequest): Promise<PreparedTransaction> {\n return this.http.post('/nft/mint/prepare', request);\n }\n\n /**\n * Prepare an NFT burn transaction\n */\n async prepareNftBurn(request: PrepareNftBurnRequest): Promise<PreparedTransaction> {\n return this.http.post('/nft/burn/prepare', request);\n }\n\n /**\n * Prepare an NFT transfer transaction\n */\n async prepareNftTransfer(request: PrepareNftTransferRequest): Promise<PreparedTransaction> {\n return this.http.post('/nft/transfer/prepare', request);\n }\n\n /**\n * Prepare a token creation transaction\n */\n async prepareTokenCreate(request: PrepareTokenCreateRequest): Promise<PreparedTransaction> {\n return this.http.post('/token/create/prepare', request);\n }\n\n /**\n * Prepare a token mint transaction\n */\n async prepareTokenMint(request: PrepareTokenMintRequest): Promise<PreparedTransaction> {\n return this.http.post('/token/mint/prepare', request);\n }\n\n /**\n * Prepare a fungible token burn transaction (Hedera).\n *\n * For NFT burn use `prepareNftBurn` with a serialNumber.\n */\n async prepareTokenBurn(request: PrepareTokenBurnRequest): Promise<PreparedTransaction> {\n return this.http.post('/token/burn/prepare', request);\n }\n\n /**\n * Prepare a token association transaction\n */\n async prepareTokenAssociation(\n request: PrepareTokenAssociationRequest\n ): Promise<PreparedTransaction> {\n return this.http.post('/token/associate/prepare', request);\n }\n\n // ── Capability actions (Hedera) ──────────────────────────────────────\n\n /** Prepare a token pause transaction (capability: pausable). */\n async prepareTokenPause(request: PrepareTokenPauseRequest): Promise<PreparedTransaction> {\n return this.http.post('/token/pause/prepare', request);\n }\n\n /** Prepare a token unpause transaction (capability: pausable). */\n async prepareTokenUnpause(request: PrepareTokenUnpauseRequest): Promise<PreparedTransaction> {\n return this.http.post('/token/unpause/prepare', request);\n }\n\n /**\n * Prepare a token restrict (freeze account) transaction (capability:\n * restrictable). Freezes `accountId` from transacting `tokenId`.\n */\n async prepareTokenRestrict(request: PrepareTokenRestrictRequest): Promise<PreparedTransaction> {\n return this.http.post('/token/restrict/prepare', request);\n }\n\n /** Prepare a token unrestrict (unfreeze account) transaction. */\n async prepareTokenUnrestrict(\n request: PrepareTokenUnrestrictRequest\n ): Promise<PreparedTransaction> {\n return this.http.post('/token/unrestrict/prepare', request);\n }\n\n /**\n * Prepare a token compliance-enable (grant KYC) transaction (capability:\n * compliant).\n */\n async prepareTokenComplianceEnable(\n request: PrepareTokenComplianceEnableRequest\n ): Promise<PreparedTransaction> {\n return this.http.post('/token/compliance/enable/prepare', request);\n }\n\n /** Prepare a token compliance-disable (revoke KYC) transaction. */\n async prepareTokenComplianceDisable(\n request: PrepareTokenComplianceDisableRequest\n ): Promise<PreparedTransaction> {\n return this.http.post('/token/compliance/disable/prepare', request);\n }\n\n /**\n * Prepare a token wipe transaction (capability: wipeable). Force-removes\n * `amount` of `tokenId` from `accountId`.\n */\n async prepareTokenWipe(request: PrepareTokenWipeRequest): Promise<PreparedTransaction> {\n return this.http.post('/token/wipe/prepare', request);\n }\n\n /**\n * Prepare a topic creation transaction\n */\n async prepareTopicCreate(request: PrepareTopicCreateRequest): Promise<PreparedTransaction> {\n return this.http.post('/topic/create/prepare', request);\n }\n\n /**\n * Prepare a topic message submission transaction\n */\n async prepareTopicMessage(request: PrepareTopicMessageRequest): Promise<PreparedTransaction> {\n return this.http.post('/topic/message/prepare', request);\n }\n\n /**\n * Prepare a trust line transaction (e.g. XRPL trust lines)\n */\n async prepareTrustLine(request: PrepareTrustLineRequest): Promise<PreparedTransaction> {\n return this.http.post('/trustline/prepare', request);\n }\n}\n","/**\n * Snapshots Sub-Client\n *\n * Provides token holder snapshot generation and retrieval.\n *\n * @example\n * ```typescript\n * // Generate a snapshot\n * const { snapshotId } = await client.snapshots.generate('0.0.12345');\n *\n * // Check status\n * const info = await client.snapshots.get(snapshotId);\n *\n * // Download when ready\n * const data = await client.snapshots.download(snapshotId, 'csv');\n * ```\n */\nimport type { HttpClient } from '../http';\nimport type {\n SnapshotInfo,\n SnapshotGenerateOptions,\n SnapshotGenerateResponse,\n SnapshotListResponse,\n SnapshotFormat,\n PaginationOptions,\n} from './types';\n\nexport * from './types';\n\n/**\n * Snapshots Sub-Client\n *\n * Manages token holder snapshots:\n * - Generate point-in-time snapshots of token holders\n * - Query snapshot status and metadata\n * - Download snapshot data in JSON or CSV\n */\nexport class SnapshotsClient {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Generate a new snapshot for a token\n *\n * @param tokenId - Token identifier\n * @param options - Generation options (format, filters)\n */\n async generate(\n tokenId: string,\n options?: SnapshotGenerateOptions\n ): Promise<SnapshotGenerateResponse> {\n return this.http.post(\n `/snapshots/generate/${encodeURIComponent(tokenId)}`,\n options || {}\n );\n }\n\n /**\n * Get snapshot details by ID\n */\n async get(snapshotId: string): Promise<SnapshotInfo> {\n return this.http.get(`/snapshots/${encodeURIComponent(snapshotId)}`);\n }\n\n /**\n * List snapshots for a token\n */\n async listByToken(\n tokenId: string,\n pagination?: PaginationOptions\n ): Promise<SnapshotListResponse> {\n const params = new URLSearchParams();\n if (pagination?.page !== undefined) params.set('page', String(pagination.page));\n if (pagination?.limit !== undefined) params.set('limit', String(pagination.limit));\n const qs = params.toString();\n return this.http.get(\n `/snapshots/token/${encodeURIComponent(tokenId)}${qs ? `?${qs}` : ''}`\n );\n }\n\n /**\n * Download snapshot data\n *\n * @param snapshotId - Snapshot ID\n * @param format - Output format (json or csv)\n */\n async download(snapshotId: string, format?: SnapshotFormat): Promise<any> {\n const params = format ? `?format=${encodeURIComponent(format)}` : '';\n return this.http.get(\n `/snapshots/${encodeURIComponent(snapshotId)}/download${params}`\n );\n }\n}\n","/**\n * Settlement Sub-Client\n *\n * Manages cross-chain settlement operations including initiation,\n * status tracking, XRP landing confirmation, and history retrieval.\n */\n\nimport type { HttpClient } from '../http';\n\nexport type {\n SettlementPurpose,\n SettlementAsset,\n SettlementInitiateRequest,\n SettlementStatusResponse,\n SettlementHistoryEntry,\n} from './types';\n\nimport type {\n SettlementInitiateRequest,\n SettlementStatusResponse,\n SettlementHistoryEntry,\n} from './types';\n\nexport class SettlementClient {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Initiate a new settlement operation.\n * Submits source-chain payment details and begins the conversion pipeline.\n */\n async initiate(request: SettlementInitiateRequest): Promise<SettlementStatusResponse> {\n return this.http.post('/settlement/initiate', request);\n }\n\n /**\n * Get the current status of a settlement by ID.\n */\n async getStatus(settlementId: string): Promise<SettlementStatusResponse> {\n return this.http.get(`/settlement/${encodeURIComponent(settlementId)}/status`);\n }\n\n /**\n * Confirm that XRP has landed on the destination address.\n * Advances the settlement to the next processing step.\n */\n async confirmXrpLanded(settlementId: string): Promise<SettlementStatusResponse> {\n return this.http.post(`/settlement/${encodeURIComponent(settlementId)}/confirm-xrp`, {});\n }\n\n /**\n * Get settlement history for a given entity.\n */\n async getHistory(entityId: string): Promise<SettlementHistoryEntry[]> {\n return this.http.get(`/settlement/history/${encodeURIComponent(entityId)}`);\n }\n}\n","import {\n CreateAccountRequestSchema,\n CreateAccountRequest,\n CreateAccountResponse,\n TransferRequestSchema,\n TransferRequest,\n TransferResponse,\n CreateTokenRequestSchema,\n CreateTokenRequest,\n CreateTokenResponse,\n MintTokenRequestSchema,\n MintTokenRequest,\n BurnTokenRequestSchema,\n BurnTokenRequest,\n TokenActionRequestSchema,\n TokenActionRequest,\n ActionResult,\n AccountBalance,\n AccountInfo,\n Transaction,\n TokenInfo,\n ChainType,\n} from './_vendor';\nimport { type CircuitBreakerSnapshot } from './_vendor';\nimport { ValidatorDiscoveryClient, ValidatorInfo } from './discovery';\nimport { ValidatorAuthClient, AuthChain, AuthenticateResponse } from './auth';\nimport { createHttpClient, encodePathParam, type HttpClient } from './http';\nimport { type ResilientHttpConfig } from './http/resilient-http';\n\n// Sub-client imports — public API only (for third-party smart-app developers)\nimport { SubscriptionClient } from './subscription';\nimport { TSSClient } from './tss';\nimport { IPFSClient } from './ipfs';\nimport { TransactionsClient } from './transactions';\nimport { SnapshotsClient } from './snapshots';\nimport { SettlementClient } from './settlement';\n\n/**\n * Smart Engine Client Configuration\n */\nexport interface SmartEngineClientConfig {\n /** Validator API base URL */\n baseUrl: string;\n /** API key for authenticated requests */\n apiKey?: string;\n /** Session token from validator auth */\n authToken?: string;\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Allow HTTP (insecure) connections - only for local development */\n allowInsecure?: boolean;\n /** HTTP resilience configuration (retry, timeout, circuit breaker) */\n http?: ResilientHttpConfig;\n}\n\n/**\n * Network connection configuration for auto-discovery\n */\nexport interface NetworkConnectionConfig {\n /** Hedera network (mainnet, testnet, previewnet) */\n network: 'mainnet' | 'testnet' | 'previewnet';\n /** HCS topic ID for validator registry */\n registryTopicId: string;\n /** Blockchain type for authentication */\n chain: AuthChain;\n /** Wallet address for authentication */\n address: string;\n /** Public key (hex encoded) */\n publicKey: string;\n /** Function to sign the challenge */\n signFn: (challenge: string) => string | Promise<string>;\n /** Optional metadata for authentication */\n metadata?: {\n appId?: string;\n appName?: string;\n };\n /** Custom mirror node URL */\n mirrorNodeUrl?: string;\n /** Allow HTTP (insecure) connections - only for local development */\n allowInsecure?: boolean;\n}\n\n/**\n * Connection result from connectToNetwork\n */\nexport interface NetworkConnectionResult {\n /** Configured client ready to use */\n client: SmartEngineClient;\n /** Validator that was connected to */\n validator: ValidatorInfo;\n /** Authentication session */\n session: AuthenticateResponse;\n}\n\n/**\n * Smart Engine Client\n *\n * Unified, type-safe client for interacting with Smart Engines validators.\n * Supports direct connection or auto-discovery via HCS registry.\n *\n * Sub-clients for third-party app developers:\n * - `client.subscription` — Application subscription management\n * - `client.tss` — Threshold Signature Scheme (chain-agnostic MPC)\n * - `client.ipfs` — Decentralized file storage\n * - `client.transactions` — Transaction sovereignty (prepare-sign-submit)\n *\n * @example Direct connection\n * ```typescript\n * const client = new SmartEngineClient({\n * baseUrl: 'https://validator.example.com',\n * apiKey: 'your-api-key',\n * });\n * ```\n *\n * @example Auto-discovery with authentication\n * ```typescript\n * const { client, validator, session } = await SmartEngineClient.connectToNetwork({\n * network: 'testnet',\n * registryTopicId: '0.0.123456',\n * chain: 'hedera',\n * address: '0.0.789',\n * publicKey: 'your-public-key-hex',\n * signFn: (challenge) => privateKey.sign(Buffer.from(challenge)).toString('hex'),\n * });\n *\n * // Use sub-clients\n * const result = await client.tss.signMPC({\n * chain: 'hedera',\n * entityId: 'entity-123',\n * transactionBytes: '0x...',\n * });\n * ```\n */\nexport class SmartEngineClient {\n private baseUrl: string;\n private allowInsecure: boolean;\n private readonly http: HttpClient;\n /** Separate HTTP client for /api/transactions (non-v3 base path) */\n private readonly txHttp: HttpClient;\n /** Last HTTP error (for getHttpHealth) */\n private lastHttpError?: Error;\n\n // ========== Sub-Clients ==========\n\n /** Application subscription management */\n public readonly subscription: SubscriptionClient;\n /** Threshold Signature Scheme — chain-agnostic MPC operations */\n public readonly tss: TSSClient;\n /** IPFS decentralized file storage */\n public readonly ipfs: IPFSClient;\n /** Transaction preparation for local signing (sovereignty model) */\n public readonly transactions: TransactionsClient;\n /** Token holder snapshot generation and retrieval */\n public readonly snapshots: SnapshotsClient;\n /** Cross-chain settlement operations */\n public readonly settlement: SettlementClient;\n\n constructor(config: SmartEngineClientConfig) {\n this.allowInsecure = config.allowInsecure ?? false;\n this.baseUrl = validateClientUrl(config.baseUrl, this.allowInsecure);\n // Note: config.http is accepted for backward compatibility and future resilience layer integration\n\n // Create shared HTTP client for /api/v3 endpoints\n this.http = createHttpClient({\n baseUrl: `${this.baseUrl}/api/v3`,\n apiKey: config.apiKey,\n authToken: config.authToken,\n timeout: config.timeout,\n });\n\n // Create separate HTTP client for /api/transactions (non-v3 base path)\n this.txHttp = createHttpClient({\n baseUrl: `${this.baseUrl}/api/transactions`,\n apiKey: config.apiKey,\n authToken: config.authToken,\n timeout: config.timeout,\n });\n\n // Initialize sub-clients\n this.subscription = new SubscriptionClient(this.http);\n this.tss = new TSSClient(this.http);\n this.ipfs = new IPFSClient(this.http);\n this.transactions = new TransactionsClient(this.txHttp);\n this.snapshots = new SnapshotsClient(this.http);\n this.settlement = new SettlementClient(this.http);\n }\n\n /**\n * Connect to the smart-engines network with auto-discovery and authentication\n *\n * This method:\n * 1. Discovers validators via HCS registry topic\n * 2. Selects a random validator with API endpoint\n * 3. Authenticates with Web3-style challenge-response\n * 4. Returns a configured client ready to use\n */\n static async connectToNetwork(config: NetworkConnectionConfig): Promise<NetworkConnectionResult> {\n const allowInsecure = config.allowInsecure ?? false;\n\n // Step 1: Discover validators\n const discovery = new ValidatorDiscoveryClient({\n network: config.network,\n registryTopicId: config.registryTopicId,\n mirrorNodeUrl: config.mirrorNodeUrl,\n });\n\n const validator = await discovery.getRandomValidator();\n\n if (!validator || !validator.networkEndpoints?.apiEndpoint) {\n throw new SmartEngineError(\n 'No validators available. Check registry topic and network configuration.',\n 503\n );\n }\n\n const validatorUrl = validator.networkEndpoints.apiEndpoint;\n validateClientUrl(validatorUrl, allowInsecure);\n\n // Step 2: Authenticate\n const auth = new ValidatorAuthClient({\n security: { allowInsecure },\n });\n const session = await auth.authenticateWithSigner(\n validatorUrl,\n config.chain,\n config.address,\n config.publicKey,\n config.signFn,\n config.metadata\n );\n\n // Step 3: Create client with auth token\n const client = new SmartEngineClient({\n baseUrl: validatorUrl,\n authToken: session.token,\n allowInsecure,\n });\n\n return { client, validator, session };\n }\n\n /** Get the current validator URL */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n /** Check if client has an auth token */\n isAuthenticated(): boolean {\n return !!(this.http as any).authToken;\n }\n\n /**\n * Get HTTP resilience health information\n * @returns Object with circuit breaker state and last error (if any)\n */\n getHttpHealth(): { breaker: CircuitBreakerSnapshot | null; lastError?: Error } {\n // Note: In a real implementation, we would get the circuit breaker state\n // from the resilient HTTP layer. For now, return null since the base\n // HTTP client doesn't expose it yet.\n return {\n breaker: null,\n lastError: this.lastHttpError,\n };\n }\n\n // ========== Health & Info ==========\n\n /** Get health status of the validator */\n async getHealth(): Promise<{ status: string; timestamp: string; chains: any[] }> {\n return this.http.get('/health');\n }\n\n /** Get list of supported chains */\n async getSupportedChains(): Promise<{ chains: string[] }> {\n return this.http.get('/chains');\n }\n\n // ========== Account Operations ==========\n\n /** Create a new account on the specified chain */\n async createAccount(request: CreateAccountRequest): Promise<CreateAccountResponse> {\n const validated = CreateAccountRequestSchema.parse(request);\n return this.http.post('/accounts', validated);\n }\n\n /** Get account information */\n async getAccountInfo(chain: string, accountId: string): Promise<AccountInfo> {\n return this.http.get(`/accounts/${encodePathParam(chain)}/${encodePathParam(accountId)}`);\n }\n\n /** Get account balance */\n async getBalance(chain: string, accountId: string): Promise<AccountBalance> {\n return this.http.get(`/accounts/${encodePathParam(chain)}/${encodePathParam(accountId)}/balance`);\n }\n\n // ========== Transaction Operations ==========\n\n /** Execute a transfer transaction */\n async transfer(request: TransferRequest): Promise<TransferResponse> {\n const validated = TransferRequestSchema.parse(request);\n return this.http.post('/transfer', validated);\n }\n\n /** Get transaction details */\n async getTransaction(chain: string, txId: string): Promise<Transaction> {\n return this.http.get(`/transactions/${encodePathParam(chain)}/${encodePathParam(txId)}`);\n }\n\n /** Get transaction receipt */\n async getTransactionReceipt(chain: string, txId: string): Promise<any> {\n return this.http.get(`/transactions/${encodePathParam(chain)}/${encodePathParam(txId)}/receipt`);\n }\n\n // ========== Token Operations ==========\n\n /** Create a new token */\n async createToken(request: CreateTokenRequest): Promise<CreateTokenResponse> {\n const validated = CreateTokenRequestSchema.parse(request);\n return this.http.post('/tokens', validated);\n }\n\n /** Mint tokens */\n async mintToken(request: MintTokenRequest): Promise<any> {\n const validated = MintTokenRequestSchema.parse(request);\n return this.http.post('/tokens/mint', validated);\n }\n\n /** Get token information */\n async getTokenInfo(chain: string, tokenId: string): Promise<TokenInfo> {\n return this.http.get(`/tokens/${encodePathParam(chain)}/${encodePathParam(tokenId)}`);\n }\n\n /** Burn tokens to reduce supply */\n async burnToken(request: BurnTokenRequest): Promise<ActionResult> {\n const validated = BurnTokenRequestSchema.parse(request);\n return this.http.post('/tokens/burn', validated);\n }\n\n /** Pause all token operations globally */\n async pauseToken(request: TokenActionRequest): Promise<ActionResult> {\n const validated = TokenActionRequestSchema.parse(request);\n return this.http.post('/tokens/pause', validated);\n }\n\n /** Unpause token operations */\n async unpauseToken(request: TokenActionRequest): Promise<ActionResult> {\n const validated = TokenActionRequestSchema.parse(request);\n return this.http.post('/tokens/unpause', validated);\n }\n\n /** Freeze/restrict an account from transacting the token */\n async restrictAccount(request: TokenActionRequest): Promise<ActionResult> {\n const validated = TokenActionRequestSchema.parse(request);\n if (!validated.accountId) {\n throw new SmartEngineError('accountId is required for restrictAccount', 400);\n }\n return this.http.post('/tokens/restrict', validated);\n }\n\n /** Unfreeze an account */\n async unrestrictAccount(request: TokenActionRequest): Promise<ActionResult> {\n const validated = TokenActionRequestSchema.parse(request);\n if (!validated.accountId) {\n throw new SmartEngineError('accountId is required for unrestrictAccount', 400);\n }\n return this.http.post('/tokens/unrestrict', validated);\n }\n\n /** Grant KYC/compliance approval to an account */\n async enableCompliance(request: TokenActionRequest): Promise<ActionResult> {\n const validated = TokenActionRequestSchema.parse(request);\n if (!validated.accountId) {\n throw new SmartEngineError('accountId is required for enableCompliance', 400);\n }\n return this.http.post('/tokens/compliance/enable', validated);\n }\n\n /** Revoke KYC/compliance approval from an account */\n async disableCompliance(request: TokenActionRequest): Promise<ActionResult> {\n const validated = TokenActionRequestSchema.parse(request);\n if (!validated.accountId) {\n throw new SmartEngineError('accountId is required for disableCompliance', 400);\n }\n return this.http.post('/tokens/compliance/disable', validated);\n }\n\n /** Force remove tokens from an account (compliance action) */\n async wipeFromAccount(request: TokenActionRequest): Promise<ActionResult> {\n const validated = TokenActionRequestSchema.parse(request);\n if (!validated.accountId) {\n throw new SmartEngineError('accountId is required for wipeFromAccount', 400);\n }\n if (!validated.amount) {\n throw new SmartEngineError('amount is required for wipeFromAccount', 400);\n }\n return this.http.post('/tokens/wipe', validated);\n }\n\n // ========== Capabilities Discovery ==========\n\n /** Get capability support matrix for all chains */\n async getAllCapabilities(): Promise<any> {\n return this.http.get('/capabilities');\n }\n\n /** Get capability support for a specific chain */\n async getChainCapabilities(chain: ChainType): Promise<any> {\n return this.http.get(`/capabilities/${encodePathParam(chain)}`);\n }\n\n /** Get comprehensive system status */\n async getSystemStatus(): Promise<any> {\n return this.http.get('/status');\n }\n\n // ========== Messaging Operations ==========\n\n /** Submit a message to consensus */\n async submitMessage(chain: string, topicId: string, message: string): Promise<any> {\n if (message.length > 1024 * 1024) {\n throw new SmartEngineError('Message too large (max 1MB)', 400);\n }\n return this.http.post(`/messages/${encodePathParam(chain)}/${encodePathParam(topicId)}`, {\n message,\n });\n }\n\n // ========== Cluster Operations ==========\n\n /** Get cluster health status */\n async getClusterHealth(): Promise<{\n status: string;\n nodes: number;\n healthy: number;\n unhealthy: number;\n }> {\n return this.http.get('/cluster/health');\n }\n\n /** Get cluster status including node details */\n async getClusterStatus(): Promise<{\n status: string;\n nodeId: string;\n nodes: Array<{\n nodeId: string;\n endpoint: string;\n status: string;\n lastSeen?: string;\n }>;\n quorum: {\n required: number;\n current: number;\n reached: boolean;\n };\n }> {\n return this.http.get('/cluster/status');\n }\n\n // ========== Metrics & Monitoring ==========\n\n /** Get Prometheus-format metrics */\n async getMetrics(): Promise<string> {\n return this.http.get('/metrics');\n }\n\n /** Get queue statistics for monitoring */\n async getQueueStats(): Promise<{\n queues: Record<\n string,\n { pending: number; processing: number; completed: number; failed: number }\n >;\n timestamp: string;\n }> {\n return this.http.get('/monitoring/queue');\n }\n\n /** Get circuit breaker status for all services */\n async getCircuitBreakerStatus(): Promise<{\n breakers: Record<\n string,\n {\n state: 'closed' | 'open' | 'half-open';\n failures: number;\n successes: number;\n lastFailure?: string;\n nextRetry?: string;\n }\n >;\n timestamp: string;\n }> {\n return this.http.get('/monitoring/circuit-breakers');\n }\n\n // ========== Signature Verification ==========\n\n /** Verify an arbitrary signature */\n async verifySignature(request: {\n chain: ChainType;\n message: string;\n signature: string;\n publicKey: string;\n }): Promise<{ valid: boolean; chain: ChainType }> {\n return this.http.post('/auth/verify-signature', request);\n }\n}\n\n/**\n * Custom error class for Smart Engine client\n */\nexport class SmartEngineError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public details?: any\n ) {\n super(message);\n this.name = 'SmartEngineError';\n }\n}\n\n/**\n * Validate URL and enforce security requirements\n */\nfunction validateClientUrl(url: string, allowInsecure = false): string {\n try {\n const parsed = new URL(url);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n throw new SmartEngineError(`Invalid protocol: ${parsed.protocol}`, 400);\n }\n if (!allowInsecure && parsed.protocol !== 'https:') {\n throw new SmartEngineError(\n 'HTTPS is required for secure connections. Set allowInsecure=true for local development.',\n 400\n );\n }\n return parsed.origin;\n } catch (error) {\n if (error instanceof SmartEngineError) throw error;\n throw new SmartEngineError(`Invalid URL: ${url}`, 400);\n }\n}\n","/**\n * Routing Sub-Client\n *\n * Manages host registration, routing configuration, and request proxying.\n */\nimport type { HttpClient } from '../../http';\nimport type {\n RegisterHostRequest,\n HostInfo,\n HostListResponse,\n RoutingConfig,\n ProxyRequest,\n ProxyResponse,\n RoutingStatsResponse,\n} from '../types';\n\n/**\n * Routing Sub-Client\n *\n * @example\n * ```typescript\n * // Register a host\n * await gateway.routing.registerHost({ name: 'Host 1', endpoint: 'https://host1.example.com' });\n *\n * // Get routing stats\n * const stats = await gateway.routing.getStats();\n * ```\n */\nexport class RoutingClient {\n constructor(private readonly http: HttpClient) {}\n\n /** Register a new host */\n async registerHost(request: RegisterHostRequest): Promise<HostInfo> {\n return this.http.post('/routing/hosts', request);\n }\n\n /** Unregister a host */\n async unregisterHost(hostId: string): Promise<{ success: boolean }> {\n return this.http.delete(`/routing/hosts/${encodeURIComponent(hostId)}`);\n }\n\n /** Get all registered hosts */\n async getAllHosts(): Promise<HostListResponse> {\n return this.http.get('/routing/hosts');\n }\n\n /** Get only verified hosts */\n async getVerifiedHosts(): Promise<HostListResponse> {\n return this.http.get('/routing/hosts/verified');\n }\n\n /** Get a specific host by ID */\n async getHost(hostId: string): Promise<HostInfo> {\n return this.http.get(`/routing/hosts/${encodeURIComponent(hostId)}`);\n }\n\n /** Verify a host */\n async verifyHost(hostId: string): Promise<{ verified: boolean; message: string }> {\n return this.http.post(`/routing/hosts/${encodeURIComponent(hostId)}/verify`, {});\n }\n\n /** Set routing configuration for an app */\n async setRoutingConfig(appId: string, config: RoutingConfig): Promise<RoutingConfig> {\n return this.http.put(`/routing/config/${encodeURIComponent(appId)}`, config);\n }\n\n /** Get routing configuration for an app */\n async getRoutingConfig(appId: string): Promise<RoutingConfig> {\n return this.http.get(`/routing/config/${encodeURIComponent(appId)}`);\n }\n\n /** Proxy a request through the gateway */\n async proxyRequest(request: ProxyRequest): Promise<ProxyResponse> {\n return this.http.post('/routing/proxy', request);\n }\n\n /** Get routing statistics */\n async getStats(): Promise<RoutingStatsResponse> {\n return this.http.get('/routing/stats');\n }\n\n /** Map a domain to an application */\n async mapDomainToApp(\n domain: string,\n appId: string\n ): Promise<{ success: boolean; domain: string; appId: string }> {\n return this.http.post(`/routing/domains/${encodeURIComponent(domain)}/map`, { appId });\n }\n}\n","/**\n * Domains Sub-Client\n *\n * Manages domain registration, verification, DNS configuration, and transfers.\n */\nimport type { HttpClient } from '../../http';\nimport type {\n DomainRegistrationRequest,\n DomainInfo,\n DomainListResponse,\n DomainAvailabilityResponse,\n VerificationTokenResponse,\n VerificationResult,\n DnsRecord,\n DomainTransferRequest,\n} from '../types';\n\n/**\n * Domains Sub-Client\n *\n * @example\n * ```typescript\n * // Register a domain\n * const domain = await gateway.domains.register({ domain: 'myapp.example.com', owner: '0.0.123' });\n *\n * // Verify ownership\n * const token = await gateway.domains.generateVerificationToken('myapp.example.com', 'dns');\n * const result = await gateway.domains.verifyOwnership('myapp.example.com', token.token);\n * ```\n */\nexport class DomainsClient {\n constructor(private readonly http: HttpClient) {}\n\n /** Register a new domain */\n async register(request: DomainRegistrationRequest): Promise<DomainInfo> {\n return this.http.post('/domains', request);\n }\n\n /** Check domain availability */\n async checkAvailability(domain: string): Promise<DomainAvailabilityResponse> {\n return this.http.get(`/domains/check/${encodeURIComponent(domain)}`);\n }\n\n /** Get domain information */\n async getInfo(domain: string): Promise<DomainInfo> {\n return this.http.get(`/domains/${encodeURIComponent(domain)}`);\n }\n\n /** List domains, optionally filtered by owner */\n async list(owner?: string): Promise<DomainListResponse> {\n const params = owner ? `?owner=${encodeURIComponent(owner)}` : '';\n return this.http.get(`/domains${params}`);\n }\n\n /** Generate a verification token */\n async generateVerificationToken(\n domain: string,\n method: 'dns' | 'http' | 'email'\n ): Promise<VerificationTokenResponse> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/verification`, { method });\n }\n\n /** Verify domain ownership */\n async verifyOwnership(domain: string, token: string): Promise<VerificationResult> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/verify`, { token });\n }\n\n /** Configure DNS records for a domain */\n async configureDns(domain: string, records: DnsRecord[]): Promise<{ success: boolean; records: DnsRecord[] }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/dns`, { records });\n }\n\n /** Enable DNSSEC for a domain */\n async enableDnssec(domain: string): Promise<{ success: boolean; message: string }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/dnssec/enable`, {});\n }\n\n /** Disable DNSSEC for a domain */\n async disableDnssec(domain: string): Promise<{ success: boolean; message: string }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/dnssec/disable`, {});\n }\n\n /** Renew a domain */\n async renew(domain: string, years?: number): Promise<DomainInfo> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/renew`, { years: years ?? 1 });\n }\n\n /** Initiate a domain transfer */\n async transfer(domain: string, request: DomainTransferRequest): Promise<{ success: boolean; message: string }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/transfer`, request);\n }\n\n /** Approve a pending domain transfer */\n async approveTransfer(domain: string): Promise<{ success: boolean }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/transfer/approve`, {});\n }\n\n /** Reject a pending domain transfer */\n async rejectTransfer(domain: string): Promise<{ success: boolean }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/transfer/reject`, {});\n }\n\n /** Suspend a domain */\n async suspend(domain: string, reason: string): Promise<{ success: boolean }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/suspend`, { reason });\n }\n\n /** Unsuspend a domain */\n async unsuspend(domain: string): Promise<{ success: boolean }> {\n return this.http.post(`/domains/${encodeURIComponent(domain)}/unsuspend`, {});\n }\n}\n","/**\n * DNS Sub-Client\n *\n * Manages DNS resolution, zone management, and DNSSEC.\n */\nimport type { HttpClient } from '../../http';\nimport type {\n DnsResolveResponse,\n DnsBatchQuery,\n DnsBatchResolveResponse,\n DnsZone,\n DnsZoneListResponse,\n DnsRecord,\n DnsRecordInfo,\n DnssecKey,\n DnssecDsRecord,\n} from '../types';\n\n/**\n * DNS Sub-Client\n *\n * @example\n * ```typescript\n * // Resolve a name\n * const result = await gateway.dns.resolve('myapp.example.com', 'A');\n *\n * // Manage zones\n * const zones = await gateway.dns.listZones();\n * ```\n */\nexport class DnsClient {\n constructor(private readonly http: HttpClient) {}\n\n /** Resolve a DNS name */\n async resolve(name: string, type?: string, dnssec?: boolean): Promise<DnsResolveResponse> {\n const params = new URLSearchParams({ name });\n if (type) params.set('type', type);\n if (dnssec !== undefined) params.set('dnssec', String(dnssec));\n return this.http.get(`/dns/resolve?${params.toString()}`);\n }\n\n /** Batch resolve multiple DNS queries */\n async resolveBatch(queries: DnsBatchQuery[]): Promise<DnsBatchResolveResponse> {\n return this.http.post('/dns/resolve/batch', { queries });\n }\n\n /** List all DNS zones */\n async listZones(): Promise<DnsZoneListResponse> {\n return this.http.get('/dns/zones');\n }\n\n /** Get a specific zone */\n async getZone(zoneName: string): Promise<DnsZone & { records: DnsRecordInfo[] }> {\n return this.http.get(`/dns/zones/${encodeURIComponent(zoneName)}`);\n }\n\n /** Create a new DNS zone */\n async createZone(request: { zoneName: string; description?: string }): Promise<DnsZone> {\n return this.http.post('/dns/zones', request);\n }\n\n /** Delete a DNS zone */\n async deleteZone(zoneName: string): Promise<{ success: boolean }> {\n return this.http.delete(`/dns/zones/${encodeURIComponent(zoneName)}`);\n }\n\n /** Add a record to a zone */\n async addRecord(zoneName: string, record: DnsRecord): Promise<DnsRecordInfo> {\n return this.http.post(`/dns/zones/${encodeURIComponent(zoneName)}/records`, record);\n }\n\n /** Update a record in a zone */\n async updateRecord(\n zoneName: string,\n recordId: string,\n updates: Partial<DnsRecord>\n ): Promise<DnsRecordInfo> {\n return this.http.put(\n `/dns/zones/${encodeURIComponent(zoneName)}/records/${encodeURIComponent(recordId)}`,\n updates\n );\n }\n\n /** Delete a record from a zone */\n async deleteRecord(zoneName: string, recordId: string): Promise<{ success: boolean }> {\n return this.http.delete(\n `/dns/zones/${encodeURIComponent(zoneName)}/records/${encodeURIComponent(recordId)}`\n );\n }\n\n /** Generate DNSSEC keys for a zone */\n async generateDnssecKeys(\n zoneName: string,\n algorithm?: string\n ): Promise<{ keys: DnssecKey[] }> {\n return this.http.post(`/dns/zones/${encodeURIComponent(zoneName)}/dnssec/keys`, {\n algorithm,\n });\n }\n\n /** Get DNSSEC keys for a zone */\n async getDnssecKeys(zoneName: string): Promise<{ keys: DnssecKey[] }> {\n return this.http.get(`/dns/zones/${encodeURIComponent(zoneName)}/dnssec/keys`);\n }\n\n /** Get DS record for a zone (for registrar configuration) */\n async getDsRecord(zoneName: string): Promise<DnssecDsRecord> {\n return this.http.get(`/dns/zones/${encodeURIComponent(zoneName)}/dnssec/ds`);\n }\n\n /** Clear DNS cache */\n async clearCache(): Promise<{ success: boolean; entriesCleared: number }> {\n return this.http.post('/dns/cache/clear', {});\n }\n}\n","/**\n * Smart Gateway Client\n *\n * Top-level client for interacting with Smart Engines Gateway.\n * Manages host routing, domain registration, and DNS resolution.\n *\n * @example\n * ```typescript\n * import { SmartGatewayClient } from '@hsuite/smart-engines-sdk';\n *\n * const gateway = new SmartGatewayClient({\n * baseUrl: 'https://gateway.smartengines.io',\n * apiKey: 'your-api-key',\n * });\n *\n * // Routing\n * const hosts = await gateway.routing.getAllHosts();\n *\n * // Domains\n * const available = await gateway.domains.checkAvailability('myapp.example.com');\n *\n * // DNS\n * const resolved = await gateway.dns.resolve('myapp.example.com', 'A');\n *\n * // Health\n * const health = await gateway.getHealth();\n * ```\n */\nimport { createHttpClient, type HttpClient } from '../http';\nimport { RoutingClient } from './routing';\nimport { DomainsClient } from './domains';\nimport { DnsClient } from './dns';\nimport type {\n GatewayHealthResponse,\n GatewayStatusResponse,\n GatewayReadinessResponse,\n GatewayLivenessResponse,\n GatewayMetricsResponse,\n GatewayMetricsSummaryResponse,\n} from './types';\n\n/**\n * Configuration for SmartGatewayClient\n */\nexport type SmartGatewayClientConfig = {\n /** Gateway API base URL */\n baseUrl: string;\n /** API key for authenticated requests */\n apiKey?: string;\n /** Bearer token from authentication */\n authToken?: string;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Allow HTTP connections (only for local development) */\n allowInsecure?: boolean;\n};\n\n/**\n * Smart Gateway Client\n *\n * Primary client for gateway operations: routing, domains, and DNS.\n */\nexport class SmartGatewayClient {\n private readonly http: HttpClient;\n\n /** Host routing and proxy management */\n public readonly routing: RoutingClient;\n /** Domain registration and management */\n public readonly domains: DomainsClient;\n /** DNS resolution and zone management */\n public readonly dns: DnsClient;\n\n constructor(config: SmartGatewayClientConfig) {\n const baseUrl = config.baseUrl.replace(/\\/+$/, '');\n\n this.http = createHttpClient({\n baseUrl: `${baseUrl}/api/v3`,\n apiKey: config.apiKey,\n authToken: config.authToken,\n timeout: config.timeout,\n });\n\n this.routing = new RoutingClient(this.http);\n this.domains = new DomainsClient(this.http);\n this.dns = new DnsClient(this.http);\n }\n\n // ========== Health & Metrics ==========\n\n /** Get gateway health status */\n async getHealth(): Promise<GatewayHealthResponse> {\n return this.http.get('/health');\n }\n\n /** Get gateway status with host and domain counts */\n async getStatus(): Promise<GatewayStatusResponse> {\n return this.http.get('/status');\n }\n\n /** Check gateway readiness */\n async getReadiness(): Promise<GatewayReadinessResponse> {\n return this.http.get('/ready');\n }\n\n /** Check gateway liveness */\n async getLiveness(): Promise<GatewayLivenessResponse> {\n return this.http.get('/live');\n }\n\n /** Get detailed gateway metrics */\n async getMetrics(refresh?: boolean): Promise<GatewayMetricsResponse> {\n const params = refresh ? '?refresh=true' : '';\n return this.http.get(`/metrics${params}`);\n }\n\n /** Get metrics summary */\n async getMetricsSummary(): Promise<GatewayMetricsSummaryResponse> {\n return this.http.get('/metrics/summary');\n }\n}\n","/**\n * Database Sub-Client\n *\n * Trustless database with state proofs and Merkle verification.\n *\n * @example\n * ```typescript\n * // CRUD operations\n * const result = await baas.db.insert('users', { name: 'Alice' });\n * const users = await baas.db.find('users', { name: 'Alice' });\n *\n * // State proofs\n * const root = await baas.db.getStateRoot();\n * const proof = await baas.db.getDocumentProof('doc-123');\n * ```\n */\nimport type { HttpClient } from '../../http';\nimport type {\n BaasInsertResult,\n BaasUpdateResult,\n BaasDeleteResult,\n BaasFindResult,\n BaasQueryOptions,\n BaasMerkleProof,\n BaasStateTransition,\n} from '../types';\n\n/** State root response */\nexport type StateRootResponse = {\n appId: string;\n stateRoot: string;\n blockHeight: number;\n timestamp: string;\n};\n\n/** Document proof response */\nexport type DocumentProofResponse = {\n documentId: string;\n exists: boolean;\n proof: BaasMerkleProof;\n stateRoot: string;\n};\n\n/** State transitions response */\nexport type StateTransitionsResponse = {\n transitions: BaasStateTransition[];\n total: number;\n fromBlock: number;\n toBlock: number;\n};\n\n/** Database stats response */\nexport type DatabaseStatsResponse = {\n collections: number;\n documents: number;\n storageSize: number;\n stateRoot: string;\n blockHeight: number;\n};\n\nexport class DatabaseClient {\n constructor(\n private readonly http: HttpClient,\n private readonly getAppId: () => string\n ) {}\n\n /**\n * Insert a document into a collection\n */\n async insert(collection: string, document: Record<string, unknown>): Promise<BaasInsertResult> {\n const appId = this.getAppId();\n return this.http.post(\n `/api/db/${encodeURIComponent(appId)}/${encodeURIComponent(collection)}`,\n document\n );\n }\n\n /**\n * Find documents in a collection\n */\n async find(\n collection: string,\n query?: Record<string, unknown>,\n options?: BaasQueryOptions\n ): Promise<BaasFindResult> {\n const appId = this.getAppId();\n const params = new URLSearchParams();\n if (query && Object.keys(query).length > 0) {\n params.set('query', JSON.stringify(query));\n }\n if (options?.limit !== undefined) params.set('limit', String(options.limit));\n if (options?.skip !== undefined) params.set('skip', String(options.skip));\n if (options?.sort) params.set('sort', options.sort);\n const qs = params.toString();\n return this.http.get(\n `/api/db/${encodeURIComponent(appId)}/${encodeURIComponent(collection)}${qs ? `?${qs}` : ''}`\n );\n }\n\n /**\n * Update a document in a collection\n */\n async update(\n collection: string,\n documentId: string,\n updates: Record<string, unknown>\n ): Promise<BaasUpdateResult> {\n const appId = this.getAppId();\n return this.http.put(\n `/api/db/${encodeURIComponent(appId)}/${encodeURIComponent(collection)}/${encodeURIComponent(documentId)}`,\n updates\n );\n }\n\n /**\n * Delete a document from a collection\n */\n async delete(collection: string, documentId: string): Promise<BaasDeleteResult> {\n const appId = this.getAppId();\n return this.http.delete(\n `/api/db/${encodeURIComponent(appId)}/${encodeURIComponent(collection)}/${encodeURIComponent(documentId)}`\n );\n }\n\n /**\n * List collections for the app\n */\n async listCollections(): Promise<{ collections: string[] }> {\n const appId = this.getAppId();\n return this.http.get(`/api/db/${encodeURIComponent(appId)}`);\n }\n\n // ========== State Proofs ==========\n\n /**\n * Get the current state root for the app\n */\n async getStateRoot(): Promise<StateRootResponse> {\n const appId = this.getAppId();\n return this.http.get(`/api/db/${encodeURIComponent(appId)}/state/root`);\n }\n\n /**\n * Get a Merkle proof for a specific document\n */\n async getDocumentProof(documentId: string): Promise<DocumentProofResponse> {\n const appId = this.getAppId();\n return this.http.get(\n `/api/db/${encodeURIComponent(appId)}/${encodeURIComponent(documentId)}/proof`\n );\n }\n\n /**\n * Get state transitions (audit log)\n */\n async getStateTransitions(options?: {\n fromBlock?: number;\n toBlock?: number;\n limit?: number;\n }): Promise<StateTransitionsResponse> {\n const appId = this.getAppId();\n const params = new URLSearchParams();\n if (options?.fromBlock !== undefined) params.set('fromBlock', String(options.fromBlock));\n if (options?.toBlock !== undefined) params.set('toBlock', String(options.toBlock));\n if (options?.limit !== undefined) params.set('limit', String(options.limit));\n const qs = params.toString();\n return this.http.get(\n `/api/db/${encodeURIComponent(appId)}/state/transitions${qs ? `?${qs}` : ''}`\n );\n }\n\n /**\n * Get database statistics\n */\n async getDbStats(): Promise<DatabaseStatsResponse> {\n const appId = this.getAppId();\n return this.http.get(`/api/db/${encodeURIComponent(appId)}/stats`);\n }\n}\n","/**\n * Storage Sub-Client\n *\n * Manages decentralized file storage on the host.\n *\n * @example\n * ```typescript\n * const result = await baas.storage.upload(fileBuffer, 'report.pdf');\n * const exists = await baas.storage.exists(result.cid);\n * const file = await baas.storage.download(result.cid);\n * ```\n */\nimport type { HttpClient } from '../../http';\nimport type {\n BaasUploadResult,\n BaasFileInfo,\n BaasFileMetadata,\n BaasStorageUsage,\n} from '../types';\n\nexport class StorageClient {\n constructor(\n private readonly http: HttpClient,\n private readonly getAppId: () => string\n ) {}\n\n /**\n * Upload a file to storage\n */\n async upload(\n file: Blob | Buffer,\n filename: string,\n metadata?: Record<string, string>\n ): Promise<BaasUploadResult> {\n const appId = this.getAppId();\n return this.http.upload(`/api/storage/${encodeURIComponent(appId)}/upload`, file, filename, metadata);\n }\n\n /**\n * Download a file by CID\n */\n async download(cid: string): Promise<any> {\n return this.http.get(`/api/storage/download/${encodeURIComponent(cid)}`);\n }\n\n /**\n * Get file metadata\n */\n async getMetadata(cid: string): Promise<BaasFileMetadata> {\n return this.http.get(`/api/storage/metadata/${encodeURIComponent(cid)}`);\n }\n\n /**\n * Delete a file\n */\n async delete(cid: string): Promise<{ success: boolean }> {\n const appId = this.getAppId();\n return this.http.delete(`/api/storage/${encodeURIComponent(appId)}/${encodeURIComponent(cid)}`);\n }\n\n /**\n * Get file info\n */\n async getFile(cid: string): Promise<BaasFileInfo> {\n const appId = this.getAppId();\n return this.http.get(`/api/storage/${encodeURIComponent(appId)}/${encodeURIComponent(cid)}`);\n }\n\n /**\n * List all files for the app\n */\n async listFiles(pagination?: { limit?: number; skip?: number }): Promise<{ files: BaasFileInfo[]; total: number }> {\n const appId = this.getAppId();\n const params = new URLSearchParams();\n if (pagination?.limit !== undefined) params.set('limit', String(pagination.limit));\n if (pagination?.skip !== undefined) params.set('skip', String(pagination.skip));\n const qs = params.toString();\n return this.http.get(`/api/storage/${encodeURIComponent(appId)}/files${qs ? `?${qs}` : ''}`);\n }\n\n /**\n * Get storage usage for the current app\n */\n async getUsage(): Promise<BaasStorageUsage> {\n return this.http.get('/api/storage/usage');\n }\n\n /**\n * Check if a file exists\n */\n async exists(cid: string): Promise<{ exists: boolean; cid: string }> {\n return this.http.get(`/api/storage/exists/${encodeURIComponent(cid)}`);\n }\n}\n","/**\n * Functions Sub-Client\n *\n * Manages serverless function deployment, invocation, and monitoring.\n *\n * @example\n * ```typescript\n * // Deploy a function\n * const fn = await baas.functions.deploy({\n * name: 'process-order',\n * runtime: 'nodejs18',\n * handler: 'index.handler',\n * code: functionCode,\n * });\n *\n * // Invoke it\n * const result = await baas.functions.invoke(fn.functionId, { orderId: '123' });\n * ```\n */\nimport type { HttpClient } from '../../http';\nimport type {\n BaasFunctionDeployRequest,\n BaasFunctionDeployResult,\n BaasFunctionResult,\n BaasFunctionInfo,\n BaasFunctionLog,\n BaasFunctionLogOptions,\n} from '../types';\n\nexport class FunctionsClient {\n constructor(\n private readonly http: HttpClient,\n private readonly getAppId: () => string\n ) {}\n\n /**\n * Deploy a new function\n */\n async deploy(request: BaasFunctionDeployRequest): Promise<BaasFunctionDeployResult> {\n const appId = this.getAppId();\n return this.http.post(`/api/functions/${encodeURIComponent(appId)}`, request);\n }\n\n /**\n * Invoke a function\n */\n async invoke(functionId: string, payload?: unknown): Promise<BaasFunctionResult> {\n return this.http.post(`/api/functions/${encodeURIComponent(functionId)}/invoke`, payload ?? {});\n }\n\n /**\n * List all functions\n */\n async list(): Promise<{ functions: BaasFunctionInfo[]; total: number }> {\n return this.http.get('/api/functions');\n }\n\n /**\n * Get function details\n */\n async get(functionId: string): Promise<BaasFunctionInfo> {\n return this.http.get(`/api/functions/${encodeURIComponent(functionId)}`);\n }\n\n /**\n * Update a function\n */\n async update(functionId: string, updates: Partial<BaasFunctionDeployRequest>): Promise<BaasFunctionInfo> {\n return this.http.put(`/api/functions/${encodeURIComponent(functionId)}`, updates);\n }\n\n /**\n * Delete a function\n */\n async delete(functionId: string): Promise<{ success: boolean }> {\n return this.http.delete(`/api/functions/${encodeURIComponent(functionId)}`);\n }\n\n /**\n * Get function execution logs\n */\n async getLogs(functionId: string, options?: BaasFunctionLogOptions): Promise<{ logs: BaasFunctionLog[]; total: number }> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) params.set('limit', String(options.limit));\n if (options?.startTime) params.set('startTime', options.startTime);\n if (options?.level) params.set('level', options.level);\n const qs = params.toString();\n return this.http.get(`/api/functions/${encodeURIComponent(functionId)}/logs${qs ? `?${qs}` : ''}`);\n }\n\n /**\n * Get function statistics for an app\n */\n async getStats(): Promise<any> {\n const appId = this.getAppId();\n return this.http.get(`/api/functions/${encodeURIComponent(appId)}/stats`);\n }\n}\n","/**\n * Messaging Sub-Client\n *\n * Full pub/sub messaging with channels, history, and presence.\n *\n * @example\n * ```typescript\n * // Create a channel\n * await baas.messaging.createChannel({ name: 'events', persistent: true });\n *\n * // Publish a message\n * await baas.messaging.publish('events', { type: 'order.created', orderId: '123' });\n *\n * // Get history\n * const history = await baas.messaging.getHistory('events', { limit: 50 });\n * ```\n */\nimport type { HttpClient } from '../../http';\nimport type {\n BaasChannelConfig,\n BaasPublishResult,\n BaasPresenceMember,\n BaasPresenceInfo,\n BaasHistoryOptions,\n BaasMessage,\n} from '../types';\n\nexport class MessagingClient {\n constructor(\n private readonly http: HttpClient,\n private readonly getAppId: () => string\n ) {}\n\n /**\n * Create a new channel\n */\n async createChannel(config: BaasChannelConfig): Promise<BaasChannelConfig & { channelId: string }> {\n const appId = this.getAppId();\n return this.http.post(`/api/messaging/${encodeURIComponent(appId)}/channels`, config);\n }\n\n /**\n * Delete a channel\n */\n async deleteChannel(channelId: string): Promise<{ success: boolean }> {\n const appId = this.getAppId();\n return this.http.delete(`/api/messaging/${encodeURIComponent(appId)}/channels/${encodeURIComponent(channelId)}`);\n }\n\n /**\n * Get a channel by ID\n */\n async getChannel(channelId: string): Promise<BaasChannelConfig & { channelId: string; messageCount: number }> {\n const appId = this.getAppId();\n return this.http.get(`/api/messaging/${encodeURIComponent(appId)}/channels/${encodeURIComponent(channelId)}`);\n }\n\n /**\n * List all channels for the app\n */\n async listChannels(): Promise<{ channels: Array<BaasChannelConfig & { channelId: string }>; total: number }> {\n const appId = this.getAppId();\n return this.http.get(`/api/messaging/${encodeURIComponent(appId)}/channels`);\n }\n\n /**\n * Publish a message to a channel\n */\n async publish(\n channel: string,\n message: Record<string, unknown>,\n metadata?: Record<string, unknown>\n ): Promise<BaasPublishResult> {\n const appId = this.getAppId();\n return this.http.post(\n `/api/messaging/${encodeURIComponent(appId)}/channels/${encodeURIComponent(channel)}/publish`,\n { data: message, metadata }\n );\n }\n\n /**\n * Get message history for a channel\n */\n async getHistory(\n channel: string,\n options?: BaasHistoryOptions\n ): Promise<{ messages: BaasMessage[]; total: number; hasMore: boolean }> {\n const appId = this.getAppId();\n const params = new URLSearchParams();\n if (options?.limit !== undefined) params.set('limit', String(options.limit));\n if (options?.before) params.set('before', options.before);\n if (options?.after) params.set('after', options.after);\n const qs = params.toString();\n return this.http.get(\n `/api/messaging/${encodeURIComponent(appId)}/channels/${encodeURIComponent(channel)}/history${qs ? `?${qs}` : ''}`\n );\n }\n\n /**\n * Set presence for a member\n */\n async setPresence(member: BaasPresenceMember): Promise<{ success: boolean }> {\n const appId = this.getAppId();\n return this.http.post(`/api/messaging/${encodeURIComponent(appId)}/presence`, member);\n }\n\n /**\n * Remove presence for a member\n */\n async removePresence(memberId: string): Promise<{ success: boolean }> {\n const appId = this.getAppId();\n return this.http.delete(`/api/messaging/${encodeURIComponent(appId)}/presence/${encodeURIComponent(memberId)}`);\n }\n\n /**\n * Get presence info for a channel\n */\n async getPresence(channel: string): Promise<BaasPresenceInfo> {\n const appId = this.getAppId();\n return this.http.get(`/api/messaging/${encodeURIComponent(appId)}/presence/${encodeURIComponent(channel)}`);\n }\n\n /**\n * Get messaging statistics\n */\n async getStats(): Promise<any> {\n const appId = this.getAppId();\n return this.http.get(`/api/messaging/${encodeURIComponent(appId)}/stats`);\n }\n}\n","/**\n * Deployment Sub-Client\n *\n * Manages smart-app deployment lifecycle.\n *\n * @example\n * ```typescript\n * const app = await baas.deployment.create({ name: 'My App', services: ['database', 'messaging'] });\n * await baas.deployment.suspend(app.appId);\n * await baas.deployment.resume(app.appId);\n * ```\n */\nimport type { HttpClient } from '../../http';\nimport type {\n BaasDeployRequest,\n BaasDeployResult,\n BaasAppListResponse,\n DeployedAppInfo,\n} from '../types';\n\nexport class DeploymentClient {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create (deploy) a new app\n */\n async create(request: BaasDeployRequest): Promise<BaasDeployResult> {\n return this.http.post('/api/deployment/apps', request);\n }\n\n /**\n * List all deployed apps\n */\n async list(): Promise<BaasAppListResponse> {\n return this.http.get('/api/deployment/apps');\n }\n\n /**\n * Get app details\n */\n async get(appId: string): Promise<DeployedAppInfo> {\n return this.http.get(`/api/deployment/apps/${encodeURIComponent(appId)}`);\n }\n\n /**\n * Update app configuration\n */\n async update(appId: string, updates: Partial<BaasDeployRequest>): Promise<DeployedAppInfo> {\n return this.http.put(`/api/deployment/apps/${encodeURIComponent(appId)}`, updates);\n }\n\n /**\n * Delete an app\n */\n async delete(appId: string): Promise<{ success: boolean }> {\n return this.http.delete(`/api/deployment/apps/${encodeURIComponent(appId)}`);\n }\n\n /**\n * Suspend an app\n */\n async suspend(appId: string): Promise<{ success: boolean; status: string }> {\n return this.http.post(`/api/deployment/apps/${encodeURIComponent(appId)}/suspend`, {});\n }\n\n /**\n * Resume a suspended app\n */\n async resume(appId: string): Promise<{ success: boolean; status: string }> {\n return this.http.post(`/api/deployment/apps/${encodeURIComponent(appId)}/resume`, {});\n }\n\n /**\n * Get deployment statistics\n */\n async getStats(): Promise<any> {\n return this.http.get('/api/deployment/stats');\n }\n}\n","/**\n * Agents Sub-Client\n *\n * Manages autonomous smart agents on the host platform.\n *\n * @example\n * ```typescript\n * // Register an agent\n * const agent = await baas.agents.register({\n * name: 'Trading Bot',\n * capabilities: ['trade', 'withdraw'],\n * rules: { maxTradeAmount: '1000', allowedPairs: ['HBAR/USDC'] },\n * });\n *\n * // Fund and trade\n * await baas.agents.fund(agent.agentId, { chain: 'hedera', amount: '500' });\n * await baas.agents.trade(agent.agentId, { chain: 'hedera', pair: 'HBAR/USDC', side: 'buy', amount: '100' });\n * ```\n */\nimport type { HttpClient } from '../../http';\nimport type {\n AgentRegisterRequest,\n AgentInfo,\n AgentRules,\n AgentEvent,\n AgentBalance,\n AgentFundRequest,\n AgentTradeRequest,\n AgentWithdrawRequest,\n} from './types';\n\nexport * from './types';\nexport { validateAgentRules } from './types';\n\nexport class AgentsClient {\n constructor(private readonly http: HttpClient) {}\n\n /** Register a new agent */\n async register(request: AgentRegisterRequest): Promise<AgentInfo> {\n return this.http.post('/api/agents/register', request);\n }\n\n /** Get agent details */\n async get(agentId: string): Promise<AgentInfo> {\n return this.http.get(`/api/agents/${encodeURIComponent(agentId)}`);\n }\n\n /** List all agents */\n async list(): Promise<{ agents: AgentInfo[]; total: number }> {\n return this.http.get('/api/agents');\n }\n\n /** Fund an agent */\n async fund(agentId: string, request: AgentFundRequest): Promise<{ success: boolean; txId?: string }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/fund`, request);\n }\n\n /** Execute a trade */\n async trade(agentId: string, request: AgentTradeRequest): Promise<{ success: boolean; txId?: string }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/trade`, request);\n }\n\n /** Withdraw funds from agent */\n async withdraw(agentId: string, request: AgentWithdrawRequest): Promise<{ success: boolean; txId?: string }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/withdraw`, request);\n }\n\n /** Pause an agent */\n async pause(agentId: string): Promise<{ success: boolean; status: string }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/pause`, {});\n }\n\n /** Resume a paused agent */\n async resume(agentId: string): Promise<{ success: boolean; status: string }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/resume`, {});\n }\n\n /** Revoke an agent (permanent) */\n async revoke(agentId: string): Promise<{ success: boolean; status: string }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/revoke`, {});\n }\n\n /** Update agent rules */\n async updateRules(agentId: string, rules: Partial<AgentRules>): Promise<AgentInfo> {\n return this.http.put(`/api/agents/${encodeURIComponent(agentId)}/rules`, rules);\n }\n\n /** Get agent events */\n async getEvents(agentId: string): Promise<{ events: AgentEvent[]; total: number }> {\n return this.http.get(`/api/agents/${encodeURIComponent(agentId)}/events`);\n }\n\n /** Get agent balances across chains */\n async getBalances(agentId: string): Promise<{ balances: AgentBalance[] }> {\n return this.http.get(`/api/agents/${encodeURIComponent(agentId)}/balances`);\n }\n\n /** Approve a pending agent operation */\n async approve(agentId: string, operationId: string): Promise<{ success: boolean }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/approve/${encodeURIComponent(operationId)}`, {});\n }\n\n /** Reject a pending agent operation */\n async reject(agentId: string, operationId: string): Promise<{ success: boolean }> {\n return this.http.post(`/api/agents/${encodeURIComponent(agentId)}/reject/${encodeURIComponent(operationId)}`, {});\n }\n}\n","/**\n * BaaS Client\n *\n * SDK client for interacting with Smart Engines Backend-as-a-Service.\n *\n * Provides:\n * - Wallet-based authentication (challenge-response)\n * - App registration and management\n * - Trustless database operations with state transitions and Merkle proofs\n * - Decentralized file storage\n * - Serverless function deployment and invocation\n * - Real-time pub/sub messaging with channels, history, and presence\n * - App deployment lifecycle management\n * - Autonomous smart agent management\n *\n * @example\n * ```typescript\n * import { BaasClient } from '@hsuite/smart-engines-sdk';\n *\n * const baas = new BaasClient({\n * hostUrl: 'https://host.smartengines.io',\n * appId: 'my-app',\n * });\n *\n * await baas.authenticate({\n * chain: 'hedera',\n * walletAddress: '0.0.12345',\n * publicKey: 'your-public-key',\n * signFn: async (message) => wallet.sign(message),\n * });\n *\n * // Database with state proofs\n * const result = await baas.db.insert('users', { name: 'Alice' });\n * const proof = await baas.db.getDocumentProof(result.document._id);\n *\n * // File storage\n * const upload = await baas.storage.upload(fileBuffer, 'document.pdf');\n *\n * // Messaging\n * await baas.messaging.publish('events', { type: 'user.created' });\n *\n * // Functions\n * const fn = await baas.functions.deploy({ name: 'handler', runtime: 'nodejs20', code: '...', codeType: 'inline' });\n *\n * // Agents\n * const agent = await baas.agents.register({ name: 'Bot', capabilities: ['trade'], rules: {} });\n * ```\n */\n\nimport type {\n BaasClientConfig,\n BaasSupportedChain,\n BaasChallengeResponse,\n BaasAuthResult,\n BaasSessionInfo,\n BaasRegisterRequest,\n BaasRegisterResponse,\n BaasErrorDetails,\n} from './types';\nimport { type CircuitBreakerSnapshot } from '../_vendor';\nimport { createHttpClient, type HttpClient } from '../http';\nimport { DatabaseClient } from './database';\nimport { StorageClient } from './storage';\nimport { FunctionsClient } from './functions';\nimport { MessagingClient } from './messaging';\nimport { DeploymentClient } from './deployment';\nimport { AgentsClient } from './agents';\n\n/**\n * Authentication options for wallet-based auth\n */\nexport type AuthenticateOptions = {\n /** Blockchain chain */\n chain: BaasSupportedChain;\n /** Wallet address on the chain */\n walletAddress: string;\n /** Public key (hex encoded) */\n publicKey: string;\n /** Function to sign the challenge message */\n signFn: (message: string) => string | Promise<string>;\n};\n\n/**\n * BaaS Client\n *\n * Full-featured client for Smart Engines Backend-as-a-Service platform.\n * All BaaS services are accessible via typed sub-clients.\n */\nexport class BaasClient {\n private readonly hostUrl: string;\n private readonly pathPrefix: string;\n private appId: string | undefined;\n private readonly timeout: number;\n private readonly allowInsecure: boolean;\n private authToken: string | null = null;\n private readonly http: HttpClient;\n /** Last HTTP error (for getHttpHealth) */\n private lastHttpError?: Error;\n\n // ========== Sub-Clients ==========\n\n /** Trustless database with state proofs and Merkle verification */\n public readonly db: DatabaseClient;\n /** Decentralized file storage */\n public readonly storage: StorageClient;\n /** Serverless function deployment and invocation */\n public readonly functions: FunctionsClient;\n /** Real-time pub/sub messaging with channels, history, and presence */\n public readonly messaging: MessagingClient;\n /** App deployment lifecycle management */\n public readonly deployment: DeploymentClient;\n /** Autonomous smart agent management */\n public readonly agents: AgentsClient;\n\n constructor(config: BaasClientConfig) {\n this.allowInsecure = config.allowInsecure ?? false;\n this.hostUrl = validateUrl(config.hostUrl, this.allowInsecure);\n this.appId = config.appId;\n this.timeout = config.timeout ?? 30000;\n // Note: config.http is accepted for backward compatibility and future resilience layer integration\n\n // Strip trailing slash from pathPrefix and ensure leading slash; empty if none.\n const prefix = (config.pathPrefix ?? '').replace(/\\/$/, '');\n this.pathPrefix = prefix ? (prefix.startsWith('/') ? prefix : `/${prefix}`) : '';\n const baseUrlWithPrefix = this.pathPrefix\n ? this.hostUrl.replace(/\\/$/, '') + this.pathPrefix\n : this.hostUrl;\n\n // Create shared HTTP client. baseUrl includes optional pathPrefix so all\n // /api/* paths get routed to the host even when consumed via a gateway.\n this.http = createHttpClient({\n baseUrl: baseUrlWithPrefix,\n timeout: this.timeout,\n });\n\n // Helper to get appId with validation\n const getAppId = () => this.requireAppId();\n\n // Initialize sub-clients\n this.db = new DatabaseClient(this.http, getAppId);\n this.storage = new StorageClient(this.http, getAppId);\n this.functions = new FunctionsClient(this.http, getAppId);\n this.messaging = new MessagingClient(this.http, getAppId);\n this.deployment = new DeploymentClient(this.http);\n this.agents = new AgentsClient(this.http);\n }\n\n /** Set the app ID (for newly registered apps) */\n setAppId(appId: string): void {\n this.appId = appId;\n }\n\n /** Check if the client is authenticated */\n isAuthenticated(): boolean {\n return this.authToken !== null;\n }\n\n /** Get the current app ID */\n getAppId(): string | undefined {\n return this.appId;\n }\n\n /**\n * Get HTTP resilience health information\n * @returns Object with circuit breaker state and last error (if any)\n */\n getHttpHealth(): { breaker: CircuitBreakerSnapshot | null; lastError?: Error } {\n // Note: In a real implementation, we would get the circuit breaker state\n // from the resilient HTTP layer. For now, return null since the base\n // HTTP client doesn't expose it yet.\n return {\n breaker: null,\n lastError: this.lastHttpError,\n };\n }\n\n private requireAppId(): string {\n if (!this.appId) {\n throw new BaasError(\n 'App ID required. Either provide appId in config or call register() first.',\n 400\n );\n }\n return this.appId;\n }\n\n // ========== Authentication ==========\n\n /**\n * Authenticate with the BaaS host using wallet challenge-response\n *\n * 1. Requests a challenge message from the host\n * 2. Signs the challenge with the provided signing function\n * 3. Submits the signature for verification\n * 4. Stores the JWT token for subsequent requests\n */\n async authenticate(options: AuthenticateOptions): Promise<BaasAuthResult> {\n const { chain, walletAddress, publicKey, signFn } = options;\n\n // Step 1: Request challenge\n const challenge = await this.post<BaasChallengeResponse>('/api/auth/challenge', {\n chain,\n walletAddress,\n appId: this.appId,\n });\n\n // Step 2: Sign the challenge\n const signature = await signFn(challenge.message);\n\n // Step 3: Verify and get token\n const result = await this.post<BaasAuthResult>('/api/auth/verify', {\n challengeId: challenge.challengeId,\n signature,\n publicKey,\n });\n\n // Store token for subsequent requests\n this.authToken = result.token;\n // Update the shared HTTP client's auth token\n (this.http as any).setAuthToken?.(result.token);\n\n return result;\n }\n\n /** Validate the current session */\n async validateSession(): Promise<BaasSessionInfo> {\n this.requireAuth();\n return this.get<BaasSessionInfo>('/api/auth/session');\n }\n\n /** Destroy the current session on server and clear local token */\n async logout(): Promise<void> {\n if (this.authToken) {\n try {\n await this.post('/api/auth/logout', {});\n } catch {\n // Best effort — clear locally even if server request fails\n }\n }\n this.authToken = null;\n }\n\n // ========== App Registration ==========\n\n /** Register a new app on the BaaS host */\n async register(request: BaasRegisterRequest): Promise<BaasRegisterResponse> {\n this.requireAuth();\n return this.post<BaasRegisterResponse>('/api/deployment/apps', request);\n }\n\n // ========== HTTP Helpers ==========\n\n private requireAuth(): void {\n if (!this.authToken) {\n throw new BaasError('Authentication required. Call authenticate() first.', 401);\n }\n }\n\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (this.authToken) {\n headers['Authorization'] = `Bearer ${this.authToken}`;\n }\n return headers;\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>('POST', path, body);\n }\n\n private async get<T>(path: string): Promise<T> {\n return this.request<T>('GET', path);\n }\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.hostUrl}${this.pathPrefix}${path}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const options: RequestInit = {\n method,\n headers: this.getHeaders(),\n signal: controller.signal,\n };\n\n if (body !== undefined) {\n options.body = JSON.stringify(body);\n }\n\n const response = await fetch(url, options);\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as BaasErrorDetails & {\n message?: string;\n };\n throw new BaasError(\n errorData.message || `API error: ${response.status} ${response.statusText}`,\n response.status,\n errorData\n );\n }\n\n const text = await response.text();\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof BaasError) throw error;\n const err = error as Error;\n if (err.name === 'AbortError') {\n throw new BaasError('Request timeout', 408);\n }\n throw new BaasError(`Network error: ${err.message}`, 0, { originalError: err.message });\n }\n }\n}\n\n/**\n * BaaS Error\n */\nexport class BaasError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly details?: BaasErrorDetails\n ) {\n super(message);\n this.name = 'BaasError';\n }\n}\n\nfunction validateUrl(url: string, allowInsecure = false): string {\n try {\n const parsed = new URL(url);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n throw new BaasError(`Invalid protocol: ${parsed.protocol}`, 400);\n }\n if (!allowInsecure && parsed.protocol !== 'https:') {\n throw new BaasError(\n 'HTTPS is required for secure connections. Set allowInsecure=true for local development.',\n 400\n );\n }\n return parsed.origin;\n } catch (error) {\n if (error instanceof BaasError) throw error;\n throw new BaasError(`Invalid URL: ${url}`, 400);\n }\n}\n","import {\n Injectable,\n Logger,\n OnModuleInit,\n OnModuleDestroy,\n Inject,\n Optional,\n} from '@nestjs/common';\nimport { SmartEngineClient, SmartEngineClientConfig, SmartEngineError } from '../client';\nimport { SmartGatewayClient } from '../gateway';\nimport { BaasClient as SdkBaasClient } from '../baas';\n\n/**\n * Configuration for SmartEngineService\n */\nexport interface SmartEngineServiceConfig extends SmartEngineClientConfig {\n /** Enable automatic connection test on module init */\n testConnection?: boolean;\n /** Enable auto-reconnect on connection failure */\n autoReconnect?: boolean;\n /** Reconnection interval in milliseconds */\n reconnectInterval?: number;\n /** Maximum reconnection attempts (0 = infinite) */\n maxReconnectAttempts?: number;\n}\n\n/**\n * Configuration token for dependency injection\n */\nexport const SMART_ENGINE_CONFIG = 'SMART_ENGINE_CONFIG';\n\n/**\n * BaaS (Blockchain-as-a-Service) client interface\n *\n * Provides simplified access to blockchain operations for BaaS scenarios\n * where applications need managed blockchain infrastructure without\n * direct validator management.\n */\nexport interface BaasClient {\n /** The underlying SmartEngineClient */\n readonly client: SmartEngineClient;\n /** Check if the client is connected and healthy */\n isHealthy(): Promise<boolean>;\n /** Get the validator base URL */\n getBaseUrl(): string;\n}\n\n/**\n * SmartEngineService - NestJS injectable service for Smart Engines SDK\n *\n * Provides lifecycle-managed access to SmartEngineClient with:\n * - Automatic connection testing on module init\n * - Graceful shutdown on module destroy\n * - BaaS client wrapper for simplified access\n * - Optional auto-reconnect functionality\n *\n * @example Module configuration with forRoot\n * ```typescript\n * import { Module } from '@nestjs/common';\n * import { SmartEngineModule } from '@hsuite/smart-engines-sdk/nestjs';\n *\n * @Module({\n * imports: [\n * SmartEngineModule.forRoot({\n * baseUrl: 'https://validator.example.com',\n * apiKey: process.env.SMART_ENGINE_API_KEY,\n * testConnection: true,\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n *\n * @example Direct service injection\n * ```typescript\n * import { Injectable } from '@nestjs/common';\n * import { SmartEngineService } from '@hsuite/smart-engines-sdk/nestjs';\n *\n * @Injectable()\n * export class MyService {\n * constructor(private readonly smartEngine: SmartEngineService) {}\n *\n * async doSomething() {\n * const client = this.smartEngine.getClient();\n * const health = await client.getHealth();\n * }\n * }\n * ```\n */\n@Injectable()\nexport class SmartEngineService implements OnModuleInit, OnModuleDestroy {\n private readonly logger = new Logger(SmartEngineService.name);\n private client: SmartEngineClient | null = null;\n private baasClient: BaasClient | null = null;\n private connected = false;\n private reconnectTimer: NodeJS.Timeout | null = null;\n private reconnectAttempts = 0;\n\n constructor(\n @Optional()\n @Inject(SMART_ENGINE_CONFIG)\n private readonly config?: SmartEngineServiceConfig\n ) {}\n\n /**\n * Initialize the service when the module starts\n */\n async onModuleInit(): Promise<void> {\n if (!this.config) {\n this.logger.warn(\n 'SmartEngineService initialized without configuration. Call configure() before using.'\n );\n return;\n }\n\n await this.initialize(this.config);\n }\n\n /**\n * Clean up resources when the module is destroyed\n */\n async onModuleDestroy(): Promise<void> {\n await this.shutdown();\n }\n\n /**\n * Initialize the service with configuration\n *\n * Can be called manually if not using DI configuration\n */\n async initialize(config: SmartEngineServiceConfig): Promise<void> {\n this.logger.log(`Initializing SmartEngineService for ${config.baseUrl}`);\n\n try {\n this.client = new SmartEngineClient({\n baseUrl: config.baseUrl,\n apiKey: config.apiKey,\n authToken: config.authToken,\n timeout: config.timeout,\n allowInsecure: config.allowInsecure,\n });\n\n // Create BaaS client wrapper\n this.baasClient = this.createBaasClient(this.client);\n\n // Test connection if enabled\n if (config.testConnection !== false) {\n await this.testConnection();\n }\n\n this.connected = true;\n this.reconnectAttempts = 0;\n this.logger.log('SmartEngineService initialized successfully');\n } catch (error) {\n const err = error as Error;\n this.logger.error(`Failed to initialize SmartEngineService: ${err.message}`);\n\n if (config.autoReconnect) {\n this.scheduleReconnect(config);\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Gracefully shutdown the service\n */\n async shutdown(): Promise<void> {\n this.logger.log('Shutting down SmartEngineService');\n\n // Clear reconnect timer\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n // Clear client references\n this.client = null;\n this.baasClient = null;\n this.connected = false;\n\n this.logger.log('SmartEngineService shutdown complete');\n }\n\n /**\n * Get the SmartEngineClient instance\n *\n * @throws SmartEngineError if client is not initialized\n */\n getClient(): SmartEngineClient {\n if (!this.client) {\n throw new SmartEngineError(\n 'SmartEngineClient not initialized. Ensure SmartEngineService is configured properly.',\n 500\n );\n }\n return this.client;\n }\n\n /**\n * Get the BaaS client for simplified blockchain access\n *\n * The BaaS client provides a simplified interface for applications\n * that need managed blockchain infrastructure access.\n *\n * @throws SmartEngineError if client is not initialized\n */\n getBaasClient(): BaasClient {\n if (!this.baasClient) {\n throw new SmartEngineError(\n 'BaasClient not initialized. Ensure SmartEngineService is configured properly.',\n 500\n );\n }\n return this.baasClient;\n }\n\n /**\n * Check if the service is connected and healthy\n */\n isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Test the connection to the validator\n */\n async testConnection(): Promise<boolean> {\n if (!this.client) {\n return false;\n }\n\n try {\n const health = await this.client.getHealth();\n this.connected = health.status === 'healthy' || health.status === 'ok';\n return this.connected;\n } catch (error) {\n const err = error as Error;\n this.logger.warn(`Connection test failed: ${err.message}`);\n this.connected = false;\n return false;\n }\n }\n\n /**\n * Get the current connection status\n */\n getStatus(): {\n connected: boolean;\n baseUrl: string | null;\n authenticated: boolean;\n reconnectAttempts: number;\n } {\n return {\n connected: this.connected,\n baseUrl: this.client?.getBaseUrl() ?? null,\n authenticated: this.client?.isAuthenticated() ?? false,\n reconnectAttempts: this.reconnectAttempts,\n };\n }\n\n /**\n * Create a SmartGatewayClient for gateway operations\n */\n createGatewayClient(config: {\n baseUrl: string;\n apiKey?: string;\n authToken?: string;\n timeout?: number;\n allowInsecure?: boolean;\n }): SmartGatewayClient {\n return new SmartGatewayClient(config);\n }\n\n /**\n * Create a BaaS client for host operations\n */\n createHostClient(config: {\n hostUrl: string;\n appId?: string;\n timeout?: number;\n allowInsecure?: boolean;\n }): SdkBaasClient {\n return new SdkBaasClient(config);\n }\n\n /**\n * Create a BaaS client wrapper around the SmartEngineClient\n */\n private createBaasClient(client: SmartEngineClient): BaasClient {\n return {\n client,\n isHealthy: async () => {\n try {\n const health = await client.getHealth();\n return health.status === 'healthy' || health.status === 'ok';\n } catch {\n return false;\n }\n },\n getBaseUrl: () => client.getBaseUrl(),\n };\n }\n\n /**\n * Schedule a reconnection attempt\n */\n private scheduleReconnect(config: SmartEngineServiceConfig): void {\n const maxAttempts = config.maxReconnectAttempts ?? 0;\n const interval = config.reconnectInterval ?? 5000;\n\n if (maxAttempts > 0 && this.reconnectAttempts >= maxAttempts) {\n this.logger.error(`Max reconnection attempts (${maxAttempts}) reached. Giving up.`);\n return;\n }\n\n this.reconnectAttempts++;\n this.logger.log(`Scheduling reconnection attempt ${this.reconnectAttempts} in ${interval}ms`);\n\n this.reconnectTimer = setTimeout(async () => {\n try {\n await this.initialize(config);\n } catch {\n // Error already logged in initialize\n }\n }, interval);\n }\n}\n","import { DynamicModule, Module, Provider, Type } from '@nestjs/common';\nimport {\n SmartEngineService,\n SmartEngineServiceConfig,\n SMART_ENGINE_CONFIG,\n} from './smart-engine.service';\n\n/**\n * Options for async module configuration\n */\nexport interface SmartEngineModuleAsyncOptions {\n /** Imports required for the factory */\n imports?: any[];\n /** Factory function to create configuration */\n useFactory?: (...args: any[]) => Promise<SmartEngineServiceConfig> | SmartEngineServiceConfig;\n /** Dependencies to inject into the factory */\n inject?: any[];\n /** Class to use for configuration */\n useClass?: Type<SmartEngineOptionsFactory>;\n /** Existing provider to use for configuration */\n useExisting?: Type<SmartEngineOptionsFactory>;\n /** Make the module global */\n isGlobal?: boolean;\n}\n\n/**\n * Factory interface for creating SmartEngine configuration\n */\nexport interface SmartEngineOptionsFactory {\n createSmartEngineOptions(): Promise<SmartEngineServiceConfig> | SmartEngineServiceConfig;\n}\n\n/**\n * SmartEngineModule - NestJS module for Smart Engines SDK integration\n *\n * Provides dependency injection for SmartEngineService with support for\n * both synchronous and asynchronous configuration.\n *\n * @example Synchronous configuration with forRoot\n * ```typescript\n * import { Module } from '@nestjs/common';\n * import { SmartEngineModule } from '@hsuite/smart-engines-sdk/nestjs';\n *\n * @Module({\n * imports: [\n * SmartEngineModule.forRoot({\n * baseUrl: 'https://validator.example.com',\n * apiKey: 'your-api-key',\n * testConnection: true,\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n *\n * @example Async configuration with forRootAsync\n * ```typescript\n * import { Module } from '@nestjs/common';\n * import { ConfigService, ConfigModule } from '@nestjs/config';\n * import { SmartEngineModule } from '@hsuite/smart-engines-sdk/nestjs';\n *\n * @Module({\n * imports: [\n * SmartEngineModule.forRootAsync({\n * imports: [ConfigModule],\n * useFactory: (configService: ConfigService) => ({\n * baseUrl: configService.get('SMART_ENGINE_URL'),\n * apiKey: configService.get('SMART_ENGINE_API_KEY'),\n * testConnection: true,\n * }),\n * inject: [ConfigService],\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n *\n * @example Using a configuration class\n * ```typescript\n * import { Injectable } from '@nestjs/common';\n * import { SmartEngineModule, SmartEngineOptionsFactory } from '@hsuite/smart-engines-sdk/nestjs';\n *\n * @Injectable()\n * class SmartEngineConfigService implements SmartEngineOptionsFactory {\n * createSmartEngineOptions() {\n * return {\n * baseUrl: process.env.SMART_ENGINE_URL,\n * apiKey: process.env.SMART_ENGINE_API_KEY,\n * };\n * }\n * }\n *\n * @Module({\n * imports: [\n * SmartEngineModule.forRootAsync({\n * useClass: SmartEngineConfigService,\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\n@Module({})\nexport class SmartEngineModule {\n /**\n * Configure the module with static configuration\n *\n * @param config - SmartEngine service configuration\n * @param isGlobal - Whether to make the module global (default: true)\n */\n static forRoot(config: SmartEngineServiceConfig, isGlobal = true): DynamicModule {\n return {\n module: SmartEngineModule,\n global: isGlobal,\n providers: [\n {\n provide: SMART_ENGINE_CONFIG,\n useValue: config,\n },\n SmartEngineService,\n ],\n exports: [SmartEngineService],\n };\n }\n\n /**\n * Configure the module with async configuration\n *\n * Supports factory functions, configuration classes, and existing providers.\n *\n * @param options - Async configuration options\n */\n static forRootAsync(options: SmartEngineModuleAsyncOptions): DynamicModule {\n const asyncProviders = this.createAsyncProviders(options);\n\n return {\n module: SmartEngineModule,\n global: options.isGlobal ?? true,\n imports: options.imports || [],\n providers: [...asyncProviders, SmartEngineService],\n exports: [SmartEngineService],\n };\n }\n\n /**\n * Create async providers based on configuration options\n */\n private static createAsyncProviders(options: SmartEngineModuleAsyncOptions): Provider[] {\n if (options.useFactory) {\n return [\n {\n provide: SMART_ENGINE_CONFIG,\n useFactory: options.useFactory,\n inject: options.inject || [],\n },\n ];\n }\n\n if (options.useClass) {\n return [\n {\n provide: options.useClass,\n useClass: options.useClass,\n },\n {\n provide: SMART_ENGINE_CONFIG,\n useFactory: async (optionsFactory: SmartEngineOptionsFactory) =>\n optionsFactory.createSmartEngineOptions(),\n inject: [options.useClass],\n },\n ];\n }\n\n if (options.useExisting) {\n return [\n {\n provide: SMART_ENGINE_CONFIG,\n useFactory: async (optionsFactory: SmartEngineOptionsFactory) =>\n optionsFactory.createSmartEngineOptions(),\n inject: [options.useExisting],\n },\n ];\n }\n\n throw new Error(\n 'Invalid SmartEngineModuleAsyncOptions: must provide useFactory, useClass, or useExisting'\n );\n }\n}\n"]}
|