cilantro-sdk 0.0.19 → 0.0.21
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/dist/api/wallets/wallets.d.ts +2 -2
- package/dist/api/wallets/wallets.d.ts.map +1 -1
- package/dist/helpers.cjs +59 -14
- package/dist/helpers.cjs.map +2 -2
- package/dist/helpers.d.ts +1 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.mjs +59 -13
- package/dist/helpers.mjs.map +2 -2
- package/dist/index.cjs +59 -13
- package/dist/index.cjs.map +2 -2
- package/dist/index.mjs +59 -13
- package/dist/index.mjs.map +2 -2
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/startPasskeyAuthenticationDto.d.ts +12 -0
- package/dist/models/startPasskeyAuthenticationDto.d.ts.map +1 -0
- package/dist/signers/index.d.ts +1 -1
- package/dist/signers/index.d.ts.map +1 -1
- package/dist/signers/passkeyHelpers.d.ts +8 -17
- package/dist/signers/passkeyHelpers.d.ts.map +1 -1
- package/dist/wallet.cjs +7 -2
- package/dist/wallet.cjs.map +2 -2
- package/dist/wallet.d.ts +2 -2
- package/dist/wallet.d.ts.map +1 -1
- package/dist/wallet.mjs +7 -2
- package/dist/wallet.mjs.map +2 -2
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/config.ts", "../src/platform.ts", "../src/api-client.ts", "../src/api/platforms/platforms.ts", "../src/user.ts", "../src/api/users/users.ts", "../src/wallet.ts", "../src/api/wallets/wallets.ts", "../src/admin.ts", "../src/api/admin/admin.ts", "../src/auth.ts", "../src/api/auth/auth.ts", "../src/subscriptions.ts", "../src/api/subscriptions/subscriptions.ts", "../src/plans.ts", "../src/api/plans/plans.ts", "../src/transactions.ts", "../src/api/transactions/transactions.ts", "../src/delegated-keys.ts", "../src/api/delegated-keys/delegated-keys.ts", "../src/webhooks.ts", "../src/api/webhooks/webhooks.ts", "../src/api/gUACSmartAPIV2.ts", "../src/models/addSignerDtoSignerType.ts", "../src/models/adminControllerGetPlatformGrowthTrendsPeriod.ts", "../src/models/adminControllerGetTopPlatformsMetric.ts", "../src/models/adminControllerGetWalletAssetsAssetType.ts", "../src/models/adminSignerConfigDtoType.ts", "../src/models/assignPlanDtoPlanEnforcementType.ts", "../src/models/authControllerLogin200DataUserType.ts", "../src/models/createPlanDtoEnforcementType.ts", "../src/models/createPlatformDtoBillingCycle.ts", "../src/models/createSubscriptionDtoBillingCycle.ts", "../src/models/healthControllerGetHealth200ChecksDatabaseStatus.ts", "../src/models/healthControllerGetHealth200ChecksRedisStatus.ts", "../src/models/healthControllerGetHealth200ChecksSolanaRpcStatus.ts", "../src/models/healthControllerGetHealth200Status.ts", "../src/models/mintTokenDtoTokenStandard.ts", "../src/models/prepareTransactionDtoType.ts", "../src/models/subscriptionControllerFindAllStatus.ts", "../src/models/transactionStatus.ts", "../src/models/transactionType.ts", "../src/models/updatePlanDtoEnforcementType.ts", "../src/models/walletAssetResponseDtoAssetType.ts", "../src/models/walletControllerGetWalletAssetsAssetType.ts", "../src/models/webhookEvent.ts", "../src/utils/devicePublicKey.ts", "../src/helpers.ts", "../src/utils/deviceKeyManager.ts", "../src/utils/keyFormats.ts", "../src/utils/storage/adapters.ts", "../node_modules/@noble/hashes/src/utils.ts", "../node_modules/@noble/hashes/src/hmac.ts", "../node_modules/@noble/hashes/src/hkdf.ts", "../node_modules/@noble/hashes/src/_md.ts", "../node_modules/@noble/hashes/src/sha2.ts", "../node_modules/@noble/hashes/src/sha256.ts", "../node_modules/@noble/ed25519/lib/esm/index.js", "../src/signers/signerHelpers.ts", "../src/errors.ts", "../src/signers/deviceKeyHelpers.ts", "../src/signers/emailSigner.ts", "../src/signers/phoneSigner.ts", "../src/signers/deviceIdentityHelpers.ts", "../node_modules/@simplewebauthn/browser/dist/bundle/index.js", "../src/signers/passkeyHelpers.ts", "../src/signers/signerLifecycle.ts", "../src/signers/multiDeviceManager.ts", "../src/signers/signerValidation.ts", "../src/signers/externalWalletAdapter.ts"],
|
|
4
|
-
"sourcesContent": ["/**\r\n * Cilantro Smart SDK\r\n * Main entry point for the package\r\n */\r\n\r\n// Export SDK configuration functions\r\nexport { configure, setAuth, clearAuth } from './config';\r\nexport type { SDKConfig } from './config';\r\n\r\n// Export modules as namespaces to avoid naming conflicts\r\n// Use subpath imports for direct access: import { findAll } from 'cilantro-smart-sdk/platform'\r\nexport * as platform from './platform';\r\nexport * as user from './user';\r\nexport * as wallet from './wallet';\r\nexport * as admin from './admin';\r\nexport * as auth from './auth';\r\nexport * as subscriptions from './subscriptions';\r\nexport * as plans from './plans';\r\nexport * as transactions from './transactions';\r\nexport * as delegatedKeys from './delegated-keys';\r\nexport * as webhooks from './webhooks';\r\n\r\n// Export generated API functions and types (for backward compatibility)\r\nexport { getGUACSmartAPIV2 } from './api/gUACSmartAPIV2';\r\nexport type * from './api/gUACSmartAPIV2';\r\nexport * from './models';\r\n\r\n// Export utility functions\r\nexport { generateDevicePublicKey } from './utils/devicePublicKey';\r\n\r\n// Export helpers module (device key management and signer helpers)\r\nexport * as helpers from './helpers';\r\n\r\n// Export wallet functions including device identity management\r\nexport { updateDeviceIdentity } from './wallet';\r\nexport type { UpdateDeviceIdentityDto } from './models';\r\n\r\n// Export error classes\r\nexport {\r\n SDKError,\r\n DeviceKeyMismatchError,\r\n DeviceKeyNotFoundError,\r\n NoDeviceIdentitiesError,\r\n MultipleDeviceIdentitiesError,\r\n SignerValidationError,\r\n SignerNotFoundError,\r\n SignerInactiveError,\r\n UnsupportedSignerTypeError,\r\n DeviceAuthorizationError,\r\n TransactionSigningError,\r\n WebAuthnNotSupportedError,\r\n DeviceCompatibilityError,\r\n type SDKErrorDetails\r\n} from './errors';\r\n", "/**\r\n * SDK Configuration Management\r\n * Centralized configuration for authentication and API settings\r\n */\r\n\r\n/**\r\n * SDK Configuration interface\r\n */\r\nexport interface SDKConfig {\r\n /** JWT token for authentication */\r\n jwt?: string;\r\n /** API key for authentication (alternative to JWT) */\r\n apiKey?: string;\r\n /** Base URL for the API (defaults to https://api.cilantro.gg) */\r\n baseURL?: string;\r\n}\r\n\r\n/**\r\n * Internal configuration state\r\n * Uses global variable to share state across bundled modules\r\n */\r\nconst GLOBAL_CONFIG_KEY = '__CILANTRO_SDK_CONFIG__';\r\n\r\n// Extend global types\r\ndeclare global {\r\n var __CILANTRO_SDK_CONFIG__: SDKConfig | undefined;\r\n}\r\n\r\n// Get or create global config\r\nfunction getGlobalConfig(): SDKConfig {\r\n const defaultConfig: SDKConfig = {\r\n baseURL: process.env.CILANTRO_API_URL || 'https://api.cilantro.gg',\r\n };\r\n \r\n if (typeof global !== 'undefined') {\r\n if (!global.__CILANTRO_SDK_CONFIG__) {\r\n global.__CILANTRO_SDK_CONFIG__ = defaultConfig;\r\n }\r\n return global.__CILANTRO_SDK_CONFIG__;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n const win = (globalThis as any).window;\r\n if (!win[GLOBAL_CONFIG_KEY]) {\r\n win[GLOBAL_CONFIG_KEY] = defaultConfig;\r\n }\r\n return win[GLOBAL_CONFIG_KEY];\r\n }\r\n \r\n // Fallback for environments without global/window\r\n return defaultConfig;\r\n}\r\n\r\nlet currentConfig: SDKConfig = getGlobalConfig();\r\n\r\n/**\r\n * Configure the SDK with authentication credentials and settings\r\n * \r\n * @param config - Configuration options\r\n * @example\r\n * ```typescript\r\n * import { configure } from 'cilantro-smart-sdk';\r\n * \r\n * // Configure with API key\r\n * configure({ \r\n * apiKey: 'your-api-key',\r\n * baseURL: 'https://api.cilantro.gg' \r\n * });\r\n * \r\n * // Configure with JWT token\r\n * configure({ \r\n * jwt: 'your-jwt-token' \r\n * });\r\n * ```\r\n */\r\nexport function configure(config: SDKConfig): void {\r\n currentConfig = {\r\n ...currentConfig,\r\n ...config,\r\n };\r\n // Also update global config\r\n if (typeof global !== 'undefined') {\r\n global.__CILANTRO_SDK_CONFIG__ = currentConfig;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n ((globalThis as any).window as any)[GLOBAL_CONFIG_KEY] = currentConfig;\r\n }\r\n}\r\n\r\n/**\r\n * Set or update authentication credentials\r\n * \r\n * @param auth - Authentication credentials (JWT and/or API key)\r\n * @example\r\n * ```typescript\r\n * import { setAuth } from 'cilantro-smart-sdk';\r\n * import { login } from 'cilantro-smart-sdk/auth';\r\n * \r\n * const result = await login({ \r\n * usernameOrEmail: 'user@example.com',\r\n * password: 'password123' \r\n * });\r\n * \r\n * setAuth({ jwt: result.data.jwt });\r\n * ```\r\n */\r\nexport function setAuth(auth: { jwt?: string; apiKey?: string }): void {\r\n // Refresh from global first\r\n currentConfig = getGlobalConfig();\r\n \r\n if (auth.jwt !== undefined) {\r\n currentConfig.jwt = auth.jwt;\r\n }\r\n if (auth.apiKey !== undefined) {\r\n currentConfig.apiKey = auth.apiKey;\r\n }\r\n \r\n // Update global config\r\n if (typeof global !== 'undefined') {\r\n global.__CILANTRO_SDK_CONFIG__ = currentConfig;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n ((globalThis as any).window as any)[GLOBAL_CONFIG_KEY] = currentConfig;\r\n }\r\n}\r\n\r\n/**\r\n * Clear all authentication credentials\r\n * \r\n * @example\r\n * ```typescript\r\n * import { clearAuth } from 'cilantro-smart-sdk';\r\n * \r\n * clearAuth();\r\n * ```\r\n */\r\nexport function clearAuth(): void {\r\n currentConfig = getGlobalConfig();\r\n currentConfig.jwt = undefined;\r\n currentConfig.apiKey = undefined;\r\n \r\n // Update global config\r\n if (typeof global !== 'undefined') {\r\n global.__CILANTRO_SDK_CONFIG__ = currentConfig;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n ((globalThis as any).window as any)[GLOBAL_CONFIG_KEY] = currentConfig;\r\n }\r\n}\r\n\r\n/**\r\n * Get current SDK configuration (internal use only)\r\n * @internal\r\n */\r\nexport function getConfig(): Readonly<SDKConfig> {\r\n // Always get fresh from global to ensure we have the latest config\r\n currentConfig = getGlobalConfig();\r\n return currentConfig;\r\n}\r\n", "/**\r\n * Platform module - Simplified exports for platform-related API functions\r\n */\r\n\r\nimport { getPlatforms } from './api/platforms/platforms';\r\n\r\nconst {\r\n platformControllerCreate,\r\n platformControllerFindAll,\r\n platformControllerGetOwnProfile,\r\n platformControllerUpdateOwnProfile,\r\n platformControllerFindOne,\r\n platformControllerUpdate,\r\n platformControllerRemove,\r\n platformControllerGetUsersForPlatform,\r\n platformControllerCreateUserForPlatform,\r\n platformControllerUpdateUserForPlatform,\r\n platformControllerRemoveUserForPlatform,\r\n platformControllerToggleUserActiveForPlatform,\r\n platformControllerGetWalletsForPlatform,\r\n} = getPlatforms();\r\n\r\n// Export platform functions with simplified names\r\nexport const create = platformControllerCreate;\r\nexport const findAll = platformControllerFindAll;\r\nexport const getOwnProfile = platformControllerGetOwnProfile;\r\nexport const updateOwnProfile = platformControllerUpdateOwnProfile;\r\nexport const findOne = platformControllerFindOne;\r\nexport const update = platformControllerUpdate;\r\nexport const remove = platformControllerRemove;\r\nexport const getUsers = platformControllerGetUsersForPlatform;\r\nexport const createUser = platformControllerCreateUserForPlatform;\r\nexport const updateUser = platformControllerUpdateUserForPlatform;\r\nexport const removeUser = platformControllerRemoveUserForPlatform;\r\nexport const toggleUserActive = platformControllerToggleUserActiveForPlatform;\r\nexport const getWallets = platformControllerGetWalletsForPlatform;\r\n\r\n// Export types\r\nexport type {\r\n PlatformControllerCreateResult,\r\n PlatformControllerFindAllResult,\r\n PlatformControllerGetOwnProfileResult,\r\n PlatformControllerUpdateOwnProfileResult,\r\n PlatformControllerFindOneResult,\r\n PlatformControllerUpdateResult,\r\n PlatformControllerRemoveResult,\r\n PlatformControllerGetUsersForPlatformResult,\r\n PlatformControllerCreateUserForPlatformResult,\r\n PlatformControllerUpdateUserForPlatformResult,\r\n PlatformControllerRemoveUserForPlatformResult,\r\n PlatformControllerToggleUserActiveForPlatformResult,\r\n PlatformControllerGetWalletsForPlatformResult,\r\n} from './api/platforms/platforms';\r\n\r\nexport type {\r\n CreatePlatformDto,\r\n UpdatePlatformDto,\r\n CreateUserDto,\r\n UpdateUserDto,\r\n} from './models';\r\n\r\n", "/**\r\n * Custom API client instance for Cilantro Smart SDK\r\n * Handles authentication (JWT tokens and API keys) automatically\r\n * @internal\r\n */\r\n\r\nimport axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\r\nimport { getConfig } from './config';\r\n\r\n// Create axios instance with dynamic baseURL\r\nconst axiosInstance: AxiosInstance = axios.create();\r\n\r\n// Request interceptor to add authentication headers and dynamic baseURL\r\naxiosInstance.interceptors.request.use(\r\n (config) => {\r\n const sdkConfig = getConfig();\r\n \r\n // Set baseURL dynamically from config\r\n config.baseURL = sdkConfig.baseURL || 'https://api.cilantro.gg';\r\n \r\n // Add JWT token if available\r\n if (sdkConfig.jwt) {\r\n config.headers.Authorization = `Bearer ${sdkConfig.jwt}`;\r\n }\r\n \r\n // Add API key if available (for platform/user authentication)\r\n if (sdkConfig.apiKey) {\r\n config.headers['X-API-Key'] = sdkConfig.apiKey;\r\n }\r\n \r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n/**\r\n * Custom instance wrapper for orval\r\n * @internal\r\n */\r\nexport const customInstance = <T>(\r\n config: AxiosRequestConfig,\r\n options?: AxiosRequestConfig,\r\n): Promise<T> => {\r\n const source = axios.CancelToken.source();\r\n const promise = axiosInstance({\r\n ...config,\r\n ...options,\r\n cancelToken: source.token,\r\n }).then(({ data }: AxiosResponse<T>) => data);\r\n\r\n // @ts-ignore\r\n promise.cancel = () => {\r\n source.cancel('Query was cancelled');\r\n };\r\n\r\n return promise;\r\n};\r\n\r\nexport default customInstance;\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n CancelSubscriptionDto,\n ChangePasswordDto,\n ConfirmPaymentDto,\n CreatePlatformDto,\n CreateUserDto,\n DowngradeSubscriptionDto,\n LinkPaymentDto,\n RenewSubscriptionDto,\n UpdatePlatformDto,\n UpdateUserDto,\n UpgradeSubscriptionDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getPlatforms = () => {\n /**\n * Create a new platform account. Returns API key for authentication. No prior authentication required.\n * @summary Register a new platform\n */\n const platformControllerCreate = (\n createPlatformDto: CreatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createPlatformDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all registered platforms. Requires platform JWT token.\n * @summary Get all platforms\n */\n const platformControllerFindAll = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>({ url: `/platforms`, method: \"GET\" }, options);\n };\n /**\n * Retrieve the authenticated platform's own profile information including settings and API key details. Requires platform JWT token.\n * @summary Get own platform profile\n */\n const platformControllerGetOwnProfile = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update the authenticated platform's profile information such as name, email, or settings. Requires platform JWT token.\n * @summary Update own platform profile\n */\n const platformControllerUpdateOwnProfile = (\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlatformDto,\n },\n options,\n );\n };\n /**\n * Change the authenticated platform's password. Requires current password. Requires platform JWT token.\n * @summary Change password\n */\n const platformControllerChangePassword = (\n changePasswordDto: ChangePasswordDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/password`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: changePasswordDto,\n },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific platform. Requires platform JWT token.\n * @summary Get platform by ID\n */\n const platformControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update platform information by ID. Requires platform JWT token.\n * @summary Update platform\n */\n const platformControllerUpdate = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlatformDto,\n },\n options,\n );\n };\n /**\n * Permanently delete a platform and all associated data. This action cannot be undone. Requires platform JWT token.\n * @summary Delete platform\n */\n const platformControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Retrieve all users that belong to the authenticated platform. Returns user profiles without sensitive data. Requires platform JWT token.\n * @summary Get all users under this platform\n */\n const platformControllerGetUsersForPlatform = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/users`, method: \"GET\" },\n options,\n );\n };\n /**\n * Create a new user account under the authenticated platform. The user will be automatically associated with the platform. Requires platform JWT token.\n * @summary Create user under this platform\n */\n const platformControllerCreateUserForPlatform = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/users`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createUserDto,\n },\n options,\n );\n };\n /**\n * Update a user's profile that belongs to the authenticated platform. Cannot update users from other platforms. Requires platform JWT token.\n * @summary Update user under this platform\n */\n const platformControllerUpdateUserForPlatform = (\n userId: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/users/${userId}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateUserDto,\n },\n options,\n );\n };\n /**\n * Permanently delete a user that belongs to the authenticated platform. Cannot delete users from other platforms. Requires platform JWT token.\n * @summary Delete user under this platform\n */\n const platformControllerRemoveUserForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/users/${userId}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Enable or disable a user account under the authenticated platform. Disabled users cannot login or perform actions. Requires platform JWT token.\n * @summary Toggle user active status under this platform\n */\n const platformControllerToggleUserActiveForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/users/${userId}/toggle-active`, method: \"PATCH\" },\n options,\n );\n };\n /**\n * Retrieve all wallets belonging to users under the authenticated platform. Read-only access for monitoring and analytics. Requires platform JWT token.\n * @summary Get all wallets of users under this platform (read-only)\n */\n const platformControllerGetWalletsForPlatform = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/wallets`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve all subscriptions (active, cancelled, expired, etc.) for the authenticated platform. Read-only access. Requires platform JWT token.\n * @summary Get all subscriptions for this platform\n */\n const platformControllerGetSubscriptionsForPlatform = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/subscriptions`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Get subscription by ID\n */\n const platformControllerGetSubscriptionById = (\n subscriptionId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/subscriptions/${subscriptionId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Manually renew a subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Renew subscription\n */\n const platformControllerRenewSubscription = (\n subscriptionId: string,\n renewSubscriptionDto: RenewSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/renew`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: renewSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Upgrade a subscription to a higher plan with prorated billing. Requires platform JWT token.\n * @summary Upgrade subscription\n */\n const platformControllerUpgradeSubscription = (\n subscriptionId: string,\n upgradeSubscriptionDto: UpgradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/upgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: upgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Downgrade a subscription to a lower plan with prorated billing. Requires platform JWT token.\n * @summary Downgrade subscription\n */\n const platformControllerDowngradeSubscription = (\n subscriptionId: string,\n downgradeSubscriptionDto: DowngradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/downgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: downgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Cancel a subscription immediately or at the end of the billing period. Requires platform JWT token.\n * @summary Cancel subscription\n */\n const platformControllerCancelSubscription = (\n subscriptionId: string,\n cancelSubscriptionDto: CancelSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/cancel`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: cancelSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Retrieve the audit trail for a subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Get subscription history\n */\n const platformControllerGetSubscriptionHistory = (\n subscriptionId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/history`,\n method: \"GET\",\n },\n options,\n );\n };\n /**\n * Link a Helio payment transaction ID to a subscription and activate it. This should be called after successful payment. Requires platform JWT token.\n * @summary Confirm payment and activate subscription\n */\n const platformControllerConfirmPayment = (\n subscriptionId: string,\n confirmPaymentDto: ConfirmPaymentDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/payment-confirm`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: confirmPaymentDto,\n },\n options,\n );\n };\n /**\n * Manually link a Helio payment transaction ID to a subscription without changing status. Useful for recording additional payments. Requires platform JWT token.\n * @summary Link payment transaction to subscription\n */\n const platformControllerLinkPayment = (\n subscriptionId: string,\n linkPaymentDto: LinkPaymentDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/payment-link`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: linkPaymentDto,\n },\n options,\n );\n };\n /**\n * Retrieve payment transaction history for a subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Get payment history for subscription\n */\n const platformControllerGetPaymentHistory = (\n subscriptionId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/payments`,\n method: \"GET\",\n },\n options,\n );\n };\n return {\n platformControllerCreate,\n platformControllerFindAll,\n platformControllerGetOwnProfile,\n platformControllerUpdateOwnProfile,\n platformControllerChangePassword,\n platformControllerFindOne,\n platformControllerUpdate,\n platformControllerRemove,\n platformControllerGetUsersForPlatform,\n platformControllerCreateUserForPlatform,\n platformControllerUpdateUserForPlatform,\n platformControllerRemoveUserForPlatform,\n platformControllerToggleUserActiveForPlatform,\n platformControllerGetWalletsForPlatform,\n platformControllerGetSubscriptionsForPlatform,\n platformControllerGetSubscriptionById,\n platformControllerRenewSubscription,\n platformControllerUpgradeSubscription,\n platformControllerDowngradeSubscription,\n platformControllerCancelSubscription,\n platformControllerGetSubscriptionHistory,\n platformControllerConfirmPayment,\n platformControllerLinkPayment,\n platformControllerGetPaymentHistory,\n };\n};\nexport type PlatformControllerCreateResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerCreate\"]>\n >\n>;\nexport type PlatformControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerFindAll\"]>\n >\n>;\nexport type PlatformControllerGetOwnProfileResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetOwnProfile\"]\n >\n >\n>;\nexport type PlatformControllerUpdateOwnProfileResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerUpdateOwnProfile\"]\n >\n >\n>;\nexport type PlatformControllerChangePasswordResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerChangePassword\"]\n >\n >\n>;\nexport type PlatformControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerFindOne\"]>\n >\n>;\nexport type PlatformControllerUpdateResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerUpdate\"]>\n >\n>;\nexport type PlatformControllerRemoveResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerRemove\"]>\n >\n>;\nexport type PlatformControllerGetUsersForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetUsersForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerCreateUserForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerCreateUserForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerUpdateUserForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerUpdateUserForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerRemoveUserForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerRemoveUserForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerToggleUserActiveForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getPlatforms\n >[\"platformControllerToggleUserActiveForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerGetWalletsForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetWalletsForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerGetSubscriptionsForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getPlatforms\n >[\"platformControllerGetSubscriptionsForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerGetSubscriptionByIdResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetSubscriptionById\"]\n >\n >\n>;\nexport type PlatformControllerRenewSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerRenewSubscription\"]\n >\n >\n>;\nexport type PlatformControllerUpgradeSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerUpgradeSubscription\"]\n >\n >\n>;\nexport type PlatformControllerDowngradeSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerDowngradeSubscription\"]\n >\n >\n>;\nexport type PlatformControllerCancelSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerCancelSubscription\"]\n >\n >\n>;\nexport type PlatformControllerGetSubscriptionHistoryResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getPlatforms\n >[\"platformControllerGetSubscriptionHistory\"]\n >\n >\n>;\nexport type PlatformControllerConfirmPaymentResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerConfirmPayment\"]\n >\n >\n>;\nexport type PlatformControllerLinkPaymentResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerLinkPayment\"]>\n >\n>;\nexport type PlatformControllerGetPaymentHistoryResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetPaymentHistory\"]\n >\n >\n>;\n", "/**\r\n * User module - Simplified exports for user-related API functions\r\n */\r\n\r\nimport { getUsers } from './api/users/users';\r\n\r\nconst {\r\n userControllerCreate,\r\n userControllerFindOne,\r\n userControllerUpdate,\r\n} = getUsers();\r\n\r\n// Export user functions with simplified names\r\nexport const create = userControllerCreate;\r\nexport const findOne = userControllerFindOne;\r\nexport const update = userControllerUpdate;\r\n\r\n// Export types\r\nexport type {\r\n UserControllerCreateResult,\r\n UserControllerFindOneResult,\r\n UserControllerUpdateResult,\r\n} from './api/users/users';\r\n\r\nexport type {\r\n CreateUserDto,\r\n UpdateUserDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n ChangePasswordDto,\n CreateUserDto,\n UpdateUserDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getUsers = () => {\n /**\n * @summary Register a new user\n */\n const userControllerCreate = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/users`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createUserDto,\n },\n options,\n );\n };\n /**\n * Retrieve user profile by ID. Users can only access their own profile. Requires user JWT token.\n * @summary Get user by ID\n */\n const userControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/users/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update user profile by ID. Users can only update their own profile. Requires user JWT token.\n * @summary Update user\n */\n const userControllerUpdate = (\n id: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/users/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateUserDto,\n },\n options,\n );\n };\n /**\n * Change the authenticated user's password. Requires current password. Users can only change their own password. Requires user JWT token.\n * @summary Change password\n */\n const userControllerChangePassword = (\n id: string,\n changePasswordDto: ChangePasswordDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/users/${id}/password`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: changePasswordDto,\n },\n options,\n );\n };\n return {\n userControllerCreate,\n userControllerFindOne,\n userControllerUpdate,\n userControllerChangePassword,\n };\n};\nexport type UserControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getUsers>[\"userControllerCreate\"]>>\n>;\nexport type UserControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getUsers>[\"userControllerFindOne\"]>>\n>;\nexport type UserControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getUsers>[\"userControllerUpdate\"]>>\n>;\nexport type UserControllerChangePasswordResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getUsers>[\"userControllerChangePassword\"]>\n >\n>;\n", "/**\r\n * Wallet module - Simplified exports for wallet-related API functions\r\n */\r\n\r\nimport { getWallets } from './api/wallets/wallets';\r\n\r\nconst {\r\n walletControllerCreate,\r\n walletControllerFindAll,\r\n walletControllerGetTotalBalance,\r\n walletControllerFindOne,\r\n walletControllerUpdate,\r\n walletControllerRemove,\r\n walletControllerFindByAddress,\r\n walletControllerSendSOL,\r\n walletControllerSendSPL,\r\n walletControllerMintNFT,\r\n walletControllerMintNFTSimple,\r\n walletControllerMintToken,\r\n walletControllerSendTransaction,\r\n walletControllerGetWalletAssets,\r\n walletControllerSyncWalletAssets,\r\n walletControllerDeactivateWallet,\r\n walletControllerActivateWallet,\r\n walletControllerBatchCreateWallets,\r\n walletControllerBatchSendSOL,\r\n walletControllerBatchSendSPL,\r\n walletControllerSimulateTransaction,\r\n walletControllerGetWalletCustodyInfo,\r\n walletControllerCreateEmailSigner,\r\n walletControllerCreatePhoneSigner,\r\n walletControllerStartPasskeyRegistration,\r\n walletControllerVerifyPasskeyRegistration,\r\n walletControllerStartPasskeyAuthentication,\r\n walletControllerVerifyPasskeyAuthentication,\r\n walletControllerCreateExternalWalletSigner,\r\n walletControllerCreateApiKeySigner,\r\n walletControllerGetSignerById,\r\n walletControllerUpdateSigner,\r\n walletControllerDeleteSigner,\r\n walletControllerGetDeviceEncryptedSecret,\r\n walletControllerUpdateDeviceIdentity,\r\n walletControllerAddSigner,\r\n walletControllerListSigners,\r\n walletControllerRemoveSigner,\r\n walletControllerUpdateSignerPermissions,\r\n walletControllerUpdateAdminSigner,\r\n} = getWallets();\r\n\r\n// Export wallet functions with simplified names\r\nexport const create = walletControllerCreate;\r\nexport const findAll = walletControllerFindAll;\r\nexport const getTotalBalance = walletControllerGetTotalBalance;\r\nexport const findOne = walletControllerFindOne;\r\nexport const update = walletControllerUpdate;\r\nexport const remove = walletControllerRemove;\r\nexport const findByAddress = walletControllerFindByAddress;\r\nexport const sendSOL = walletControllerSendSOL;\r\nexport const sendSPL = walletControllerSendSPL;\r\nexport const mintNFT = walletControllerMintNFT;\r\nexport const mintNFTSimple = walletControllerMintNFTSimple;\r\nexport const mintToken = walletControllerMintToken;\r\nexport const sendTransaction = walletControllerSendTransaction;\r\nexport const getAssets = walletControllerGetWalletAssets;\r\nexport const syncAssets = walletControllerSyncWalletAssets;\r\nexport const deactivate = walletControllerDeactivateWallet;\r\nexport const activate = walletControllerActivateWallet;\r\nexport const batchCreate = walletControllerBatchCreateWallets;\r\nexport const batchSendSOL = walletControllerBatchSendSOL;\r\nexport const batchSendSPL = walletControllerBatchSendSPL;\r\nexport const simulateTransaction = walletControllerSimulateTransaction;\r\n\r\n// Export signer management functions\r\nexport const getCustodyInfo = walletControllerGetWalletCustodyInfo;\r\nexport const createEmailSigner = walletControllerCreateEmailSigner;\r\nexport const createPhoneSigner = walletControllerCreatePhoneSigner;\r\nexport const startPasskeyRegistration = walletControllerStartPasskeyRegistration;\r\nexport const verifyPasskeyRegistration = walletControllerVerifyPasskeyRegistration;\r\nexport const startPasskeyAuthentication = walletControllerStartPasskeyAuthentication;\r\nexport const verifyPasskeyAuthentication = walletControllerVerifyPasskeyAuthentication;\r\nexport const createExternalWalletSigner = walletControllerCreateExternalWalletSigner;\r\nexport const createApiKeySigner = walletControllerCreateApiKeySigner;\r\nexport const getSignerById = walletControllerGetSignerById;\r\nexport const updateSigner = walletControllerUpdateSigner;\r\nexport const deleteSigner = walletControllerDeleteSigner;\r\nexport const getDeviceEncryptedSecret = walletControllerGetDeviceEncryptedSecret;\r\nexport const updateDeviceIdentity = walletControllerUpdateDeviceIdentity;\r\nexport const addSigner = walletControllerAddSigner;\r\nexport const listSigners = walletControllerListSigners;\r\nexport const removeSigner = walletControllerRemoveSigner;\r\nexport const updateSignerPermissions = walletControllerUpdateSignerPermissions;\r\nexport const updateAdminSigner = walletControllerUpdateAdminSigner;\r\n\r\n// Export types\r\nexport type {\r\n WalletControllerCreateResult,\r\n WalletControllerFindAllResult,\r\n WalletControllerGetTotalBalanceResult,\r\n WalletControllerFindOneResult,\r\n WalletControllerUpdateResult,\r\n WalletControllerRemoveResult,\r\n WalletControllerFindByAddressResult,\r\n WalletControllerSendSOLResult,\r\n WalletControllerSendSPLResult,\r\n WalletControllerMintNFTResult,\r\n WalletControllerMintNFTSimpleResult,\r\n WalletControllerMintTokenResult,\r\n WalletControllerSendTransactionResult,\r\n WalletControllerGetWalletAssetsResult,\r\n WalletControllerSyncWalletAssetsResult,\r\n WalletControllerDeactivateWalletResult,\r\n WalletControllerActivateWalletResult,\r\n WalletControllerBatchCreateWalletsResult,\r\n WalletControllerBatchSendSOLResult,\r\n WalletControllerBatchSendSPLResult,\r\n WalletControllerSimulateTransactionResult,\r\n WalletControllerGetWalletCustodyInfoResult,\r\n WalletControllerCreateEmailSignerResult,\r\n WalletControllerCreatePhoneSignerResult,\r\n WalletControllerStartPasskeyRegistrationResult,\r\n WalletControllerVerifyPasskeyRegistrationResult,\r\n WalletControllerStartPasskeyAuthenticationResult,\r\n WalletControllerVerifyPasskeyAuthenticationResult,\r\n WalletControllerCreateExternalWalletSignerResult,\r\n WalletControllerCreateApiKeySignerResult,\r\n WalletControllerGetSignerByIdResult,\r\n WalletControllerUpdateSignerResult,\r\n WalletControllerDeleteSignerResult,\r\n WalletControllerGetDeviceEncryptedSecretResult,\r\n WalletControllerUpdateDeviceIdentityResult,\r\n WalletControllerAddSignerResult,\r\n WalletControllerListSignersResult,\r\n WalletControllerRemoveSignerResult,\r\n WalletControllerUpdateSignerPermissionsResult,\r\n WalletControllerUpdateAdminSignerResult,\r\n} from './api/wallets/wallets';\r\n\r\nexport type {\r\n CreateWalletDto,\r\n UpdateWalletDto,\r\n SendSolDto,\r\n SendSplDto,\r\n MintNftDto,\r\n MintNftSimpleDto,\r\n MintTokenDto,\r\n SendTransactionDto,\r\n WalletControllerGetWalletAssetsParams,\r\n WalletAssetResponseDto,\r\n BatchCreateWalletDto,\r\n BatchSendSolDto,\r\n BatchSendSplDto,\r\n SimulateTransactionDto,\r\n AddSignerDto,\r\n CreateEmailSignerDto,\r\n CreatePhoneSignerDto,\r\n CreateExternalWalletSignerDto,\r\n CreateApiKeySignerDto,\r\n UpdateSignerDto,\r\n UpdateSignerPermissionsDto,\r\n UpdateAdminSignerDto,\r\n WalletControllerGetDeviceEncryptedSecretParams,\r\n UpdateDeviceIdentityDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AddSignerDto,\n BatchCreateWalletDto,\n BatchSendSolDto,\n BatchSendSplDto,\n CreateApiKeySignerDto,\n CreateEmailSignerDto,\n CreateExternalWalletSignerDto,\n CreatePhoneSignerDto,\n CreateWalletDto,\n MintNftDto,\n MintNftSimpleDto,\n MintTokenDto,\n PasskeyAuthenticationDto,\n PasskeyRegistrationDto,\n PrepareTransactionDto,\n SendSolDto,\n SendSplDto,\n SendTransactionDto,\n SignMessageDto,\n SimulateTransactionDto,\n SubmitTransactionDto,\n UpdateAdminSignerDto,\n UpdateDeviceIdentityDto,\n UpdateSignerDto,\n UpdateSignerPermissionsDto,\n UpdateWalletDto,\n WalletAssetResponseDto,\n WalletControllerFindAllParams,\n WalletControllerGetDeviceEncryptedSecretParams,\n WalletControllerGetWalletAssetsParams,\n WalletControllerMintNFT200,\n WalletControllerMintNFTSimple200,\n WalletControllerMintToken200,\n WalletControllerPrepareTransaction200,\n WalletControllerSendSOL200,\n WalletControllerSendSPL200,\n WalletControllerSendTransaction200,\n WalletControllerSignMessage200,\n WalletControllerSubmitTransaction200,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getWallets = () => {\n /**\n * @summary Create a new smart contract wallet\n */\n const walletControllerCreate = (\n createWalletDto: CreateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createWalletDto,\n },\n options,\n );\n };\n /**\n * @summary Get all wallets for authenticated user\n */\n const walletControllerFindAll = (\n params?: WalletControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * @summary Get total balance across all user wallets\n */\n const walletControllerGetTotalBalance = (\n options?: SecondParameter<typeof customInstance<number>>,\n ) => {\n return customInstance<number>(\n { url: `/wallets/balance/total`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Get wallet by ID\n */\n const walletControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Update wallet\n */\n const walletControllerUpdate = (\n id: string,\n updateWalletDto: UpdateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateWalletDto,\n },\n options,\n );\n };\n /**\n * @summary Delete wallet\n */\n const walletControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * @summary Get wallet by address\n */\n const walletControllerFindByAddress = (\n address: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/address/${address}`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Send SOL from wallet to recipient\n */\n const walletControllerSendSOL = (\n id: string,\n sendSolDto: SendSolDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSendSOL200>\n >,\n ) => {\n return customInstance<WalletControllerSendSOL200>(\n {\n url: `/wallets/${id}/send-sol`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendSolDto,\n },\n options,\n );\n };\n /**\n * @summary Send SPL tokens from wallet to recipient\n */\n const walletControllerSendSPL = (\n id: string,\n sendSplDto: SendSplDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSendSPL200>\n >,\n ) => {\n return customInstance<WalletControllerSendSPL200>(\n {\n url: `/wallets/${id}/send-spl`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendSplDto,\n },\n options,\n );\n };\n /**\n * @summary Mint NFT using Metaplex via CPI (Advanced)\n */\n const walletControllerMintNFT = (\n id: string,\n mintNftDto: MintNftDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerMintNFT200>\n >,\n ) => {\n return customInstance<WalletControllerMintNFT200>(\n {\n url: `/wallets/${id}/mint-nft`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: mintNftDto,\n },\n options,\n );\n };\n /**\n * @summary Mint NFT with metadata - handles all logic internally using Metaplex Core\n */\n const walletControllerMintNFTSimple = (\n id: string,\n mintNftSimpleDto: MintNftSimpleDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerMintNFTSimple200>\n >,\n ) => {\n return customInstance<WalletControllerMintNFTSimple200>(\n {\n url: `/wallets/${id}/mint-nft-simple`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: mintNftSimpleDto,\n },\n options,\n );\n };\n /**\n * @summary Mint fungible token (SPL or Token-2022) with initial supply to wallet\n */\n const walletControllerMintToken = (\n id: string,\n mintTokenDto: MintTokenDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerMintToken200>\n >,\n ) => {\n return customInstance<WalletControllerMintToken200>(\n {\n url: `/wallets/${id}/mint-token`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: mintTokenDto,\n },\n options,\n );\n };\n /**\n * @summary Execute arbitrary transaction via CPI to any Solana program\n */\n const walletControllerSendTransaction = (\n id: string,\n sendTransactionDto: SendTransactionDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSendTransaction200>\n >,\n ) => {\n return customInstance<WalletControllerSendTransaction200>(\n {\n url: `/wallets/${id}/send-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendTransactionDto,\n },\n options,\n );\n };\n /**\n * @summary Get all assets for a wallet (cached with auto-refresh)\n */\n const walletControllerGetWalletAssets = (\n id: string,\n params?: WalletControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,\n ) => {\n return customInstance<WalletAssetResponseDto[]>(\n { url: `/wallets/${id}/assets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * @summary Force sync wallet balance and assets from blockchain immediately\n */\n const walletControllerSyncWalletAssets = (\n id: string,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,\n ) => {\n return customInstance<WalletAssetResponseDto[]>(\n { url: `/wallets/${id}/sync`, method: \"POST\" },\n options,\n );\n };\n /**\n * @summary Deactivate a wallet\n */\n const walletControllerDeactivateWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/deactivate`, method: \"POST\" },\n options,\n );\n };\n /**\n * @summary Activate a wallet\n */\n const walletControllerActivateWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/activate`, method: \"POST\" },\n options,\n );\n };\n /**\n * @summary Batch create multiple wallets\n */\n const walletControllerBatchCreateWallets = (\n batchCreateWalletDto: BatchCreateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/batch/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: batchCreateWalletDto,\n },\n options,\n );\n };\n /**\n * @summary Batch send SOL to multiple recipients\n */\n const walletControllerBatchSendSOL = (\n id: string,\n batchSendSolDto: BatchSendSolDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/batch/send-sol`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: batchSendSolDto,\n },\n options,\n );\n };\n /**\n * @summary Batch send SPL tokens to multiple recipients\n */\n const walletControllerBatchSendSPL = (\n id: string,\n batchSendSplDto: BatchSendSplDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/batch/send-spl`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: batchSendSplDto,\n },\n options,\n );\n };\n /**\n * @summary Simulate a transaction without executing it\n */\n const walletControllerSimulateTransaction = (\n id: string,\n simulateTransactionDto: SimulateTransactionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/simulate-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: simulateTransactionDto,\n },\n options,\n );\n };\n /**\n * @summary Get wallet custody information and signers\n */\n const walletControllerGetWalletCustodyInfo = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/custody`, method: \"GET\" },\n options,\n );\n };\n /**\n * Create an email-based signer for the wallet and automatically register it on-chain. The user controls their keys via email authentication.\n * @summary Create email signer (non-custodial)\n */\n const walletControllerCreateEmailSigner = (\n id: string,\n createEmailSignerDto: CreateEmailSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/email`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createEmailSignerDto,\n },\n options,\n );\n };\n /**\n * Create a phone-based signer for the wallet and automatically register it on-chain. The user controls their keys via SMS authentication.\n * @summary Create phone signer (non-custodial)\n */\n const walletControllerCreatePhoneSigner = (\n id: string,\n createPhoneSignerDto: CreatePhoneSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/phone`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createPhoneSignerDto,\n },\n options,\n );\n };\n /**\n * Generate WebAuthn registration options for creating a passkey signer. Returns options to be used with the browser WebAuthn API.\n * @summary Start passkey registration\n */\n const walletControllerStartPasskeyRegistration = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/passkey/register`, method: \"POST\" },\n options,\n );\n };\n /**\n * Verify the WebAuthn registration response and create a passkey signer for the wallet, automatically registering it on-chain.\n * @summary Verify passkey registration and create signer\n */\n const walletControllerVerifyPasskeyRegistration = (\n id: string,\n passkeyRegistrationDto: PasskeyRegistrationDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/passkey/verify`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passkeyRegistrationDto,\n },\n options,\n );\n };\n /**\n * Generate WebAuthn authentication options for signing with an existing passkey. Returns options to be used with the browser WebAuthn API.\n * @summary Start passkey authentication\n */\n const walletControllerStartPasskeyAuthentication = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/passkey/authenticate`, method: \"POST\" },\n options,\n );\n };\n /**\n * Verify the WebAuthn authentication response. Updates the passkey counter to prevent replay attacks.\n * @summary Verify passkey authentication\n */\n const walletControllerVerifyPasskeyAuthentication = (\n id: string,\n passkeyAuthenticationDto: PasskeyAuthenticationDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/passkey/verify-auth`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passkeyAuthenticationDto,\n },\n options,\n );\n };\n /**\n * Link an external wallet (e.g., Phantom, Solflare) as a signer for the wallet and automatically register it on-chain. The external wallet can then sign transactions.\n * @summary Create external wallet signer\n */\n const walletControllerCreateExternalWalletSigner = (\n id: string,\n createExternalWalletSignerDto: CreateExternalWalletSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/external-wallet`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createExternalWalletSignerDto,\n },\n options,\n );\n };\n /**\n * Create an API key-based custodial signer and automatically register it on-chain. The platform manages the signing keys on behalf of the user.\n * @summary Create API key signer (custodial)\n */\n const walletControllerCreateApiKeySigner = (\n id: string,\n createApiKeySignerDto: CreateApiKeySignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/api-key`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createApiKeySignerDto,\n },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific authentication signer.\n * @summary Get signer by ID\n */\n const walletControllerGetSignerById = (\n id: string,\n signerId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/${signerId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update signer configuration such as active status or primary designation.\n * @summary Update signer\n */\n const walletControllerUpdateSigner = (\n id: string,\n signerId: string,\n updateSignerDto: UpdateSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${signerId}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateSignerDto,\n },\n options,\n );\n };\n /**\n * Remove an authentication signer from the wallet. This will also remove it from on-chain registration. At least one signer must remain active.\n * @summary Delete signer\n */\n const walletControllerDeleteSigner = (\n id: string,\n signerId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/${signerId}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Retrieve the encrypted master secret for email/phone signers. Used for device-specific key recovery.\n * @summary Get encrypted master secret for device\n */\n const walletControllerGetDeviceEncryptedSecret = (\n id: string,\n signerId: string,\n params: WalletControllerGetDeviceEncryptedSecretParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${signerId}/encrypted-secret`,\n method: \"GET\",\n params,\n },\n options,\n );\n };\n /**\n * Replace a device for an email/phone signer while keeping the same signer. Provide oldDevicePublicKey (or omit if signer has only one device) and new devicePublicKey with encryptedMasterSecret. Can also update device fingerprint metadata.\n * @summary Update device identity\n */\n const walletControllerUpdateDeviceIdentity = (\n id: string,\n signerId: string,\n updateDeviceIdentityDto: UpdateDeviceIdentityDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${signerId}/device-identity`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateDeviceIdentityDto,\n },\n options,\n );\n };\n /**\n * @summary Add a new signer to the wallet (on-chain only)\n */\n const walletControllerAddSigner = (\n id: string,\n addSignerDto: AddSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: addSignerDto,\n },\n options,\n );\n };\n /**\n * @summary List all signers for the wallet (both authentication and on-chain signers)\n */\n const walletControllerListSigners = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Remove a signer from the wallet\n */\n const walletControllerRemoveSigner = (\n id: string,\n pubkey: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/${pubkey}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * @summary Update signer permissions\n */\n const walletControllerUpdateSignerPermissions = (\n id: string,\n pubkey: string,\n updateSignerPermissionsDto: UpdateSignerPermissionsDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${pubkey}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateSignerPermissionsDto,\n },\n options,\n );\n };\n /**\n * @summary Update admin signer (provider migration)\n */\n const walletControllerUpdateAdminSigner = (\n id: string,\n updateAdminSignerDto: UpdateAdminSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/admin/update`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateAdminSignerDto,\n },\n options,\n );\n };\n /**\n * Builds an unsigned transaction that can be signed by external wallet, passkey, or email/phone signer. Returns serialized transaction for signing. This enables non-custodial wallet flows where the user controls their keys.\n * @summary Prepare transaction for client-side signing\n */\n const walletControllerPrepareTransaction = (\n id: string,\n prepareTransactionDto: PrepareTransactionDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerPrepareTransaction200>\n >,\n ) => {\n return customInstance<WalletControllerPrepareTransaction200>(\n {\n url: `/wallets/${id}/prepare-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: prepareTransactionDto,\n },\n options,\n );\n };\n /**\n * Submits a client-signed transaction to the Solana blockchain. Use after preparing transaction with /prepare-transaction endpoint and signing it with your signer (external wallet, passkey, email/phone key derivation).\n * @summary Submit signed transaction to blockchain\n */\n const walletControllerSubmitTransaction = (\n id: string,\n submitTransactionDto: SubmitTransactionDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSubmitTransaction200>\n >,\n ) => {\n return customInstance<WalletControllerSubmitTransaction200>(\n {\n url: `/wallets/${id}/submit-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: submitTransactionDto,\n },\n options,\n );\n };\n /**\n * Sign a message using the wallet for authentication or verification purposes. Useful for proving wallet ownership, dApp authentication, or creating verifiable signatures.\n * @summary Sign arbitrary message with wallet\n */\n const walletControllerSignMessage = (\n id: string,\n signMessageDto: SignMessageDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSignMessage200>\n >,\n ) => {\n return customInstance<WalletControllerSignMessage200>(\n {\n url: `/wallets/${id}/sign-message`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: signMessageDto,\n },\n options,\n );\n };\n return {\n walletControllerCreate,\n walletControllerFindAll,\n walletControllerGetTotalBalance,\n walletControllerFindOne,\n walletControllerUpdate,\n walletControllerRemove,\n walletControllerFindByAddress,\n walletControllerSendSOL,\n walletControllerSendSPL,\n walletControllerMintNFT,\n walletControllerMintNFTSimple,\n walletControllerMintToken,\n walletControllerSendTransaction,\n walletControllerGetWalletAssets,\n walletControllerSyncWalletAssets,\n walletControllerDeactivateWallet,\n walletControllerActivateWallet,\n walletControllerBatchCreateWallets,\n walletControllerBatchSendSOL,\n walletControllerBatchSendSPL,\n walletControllerSimulateTransaction,\n walletControllerGetWalletCustodyInfo,\n walletControllerCreateEmailSigner,\n walletControllerCreatePhoneSigner,\n walletControllerStartPasskeyRegistration,\n walletControllerVerifyPasskeyRegistration,\n walletControllerStartPasskeyAuthentication,\n walletControllerVerifyPasskeyAuthentication,\n walletControllerCreateExternalWalletSigner,\n walletControllerCreateApiKeySigner,\n walletControllerGetSignerById,\n walletControllerUpdateSigner,\n walletControllerDeleteSigner,\n walletControllerGetDeviceEncryptedSecret,\n walletControllerUpdateDeviceIdentity,\n walletControllerAddSigner,\n walletControllerListSigners,\n walletControllerRemoveSigner,\n walletControllerUpdateSignerPermissions,\n walletControllerUpdateAdminSigner,\n walletControllerPrepareTransaction,\n walletControllerSubmitTransaction,\n walletControllerSignMessage,\n };\n};\nexport type WalletControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerCreate\"]>>\n>;\nexport type WalletControllerFindAllResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerFindAll\"]>>\n>;\nexport type WalletControllerGetTotalBalanceResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerGetTotalBalance\"]>\n >\n>;\nexport type WalletControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerFindOne\"]>>\n>;\nexport type WalletControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerUpdate\"]>>\n>;\nexport type WalletControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerRemove\"]>>\n>;\nexport type WalletControllerFindByAddressResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerFindByAddress\"]>\n >\n>;\nexport type WalletControllerSendSOLResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerSendSOL\"]>>\n>;\nexport type WalletControllerSendSPLResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerSendSPL\"]>>\n>;\nexport type WalletControllerMintNFTResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerMintNFT\"]>>\n>;\nexport type WalletControllerMintNFTSimpleResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerMintNFTSimple\"]>\n >\n>;\nexport type WalletControllerMintTokenResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerMintToken\"]>\n >\n>;\nexport type WalletControllerSendTransactionResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerSendTransaction\"]>\n >\n>;\nexport type WalletControllerGetWalletAssetsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerGetWalletAssets\"]>\n >\n>;\nexport type WalletControllerSyncWalletAssetsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerSyncWalletAssets\"]\n >\n >\n>;\nexport type WalletControllerDeactivateWalletResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerDeactivateWallet\"]\n >\n >\n>;\nexport type WalletControllerActivateWalletResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerActivateWallet\"]>\n >\n>;\nexport type WalletControllerBatchCreateWalletsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerBatchCreateWallets\"]\n >\n >\n>;\nexport type WalletControllerBatchSendSOLResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerBatchSendSOL\"]>\n >\n>;\nexport type WalletControllerBatchSendSPLResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerBatchSendSPL\"]>\n >\n>;\nexport type WalletControllerSimulateTransactionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerSimulateTransaction\"]\n >\n >\n>;\nexport type WalletControllerGetWalletCustodyInfoResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerGetWalletCustodyInfo\"]\n >\n >\n>;\nexport type WalletControllerCreateEmailSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerCreateEmailSigner\"]\n >\n >\n>;\nexport type WalletControllerCreatePhoneSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerCreatePhoneSigner\"]\n >\n >\n>;\nexport type WalletControllerStartPasskeyRegistrationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerStartPasskeyRegistration\"]\n >\n >\n>;\nexport type WalletControllerVerifyPasskeyRegistrationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerVerifyPasskeyRegistration\"]\n >\n >\n>;\nexport type WalletControllerStartPasskeyAuthenticationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getWallets\n >[\"walletControllerStartPasskeyAuthentication\"]\n >\n >\n>;\nexport type WalletControllerVerifyPasskeyAuthenticationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getWallets\n >[\"walletControllerVerifyPasskeyAuthentication\"]\n >\n >\n>;\nexport type WalletControllerCreateExternalWalletSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getWallets\n >[\"walletControllerCreateExternalWalletSigner\"]\n >\n >\n>;\nexport type WalletControllerCreateApiKeySignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerCreateApiKeySigner\"]\n >\n >\n>;\nexport type WalletControllerGetSignerByIdResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerGetSignerById\"]>\n >\n>;\nexport type WalletControllerUpdateSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerUpdateSigner\"]>\n >\n>;\nexport type WalletControllerDeleteSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerDeleteSigner\"]>\n >\n>;\nexport type WalletControllerGetDeviceEncryptedSecretResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerGetDeviceEncryptedSecret\"]\n >\n >\n>;\nexport type WalletControllerUpdateDeviceIdentityResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerUpdateDeviceIdentity\"]\n >\n >\n>;\nexport type WalletControllerAddSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerAddSigner\"]>\n >\n>;\nexport type WalletControllerListSignersResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerListSigners\"]>\n >\n>;\nexport type WalletControllerRemoveSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerRemoveSigner\"]>\n >\n>;\nexport type WalletControllerUpdateSignerPermissionsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerUpdateSignerPermissions\"]\n >\n >\n>;\nexport type WalletControllerUpdateAdminSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerUpdateAdminSigner\"]\n >\n >\n>;\nexport type WalletControllerPrepareTransactionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerPrepareTransaction\"]\n >\n >\n>;\nexport type WalletControllerSubmitTransactionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerSubmitTransaction\"]\n >\n >\n>;\nexport type WalletControllerSignMessageResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerSignMessage\"]>\n >\n>;\n", "/**\r\n * Admin module - Simplified exports for admin-related API functions\r\n */\r\n\r\nimport { getAdmin } from './api/admin/admin';\r\n\r\nconst {\r\n adminControllerCreate,\r\n adminControllerFindAll,\r\n adminControllerGetCurrentAdmin,\r\n adminControllerGetAllApiKeys,\r\n adminControllerGetplatformApiKey,\r\n adminControllerFindOne,\r\n adminControllerUpdate,\r\n adminControllerRemove,\r\n adminControllerToggleActive,\r\n adminControllerFindAllPlatforms,\r\n adminControllerFindOnePlatform,\r\n adminControllerUpdatePlatform,\r\n adminControllerRemovePlatform,\r\n adminControllerFindAllUsers,\r\n adminControllerFindOneUser,\r\n adminControllerFindAllWallets,\r\n adminControllerFindWalletsByUserId,\r\n adminControllerFindOneWallet,\r\n adminControllerGetOverviewAnalytics,\r\n adminControllerGetWalletAnalytics,\r\n adminControllerGetRecentActivity,\r\n adminControllerRegenerateApiKey,\r\n adminControllerGetPlatformsWithUsers,\r\n adminControllerGetUsersWithWallets,\r\n adminControllerGetWalletAssets,\r\n} = getAdmin();\r\n\r\n// Export admin functions with simplified names\r\nexport const create = adminControllerCreate;\r\nexport const findAll = adminControllerFindAll;\r\nexport const getCurrentAdmin = adminControllerGetCurrentAdmin;\r\nexport const getAllApiKeys = adminControllerGetAllApiKeys;\r\nexport const getPlatformApiKey = adminControllerGetplatformApiKey;\r\nexport const findOne = adminControllerFindOne;\r\nexport const update = adminControllerUpdate;\r\nexport const remove = adminControllerRemove;\r\nexport const toggleActive = adminControllerToggleActive;\r\nexport const findAllPlatforms = adminControllerFindAllPlatforms;\r\nexport const findOnePlatform = adminControllerFindOnePlatform;\r\nexport const updatePlatform = adminControllerUpdatePlatform;\r\nexport const removePlatform = adminControllerRemovePlatform;\r\nexport const findAllUsers = adminControllerFindAllUsers;\r\nexport const findOneUser = adminControllerFindOneUser;\r\nexport const findAllWallets = adminControllerFindAllWallets;\r\nexport const findWalletsByUserId = adminControllerFindWalletsByUserId;\r\nexport const findOneWallet = adminControllerFindOneWallet;\r\nexport const getOverviewAnalytics = adminControllerGetOverviewAnalytics;\r\nexport const getWalletAnalytics = adminControllerGetWalletAnalytics;\r\nexport const getRecentActivity = adminControllerGetRecentActivity;\r\nexport const regenerateApiKey = adminControllerRegenerateApiKey;\r\nexport const getPlatformsWithUsers = adminControllerGetPlatformsWithUsers;\r\nexport const getUsersWithWallets = adminControllerGetUsersWithWallets;\r\nexport const getWalletAssets = adminControllerGetWalletAssets;\r\n\r\n// Export types\r\nexport type {\r\n AdminControllerCreateResult,\r\n AdminControllerFindAllResult,\r\n AdminControllerGetCurrentAdminResult,\r\n AdminControllerGetAllApiKeysResult,\r\n AdminControllerGetplatformApiKeyResult,\r\n AdminControllerFindOneResult,\r\n AdminControllerUpdateResult,\r\n AdminControllerRemoveResult,\r\n AdminControllerToggleActiveResult,\r\n AdminControllerFindAllPlatformsResult,\r\n AdminControllerFindOnePlatformResult,\r\n AdminControllerUpdatePlatformResult,\r\n AdminControllerRemovePlatformResult,\r\n AdminControllerFindAllUsersResult,\r\n AdminControllerFindOneUserResult,\r\n AdminControllerFindAllWalletsResult,\r\n AdminControllerFindWalletsByUserIdResult,\r\n AdminControllerFindOneWalletResult,\r\n AdminControllerGetOverviewAnalyticsResult,\r\n AdminControllerGetWalletAnalyticsResult,\r\n AdminControllerGetRecentActivityResult,\r\n AdminControllerRegenerateApiKeyResult,\r\n AdminControllerGetPlatformsWithUsersResult,\r\n AdminControllerGetUsersWithWalletsResult,\r\n AdminControllerGetWalletAssetsResult,\r\n} from './api/admin/admin';\r\n\r\nexport type {\r\n CreateAdminDto,\r\n UpdateAdminDto,\r\n AdminControllerFindAllParams,\r\n AdminControllerFindAllPlatformsParams,\r\n AdminControllerGetPlatformsWithUsersParams,\r\n AdminControllerGetUsersWithWalletsParams,\r\n AdminControllerGetWalletAssetsParams,\r\n UpdatePlatformDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AdminControllerFindAllParams,\n AdminControllerFindAllPlatformsParams,\n AdminControllerGetPlatformActivityTimelineParams,\n AdminControllerGetPlatformGrowthTrendsParams,\n AdminControllerGetPlatformsWithUsersParams,\n AdminControllerGetTopPlatformsParams,\n AdminControllerGetUsersWithWalletsParams,\n AdminControllerGetWalletAssetsParams,\n CreateAdminDto,\n UpdateAdminDto,\n UpdatePlatformDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getAdmin = () => {\n /**\n * Create a new administrator account. No prior authentication required for initial admin creation.\n * @summary Register a new admin\n */\n const adminControllerCreate = (\n createAdminDto: CreateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createAdminDto,\n },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all administrators. Requires admin JWT token.\n * @summary Get all admins\n */\n const adminControllerFindAll = (\n params?: AdminControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve the authenticated admin's profile information. Requires admin JWT token.\n * @summary Get current admin profile\n */\n const adminControllerGetCurrentAdmin = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>({ url: `/admin/me`, method: \"GET\" }, options);\n };\n /**\n * Retrieve API keys for all platforms. Sensitive operation for key management. Requires admin JWT token.\n * @summary Get all platform API keys\n */\n const adminControllerGetAllApiKeys = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/api-keys`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve the API key for a specific platform. Requires admin JWT token.\n * @summary Get specific platform API key\n */\n const adminControllerGetplatformApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/api-keys/${platformId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific administrator. Requires admin JWT token.\n * @summary Get admin by ID\n */\n const adminControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update administrator information such as username, email, or password. Requires admin JWT token.\n * @summary Update admin\n */\n const adminControllerUpdate = (\n id: string,\n updateAdminDto: UpdateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateAdminDto,\n },\n options,\n );\n };\n /**\n * Permanently delete an administrator account. Cannot delete the last admin. Requires admin JWT token.\n * @summary Delete admin\n */\n const adminControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Enable or disable an administrator account. Disabled admins cannot login. Requires admin JWT token.\n * @summary Toggle admin active status\n */\n const adminControllerToggleActive = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/${id}/toggle-active`, method: \"PATCH\" },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all platforms in the system. Requires admin JWT token.\n * @summary View all platforms\n */\n const adminControllerFindAllPlatforms = (\n params?: AdminControllerFindAllPlatformsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/platforms/all`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific platform including users and wallets count. Requires admin JWT token.\n * @summary View platform details\n */\n const adminControllerFindOnePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/platforms/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update platform information such as name, email, or settings. Requires admin JWT token.\n * @summary Update platform\n */\n const adminControllerUpdatePlatform = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin/platforms/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlatformDto,\n },\n options,\n );\n };\n /**\n * Permanently delete a platform and all associated users, wallets, and data. This action cannot be undone. Requires admin JWT token.\n * @summary Delete platform\n */\n const adminControllerRemovePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/platforms/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Retrieve all users in the system across all platforms. Admin has read-only access to user data. Requires admin JWT token.\n * @summary View all users (read-only)\n */\n const adminControllerFindAllUsers = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/users/all`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific user including their wallets. Requires admin JWT token.\n * @summary View user details\n */\n const adminControllerFindOneUser = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/users/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve all wallets in the system across all users and platforms. Admin has read-only access to wallet data. Requires admin JWT token.\n * @summary View all wallets (read-only)\n */\n const adminControllerFindAllWallets = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/wallets/all`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve all wallets belonging to a specific user. Requires admin JWT token.\n * @summary View all wallets for a specific user (read-only)\n */\n const adminControllerFindWalletsByUserId = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/wallets/user/${userId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific wallet including balance and assets. Requires admin JWT token.\n * @summary View wallet details (read-only)\n */\n const adminControllerFindOneWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/wallets/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve high-level analytics including total platforms, users, wallets, and transaction volume. Requires admin JWT token.\n * @summary Get dashboard overview analytics\n */\n const adminControllerGetOverviewAnalytics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/overview`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve wallet-specific analytics including total balances, asset distribution, and activity metrics. Requires admin JWT token.\n * @summary Get wallet analytics and statistics\n */\n const adminControllerGetWalletAnalytics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/wallets`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve recent activity feed including new registrations, transactions, and system events. Requires admin JWT token.\n * @summary Get recent activity across all entities\n */\n const adminControllerGetRecentActivity = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/recent-activity`, method: \"GET\" },\n options,\n );\n };\n /**\n * Generate a new API key for a platform, invalidating the old one. The platform will need to update their integration. Requires admin JWT token.\n * @summary Regenerate platform API key\n */\n const adminControllerRegenerateApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/api-keys/${platformId}/regenerate`, method: \"POST\" },\n options,\n );\n };\n /**\n * Retrieve a paginated list of platforms with aggregated user counts for each. Useful for platform comparison. Requires admin JWT token.\n * @summary Get platforms with their user counts\n */\n const adminControllerGetPlatformsWithUsers = (\n params?: AdminControllerGetPlatformsWithUsersParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/data/platforms-with-users`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve a paginated list of users with aggregated wallet counts and total balances. Useful for user analytics. Requires admin JWT token.\n * @summary Get users with their wallet counts and balances\n */\n const adminControllerGetUsersWithWallets = (\n params?: AdminControllerGetUsersWithWalletsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/data/users-with-wallets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all wallet assets with optional filtering by asset type (NFT, SPL_TOKEN, SOL). Requires admin JWT token.\n * @summary Get all wallet assets with filtering\n */\n const adminControllerGetWalletAssets = (\n params?: AdminControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/data/wallet-assets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve overall platform metrics including total platforms, active platforms, user counts, and averages. Requires admin JWT token.\n * @summary Get platform analytics overview\n */\n const adminControllerGetPlatformAnalytics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve usage metrics per platform including transaction counts, wallet counts, and user counts. Requires admin JWT token.\n * @summary Get platform usage metrics\n */\n const adminControllerGetPlatformUsageMetrics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms/usage`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve growth trends showing new platform registrations over time (daily, weekly, or monthly). Requires admin JWT token.\n * @summary Get platform growth trends\n */\n const adminControllerGetPlatformGrowthTrends = (\n params?: AdminControllerGetPlatformGrowthTrendsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms/growth`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve top platforms ranked by users, wallets, or transactions. Requires admin JWT token.\n * @summary Get top platforms\n */\n const adminControllerGetTopPlatforms = (\n params?: AdminControllerGetTopPlatformsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms/top`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve activity timeline for a specific platform including users, wallets, and transactions. Requires admin JWT token.\n * @summary Get platform activity timeline\n */\n const adminControllerGetPlatformActivityTimeline = (\n id: string,\n params?: AdminControllerGetPlatformActivityTimelineParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin/analytics/platforms/${id}/activity`,\n method: \"GET\",\n params,\n },\n options,\n );\n };\n return {\n adminControllerCreate,\n adminControllerFindAll,\n adminControllerGetCurrentAdmin,\n adminControllerGetAllApiKeys,\n adminControllerGetplatformApiKey,\n adminControllerFindOne,\n adminControllerUpdate,\n adminControllerRemove,\n adminControllerToggleActive,\n adminControllerFindAllPlatforms,\n adminControllerFindOnePlatform,\n adminControllerUpdatePlatform,\n adminControllerRemovePlatform,\n adminControllerFindAllUsers,\n adminControllerFindOneUser,\n adminControllerFindAllWallets,\n adminControllerFindWalletsByUserId,\n adminControllerFindOneWallet,\n adminControllerGetOverviewAnalytics,\n adminControllerGetWalletAnalytics,\n adminControllerGetRecentActivity,\n adminControllerRegenerateApiKey,\n adminControllerGetPlatformsWithUsers,\n adminControllerGetUsersWithWallets,\n adminControllerGetWalletAssets,\n adminControllerGetPlatformAnalytics,\n adminControllerGetPlatformUsageMetrics,\n adminControllerGetPlatformGrowthTrends,\n adminControllerGetTopPlatforms,\n adminControllerGetPlatformActivityTimeline,\n };\n};\nexport type AdminControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerCreate\"]>>\n>;\nexport type AdminControllerFindAllResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAll\"]>>\n>;\nexport type AdminControllerGetCurrentAdminResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetCurrentAdmin\"]>\n >\n>;\nexport type AdminControllerGetAllApiKeysResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetAllApiKeys\"]>\n >\n>;\nexport type AdminControllerGetplatformApiKeyResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetplatformApiKey\"]>\n >\n>;\nexport type AdminControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOne\"]>>\n>;\nexport type AdminControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerUpdate\"]>>\n>;\nexport type AdminControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerRemove\"]>>\n>;\nexport type AdminControllerToggleActiveResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerToggleActive\"]>\n >\n>;\nexport type AdminControllerFindAllPlatformsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAllPlatforms\"]>\n >\n>;\nexport type AdminControllerFindOnePlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOnePlatform\"]>\n >\n>;\nexport type AdminControllerUpdatePlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerUpdatePlatform\"]>\n >\n>;\nexport type AdminControllerRemovePlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerRemovePlatform\"]>\n >\n>;\nexport type AdminControllerFindAllUsersResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAllUsers\"]>\n >\n>;\nexport type AdminControllerFindOneUserResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOneUser\"]>>\n>;\nexport type AdminControllerFindAllWalletsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAllWallets\"]>\n >\n>;\nexport type AdminControllerFindWalletsByUserIdResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerFindWalletsByUserId\"]\n >\n >\n>;\nexport type AdminControllerFindOneWalletResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOneWallet\"]>\n >\n>;\nexport type AdminControllerGetOverviewAnalyticsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetOverviewAnalytics\"]\n >\n >\n>;\nexport type AdminControllerGetWalletAnalyticsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetWalletAnalytics\"]>\n >\n>;\nexport type AdminControllerGetRecentActivityResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetRecentActivity\"]>\n >\n>;\nexport type AdminControllerRegenerateApiKeyResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerRegenerateApiKey\"]>\n >\n>;\nexport type AdminControllerGetPlatformsWithUsersResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformsWithUsers\"]\n >\n >\n>;\nexport type AdminControllerGetUsersWithWalletsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetUsersWithWallets\"]\n >\n >\n>;\nexport type AdminControllerGetWalletAssetsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetWalletAssets\"]>\n >\n>;\nexport type AdminControllerGetPlatformAnalyticsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformAnalytics\"]\n >\n >\n>;\nexport type AdminControllerGetPlatformUsageMetricsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformUsageMetrics\"]\n >\n >\n>;\nexport type AdminControllerGetPlatformGrowthTrendsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformGrowthTrends\"]\n >\n >\n>;\nexport type AdminControllerGetTopPlatformsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetTopPlatforms\"]>\n >\n>;\nexport type AdminControllerGetPlatformActivityTimelineResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformActivityTimeline\"]\n >\n >\n>;\n", "/**\r\n * Auth module - Simplified exports for authentication-related API functions\r\n */\r\n\r\nimport { getAuth } from './api/auth/auth';\r\nimport { setAuth } from './config';\r\n\r\nconst { authControllerLogin } = getAuth();\r\n\r\n// Export auth functions with simplified names\r\nexport const login = authControllerLogin;\r\n\r\n/**\r\n * Login and automatically set authentication credentials\r\n * This is a convenience function that calls login() and setAuth() automatically\r\n * \r\n * @param credentials - Login credentials\r\n * @returns Login result with user information\r\n * \r\n * @example\r\n * ```typescript\r\n * import { loginAndSetAuth } from 'cilantro-smart-sdk/auth';\r\n * import { sendSOL } from 'cilantro-smart-sdk/wallet';\r\n * \r\n * // Login and set auth in one step\r\n * const result = await loginAndSetAuth({\r\n * usernameOrEmail: 'user@example.com',\r\n * password: 'password123'\r\n * });\r\n * \r\n * // Now you can make authenticated requests\r\n * await sendSOL('wallet-id', { ... });\r\n * ```\r\n */\r\nexport async function loginAndSetAuth(\r\n credentials: import('./models').CommonLoginDto,\r\n options?: any\r\n): Promise<import('./api/auth/auth').AuthControllerLoginResult> {\r\n const result = await login(credentials, options);\r\n \r\n // Automatically set auth from login response\r\n if (result.data?.jwt) {\r\n setAuth({ jwt: result.data.jwt });\r\n }\r\n if (result.data?.apiKey) {\r\n setAuth({ apiKey: result.data.apiKey });\r\n }\r\n \r\n return result;\r\n}\r\n\r\n// Export types\r\nexport type {\r\n AuthControllerLoginResult,\r\n} from './api/auth/auth';\r\n\r\nexport type {\r\n CommonLoginDto,\r\n AuthControllerLogin200,\r\n AuthControllerLogin200Data,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AuthControllerLogin200,\n CommonLoginDto,\n PasswordResetConfirmDto,\n PasswordResetRequestDto,\n VerifyEmailDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getAuth = () => {\n /**\n * Authenticate as admin, platform, or user. Returns user type and appropriate JWT token.\n * @summary Universal login endpoint\n */\n const authControllerLogin = (\n commonLoginDto: CommonLoginDto,\n options?: SecondParameter<typeof customInstance<AuthControllerLogin200>>,\n ) => {\n return customInstance<AuthControllerLogin200>(\n {\n url: `/auth/login`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: commonLoginDto,\n },\n options,\n );\n };\n /**\n * Request a password reset link to be sent to the provided email address. Works for both platform and user accounts.\n * @summary Request password reset\n */\n const authControllerRequestPasswordReset = (\n passwordResetRequestDto: PasswordResetRequestDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/password-reset/request`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passwordResetRequestDto,\n },\n options,\n );\n };\n /**\n * Reset password using the token received via email.\n * @summary Confirm password reset\n */\n const authControllerConfirmPasswordReset = (\n passwordResetConfirmDto: PasswordResetConfirmDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/password-reset/confirm`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passwordResetConfirmDto,\n },\n options,\n );\n };\n /**\n * Verify email address using the token received via email.\n * @summary Verify email address\n */\n const authControllerVerifyEmail = (\n verifyEmailDto: VerifyEmailDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/verify-email`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: verifyEmailDto,\n },\n options,\n );\n };\n /**\n * Resend email verification link to the provided email address.\n * @summary Resend verification email\n */\n const authControllerResendVerification = (\n passwordResetRequestDto: PasswordResetRequestDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/resend-verification`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passwordResetRequestDto,\n },\n options,\n );\n };\n return {\n authControllerLogin,\n authControllerRequestPasswordReset,\n authControllerConfirmPasswordReset,\n authControllerVerifyEmail,\n authControllerResendVerification,\n };\n};\nexport type AuthControllerLoginResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAuth>[\"authControllerLogin\"]>>\n>;\nexport type AuthControllerRequestPasswordResetResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAuth>[\"authControllerRequestPasswordReset\"]>\n >\n>;\nexport type AuthControllerConfirmPasswordResetResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAuth>[\"authControllerConfirmPasswordReset\"]>\n >\n>;\nexport type AuthControllerVerifyEmailResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAuth>[\"authControllerVerifyEmail\"]>>\n>;\nexport type AuthControllerResendVerificationResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAuth>[\"authControllerResendVerification\"]>\n >\n>;\n", "/**\r\n * Subscriptions module - Simplified exports for subscription-related API functions\r\n */\r\n\r\nimport { getSubscriptions } from './api/subscriptions/subscriptions';\r\n\r\nconst {\r\n subscriptionControllerCreate,\r\n subscriptionControllerFindAll,\r\n subscriptionControllerFindOne,\r\n subscriptionControllerGetPlatformSubscription,\r\n subscriptionControllerUpgrade,\r\n subscriptionControllerDowngrade,\r\n subscriptionControllerCancel,\r\n subscriptionControllerRenew,\r\n subscriptionControllerGetHistory,\r\n} = getSubscriptions();\r\n\r\n// Export subscription functions with simplified names\r\nexport const create = subscriptionControllerCreate;\r\nexport const findAll = subscriptionControllerFindAll;\r\nexport const findOne = subscriptionControllerFindOne;\r\nexport const getPlatformSubscription = subscriptionControllerGetPlatformSubscription;\r\nexport const upgrade = subscriptionControllerUpgrade;\r\nexport const downgrade = subscriptionControllerDowngrade;\r\nexport const cancel = subscriptionControllerCancel;\r\nexport const renew = subscriptionControllerRenew;\r\nexport const getHistory = subscriptionControllerGetHistory;\r\n\r\n// Export types\r\nexport type {\r\n SubscriptionControllerCreateResult,\r\n SubscriptionControllerFindAllResult,\r\n SubscriptionControllerFindOneResult,\r\n SubscriptionControllerGetPlatformSubscriptionResult,\r\n SubscriptionControllerUpgradeResult,\r\n SubscriptionControllerDowngradeResult,\r\n SubscriptionControllerCancelResult,\r\n SubscriptionControllerRenewResult,\r\n SubscriptionControllerGetHistoryResult,\r\n} from './api/subscriptions/subscriptions';\r\n\r\nexport type {\r\n CreateSubscriptionDto,\r\n UpgradeSubscriptionDto,\r\n DowngradeSubscriptionDto,\r\n CancelSubscriptionDto,\r\n RenewSubscriptionDto,\r\n SubscriptionControllerFindAllParams,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n CancelSubscriptionDto,\n CreateSubscriptionDto,\n DowngradeSubscriptionDto,\n RenewSubscriptionDto,\n SubscriptionControllerFindAllParams,\n UpgradeSubscriptionDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getSubscriptions = () => {\n /**\n * Create a new subscription for a platform. Admin authentication required.\n * @summary Create a new subscription\n */\n const subscriptionControllerCreate = (\n createSubscriptionDto: CreateSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all subscriptions with optional filters. Admin authentication required.\n * @summary Get all subscriptions\n */\n const subscriptionControllerFindAll = (\n params?: SubscriptionControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific subscription. Admin authentication required.\n * @summary Get subscription by ID\n */\n const subscriptionControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve the active subscription for a specific platform. Admin authentication required.\n * @summary Get platform subscription\n */\n const subscriptionControllerGetPlatformSubscription = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions/platform/${platformId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Upgrade a subscription to a higher plan with prorated billing. Admin authentication required.\n * @summary Upgrade subscription\n */\n const subscriptionControllerUpgrade = (\n id: string,\n upgradeSubscriptionDto: UpgradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/upgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: upgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Downgrade a subscription to a lower plan with prorated billing. Admin authentication required.\n * @summary Downgrade subscription\n */\n const subscriptionControllerDowngrade = (\n id: string,\n downgradeSubscriptionDto: DowngradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/downgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: downgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Cancel a subscription immediately or at the end of the billing period. Admin authentication required.\n * @summary Cancel subscription\n */\n const subscriptionControllerCancel = (\n id: string,\n cancelSubscriptionDto: CancelSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/cancel`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: cancelSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Manually renew a subscription. Admin authentication required.\n * @summary Renew subscription\n */\n const subscriptionControllerRenew = (\n id: string,\n renewSubscriptionDto: RenewSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/renew`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: renewSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Retrieve the audit trail for a subscription. Admin authentication required.\n * @summary Get subscription history\n */\n const subscriptionControllerGetHistory = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions/${id}/history`, method: \"GET\" },\n options,\n );\n };\n return {\n subscriptionControllerCreate,\n subscriptionControllerFindAll,\n subscriptionControllerFindOne,\n subscriptionControllerGetPlatformSubscription,\n subscriptionControllerUpgrade,\n subscriptionControllerDowngrade,\n subscriptionControllerCancel,\n subscriptionControllerRenew,\n subscriptionControllerGetHistory,\n };\n};\nexport type SubscriptionControllerCreateResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerCreate\"]\n >\n >\n>;\nexport type SubscriptionControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerFindAll\"]\n >\n >\n>;\nexport type SubscriptionControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerFindOne\"]\n >\n >\n>;\nexport type SubscriptionControllerGetPlatformSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getSubscriptions\n >[\"subscriptionControllerGetPlatformSubscription\"]\n >\n >\n>;\nexport type SubscriptionControllerUpgradeResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerUpgrade\"]\n >\n >\n>;\nexport type SubscriptionControllerDowngradeResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerDowngrade\"]\n >\n >\n>;\nexport type SubscriptionControllerCancelResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerCancel\"]\n >\n >\n>;\nexport type SubscriptionControllerRenewResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerRenew\"]\n >\n >\n>;\nexport type SubscriptionControllerGetHistoryResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerGetHistory\"]\n >\n >\n>;\n", "/**\r\n * Plans module - Simplified exports for plan-related API functions\r\n */\r\n\r\nimport { getPlans } from './api/plans/plans';\r\n\r\nconst {\r\n planControllerFindAll,\r\n planControllerFindOne,\r\n planControllerUpdate,\r\n planControllerRemove,\r\n planControllerAssignToPlatform,\r\n planControllerAssignToUser,\r\n} = getPlans();\r\n\r\n// Export plan functions with simplified names\r\nexport const findAll = planControllerFindAll;\r\nexport const findOne = planControllerFindOne;\r\nexport const update = planControllerUpdate;\r\nexport const remove = planControllerRemove;\r\nexport const assignToPlatform = planControllerAssignToPlatform;\r\nexport const assignToUser = planControllerAssignToUser;\r\n\r\n// Export types\r\nexport type {\r\n PlanControllerFindAllResult,\r\n PlanControllerFindOneResult,\r\n PlanControllerUpdateResult,\r\n PlanControllerRemoveResult,\r\n PlanControllerAssignToPlatformResult,\r\n PlanControllerAssignToUserResult,\r\n} from './api/plans/plans';\r\n\r\nexport type {\r\n UpdatePlanDto,\r\n AssignPlanDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type { AssignPlanDto, CreatePlanDto, UpdatePlanDto } from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getPlans = () => {\n /**\n * Create a new subscription plan with specified limits and features. Admin authentication required.\n * @summary Create a new plan\n */\n const planControllerCreate = (\n createPlanDto: CreatePlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createPlanDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all subscription plans. Admin authentication required.\n * @summary Get all plans\n */\n const planControllerFindAll = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>({ url: `/plans`, method: \"GET\" }, options);\n };\n /**\n * Retrieve detailed information about a specific plan. Admin authentication required.\n * @summary Get plan by ID\n */\n const planControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/plans/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update plan details such as name, limits, or features. Admin authentication required.\n * @summary Update a plan\n */\n const planControllerUpdate = (\n id: string,\n updatePlanDto: UpdatePlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlanDto,\n },\n options,\n );\n };\n /**\n * Soft delete a plan by deactivating it. Existing assignments will remain active. Admin authentication required.\n * @summary Delete (deactivate) a plan\n */\n const planControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/plans/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Assign an active subscription plan to a platform. Admin authentication required.\n * @summary Assign a plan to a platform\n */\n const planControllerAssignToPlatform = (\n id: string,\n platformId: string,\n assignPlanDto: AssignPlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans/${id}/assign-platform/${platformId}`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: assignPlanDto,\n },\n options,\n );\n };\n /**\n * Assign an active subscription plan to a user. Admin authentication required.\n * @summary Assign a plan to a user\n */\n const planControllerAssignToUser = (\n id: string,\n userId: string,\n assignPlanDto: AssignPlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans/${id}/assign-user/${userId}`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: assignPlanDto,\n },\n options,\n );\n };\n return {\n planControllerCreate,\n planControllerFindAll,\n planControllerFindOne,\n planControllerUpdate,\n planControllerRemove,\n planControllerAssignToPlatform,\n planControllerAssignToUser,\n };\n};\nexport type PlanControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerCreate\"]>>\n>;\nexport type PlanControllerFindAllResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerFindAll\"]>>\n>;\nexport type PlanControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerFindOne\"]>>\n>;\nexport type PlanControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerUpdate\"]>>\n>;\nexport type PlanControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerRemove\"]>>\n>;\nexport type PlanControllerAssignToPlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlans>[\"planControllerAssignToPlatform\"]>\n >\n>;\nexport type PlanControllerAssignToUserResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerAssignToUser\"]>>\n>;\n", "/**\r\n * Transactions module - Simplified exports for transaction-related API functions\r\n */\r\n\r\nimport { getTransactions } from './api/transactions/transactions';\r\n\r\nconst {\r\n transactionControllerGetWalletTransactions,\r\n transactionControllerGetTransactionStatus,\r\n} = getTransactions();\r\n\r\n// Export transaction functions with simplified names\r\nexport const getWalletTransactions = transactionControllerGetWalletTransactions;\r\nexport const getTransactionStatus = transactionControllerGetTransactionStatus;\r\n\r\n// Export types\r\nexport type {\r\n TransactionControllerGetWalletTransactionsResult,\r\n TransactionControllerGetTransactionStatusResult,\r\n} from './api/transactions/transactions';\r\n\r\nexport type {\r\n TransactionControllerGetWalletTransactionsParams,\r\n TransactionType,\r\n TransactionStatus,\r\n} from './models';\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type { TransactionControllerGetWalletTransactionsParams } from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getTransactions = () => {\n /**\n * Retrieve paginated transaction history for a specific wallet. Supports filtering by transaction type, status, and date range.\n * @summary Get transaction history for a wallet\n */\n const transactionControllerGetWalletTransactions = (\n walletId: string,\n params?: TransactionControllerGetWalletTransactionsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/transactions`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve the current status and details of a transaction using its Solana signature. Includes confirmation status and any error information.\n * @summary Get transaction status by signature\n */\n const transactionControllerGetTransactionStatus = (\n signature: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/transactions/${signature}`, method: \"GET\" },\n options,\n );\n };\n return {\n transactionControllerGetWalletTransactions,\n transactionControllerGetTransactionStatus,\n };\n};\nexport type TransactionControllerGetWalletTransactionsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getTransactions\n >[\"transactionControllerGetWalletTransactions\"]\n >\n >\n>;\nexport type TransactionControllerGetTransactionStatusResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getTransactions\n >[\"transactionControllerGetTransactionStatus\"]\n >\n >\n>;\n", "/**\r\n * Delegated Keys module - Simplified exports for delegated key management API functions\r\n */\r\n\r\nimport { getDelegatedKeys } from './api/delegated-keys/delegated-keys';\r\n\r\nconst {\r\n delegatedKeyControllerCreate,\r\n delegatedKeyControllerFindAll,\r\n delegatedKeyControllerFindOne,\r\n delegatedKeyControllerUpdate,\r\n delegatedKeyControllerRemove,\r\n} = getDelegatedKeys();\r\n\r\n// Export delegated key functions with simplified names\r\nexport const create = delegatedKeyControllerCreate;\r\nexport const findAll = delegatedKeyControllerFindAll;\r\nexport const findOne = delegatedKeyControllerFindOne;\r\nexport const update = delegatedKeyControllerUpdate;\r\nexport const remove = delegatedKeyControllerRemove;\r\n\r\n// Export types\r\nexport type {\r\n DelegatedKeyControllerCreateResult,\r\n DelegatedKeyControllerFindAllResult,\r\n DelegatedKeyControllerFindOneResult,\r\n DelegatedKeyControllerUpdateResult,\r\n DelegatedKeyControllerRemoveResult,\r\n} from './api/delegated-keys/delegated-keys';\r\n\r\nexport type {\r\n CreateDelegatedKeyDto,\r\n UpdateDelegatedKeyDto,\r\n DelegatedKeyPermissionsDto,\r\n} from './models';\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n CreateDelegatedKeyDto,\n UpdateDelegatedKeyDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getDelegatedKeys = () => {\n /**\n * Create a temporary delegated key that can sign transactions on behalf of the wallet. Useful for session-based signing without requiring the main key.\n * @summary Create a delegated key for a wallet\n */\n const delegatedKeyControllerCreate = (\n walletId: string,\n createDelegatedKeyDto: CreateDelegatedKeyDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${walletId}/delegated-keys`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createDelegatedKeyDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all delegated keys associated with the wallet, including their status and expiration.\n * @summary Get all delegated keys for a wallet\n */\n const delegatedKeyControllerFindAll = (\n walletId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/delegated-keys`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific delegated key including its permissions and expiration.\n * @summary Get delegated key by ID\n */\n const delegatedKeyControllerFindOne = (\n walletId: string,\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/delegated-keys/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update delegated key configuration such as permissions, spending limits, or expiration time.\n * @summary Update delegated key\n */\n const delegatedKeyControllerUpdate = (\n walletId: string,\n id: string,\n updateDelegatedKeyDto: UpdateDelegatedKeyDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${walletId}/delegated-keys/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateDelegatedKeyDto,\n },\n options,\n );\n };\n /**\n * Permanently revoke a delegated key. The key will no longer be able to sign transactions.\n * @summary Revoke delegated key\n */\n const delegatedKeyControllerRemove = (\n walletId: string,\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/delegated-keys/${id}`, method: \"DELETE\" },\n options,\n );\n };\n return {\n delegatedKeyControllerCreate,\n delegatedKeyControllerFindAll,\n delegatedKeyControllerFindOne,\n delegatedKeyControllerUpdate,\n delegatedKeyControllerRemove,\n };\n};\nexport type DelegatedKeyControllerCreateResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerCreate\"]\n >\n >\n>;\nexport type DelegatedKeyControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerFindAll\"]\n >\n >\n>;\nexport type DelegatedKeyControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerFindOne\"]\n >\n >\n>;\nexport type DelegatedKeyControllerUpdateResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerUpdate\"]\n >\n >\n>;\nexport type DelegatedKeyControllerRemoveResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerRemove\"]\n >\n >\n>;\n", "/**\r\n * Webhooks module - Simplified exports for webhook management API functions\r\n */\r\n\r\nimport { getWebhooks } from './api/webhooks/webhooks';\r\n\r\nconst {\r\n webhookControllerCreate,\r\n webhookControllerFindAll,\r\n webhookControllerFindOne,\r\n webhookControllerUpdate,\r\n webhookControllerRemove,\r\n} = getWebhooks();\r\n\r\n// Export webhook functions with simplified names\r\nexport const create = webhookControllerCreate;\r\nexport const findAll = webhookControllerFindAll;\r\nexport const findOne = webhookControllerFindOne;\r\nexport const update = webhookControllerUpdate;\r\nexport const remove = webhookControllerRemove;\r\n\r\n// Export types\r\nexport type {\r\n WebhookControllerCreateResult,\r\n WebhookControllerFindAllResult,\r\n WebhookControllerFindOneResult,\r\n WebhookControllerUpdateResult,\r\n WebhookControllerRemoveResult,\r\n} from './api/webhooks/webhooks';\r\n\r\nexport type {\r\n CreateWebhookDto,\r\n UpdateWebhookDto,\r\n WebhookEvent,\r\n} from './models';\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type { CreateWebhookDto, UpdateWebhookDto } from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getWebhooks = () => {\n /**\n * Register a new webhook endpoint to receive event notifications. The webhook URL must be HTTPS and accessible from the server.\n * @summary Create a new webhook\n */\n const webhookControllerCreate = (\n createWebhookDto: CreateWebhookDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/webhooks`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createWebhookDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all webhook endpoints registered for the authenticated platform.\n * @summary Get all webhooks for the platform\n */\n const webhookControllerFindAll = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/webhooks`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific webhook including its configuration and delivery history.\n * @summary Get webhook by ID\n */\n const webhookControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/webhooks/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update webhook configuration such as URL, events to subscribe to, or active status.\n * @summary Update webhook\n */\n const webhookControllerUpdate = (\n id: string,\n updateWebhookDto: UpdateWebhookDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/webhooks/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateWebhookDto,\n },\n options,\n );\n };\n /**\n * Permanently remove a webhook endpoint. Any pending deliveries will be cancelled.\n * @summary Delete webhook\n */\n const webhookControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/webhooks/${id}`, method: \"DELETE\" },\n options,\n );\n };\n return {\n webhookControllerCreate,\n webhookControllerFindAll,\n webhookControllerFindOne,\n webhookControllerUpdate,\n webhookControllerRemove,\n };\n};\nexport type WebhookControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerCreate\"]>>\n>;\nexport type WebhookControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerFindAll\"]>\n >\n>;\nexport type WebhookControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerFindOne\"]>\n >\n>;\nexport type WebhookControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerUpdate\"]>>\n>;\nexport type WebhookControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerRemove\"]>>\n>;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * GUAC Smart API v2\n * API documentation for GUAC Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AdminControllerFindAllParams,\n AdminControllerFindAllPlatformsParams,\n AdminControllerGetPlatformsWithUsersParams,\n AdminControllerGetUsersWithWalletsParams,\n AdminControllerGetWalletAssetsParams,\n AuthControllerLogin200,\n CommonLoginDto,\n CreateAdminDto,\n CreatePlatformDto,\n CreateUserDto,\n CreateWalletDto,\n LoginAdminDto,\n LoginPlatformDto,\n LoginUserDto,\n MintNftDto,\n MintNftSimpleDto,\n MintTokenDto,\n SendSolDto,\n SendSplDto,\n SendTransactionDto,\n UpdateAdminDto,\n UpdatePlatformDto,\n UpdateUserDto,\n UpdateWalletDto,\n WalletAssetResponseDto,\n WalletControllerGetWalletAssetsParams,\n WalletControllerMintNFT200,\n WalletControllerMintNFTSimple200,\n WalletControllerMintToken200,\n WalletControllerSendSOL200,\n WalletControllerSendSPL200,\n WalletControllerSendTransaction200\n} from '../models';\n\nimport { customInstance } from '../api-client';\n\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n\n export const getGUACSmartAPIV2 = () => {\nconst appControllerGetHello = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Register a new platform\n */\nconst platformControllerCreate = (\n createPlatformDto: CreatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createPlatformDto\n },\n options);\n }\n \n/**\n * @summary Get all platforms\n */\nconst platformControllerFindAll = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Platform login\n */\nconst platformControllerLogin = (\n loginPlatformDto: LoginPlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: loginPlatformDto\n },\n options);\n }\n \n/**\n * Retrieve the authenticated platform's own profile information. Requires platform JWT token.\n * @summary Get own platform profile\n */\nconst platformControllerGetOwnProfile = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update own platform profile\n */\nconst platformControllerUpdateOwnProfile = (\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updatePlatformDto\n },\n options);\n }\n \n/**\n * @summary Get platform by ID\n */\nconst platformControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update platform\n */\nconst platformControllerUpdate = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updatePlatformDto\n },\n options);\n }\n \n/**\n * @summary Delete platform\n */\nconst platformControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * Retrieve all users that belong to the authenticated platform. Requires platform JWT token.\n * @summary Get all users under this platform\n */\nconst platformControllerGetUsersForPlatform = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Create user under this platform\n */\nconst platformControllerCreateUserForPlatform = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createUserDto\n },\n options);\n }\n \n/**\n * @summary Update user under this platform\n */\nconst platformControllerUpdateUserForPlatform = (\n userId: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users/${userId}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateUserDto\n },\n options);\n }\n \n/**\n * @summary Delete user under this platform\n */\nconst platformControllerRemoveUserForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users/${userId}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * @summary Toggle user active status under this platform\n */\nconst platformControllerToggleUserActiveForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users/${userId}/toggle-active`, method: 'PATCH'\n },\n options);\n }\n \n/**\n * Retrieve all wallets belonging to users under the authenticated platform. Read-only access. Requires platform JWT token.\n * @summary Get all wallets of users under this platform (read-only)\n */\nconst platformControllerGetWalletsForPlatform = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/wallets`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Register a new user\n */\nconst userControllerCreate = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createUserDto\n },\n options);\n }\n \n/**\n * @summary User login\n */\nconst userControllerLogin = (\n loginUserDto: LoginUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: loginUserDto\n },\n options);\n }\n \n/**\n * Retrieve user profile by ID. Users can only access their own profile. Requires user JWT token.\n * @summary Get user by ID\n */\nconst userControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * Update user profile by ID. Users can only update their own profile. Requires user JWT token.\n * @summary Update user\n */\nconst userControllerUpdate = (\n id: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateUserDto\n },\n options);\n }\n \n/**\n * @summary Initialize a new wallet on-chain and store in database\n */\nconst walletControllerCreate = (\n createWalletDto: CreateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createWalletDto\n },\n options);\n }\n \n/**\n * @summary Get all wallets for authenticated user\n */\nconst walletControllerFindAll = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get total balance across all user wallets\n */\nconst walletControllerGetTotalBalance = (\n \n options?: SecondParameter<typeof customInstance<number>>,) => {\n return customInstance<number>(\n {url: `/wallets/balance/total`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get wallet by ID\n */\nconst walletControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update wallet\n */\nconst walletControllerUpdate = (\n id: string,\n updateWalletDto: UpdateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateWalletDto\n },\n options);\n }\n \n/**\n * @summary Delete wallet\n */\nconst walletControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * @summary Get wallet by address\n */\nconst walletControllerFindByAddress = (\n address: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/address/${address}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Send SOL from wallet to recipient\n */\nconst walletControllerSendSOL = (\n id: string,\n sendSolDto: SendSolDto,\n options?: SecondParameter<typeof customInstance<WalletControllerSendSOL200>>,) => {\n return customInstance<WalletControllerSendSOL200>(\n {url: `/wallets/${id}/send-sol`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: sendSolDto\n },\n options);\n }\n \n/**\n * @summary Send SPL tokens from wallet to recipient\n */\nconst walletControllerSendSPL = (\n id: string,\n sendSplDto: SendSplDto,\n options?: SecondParameter<typeof customInstance<WalletControllerSendSPL200>>,) => {\n return customInstance<WalletControllerSendSPL200>(\n {url: `/wallets/${id}/send-spl`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: sendSplDto\n },\n options);\n }\n \n/**\n * @summary Mint NFT using Metaplex via CPI (Advanced)\n */\nconst walletControllerMintNFT = (\n id: string,\n mintNftDto: MintNftDto,\n options?: SecondParameter<typeof customInstance<WalletControllerMintNFT200>>,) => {\n return customInstance<WalletControllerMintNFT200>(\n {url: `/wallets/${id}/mint-nft`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: mintNftDto\n },\n options);\n }\n \n/**\n * @summary Mint NFT with metadata - handles all logic internally using Metaplex Core\n */\nconst walletControllerMintNFTSimple = (\n id: string,\n mintNftSimpleDto: MintNftSimpleDto,\n options?: SecondParameter<typeof customInstance<WalletControllerMintNFTSimple200>>,) => {\n return customInstance<WalletControllerMintNFTSimple200>(\n {url: `/wallets/${id}/mint-nft-simple`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: mintNftSimpleDto\n },\n options);\n }\n \n/**\n * @summary Mint fungible token (SPL or Token-2022) with initial supply to wallet\n */\nconst walletControllerMintToken = (\n id: string,\n mintTokenDto: MintTokenDto,\n options?: SecondParameter<typeof customInstance<WalletControllerMintToken200>>,) => {\n return customInstance<WalletControllerMintToken200>(\n {url: `/wallets/${id}/mint-token`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: mintTokenDto\n },\n options);\n }\n \n/**\n * @summary Execute arbitrary transaction via CPI to any Solana program\n */\nconst walletControllerSendTransaction = (\n id: string,\n sendTransactionDto: SendTransactionDto,\n options?: SecondParameter<typeof customInstance<WalletControllerSendTransaction200>>,) => {\n return customInstance<WalletControllerSendTransaction200>(\n {url: `/wallets/${id}/send-transaction`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: sendTransactionDto\n },\n options);\n }\n \n/**\n * @summary Get all assets for a wallet (cached with auto-refresh)\n */\nconst walletControllerGetWalletAssets = (\n id: string,\n params?: WalletControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,) => {\n return customInstance<WalletAssetResponseDto[]>(\n {url: `/wallets/${id}/assets`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Force sync wallet balance and assets from blockchain immediately\n */\nconst walletControllerSyncWalletAssets = (\n id: string,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,) => {\n return customInstance<WalletAssetResponseDto[]>(\n {url: `/wallets/${id}/sync`, method: 'POST'\n },\n options);\n }\n \n/**\n * @summary Force refresh wallet balance immediately (alias for sync)\n */\nconst walletControllerForceRefresh = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}/refresh`, method: 'POST'\n },\n options);\n }\n \n/**\n * @summary Register a new admin\n */\nconst adminControllerCreate = (\n createAdminDto: CreateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createAdminDto\n },\n options);\n }\n \n/**\n * @summary Get all admins\n */\nconst adminControllerFindAll = (\n params?: AdminControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Admin login\n */\nconst adminControllerLogin = (\n loginAdminDto: LoginAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: loginAdminDto\n },\n options);\n }\n \n/**\n * @summary Get current admin profile\n */\nconst adminControllerGetCurrentAdmin = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/me`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get all platform API keys\n */\nconst adminControllerGetAllApiKeys = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/api-keys`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get specific platform API key\n */\nconst adminControllerGetplatformApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/api-keys/${platformId}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get admin by ID\n */\nconst adminControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update admin\n */\nconst adminControllerUpdate = (\n id: string,\n updateAdminDto: UpdateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateAdminDto\n },\n options);\n }\n \n/**\n * @summary Delete admin\n */\nconst adminControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * @summary Toggle admin active status\n */\nconst adminControllerToggleActive = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}/toggle-active`, method: 'PATCH'\n },\n options);\n }\n \n/**\n * @summary View all platforms\n */\nconst adminControllerFindAllPlatforms = (\n params?: AdminControllerFindAllPlatformsParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/all`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary View platform details\n */\nconst adminControllerFindOnePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update platform\n */\nconst adminControllerUpdatePlatform = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updatePlatformDto\n },\n options);\n }\n \n/**\n * @summary Delete platform\n */\nconst adminControllerRemovePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * Retrieve all users in the system. Admin has read-only access to user data. Requires admin JWT token.\n * @summary View all users (read-only)\n */\nconst adminControllerFindAllUsers = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/users/all`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary View user details\n */\nconst adminControllerFindOneUser = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/users/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * Retrieve all wallets in the system. Admin has read-only access to wallet data. Requires admin JWT token.\n * @summary View all wallets (read-only)\n */\nconst adminControllerFindAllWallets = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/wallets/all`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary View all wallets for a specific user (read-only)\n */\nconst adminControllerFindWalletsByUserId = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/wallets/user/${userId}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary View wallet details (read-only)\n */\nconst adminControllerFindOneWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/wallets/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get dashboard overview analytics\n */\nconst adminControllerGetOverviewAnalytics = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/analytics/overview`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get wallet analytics and statistics\n */\nconst adminControllerGetWalletAnalytics = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/analytics/wallets`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get recent activity across all entities\n */\nconst adminControllerGetRecentActivity = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/analytics/recent-activity`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Regenerate platform API key\n */\nconst adminControllerRegenerateApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/api-keys/${platformId}/regenerate`, method: 'POST'\n },\n options);\n }\n \n/**\n * @summary Get platforms with their user counts\n */\nconst adminControllerGetPlatformsWithUsers = (\n params?: AdminControllerGetPlatformsWithUsersParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/data/platforms-with-users`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Get users with their wallet counts and balances\n */\nconst adminControllerGetUsersWithWallets = (\n params?: AdminControllerGetUsersWithWalletsParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/data/users-with-wallets`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Get all wallet assets with filtering\n */\nconst adminControllerGetWalletAssets = (\n params?: AdminControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/data/wallet-assets`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * Authenticate as admin, platform, or user. Returns user type and appropriate JWT token.\n * @summary Universal login endpoint\n */\nconst authControllerLogin = (\n commonLoginDto: CommonLoginDto,\n options?: SecondParameter<typeof customInstance<AuthControllerLogin200>>,) => {\n return customInstance<AuthControllerLogin200>(\n {url: `/auth/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: commonLoginDto\n },\n options);\n }\n \nreturn {appControllerGetHello,platformControllerCreate,platformControllerFindAll,platformControllerLogin,platformControllerGetOwnProfile,platformControllerUpdateOwnProfile,platformControllerFindOne,platformControllerUpdate,platformControllerRemove,platformControllerGetUsersForPlatform,platformControllerCreateUserForPlatform,platformControllerUpdateUserForPlatform,platformControllerRemoveUserForPlatform,platformControllerToggleUserActiveForPlatform,platformControllerGetWalletsForPlatform,userControllerCreate,userControllerLogin,userControllerFindOne,userControllerUpdate,walletControllerCreate,walletControllerFindAll,walletControllerGetTotalBalance,walletControllerFindOne,walletControllerUpdate,walletControllerRemove,walletControllerFindByAddress,walletControllerSendSOL,walletControllerSendSPL,walletControllerMintNFT,walletControllerMintNFTSimple,walletControllerMintToken,walletControllerSendTransaction,walletControllerGetWalletAssets,walletControllerSyncWalletAssets,walletControllerForceRefresh,adminControllerCreate,adminControllerFindAll,adminControllerLogin,adminControllerGetCurrentAdmin,adminControllerGetAllApiKeys,adminControllerGetplatformApiKey,adminControllerFindOne,adminControllerUpdate,adminControllerRemove,adminControllerToggleActive,adminControllerFindAllPlatforms,adminControllerFindOnePlatform,adminControllerUpdatePlatform,adminControllerRemovePlatform,adminControllerFindAllUsers,adminControllerFindOneUser,adminControllerFindAllWallets,adminControllerFindWalletsByUserId,adminControllerFindOneWallet,adminControllerGetOverviewAnalytics,adminControllerGetWalletAnalytics,adminControllerGetRecentActivity,adminControllerRegenerateApiKey,adminControllerGetPlatformsWithUsers,adminControllerGetUsersWithWallets,adminControllerGetWalletAssets,authControllerLogin}};\nexport type AppControllerGetHelloResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['appControllerGetHello']>>>\nexport type PlatformControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerCreate']>>>\nexport type PlatformControllerFindAllResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerFindAll']>>>\nexport type PlatformControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerLogin']>>>\nexport type PlatformControllerGetOwnProfileResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerGetOwnProfile']>>>\nexport type PlatformControllerUpdateOwnProfileResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerUpdateOwnProfile']>>>\nexport type PlatformControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerFindOne']>>>\nexport type PlatformControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerUpdate']>>>\nexport type PlatformControllerRemoveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerRemove']>>>\nexport type PlatformControllerGetUsersForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerGetUsersForPlatform']>>>\nexport type PlatformControllerCreateUserForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerCreateUserForPlatform']>>>\nexport type PlatformControllerUpdateUserForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerUpdateUserForPlatform']>>>\nexport type PlatformControllerRemoveUserForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerRemoveUserForPlatform']>>>\nexport type PlatformControllerToggleUserActiveForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerToggleUserActiveForPlatform']>>>\nexport type PlatformControllerGetWalletsForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerGetWalletsForPlatform']>>>\nexport type UserControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerCreate']>>>\nexport type UserControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerLogin']>>>\nexport type UserControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerFindOne']>>>\nexport type UserControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerUpdate']>>>\nexport type WalletControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerCreate']>>>\nexport type WalletControllerFindAllResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerFindAll']>>>\nexport type WalletControllerGetTotalBalanceResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerGetTotalBalance']>>>\nexport type WalletControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerFindOne']>>>\nexport type WalletControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerUpdate']>>>\nexport type WalletControllerRemoveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerRemove']>>>\nexport type WalletControllerFindByAddressResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerFindByAddress']>>>\nexport type WalletControllerSendSOLResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSendSOL']>>>\nexport type WalletControllerSendSPLResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSendSPL']>>>\nexport type WalletControllerMintNFTResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerMintNFT']>>>\nexport type WalletControllerMintNFTSimpleResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerMintNFTSimple']>>>\nexport type WalletControllerMintTokenResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerMintToken']>>>\nexport type WalletControllerSendTransactionResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSendTransaction']>>>\nexport type WalletControllerGetWalletAssetsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerGetWalletAssets']>>>\nexport type WalletControllerSyncWalletAssetsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSyncWalletAssets']>>>\nexport type WalletControllerForceRefreshResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerForceRefresh']>>>\nexport type AdminControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerCreate']>>>\nexport type AdminControllerFindAllResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAll']>>>\nexport type AdminControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerLogin']>>>\nexport type AdminControllerGetCurrentAdminResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetCurrentAdmin']>>>\nexport type AdminControllerGetAllApiKeysResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetAllApiKeys']>>>\nexport type AdminControllerGetplatformApiKeyResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetplatformApiKey']>>>\nexport type AdminControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOne']>>>\nexport type AdminControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerUpdate']>>>\nexport type AdminControllerRemoveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerRemove']>>>\nexport type AdminControllerToggleActiveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerToggleActive']>>>\nexport type AdminControllerFindAllPlatformsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAllPlatforms']>>>\nexport type AdminControllerFindOnePlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOnePlatform']>>>\nexport type AdminControllerUpdatePlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerUpdatePlatform']>>>\nexport type AdminControllerRemovePlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerRemovePlatform']>>>\nexport type AdminControllerFindAllUsersResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAllUsers']>>>\nexport type AdminControllerFindOneUserResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOneUser']>>>\nexport type AdminControllerFindAllWalletsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAllWallets']>>>\nexport type AdminControllerFindWalletsByUserIdResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindWalletsByUserId']>>>\nexport type AdminControllerFindOneWalletResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOneWallet']>>>\nexport type AdminControllerGetOverviewAnalyticsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetOverviewAnalytics']>>>\nexport type AdminControllerGetWalletAnalyticsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetWalletAnalytics']>>>\nexport type AdminControllerGetRecentActivityResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetRecentActivity']>>>\nexport type AdminControllerRegenerateApiKeyResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerRegenerateApiKey']>>>\nexport type AdminControllerGetPlatformsWithUsersResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetPlatformsWithUsers']>>>\nexport type AdminControllerGetUsersWithWalletsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetUsersWithWallets']>>>\nexport type AdminControllerGetWalletAssetsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetWalletAssets']>>>\nexport type AuthControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['authControllerLogin']>>>\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Signer type\n */\nexport type AddSignerDtoSignerType =\n (typeof AddSignerDtoSignerType)[keyof typeof AddSignerDtoSignerType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AddSignerDtoSignerType = {\n email: \"email\",\n phone: \"phone\",\n passkey: \"passkey\",\n external: \"external\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AdminControllerGetPlatformGrowthTrendsPeriod =\n (typeof AdminControllerGetPlatformGrowthTrendsPeriod)[keyof typeof AdminControllerGetPlatformGrowthTrendsPeriod];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminControllerGetPlatformGrowthTrendsPeriod = {\n daily: \"daily\",\n weekly: \"weekly\",\n monthly: \"monthly\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AdminControllerGetTopPlatformsMetric =\n (typeof AdminControllerGetTopPlatformsMetric)[keyof typeof AdminControllerGetTopPlatformsMetric];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminControllerGetTopPlatformsMetric = {\n users: \"users\",\n wallets: \"wallets\",\n transactions: \"transactions\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AdminControllerGetWalletAssetsAssetType =\n (typeof AdminControllerGetWalletAssetsAssetType)[keyof typeof AdminControllerGetWalletAssetsAssetType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminControllerGetWalletAssetsAssetType = {\n NFT: \"NFT\",\n SPL_TOKEN: \"SPL_TOKEN\",\n SOL: \"SOL\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Signer type for admin\n */\nexport type AdminSignerConfigDtoType =\n (typeof AdminSignerConfigDtoType)[keyof typeof AdminSignerConfigDtoType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminSignerConfigDtoType = {\n email: \"email\",\n phone: \"phone\",\n passkey: \"passkey\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Optional enforcement type override for this assignment\n */\nexport type AssignPlanDtoPlanEnforcementType =\n (typeof AssignPlanDtoPlanEnforcementType)[keyof typeof AssignPlanDtoPlanEnforcementType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AssignPlanDtoPlanEnforcementType = {\n hard_block: \"hard_block\",\n soft_warning: \"soft_warning\",\n none: \"none\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AuthControllerLogin200DataUserType =\n (typeof AuthControllerLogin200DataUserType)[keyof typeof AuthControllerLogin200DataUserType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AuthControllerLogin200DataUserType = {\n admin: \"admin\",\n platform: \"platform\",\n user: \"user\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Enforcement type for plan limits\n */\nexport type CreatePlanDtoEnforcementType =\n (typeof CreatePlanDtoEnforcementType)[keyof typeof CreatePlanDtoEnforcementType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const CreatePlanDtoEnforcementType = {\n hard_block: \"hard_block\",\n soft_warning: \"soft_warning\",\n none: \"none\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Billing cycle for the subscription\n */\nexport type CreatePlatformDtoBillingCycle =\n (typeof CreatePlatformDtoBillingCycle)[keyof typeof CreatePlatformDtoBillingCycle];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const CreatePlatformDtoBillingCycle = {\n monthly: \"monthly\",\n yearly: \"yearly\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Billing cycle\n */\nexport type CreateSubscriptionDtoBillingCycle =\n (typeof CreateSubscriptionDtoBillingCycle)[keyof typeof CreateSubscriptionDtoBillingCycle];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const CreateSubscriptionDtoBillingCycle = {\n monthly: \"monthly\",\n yearly: \"yearly\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type HealthControllerGetHealth200ChecksDatabaseStatus =\n (typeof HealthControllerGetHealth200ChecksDatabaseStatus)[keyof typeof HealthControllerGetHealth200ChecksDatabaseStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200ChecksDatabaseStatus = {\n up: \"up\",\n down: \"down\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type HealthControllerGetHealth200ChecksRedisStatus =\n (typeof HealthControllerGetHealth200ChecksRedisStatus)[keyof typeof HealthControllerGetHealth200ChecksRedisStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200ChecksRedisStatus = {\n up: \"up\",\n down: \"down\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type HealthControllerGetHealth200ChecksSolanaRpcStatus =\n (typeof HealthControllerGetHealth200ChecksSolanaRpcStatus)[keyof typeof HealthControllerGetHealth200ChecksSolanaRpcStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200ChecksSolanaRpcStatus = {\n up: \"up\",\n down: \"down\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Overall system status\n */\nexport type HealthControllerGetHealth200Status =\n (typeof HealthControllerGetHealth200Status)[keyof typeof HealthControllerGetHealth200Status];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200Status = {\n healthy: \"healthy\",\n degraded: \"degraded\",\n unhealthy: \"unhealthy\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Token standard to use\n */\nexport type MintTokenDtoTokenStandard =\n (typeof MintTokenDtoTokenStandard)[keyof typeof MintTokenDtoTokenStandard];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MintTokenDtoTokenStandard = {\n spl: \"spl\",\n \"token-2022\": \"token-2022\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Transaction type\n */\nexport type PrepareTransactionDtoType =\n (typeof PrepareTransactionDtoType)[keyof typeof PrepareTransactionDtoType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const PrepareTransactionDtoType = {\n send_sol: \"send_sol\",\n send_token: \"send_token\",\n execute_instruction: \"execute_instruction\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type SubscriptionControllerFindAllStatus =\n (typeof SubscriptionControllerFindAllStatus)[keyof typeof SubscriptionControllerFindAllStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const SubscriptionControllerFindAllStatus = {\n trial: \"trial\",\n active: \"active\",\n cancelled: \"cancelled\",\n expired: \"expired\",\n grace_period: \"grace_period\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type TransactionStatus =\n (typeof TransactionStatus)[keyof typeof TransactionStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TransactionStatus = {\n pending: \"pending\",\n confirmed: \"confirmed\",\n failed: \"failed\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type TransactionType =\n (typeof TransactionType)[keyof typeof TransactionType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TransactionType = {\n SEND_SOL: \"SEND_SOL\",\n SEND_SPL: \"SEND_SPL\",\n MINT_NFT: \"MINT_NFT\",\n MINT_TOKEN: \"MINT_TOKEN\",\n EXECUTE_TRANSACTION: \"EXECUTE_TRANSACTION\",\n WALLET_CREATED: \"WALLET_CREATED\",\n WALLET_DEACTIVATED: \"WALLET_DEACTIVATED\",\n WALLET_ACTIVATED: \"WALLET_ACTIVATED\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Enforcement type for plan limits\n */\nexport type UpdatePlanDtoEnforcementType =\n (typeof UpdatePlanDtoEnforcementType)[keyof typeof UpdatePlanDtoEnforcementType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const UpdatePlanDtoEnforcementType = {\n hard_block: \"hard_block\",\n soft_warning: \"soft_warning\",\n none: \"none\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type WalletAssetResponseDtoAssetType =\n (typeof WalletAssetResponseDtoAssetType)[keyof typeof WalletAssetResponseDtoAssetType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const WalletAssetResponseDtoAssetType = {\n NFT: \"NFT\",\n SPL_TOKEN: \"SPL_TOKEN\",\n SOL: \"SOL\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type WalletControllerGetWalletAssetsAssetType =\n (typeof WalletControllerGetWalletAssetsAssetType)[keyof typeof WalletControllerGetWalletAssetsAssetType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const WalletControllerGetWalletAssetsAssetType = {\n NFT: \"NFT\",\n SPL_TOKEN: \"SPL_TOKEN\",\n SOL: \"SOL\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Array of events to subscribe to\n */\nexport type WebhookEvent = (typeof WebhookEvent)[keyof typeof WebhookEvent];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const WebhookEvent = {\n walletcreated: \"wallet.created\",\n walletdeactivated: \"wallet.deactivated\",\n walletactivated: \"wallet.activated\",\n transactionsent: \"transaction.sent\",\n transactionconfirmed: \"transaction.confirmed\",\n transactionfailed: \"transaction.failed\",\n assetreceived: \"asset.received\",\n nftminted: \"nft.minted\",\n tokenminted: \"token.minted\",\n} as const;\n", "/**\r\n * Utility function to generate a device public key for ECDH (P-256)\r\n * Works in both browser and Node.js environments\r\n * \r\n * The generated public key is a P-256 ECDH public key encoded in base64 format,\r\n * suitable for use with email and phone signers.\r\n * \r\n * @returns Promise<string> - Base64-encoded P-256 ECDH public key (raw uncompressed format, 65 bytes)\r\n * \r\n * @example\r\n * ```typescript\r\n * import { generateDevicePublicKey } from 'cilantro-sdk/utils';\r\n * import { createEmailSigner } from 'cilantro-sdk/wallet';\r\n * \r\n * // Generate device public key\r\n * const devicePublicKey = await generateDevicePublicKey();\r\n * \r\n * // Use with createEmailSigner\r\n * await createEmailSigner('wallet-id', {\r\n * email: 'user@example.com',\r\n * devicePublicKey: devicePublicKey\r\n * });\r\n * ```\r\n * \r\n * @example\r\n * ```typescript\r\n * // Browser usage\r\n * const devicePublicKey = await generateDevicePublicKey();\r\n * console.log('Device Public Key:', devicePublicKey);\r\n * ```\r\n * \r\n * @example\r\n * ```typescript\r\n * // Node.js usage\r\n * const { generateDevicePublicKey } = require('cilantro-sdk/utils');\r\n * const devicePublicKey = await generateDevicePublicKey();\r\n * ```\r\n */\r\nexport async function generateDevicePublicKey(): Promise<string> {\r\n // Check if we're in a browser environment (Web Crypto API available)\r\n // Use a type-safe check for window\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const hasWindow = typeof (globalThis as any).window !== 'undefined';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const globalWindow = hasWindow ? (globalThis as any).window : undefined;\r\n if (globalWindow && globalWindow.crypto && globalWindow.crypto.subtle) {\r\n return generateDevicePublicKeyBrowser();\r\n }\r\n \r\n // Check for global crypto (works in both browser and Node.js 15+)\r\n if (typeof globalThis !== 'undefined' && globalThis.crypto && globalThis.crypto.subtle) {\r\n return generateDevicePublicKeyBrowser();\r\n }\r\n \r\n // Node.js environment - try to use crypto module\r\n // Check for Node.js environment indicators\r\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\r\n try {\r\n // Use require for Node.js (works in both CommonJS and ESM when bundled)\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const crypto = require('crypto');\r\n return generateDevicePublicKeyNode(crypto);\r\n } catch (requireError) {\r\n throw new Error('Unable to generate device public key: Node.js crypto module not available.');\r\n }\r\n }\r\n \r\n throw new Error('Unable to generate device public key: no crypto implementation available. Make sure you are running in a browser with Web Crypto API support or Node.js with crypto module.');\r\n}\r\n\r\n/**\r\n * Generate device public key using Web Crypto API (browser)\r\n * Returns public key in raw uncompressed format (65 bytes)\r\n */\r\nasync function generateDevicePublicKeyBrowser(): Promise<string> {\r\n const crypto = globalThis.crypto;\r\n \r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Generate a P-256 ECDH key pair\r\n const keyPair = await crypto.subtle.generateKey(\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n true, // extractable\r\n ['deriveBits', 'deriveKey']\r\n );\r\n \r\n // Export the public key in raw format (uncompressed, 65 bytes)\r\n const publicKeyBuffer = await crypto.subtle.exportKey(\r\n 'raw',\r\n keyPair.publicKey\r\n );\r\n \r\n // Convert ArrayBuffer to base64 string\r\n const base64 = arrayBufferToBase64(publicKeyBuffer);\r\n \r\n return base64;\r\n}\r\n\r\n/**\r\n * Generate device public key using Node.js crypto module\r\n * Returns public key in raw uncompressed format (65 bytes)\r\n */\r\nfunction generateDevicePublicKeyNode(crypto: typeof import('crypto')): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // Create ECDH instance with P-256 curve\r\n const ecdh = crypto.createECDH('prime256v1'); // P-256\r\n \r\n // Generate keys\r\n ecdh.generateKeys();\r\n \r\n // Get public key in uncompressed format (65 bytes) and convert to base64\r\n const publicKey = ecdh.getPublicKey(null, 'uncompressed');\r\n const base64 = publicKey.toString('base64');\r\n \r\n resolve(base64);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to base64 string\r\n */\r\nfunction arrayBufferToBase64(buffer: ArrayBuffer): string {\r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(buffer).toString('base64');\r\n }\r\n \r\n // Browser environment\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return btoa(binary);\r\n}\r\n\r\n", "/**\r\n * Helper Functions Module\r\n * Simplified exports for device key management and signer helpers\r\n */\r\n\r\n// Device Key Management\r\nexport {\r\n generateDeviceKeyPair,\r\n getOrCreateDeviceKeyPair,\r\n getDevicePublicKey,\r\n getDevicePrivateKey,\r\n rotateDeviceKey,\r\n clearDeviceKeyCache,\r\n deleteDeviceKey,\r\n listDeviceKeys,\r\n findDeviceKeyByPublicKey,\r\n listAllDeviceKeys,\r\n type DeviceKeyPair,\r\n type DeviceKeyStorage\r\n} from './utils/deviceKeyManager';\r\n\r\n// Storage Adapters\r\nexport {\r\n createMemoryAdapter,\r\n createLocalStorageAdapter,\r\n createFileSystemAdapter,\r\n getDefaultStorageAdapter\r\n} from './utils/storage/adapters';\r\n\r\n// Key Format Utilities\r\nexport {\r\n normalizeSPKI,\r\n base64ToPEM,\r\n pemToBase64,\r\n base64ToArrayBuffer,\r\n arrayBufferToBase64,\r\n importSPKIPublicKey,\r\n exportToSPKI,\r\n isValidBase64\r\n} from './utils/keyFormats';\r\n\r\n// Core Signer Helpers\r\nexport {\r\n deriveSignerKeypair,\r\n signWithSigner,\r\n parseSignerResponse,\r\n clearSignerCache,\r\n getCacheStats,\r\n type SignerInfo,\r\n type Keypair,\r\n type CachedKeypair,\r\n type CacheConfig\r\n} from './signers/signerHelpers';\r\n\r\n// Email Signer Helpers\r\nexport {\r\n createEmailSignerHelper,\r\n getEmailSignerKeypair,\r\n signWithEmailSigner,\r\n clearEmailSignerCache,\r\n getEmailSignerByEmail,\r\n type EmailSignerConfig,\r\n type EmailSignerOptions\r\n} from './signers/emailSigner';\r\n\r\n// Phone Signer Helpers\r\nexport {\r\n createPhoneSignerHelper,\r\n getPhoneSignerKeypair,\r\n signWithPhoneSigner,\r\n clearPhoneSignerCache,\r\n getPhoneSignerByPhone,\r\n type PhoneSignerConfig,\r\n type PhoneSignerOptions\r\n} from './signers/phoneSigner';\r\n\r\n// Device Key Validation & Resolution\r\nexport {\r\n getSignerDeviceKeys,\r\n validateDeviceKey,\r\n resolveDeviceKey,\r\n findAndValidateDeviceKey,\r\n getBestDeviceIdentity,\r\n type DeviceIdentity,\r\n type DeviceKeyValidationResult\r\n} from './signers/deviceKeyHelpers';\r\n\r\n// Device Identity Management\r\nexport {\r\n addDeviceIdentityToSigner,\r\n replaceDeviceIdentity,\r\n addNewDeviceToSigner,\r\n canAddDeviceToSigner,\r\n type AddDeviceIdentityOptions,\r\n type ReplaceDeviceIdentityOptions\r\n} from './signers/deviceIdentityHelpers';\r\n\r\n// Passkey Helpers (simplified)\r\nexport {\r\n isWebAuthnSupported,\r\n isPlatformAuthenticatorAvailable,\r\n registerPasskey,\r\n authenticateWithPasskey,\r\n ensureBase64URLCredentialId,\r\n formatRegistrationResponse,\r\n formatAuthenticationResponse\r\n} from './signers/passkeyHelpers';\r\n\r\n// Signer Lifecycle (simplified)\r\nexport {\r\n createSigner,\r\n revokeSigner,\r\n getSigners\r\n} from './signers/signerLifecycle';\r\n\r\n// Multi-Device Management (simplified)\r\nexport {\r\n addDevice,\r\n replaceDevice,\r\n getDevices,\r\n updateDevice\r\n} from './signers/multiDeviceManager';\r\n\r\n// Validation (simplified)\r\nexport {\r\n isValidEmail,\r\n isValidPhone,\r\n isBrowserCompatible\r\n} from './signers/signerValidation';\r\n\r\n// External Wallet Adapter (simplified)\r\nexport {\r\n detectWallets,\r\n getWallet,\r\n connectWallet,\r\n signTransaction,\r\n signMessage,\r\n type SolanaWallet\r\n} from './signers/externalWalletAdapter';\r\n\r\n// Error Classes\r\nexport {\r\n SDKError,\r\n DeviceKeyMismatchError,\r\n DeviceKeyNotFoundError,\r\n NoDeviceIdentitiesError,\r\n MultipleDeviceIdentitiesError,\r\n SignerValidationError,\r\n SignerNotFoundError,\r\n SignerInactiveError,\r\n UnsupportedSignerTypeError,\r\n DeviceAuthorizationError,\r\n TransactionSigningError,\r\n WebAuthnNotSupportedError,\r\n DeviceCompatibilityError,\r\n type SDKErrorDetails\r\n} from './errors';\r\n", "/**\r\n * Unified Device Key Management API (Functional)\r\n * Handles generation, storage, retrieval, and rotation of device keys\r\n * Cross-platform support for browser and Node.js\r\n */\r\n\r\nexport interface DeviceKeyPair {\r\n publicKey: string; // Base64 raw uncompressed format (65 bytes)\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n privateKey: any; // CryptoKey in browser, base64 string in Node\r\n keyId: string;\r\n createdAt: Date;\r\n // Optional metadata for searchability\r\n deviceId?: string; // Device ID from API (if associated with a signer)\r\n signerId?: string; // Signer ID (if associated with a signer)\r\n walletId?: string; // Wallet ID (if associated with a signer)\r\n}\r\n\r\nexport interface DeviceKeyStorage {\r\n save(keyId: string, keyPair: DeviceKeyPair): Promise<void>;\r\n load(keyId: string): Promise<DeviceKeyPair | null>;\r\n list(): Promise<string[]>;\r\n remove(keyId: string): Promise<void>;\r\n // Enhanced methods for device key matching\r\n findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null>;\r\n listAll(): Promise<Array<{ keyId: string; publicKey: string }>>;\r\n}\r\n\r\n// Internal cache for device key pairs\r\nconst keyPairCache = new Map<string, DeviceKeyPair>();\r\n\r\n/**\r\n * Generate a new device key pair (P-256 ECDH)\r\n * Returns raw uncompressed format (65 bytes) consistently across platforms\r\n */\r\nexport async function generateDeviceKeyPair(): Promise<DeviceKeyPair> {\r\n const keyId = generateKeyId();\r\n const keyPair = await generateECDHKeyPair();\r\n \r\n const deviceKeyPair: DeviceKeyPair = {\r\n publicKey: keyPair.publicKey,\r\n privateKey: keyPair.privateKey,\r\n keyId,\r\n createdAt: new Date()\r\n };\r\n \r\n return deviceKeyPair;\r\n}\r\n\r\n/**\r\n * Get or create a device key pair with caching\r\n * Also supports finding by public key for automatic resolution\r\n * @param keyId - Optional key ID to retrieve, generates new if not found\r\n * @param storage - Optional storage adapter for persistence\r\n * @param devicePublicKey - Optional public key to search for (for automatic resolution)\r\n */\r\nexport async function getOrCreateDeviceKeyPair(\r\n keyId?: string,\r\n storage?: DeviceKeyStorage,\r\n devicePublicKey?: string\r\n): Promise<DeviceKeyPair> {\r\n // If devicePublicKey is provided, try to find by public key first\r\n if (devicePublicKey && storage) {\r\n const found = await findDeviceKeyByPublicKey(devicePublicKey, storage);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n \r\n // Check cache first\r\n if (keyId) {\r\n const cached = keyPairCache.get(keyId);\r\n if (cached) return cached;\r\n \r\n // Check storage if provided\r\n if (storage) {\r\n const stored = await storage.load(keyId);\r\n if (stored) {\r\n keyPairCache.set(keyId, stored);\r\n return stored;\r\n }\r\n }\r\n }\r\n \r\n // Generate new\r\n const keyPair = await generateDeviceKeyPair();\r\n if (storage) {\r\n await storage.save(keyPair.keyId, keyPair);\r\n }\r\n keyPairCache.set(keyPair.keyId, keyPair);\r\n \r\n return keyPair;\r\n}\r\n\r\n/**\r\n * Get public key in consistent format (raw uncompressed base64, 65 bytes)\r\n * Supports automatic resolution by devicePublicKey\r\n * @param keyId - Optional key ID\r\n * @param storage - Optional storage adapter\r\n * @param devicePublicKey - Optional public key to search for (for automatic resolution)\r\n */\r\nexport async function getDevicePublicKey(\r\n keyId?: string,\r\n storage?: DeviceKeyStorage,\r\n devicePublicKey?: string\r\n): Promise<string> {\r\n const keyPair = await getOrCreateDeviceKeyPair(keyId, storage, devicePublicKey);\r\n return keyPair.publicKey;\r\n}\r\n\r\n/**\r\n * Get private key for decryption\r\n * Supports automatic resolution by devicePublicKey\r\n * @param keyId - Optional key ID\r\n * @param storage - Optional storage adapter\r\n * @param devicePublicKey - Optional public key to search for (for automatic resolution)\r\n */\r\nexport async function getDevicePrivateKey(\r\n keyId?: string,\r\n storage?: DeviceKeyStorage,\r\n devicePublicKey?: string\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n): Promise<any> {\r\n const keyPair = await getOrCreateDeviceKeyPair(keyId, storage, devicePublicKey);\r\n return keyPair.privateKey;\r\n}\r\n\r\n/**\r\n * Rotate device key (generate new, optionally keep old for migration)\r\n * @param oldKeyId - ID of the old key\r\n * @param storage - Optional storage adapter\r\n */\r\nexport async function rotateDeviceKey(\r\n oldKeyId: string,\r\n storage?: DeviceKeyStorage\r\n): Promise<DeviceKeyPair> {\r\n const newKeyPair = await generateDeviceKeyPair();\r\n \r\n if (storage) {\r\n await storage.save(newKeyPair.keyId, newKeyPair);\r\n // Old key remains in storage for migration period\r\n }\r\n \r\n keyPairCache.set(newKeyPair.keyId, newKeyPair);\r\n return newKeyPair;\r\n}\r\n\r\n/**\r\n * Clear cache for a specific key or all keys\r\n * @param keyId - Optional key ID to clear, clears all if not provided\r\n */\r\nexport function clearDeviceKeyCache(keyId?: string): void {\r\n if (keyId) {\r\n keyPairCache.delete(keyId);\r\n } else {\r\n keyPairCache.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Delete a device key from storage and cache\r\n * @param keyId - Key ID to delete\r\n * @param storage - Storage adapter\r\n */\r\nexport async function deleteDeviceKey(\r\n keyId: string,\r\n storage: DeviceKeyStorage\r\n): Promise<void> {\r\n await storage.remove(keyId);\r\n keyPairCache.delete(keyId);\r\n}\r\n\r\n/**\r\n * List all device key IDs from storage\r\n * @param storage - Storage adapter\r\n */\r\nexport async function listDeviceKeys(storage: DeviceKeyStorage): Promise<string[]> {\r\n return storage.list();\r\n}\r\n\r\n/**\r\n * Find device key by public key\r\n * Searches both cache and storage to find matching device key\r\n * @param publicKey - Public key to search for\r\n * @param storage - Storage adapter\r\n * @returns Device key pair if found, null otherwise\r\n */\r\nexport async function findDeviceKeyByPublicKey(\r\n publicKey: string,\r\n storage?: DeviceKeyStorage\r\n): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison (remove whitespace, ensure consistent format)\r\n const normalizedPublicKey = normalizePublicKey(publicKey);\r\n \r\n // First, search in-memory cache\r\n for (const [keyId, cachedKeyPair] of keyPairCache.entries()) {\r\n if (normalizePublicKey(cachedKeyPair.publicKey) === normalizedPublicKey) {\r\n return cachedKeyPair;\r\n }\r\n }\r\n \r\n // If storage is provided, search in storage\r\n if (storage) {\r\n // Try the storage's native implementation first (most efficient)\r\n if (storage.findByPublicKey) {\r\n const found = await storage.findByPublicKey(normalizedPublicKey);\r\n if (found) {\r\n // Update cache with found key\r\n keyPairCache.set(found.keyId, found);\r\n return found;\r\n }\r\n }\r\n \r\n // Fallback: search through all keys in storage\r\n const allKeys = await storage.listAll();\r\n for (const { keyId, publicKey: storedPublicKey } of allKeys) {\r\n if (normalizePublicKey(storedPublicKey) === normalizedPublicKey) {\r\n const loaded = await storage.load(keyId);\r\n if (loaded) {\r\n // Update cache\r\n keyPairCache.set(keyId, loaded);\r\n return loaded;\r\n }\r\n }\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Normalize public key for consistent comparison\r\n * Removes whitespace and ensures consistent format\r\n */\r\nfunction normalizePublicKey(publicKey: string): string {\r\n return publicKey.trim().replace(/\\s/g, '');\r\n}\r\n\r\n/**\r\n * List all device keys with their public keys\r\n * @param storage - Storage adapter\r\n */\r\nexport async function listAllDeviceKeys(\r\n storage: DeviceKeyStorage\r\n): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n return storage.listAll();\r\n}\r\n\r\n// ============================================================================\r\n// Internal Helper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Generate a unique key ID\r\n */\r\nfunction generateKeyId(): string {\r\n const timestamp = Date.now();\r\n const random = Math.random().toString(36).substring(2, 11);\r\n return `device_key_${timestamp}_${random}`;\r\n}\r\n\r\n/**\r\n * Generate ECDH key pair (P-256) - cross-platform\r\n */\r\nasync function generateECDHKeyPair(): Promise<{\r\n publicKey: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n privateKey: any;\r\n}> {\r\n // Check if we're in a browser environment\r\n if (isBrowserEnvironment()) {\r\n return generateECDHKeyPairBrowser();\r\n }\r\n \r\n // Node.js environment\r\n if (isNodeEnvironment()) {\r\n return generateECDHKeyPairNode();\r\n }\r\n \r\n throw new Error('Unable to generate device key pair: unsupported environment');\r\n}\r\n\r\n/**\r\n * Check if running in browser\r\n */\r\nfunction isBrowserEnvironment(): boolean {\r\n return typeof globalThis !== 'undefined' && \r\n globalThis.crypto && \r\n globalThis.crypto.subtle !== undefined;\r\n}\r\n\r\n/**\r\n * Check if running in Node.js\r\n */\r\nfunction isNodeEnvironment(): boolean {\r\n return typeof process !== 'undefined' && \r\n process.versions && \r\n process.versions.node !== undefined;\r\n}\r\n\r\n/**\r\n * Generate ECDH key pair using Web Crypto API (browser)\r\n * Exports public key in raw uncompressed format to match Node.js implementation\r\n */\r\nasync function generateECDHKeyPairBrowser(): Promise<{\r\n publicKey: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n privateKey: any;\r\n}> {\r\n const crypto = globalThis.crypto;\r\n \r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Generate a P-256 ECDH key pair\r\n const keyPair = await crypto.subtle.generateKey(\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n true, // extractable\r\n ['deriveBits', 'deriveKey']\r\n );\r\n \r\n // Export the public key in raw format (uncompressed, 65 bytes)\r\n // This matches the Node.js implementation: uncompressed format\r\n const publicKeyBuffer = await crypto.subtle.exportKey('raw', keyPair.publicKey);\r\n \r\n // Convert ArrayBuffer to base64 string\r\n const publicKeyBase64 = arrayBufferToBase64(publicKeyBuffer);\r\n \r\n // Keep the private key as CryptoKey for browser security\r\n // It will be used directly for ECDH operations\r\n return {\r\n publicKey: publicKeyBase64,\r\n privateKey: keyPair.privateKey\r\n };\r\n}\r\n\r\n/**\r\n * Generate ECDH key pair using Node.js crypto module\r\n * Follows the pattern: createECDH -> generateKeys -> getPublicKey/getPrivateKey\r\n */\r\nfunction generateECDHKeyPairNode(): {\r\n publicKey: string;\r\n privateKey: string;\r\n} {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const crypto = require('crypto');\r\n \r\n // Create ECDH instance with P-256 curve\r\n const ecdh = crypto.createECDH('prime256v1'); // P-256\r\n \r\n // Generate keys\r\n ecdh.generateKeys();\r\n \r\n // Get public key in uncompressed format (65 bytes) and convert to base64\r\n const publicKey = ecdh.getPublicKey(null, 'uncompressed');\r\n const publicKeyBase64 = publicKey.toString('base64');\r\n \r\n // Get private key and convert to base64 for storage\r\n const privateKey = ecdh.getPrivateKey();\r\n const privateKeyBase64 = privateKey.toString('base64');\r\n \r\n return {\r\n publicKey: publicKeyBase64,\r\n privateKey: privateKeyBase64\r\n };\r\n } catch (error) {\r\n throw new Error(`Unable to generate device key pair in Node.js: ${error}`);\r\n }\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to base64 string\r\n */\r\nfunction arrayBufferToBase64(buffer: ArrayBuffer): string {\r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(buffer).toString('base64');\r\n }\r\n \r\n // Browser environment\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return btoa(binary);\r\n}\r\n\r\n/**\r\n * Convert PEM to base64 (remove headers and newlines)\r\n */\r\nfunction pemToBase64(pem: string): string {\r\n return pem\r\n .replace(/-----BEGIN PUBLIC KEY-----/g, '')\r\n .replace(/-----END PUBLIC KEY-----/g, '')\r\n .replace(/-----BEGIN PRIVATE KEY-----/g, '')\r\n .replace(/-----END PRIVATE KEY-----/g, '')\r\n .replace(/\\n/g, '')\r\n .replace(/\\r/g, '')\r\n .trim();\r\n}\r\n\r\n", "/**\r\n * Key format conversion utilities (Functional)\r\n * Handles SPKI, raw, PEM conversions consistently across platforms\r\n */\r\n\r\n/**\r\n * Normalize SPKI format (ensure consistent base64 without PEM headers)\r\n * @param spkiKey - Key in SPKI format (may have PEM headers)\r\n */\r\nexport function normalizeSPKI(spkiKey: string): string {\r\n return spkiKey\r\n .replace(/-----BEGIN PUBLIC KEY-----/g, '')\r\n .replace(/-----END PUBLIC KEY-----/g, '')\r\n .replace(/-----BEGIN PRIVATE KEY-----/g, '')\r\n .replace(/-----END PRIVATE KEY-----/g, '')\r\n .replace(/\\n/g, '')\r\n .replace(/\\r/g, '')\r\n .replace(/\\s/g, '')\r\n .trim();\r\n}\r\n\r\n/**\r\n * Convert base64 to PEM format\r\n * @param base64Key - Base64 encoded key\r\n * @param keyType - Type of key ('public' or 'private')\r\n */\r\nexport function base64ToPEM(base64Key: string, keyType: 'public' | 'private' = 'public'): string {\r\n const normalized = normalizeSPKI(base64Key);\r\n const header = keyType === 'public' ? 'PUBLIC KEY' : 'PRIVATE KEY';\r\n \r\n // Add line breaks every 64 characters\r\n const formatted = normalized.match(/.{1,64}/g)?.join('\\n') || normalized;\r\n \r\n return `-----BEGIN ${header}-----\\n${formatted}\\n-----END ${header}-----`;\r\n}\r\n\r\n/**\r\n * Convert PEM to base64 format\r\n * @param pemKey - PEM formatted key\r\n */\r\nexport function pemToBase64(pemKey: string): string {\r\n return normalizeSPKI(pemKey);\r\n}\r\n\r\n/**\r\n * Convert base64 string to ArrayBuffer\r\n * @param base64 - Base64 string\r\n */\r\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\r\n const normalized = normalizeSPKI(base64);\r\n \r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(normalized, 'base64').buffer;\r\n }\r\n \r\n // Browser environment\r\n const binaryString = atob(normalized);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to base64 string\r\n * @param buffer - ArrayBuffer\r\n */\r\nexport function arrayBufferToBase64(buffer: ArrayBuffer): string {\r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(buffer).toString('base64');\r\n }\r\n \r\n // Browser environment\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return btoa(binary);\r\n}\r\n\r\n/**\r\n * Import SPKI public key in browser (Web Crypto API)\r\n * @param spkiBase64 - Public key in SPKI base64 format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport async function importSPKIPublicKey(spkiBase64: string): Promise<any> {\r\n if (typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n const normalized = normalizeSPKI(spkiBase64);\r\n const keyBuffer = base64ToArrayBuffer(normalized);\r\n \r\n return globalThis.crypto.subtle.importKey(\r\n 'spki',\r\n keyBuffer,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n true,\r\n []\r\n );\r\n}\r\n\r\n/**\r\n * Export CryptoKey to SPKI base64 format\r\n * @param key - CryptoKey\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport async function exportToSPKI(key: any): Promise<string> {\r\n if (typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n const exported = await globalThis.crypto.subtle.exportKey('spki', key);\r\n return arrayBufferToBase64(exported);\r\n}\r\n\r\n/**\r\n * Validate if a string is valid base64\r\n * @param str - String to validate\r\n */\r\nexport function isValidBase64(str: string): boolean {\r\n const normalized = normalizeSPKI(str);\r\n const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;\r\n return base64Regex.test(normalized);\r\n}\r\n\r\n", "/**\r\n * Storage adapters for device key persistence (Functional)\r\n * Cross-platform support for browser and Node.js\r\n */\r\n\r\nimport type { DeviceKeyStorage, DeviceKeyPair } from '../deviceKeyManager';\r\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '../keyFormats';\r\n\r\n// ============================================================================\r\n// Memory Adapter (for testing and temporary storage)\r\n// ============================================================================\r\n\r\n/**\r\n * Create memory adapter (in-memory storage, does not persist)\r\n */\r\nexport function createMemoryAdapter(): DeviceKeyStorage {\r\n const storage = new Map<string, string>();\r\n \r\n return {\r\n async save(keyId: string, keyPair: DeviceKeyPair): Promise<void> {\r\n // Store with consistent, searchable format including metadata\r\n const serialized = JSON.stringify({\r\n publicKey: keyPair.publicKey,\r\n privateKey: typeof keyPair.privateKey === 'string' \r\n ? keyPair.privateKey \r\n : '[CryptoKey]', // Can't serialize CryptoKey\r\n keyId: keyPair.keyId,\r\n createdAt: keyPair.createdAt.toISOString(),\r\n isCryptoKey: typeof keyPair.privateKey !== 'string',\r\n // Metadata for searchability\r\n deviceId: keyPair.deviceId,\r\n signerId: keyPair.signerId,\r\n walletId: keyPair.walletId,\r\n // Index by public key for fast lookup\r\n _index: {\r\n publicKey: keyPair.publicKey.trim().replace(/\\s/g, '') // Normalized for search\r\n }\r\n });\r\n storage.set(keyId, serialized);\r\n },\r\n \r\n async load(keyId: string): Promise<DeviceKeyPair | null> {\r\n const serialized = storage.get(keyId);\r\n if (!serialized) return null;\r\n \r\n const data = JSON.parse(serialized);\r\n \r\n // Note: CryptoKeys cannot be deserialized from memory\r\n // This adapter is best for Node.js where privateKey is a string\r\n if (data.isCryptoKey) {\r\n throw new Error('Cannot deserialize CryptoKey from memory. Use a different storage adapter.');\r\n }\r\n \r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: data.privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt)\r\n };\r\n },\r\n \r\n async list(): Promise<string[]> {\r\n return Array.from(storage.keys());\r\n },\r\n \r\n async remove(keyId: string): Promise<void> {\r\n storage.delete(keyId);\r\n },\r\n \r\n async findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison\r\n const normalizedPublicKey = publicKey.trim().replace(/\\s/g, '');\r\n \r\n // Search through all keys\r\n for (const keyId of storage.keys()) {\r\n const serialized = storage.get(keyId);\r\n if (serialized) {\r\n const data = JSON.parse(serialized);\r\n // Check normalized public key from index or direct comparison\r\n const storedNormalized = data._index?.publicKey || data.publicKey?.trim().replace(/\\s/g, '');\r\n if (storedNormalized === normalizedPublicKey) {\r\n return this.load(keyId);\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n \r\n async listAll(): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n const result: Array<{ keyId: string; publicKey: string }> = [];\r\n for (const keyId of storage.keys()) {\r\n const serialized = storage.get(keyId);\r\n if (serialized) {\r\n const data = JSON.parse(serialized);\r\n result.push({ keyId, publicKey: data.publicKey });\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// LocalStorage Adapter (browser only)\r\n// ============================================================================\r\n\r\n/**\r\n * Create localStorage adapter (browser only, persists across sessions)\r\n */\r\nexport function createLocalStorageAdapter(): DeviceKeyStorage {\r\n if (typeof localStorage === 'undefined') {\r\n throw new Error('localStorage is not available. This adapter only works in browsers.');\r\n }\r\n \r\n const prefix = 'cilantro_device_key_';\r\n \r\n return {\r\n async save(keyId: string, keyPair: DeviceKeyPair): Promise<void> {\r\n const data: any = {\r\n publicKey: keyPair.publicKey,\r\n keyId: keyPair.keyId,\r\n createdAt: keyPair.createdAt.toISOString(),\r\n // Metadata for searchability\r\n deviceId: keyPair.deviceId,\r\n signerId: keyPair.signerId,\r\n walletId: keyPair.walletId,\r\n // Index by public key for fast lookup\r\n _index: {\r\n publicKey: keyPair.publicKey.trim().replace(/\\s/g, '') // Normalized for search\r\n }\r\n };\r\n \r\n if (typeof keyPair.privateKey === 'string') {\r\n // Node.js: private key is already a base64 string (raw format)\r\n data.privateKey = keyPair.privateKey;\r\n data.privateKeyType = 'raw';\r\n } else {\r\n // Browser: export CryptoKey to PKCS8 format (base64)\r\n // PKCS8 is the standard format for ECDH private keys in Web Crypto API\r\n try {\r\n const crypto = globalThis.crypto;\r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Export private key as PKCS8 format (standard for ECDH)\r\n const pkcs8Key = await crypto.subtle.exportKey('pkcs8', keyPair.privateKey);\r\n const pkcs8Base64 = arrayBufferToBase64(pkcs8Key);\r\n \r\n data.privateKey = pkcs8Base64;\r\n data.privateKeyType = 'cryptokey-pkcs8';\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to export CryptoKey for storage: ${error}. ` +\r\n `The private key may not be extractable. Consider using IndexedDB adapter.`\r\n );\r\n }\r\n }\r\n \r\n localStorage.setItem(prefix + keyId, JSON.stringify(data));\r\n },\r\n \r\n async load(keyId: string): Promise<DeviceKeyPair | null> {\r\n const stored = localStorage.getItem(prefix + keyId);\r\n if (!stored) return null;\r\n \r\n const data = JSON.parse(stored);\r\n \r\n let privateKey: any;\r\n \r\n if (data.privateKeyType === 'raw' || !data.privateKeyType) {\r\n // Node.js format: private key is already a base64 string (raw format)\r\n if (!data.privateKey) {\r\n throw new Error(\r\n `Private key is missing from storage for keyId: ${keyId}. ` +\r\n `The stored key may be corrupted. Consider regenerating the device key.`\r\n );\r\n }\r\n privateKey = data.privateKey;\r\n } else if (data.privateKeyType === 'cryptokey-pkcs8') {\r\n // Browser format: import PKCS8 private key back to CryptoKey\r\n if (!data.privateKey) {\r\n throw new Error(\r\n `Private key is missing from storage for keyId: ${keyId}. ` +\r\n `The stored key may be corrupted. Consider regenerating the device key.`\r\n );\r\n }\r\n try {\r\n const crypto = globalThis.crypto;\r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Convert base64 back to ArrayBuffer\r\n const pkcs8Buffer = base64ToArrayBuffer(data.privateKey);\r\n \r\n // Import as ECDH private key (P-256) from PKCS8 format\r\n privateKey = await crypto.subtle.importKey(\r\n 'pkcs8',\r\n pkcs8Buffer,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256'\r\n },\r\n true, // extractable\r\n ['deriveKey', 'deriveBits']\r\n );\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to import CryptoKey from storage: ${error}. ` +\r\n `The stored key may be corrupted. Consider regenerating the device key.`\r\n );\r\n }\r\n } else if (data.privateKeyType === 'cryptokey-raw') {\r\n // Legacy format: try to handle old format (should not happen, but for compatibility)\r\n throw new Error(\r\n 'Legacy CryptoKey format detected. Please regenerate your device key. ' +\r\n 'The old format is no longer supported.'\r\n );\r\n } else {\r\n throw new Error(\r\n `Unknown private key type: ${data.privateKeyType}. ` +\r\n `Cannot load device key. Consider regenerating.`\r\n );\r\n }\r\n \r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt),\r\n deviceId: data.deviceId,\r\n signerId: data.signerId,\r\n walletId: data.walletId\r\n };\r\n },\r\n \r\n async list(): Promise<string[]> {\r\n const keys: string[] = [];\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key?.startsWith(prefix)) {\r\n keys.push(key.replace(prefix, ''));\r\n }\r\n }\r\n return keys;\r\n },\r\n \r\n async remove(keyId: string): Promise<void> {\r\n localStorage.removeItem(prefix + keyId);\r\n },\r\n \r\n async findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison\r\n const normalizedPublicKey = publicKey.trim().replace(/\\s/g, '');\r\n \r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key?.startsWith(prefix)) {\r\n const stored = localStorage.getItem(key);\r\n if (stored) {\r\n const data = JSON.parse(stored);\r\n // Check normalized public key from index or direct comparison\r\n const storedNormalized = data._index?.publicKey || data.publicKey?.trim().replace(/\\s/g, '');\r\n if (storedNormalized === normalizedPublicKey) {\r\n const keyId = key.replace(prefix, '');\r\n return this.load(keyId);\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n \r\n async listAll(): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n const result: Array<{ keyId: string; publicKey: string }> = [];\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key?.startsWith(prefix)) {\r\n const stored = localStorage.getItem(key);\r\n if (stored) {\r\n const data = JSON.parse(stored);\r\n result.push({\r\n keyId: key.replace(prefix, ''),\r\n publicKey: data.publicKey\r\n });\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// File System Adapter (Node.js only)\r\n// ============================================================================\r\n\r\n/**\r\n * Create file system adapter (Node.js only, persists to disk)\r\n * @param basePath - Base directory path for storing keys\r\n */\r\nexport function createFileSystemAdapter(basePath: string): DeviceKeyStorage {\r\n if (typeof process === 'undefined' || !process.versions || !process.versions.node) {\r\n throw new Error('File system adapter only works in Node.js environment');\r\n }\r\n \r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const fs = require('fs');\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const path = require('path');\r\n \r\n // Ensure base directory exists\r\n if (!fs.existsSync(basePath)) {\r\n fs.mkdirSync(basePath, { recursive: true });\r\n }\r\n \r\n return {\r\n async save(keyId: string, keyPair: DeviceKeyPair): Promise<void> {\r\n const filePath = path.join(basePath, `${keyId}.json`);\r\n \r\n const data = {\r\n publicKey: keyPair.publicKey,\r\n privateKey: typeof keyPair.privateKey === 'string' \r\n ? keyPair.privateKey \r\n : null,\r\n keyId: keyPair.keyId,\r\n createdAt: keyPair.createdAt.toISOString(),\r\n // Metadata for searchability\r\n deviceId: keyPair.deviceId,\r\n signerId: keyPair.signerId,\r\n walletId: keyPair.walletId,\r\n // Index by public key for fast lookup\r\n _index: {\r\n publicKey: keyPair.publicKey.trim().replace(/\\s/g, '') // Normalized for search\r\n }\r\n };\r\n \r\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');\r\n },\r\n \r\n async load(keyId: string): Promise<DeviceKeyPair | null> {\r\n const filePath = path.join(basePath, `${keyId}.json`);\r\n \r\n if (!fs.existsSync(filePath)) {\r\n return null;\r\n }\r\n \r\n const fileContent = fs.readFileSync(filePath, 'utf-8');\r\n const data = JSON.parse(fileContent);\r\n \r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: data.privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt),\r\n deviceId: data.deviceId,\r\n signerId: data.signerId,\r\n walletId: data.walletId\r\n };\r\n },\r\n \r\n async list(): Promise<string[]> {\r\n const files = fs.readdirSync(basePath);\r\n return files\r\n .filter((file: string) => file.endsWith('.json'))\r\n .map((file: string) => file.replace('.json', ''));\r\n },\r\n \r\n async remove(keyId: string): Promise<void> {\r\n const filePath = path.join(basePath, `${keyId}.json`);\r\n if (fs.existsSync(filePath)) {\r\n fs.unlinkSync(filePath);\r\n }\r\n },\r\n \r\n async findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison\r\n const normalizedPublicKey = publicKey.trim().replace(/\\s/g, '');\r\n \r\n const files = fs.readdirSync(basePath);\r\n for (const file of files) {\r\n if (file.endsWith('.json')) {\r\n const filePath = path.join(basePath, file);\r\n const fileContent = fs.readFileSync(filePath, 'utf-8');\r\n const data = JSON.parse(fileContent);\r\n // Check normalized public key from index or direct comparison\r\n const storedNormalized = data._index?.publicKey || data.publicKey?.trim().replace(/\\s/g, '');\r\n if (storedNormalized === normalizedPublicKey) {\r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: data.privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt),\r\n deviceId: data.deviceId,\r\n signerId: data.signerId,\r\n walletId: data.walletId\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n \r\n async listAll(): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n const result: Array<{ keyId: string; publicKey: string }> = [];\r\n const files = fs.readdirSync(basePath);\r\n for (const file of files) {\r\n if (file.endsWith('.json')) {\r\n const filePath = path.join(basePath, file);\r\n const fileContent = fs.readFileSync(filePath, 'utf-8');\r\n const data = JSON.parse(fileContent);\r\n result.push({\r\n keyId: file.replace('.json', ''),\r\n publicKey: data.publicKey\r\n });\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Helper: Get Default Storage Adapter\r\n// ============================================================================\r\n\r\n/**\r\n * Get default storage adapter based on environment\r\n * Browser: localStorage\r\n * Node.js: memory (caller should provide file system path if persistence needed)\r\n */\r\nexport function getDefaultStorageAdapter(): DeviceKeyStorage {\r\n // Browser environment\r\n if (typeof localStorage !== 'undefined') {\r\n return createLocalStorageAdapter();\r\n }\r\n \r\n // Node.js environment - use memory by default\r\n // Caller should use createFileSystemAdapter for persistence\r\n return createMemoryAdapter();\r\n}\r\n\r\n", "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n hashCons: () => Hash<T>\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash<T>;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n hashCons: (opts?: T) => Hash<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): Hash<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n hashCons: (opts?: T) => HashXOF<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): HashXOF<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes, type CHash, type Input } from './utils.ts';\n\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, _key: Input) {\n super();\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Input): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: HMAC<T>): HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Input, message: Input): Uint8Array;\n create(hash: CHash, key: Input): HMAC<any>;\n} = (hash: CHash, key: Input, message: Input): Uint8Array =>\n new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/**\n * HKDF (RFC 5869): extract + expand in one step.\n * See https://soatok.blog/2021/11/17/understanding-hkdf/.\n * @module\n */\nimport { hmac } from './hmac.ts';\nimport { ahash, anumber, type CHash, clean, type Input, toBytes } from './utils.ts';\n\n/**\n * HKDF-extract from spec. Less important part. `HKDF-Extract(IKM, salt) -> PRK`\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n */\nexport function extract(hash: CHash, ikm: Input, salt?: Input): Uint8Array {\n ahash(hash);\n // NOTE: some libraries treat zero-length array as 'not provided';\n // we don't, since we have undefined as 'not provided'\n // https://github.com/RustCrypto/KDFs/issues/15\n if (salt === undefined) salt = new Uint8Array(hash.outputLen);\n return hmac(hash, toBytes(salt), toBytes(ikm));\n}\n\nconst HKDF_COUNTER = /* @__PURE__ */ Uint8Array.from([0]);\nconst EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();\n\n/**\n * HKDF-expand from the spec. The most important part. `HKDF-Expand(PRK, info, L) -> OKM`\n * @param hash - hash function that would be used (e.g. sha256)\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n */\nexport function expand(hash: CHash, prk: Input, info?: Input, length: number = 32): Uint8Array {\n ahash(hash);\n anumber(length);\n const olen = hash.outputLen;\n if (length > 255 * olen) throw new Error('Length should be <= 255*HashLen');\n const blocks = Math.ceil(length / olen);\n if (info === undefined) info = EMPTY_BUFFER;\n // first L(ength) octets of T\n const okm = new Uint8Array(blocks * olen);\n // Re-use HMAC instance between blocks\n const HMAC = hmac.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER[0] = counter + 1;\n // T(0) = empty string (zero length)\n // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n .update(info)\n .update(HKDF_COUNTER)\n .digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n clean(T, HKDF_COUNTER);\n return okm.slice(0, length);\n}\n\n/**\n * HKDF (RFC 5869): derive keys from an initial input.\n * Combines hkdf_extract + hkdf_expand in one step\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n * @example\n * import { hkdf } from '@noble/hashes/hkdf';\n * import { sha256 } from '@noble/hashes/sha2';\n * import { randomBytes } from '@noble/hashes/utils';\n * const inputKey = randomBytes(32);\n * const salt = randomBytes(32);\n * const info = 'application-key';\n * const hk1 = hkdf(sha256, inputKey, salt, info, 32);\n */\nexport const hkdf = (\n hash: CHash,\n ikm: Input,\n salt: Input | undefined,\n info: Input | undefined,\n length: number\n): Uint8Array => expand(hash, extract(hash, ikm, salt), info, length);\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n\n constructor(outputLen: number = 32) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\nexport class SHA224 extends SHA256 {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD<SHA512> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor(outputLen: number = 64) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\nexport class SHA384 extends SHA512 {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\nexport class SHA512_256 extends SHA512 {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n", "/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport {\n SHA224 as SHA224n,\n sha224 as sha224n,\n SHA256 as SHA256n,\n sha256 as sha256n,\n} from './sha2.ts';\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256: typeof SHA256n = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256: typeof sha256n = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224: typeof SHA224n = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224: typeof sha224n = sha224n;\n", "/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport * as nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _8n = BigInt(8);\nconst CU_O = BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989');\nconst CURVE = Object.freeze({\n a: BigInt(-1),\n d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n P: BigInt('57896044618658097711785492504343953926634992332820282019728792003956564819949'),\n l: CU_O,\n n: CU_O,\n h: BigInt(8),\n Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n});\nexport { CURVE };\nconst POW_2_256 = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000');\nconst SQRT_M1 = BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');\nconst SQRT_D = BigInt('6853475219497561581579357271197624642482790079785650197046958215289687604742');\nconst SQRT_AD_MINUS_ONE = BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');\nconst INVSQRT_A_MINUS_D = BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');\nconst ONE_MINUS_D_SQ = BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');\nconst D_MINUS_ONE_SQ = BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');\nclass ExtendedPoint {\n constructor(x, y, z, t) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.t = t;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('ExtendedPoint#fromAffine: expected Point');\n }\n if (p.equals(Point.ZERO))\n return ExtendedPoint.ZERO;\n return new ExtendedPoint(p.x, p.y, _1n, mod(p.x * p.y));\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return this.toAffineBatch(points).map(this.fromAffine);\n }\n equals(other) {\n assertExtPoint(other);\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const X1Z2 = mod(X1 * Z2);\n const X2Z1 = mod(X2 * Z1);\n const Y1Z2 = mod(Y1 * Z2);\n const Y2Z1 = mod(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n negate() {\n return new ExtendedPoint(mod(-this.x), this.y, this.z, mod(-this.t));\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const { a } = CURVE;\n const M = mod;\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(_2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new ExtendedPoint(X3, Y3, Z3, T3);\n }\n add(other) {\n const { x: X1, y: Y1, z: Z1, t: T1 } = this;\n assertExtPoint(other);\n const { x: X2, y: Y2, z: Z2, t: T2 } = other;\n const { a, d } = CURVE;\n const M = mod;\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new ExtendedPoint(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n precomputeWindow(W) {\n const windows = 1 + 256 / W;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(ExtendedPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = ExtendedPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = ExtendedPoint.ZERO;\n let f = ExtendedPoint.BASE;\n const windows = 1 + 256 / W;\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n const offset1 = offset;\n const offset2 = offset + Math.abs(wbits) - 1;\n const cond1 = window % 2 !== 0;\n const cond2 = wbits < 0;\n if (wbits === 0) {\n f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n }\n else {\n p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n }\n }\n return ExtendedPoint.normalizeZ([p, f])[0];\n }\n multiply(scalar, affinePoint) {\n return this.wNAF(normalizeScalar(scalar, CURVE.l), affinePoint);\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar, CURVE.l, false);\n const G = ExtendedPoint.BASE;\n const P0 = ExtendedPoint.ZERO;\n if (n === _0n)\n return P0;\n if (this.equals(P0) || n === _1n)\n return this;\n if (this.equals(G))\n return this.wNAF(n);\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n isSmallOrder() {\n return this.multiplyUnsafe(CURVE.h).equals(ExtendedPoint.ZERO);\n }\n isTorsionFree() {\n let p = this.multiplyUnsafe(CURVE.l / _2n).double();\n if (CURVE.l % _2n)\n p = p.add(this);\n return p.equals(ExtendedPoint.ZERO);\n }\n toAffine(invZ) {\n const { x, y, z } = this;\n const is0 = this.equals(ExtendedPoint.ZERO);\n if (invZ == null)\n invZ = is0 ? _8n : invert(z);\n const ax = mod(x * invZ);\n const ay = mod(y * invZ);\n const zz = mod(z * invZ);\n if (is0)\n return Point.ZERO;\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n fromRistrettoBytes() {\n legacyRist();\n }\n toRistrettoBytes() {\n legacyRist();\n }\n fromRistrettoHash() {\n legacyRist();\n }\n}\nExtendedPoint.BASE = new ExtendedPoint(CURVE.Gx, CURVE.Gy, _1n, mod(CURVE.Gx * CURVE.Gy));\nExtendedPoint.ZERO = new ExtendedPoint(_0n, _1n, _1n, _0n);\nfunction constTimeNegate(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\nfunction assertExtPoint(other) {\n if (!(other instanceof ExtendedPoint))\n throw new TypeError('ExtendedPoint expected');\n}\nfunction assertRstPoint(other) {\n if (!(other instanceof RistrettoPoint))\n throw new TypeError('RistrettoPoint expected');\n}\nfunction legacyRist() {\n throw new Error('Legacy method: switch to RistrettoPoint');\n}\nclass RistrettoPoint {\n constructor(ep) {\n this.ep = ep;\n }\n static calcElligatorRistrettoMap(r0) {\n const { d } = CURVE;\n const r = mod(SQRT_M1 * r0 * r0);\n const Ns = mod((r + _1n) * ONE_MINUS_D_SQ);\n let c = BigInt(-1);\n const D = mod((c - d * r) * mod(r + d));\n let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D);\n let s_ = mod(s * r0);\n if (!edIsNegative(s_))\n s_ = mod(-s_);\n if (!Ns_D_is_sq)\n s = s_;\n if (!Ns_D_is_sq)\n c = r;\n const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D);\n const s2 = s * s;\n const W0 = mod((s + s) * D);\n const W1 = mod(Nt * SQRT_AD_MINUS_ONE);\n const W2 = mod(_1n - s2);\n const W3 = mod(_1n + s2);\n return new ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n }\n static hashToCurve(hex) {\n hex = ensureBytes(hex, 64);\n const r1 = bytes255ToNumberLE(hex.slice(0, 32));\n const R1 = this.calcElligatorRistrettoMap(r1);\n const r2 = bytes255ToNumberLE(hex.slice(32, 64));\n const R2 = this.calcElligatorRistrettoMap(r2);\n return new RistrettoPoint(R1.add(R2));\n }\n static fromHex(hex) {\n hex = ensureBytes(hex, 32);\n const { a, d } = CURVE;\n const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';\n const s = bytes255ToNumberLE(hex);\n if (!equalBytes(numberTo32BytesLE(s), hex) || edIsNegative(s))\n throw new Error(emsg);\n const s2 = mod(s * s);\n const u1 = mod(_1n + a * s2);\n const u2 = mod(_1n - a * s2);\n const u1_2 = mod(u1 * u1);\n const u2_2 = mod(u2 * u2);\n const v = mod(a * d * u1_2 - u2_2);\n const { isValid, value: I } = invertSqrt(mod(v * u2_2));\n const Dx = mod(I * u2);\n const Dy = mod(I * Dx * v);\n let x = mod((s + s) * Dx);\n if (edIsNegative(x))\n x = mod(-x);\n const y = mod(u1 * Dy);\n const t = mod(x * y);\n if (!isValid || edIsNegative(t) || y === _0n)\n throw new Error(emsg);\n return new RistrettoPoint(new ExtendedPoint(x, y, _1n, t));\n }\n toRawBytes() {\n let { x, y, z, t } = this.ep;\n const u1 = mod(mod(z + y) * mod(z - y));\n const u2 = mod(x * y);\n const u2sq = mod(u2 * u2);\n const { value: invsqrt } = invertSqrt(mod(u1 * u2sq));\n const D1 = mod(invsqrt * u1);\n const D2 = mod(invsqrt * u2);\n const zInv = mod(D1 * D2 * t);\n let D;\n if (edIsNegative(t * zInv)) {\n let _x = mod(y * SQRT_M1);\n let _y = mod(x * SQRT_M1);\n x = _x;\n y = _y;\n D = mod(D1 * INVSQRT_A_MINUS_D);\n }\n else {\n D = D2;\n }\n if (edIsNegative(x * zInv))\n y = mod(-y);\n let s = mod((z - y) * D);\n if (edIsNegative(s))\n s = mod(-s);\n return numberTo32BytesLE(s);\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n toString() {\n return this.toHex();\n }\n equals(other) {\n assertRstPoint(other);\n const a = this.ep;\n const b = other.ep;\n const one = mod(a.x * b.y) === mod(a.y * b.x);\n const two = mod(a.y * b.y) === mod(a.x * b.x);\n return one || two;\n }\n add(other) {\n assertRstPoint(other);\n return new RistrettoPoint(this.ep.add(other.ep));\n }\n subtract(other) {\n assertRstPoint(other);\n return new RistrettoPoint(this.ep.subtract(other.ep));\n }\n multiply(scalar) {\n return new RistrettoPoint(this.ep.multiply(scalar));\n }\n multiplyUnsafe(scalar) {\n return new RistrettoPoint(this.ep.multiplyUnsafe(scalar));\n }\n}\nRistrettoPoint.BASE = new RistrettoPoint(ExtendedPoint.BASE);\nRistrettoPoint.ZERO = new RistrettoPoint(ExtendedPoint.ZERO);\nconst pointPrecomputes = new WeakMap();\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromHex(hex, strict = true) {\n const { d, P } = CURVE;\n hex = ensureBytes(hex, 32);\n const normed = hex.slice();\n normed[31] = hex[31] & ~0x80;\n const y = bytesToNumberLE(normed);\n if (strict && y >= P)\n throw new Error('Expected 0 < hex < P');\n if (!strict && y >= POW_2_256)\n throw new Error('Expected 0 < hex < 2**256');\n const y2 = mod(y * y);\n const u = mod(y2 - _1n);\n const v = mod(d * y2 + _1n);\n let { isValid, value: x } = uvRatio(u, v);\n if (!isValid)\n throw new Error('Point.fromHex: invalid y coordinate');\n const isXOdd = (x & _1n) === _1n;\n const isLastByteOdd = (hex[31] & 0x80) !== 0;\n if (isLastByteOdd !== isXOdd) {\n x = mod(-x);\n }\n return new Point(x, y);\n }\n static async fromPrivateKey(privateKey) {\n return (await getExtendedPublicKey(privateKey)).point;\n }\n toRawBytes() {\n const bytes = numberTo32BytesLE(this.y);\n bytes[31] |= this.x & _1n ? 0x80 : 0;\n return bytes;\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n toX25519() {\n const { y } = this;\n const u = mod((_1n + y) * invert(_1n - y));\n return numberTo32BytesLE(u);\n }\n isTorsionFree() {\n return ExtendedPoint.fromAffine(this).isTorsionFree();\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(mod(-this.x), this.y);\n }\n add(other) {\n return ExtendedPoint.fromAffine(this).add(ExtendedPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return ExtendedPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _1n);\nclass Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex, 64);\n const r = Point.fromHex(bytes.slice(0, 32), false);\n const s = bytesToNumberLE(bytes.slice(32, 64));\n return new Signature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!(r instanceof Point))\n throw new Error('Expected Point instance');\n normalizeScalar(s, CURVE.l, false);\n return this;\n }\n toRawBytes() {\n const u8 = new Uint8Array(64);\n u8.set(this.r.toRawBytes());\n u8.set(numberTo32BytesLE(this.s), 32);\n return u8;\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n}\nexport { ExtendedPoint, Point, RistrettoPoint, Signature };\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\nfunction abytes(item) {\n if (!isBytes(item))\n throw new Error('Uint8Array expected');\n}\nfunction concatBytes(...arrays) {\n arrays.every(abytes);\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nconst hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\nexport function bytesToHex(bytes) {\n abytes(bytes);\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0;\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10);\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10);\n return;\n}\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2;\n }\n return array;\n}\nfunction numberTo32BytesBE(num) {\n const length = 32;\n const hex = num.toString(16).padStart(length * 2, '0');\n return hexToBytes(hex);\n}\nfunction numberTo32BytesLE(num) {\n return numberTo32BytesBE(num).reverse();\n}\nfunction edIsNegative(num) {\n return (mod(num) & _1n) === _1n;\n}\nfunction bytesToNumberLE(uint8a) {\n abytes(uint8a);\n return BigInt('0x' + bytesToHex(Uint8Array.from(uint8a).reverse()));\n}\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nfunction bytes255ToNumberLE(bytes) {\n return mod(bytesToNumberLE(bytes) & MAX_255B);\n}\nfunction mod(a, b = CURVE.P) {\n const res = a % b;\n return res >= _0n ? res : b + res;\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const tmp = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n tmp[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n tmp[i] = mod(acc * tmp[i], p);\n return mod(acc * num, p);\n }, inverted);\n return tmp;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction pow_2_252_3(x) {\n const { P } = CURVE;\n const _5n = BigInt(5);\n const _10n = BigInt(10);\n const _20n = BigInt(20);\n const _40n = BigInt(40);\n const _80n = BigInt(80);\n const x2 = (x * x) % P;\n const b2 = (x2 * x) % P;\n const b4 = (pow2(b2, _2n) * b2) % P;\n const b5 = (pow2(b4, _1n) * x) % P;\n const b10 = (pow2(b5, _5n) * b5) % P;\n const b20 = (pow2(b10, _10n) * b10) % P;\n const b40 = (pow2(b20, _20n) * b20) % P;\n const b80 = (pow2(b40, _40n) * b40) % P;\n const b160 = (pow2(b80, _80n) * b80) % P;\n const b240 = (pow2(b160, _80n) * b80) % P;\n const b250 = (pow2(b240, _10n) * b10) % P;\n const pow_p_5_8 = (pow2(b250, _2n) * x) % P;\n return { pow_p_5_8, b2 };\n}\nfunction uvRatio(u, v) {\n const v3 = mod(v * v * v);\n const v7 = mod(v3 * v3 * v);\n const pow = pow_2_252_3(u * v7).pow_p_5_8;\n let x = mod(u * v3 * pow);\n const vx2 = mod(v * x * x);\n const root1 = x;\n const root2 = mod(x * SQRT_M1);\n const useRoot1 = vx2 === u;\n const useRoot2 = vx2 === mod(-u);\n const noRoot = vx2 === mod(-u * SQRT_M1);\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2;\n if (edIsNegative(x))\n x = mod(-x);\n return { isValid: useRoot1 || useRoot2, value: x };\n}\nfunction invertSqrt(number) {\n return uvRatio(_1n, number);\n}\nfunction modlLE(hash) {\n return mod(bytesToNumberLE(hash), CURVE.l);\n}\nfunction equalBytes(b1, b2) {\n if (b1.length !== b2.length) {\n return false;\n }\n for (let i = 0; i < b1.length; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction ensureBytes(hex, expectedLength) {\n const bytes = isBytes(hex) ? Uint8Array.from(hex) : hexToBytes(hex);\n if (typeof expectedLength === 'number' && bytes.length !== expectedLength)\n throw new Error(`Expected ${expectedLength} bytes`);\n return bytes;\n}\nfunction normalizeScalar(num, max, strict = true) {\n if (!max)\n throw new TypeError('Specify max value');\n if (typeof num === 'number' && Number.isSafeInteger(num))\n num = BigInt(num);\n if (typeof num === 'bigint' && num < max) {\n if (strict) {\n if (_0n < num)\n return num;\n }\n else {\n if (_0n <= num)\n return num;\n }\n }\n throw new TypeError('Expected valid scalar: 0 < scalar < max');\n}\nfunction adjustBytes25519(bytes) {\n bytes[0] &= 248;\n bytes[31] &= 127;\n bytes[31] |= 64;\n return bytes;\n}\nfunction decodeScalar25519(n) {\n return bytesToNumberLE(adjustBytes25519(ensureBytes(n, 32)));\n}\nfunction checkPrivateKey(key) {\n key =\n typeof key === 'bigint' || typeof key === 'number'\n ? numberTo32BytesBE(normalizeScalar(key, POW_2_256))\n : ensureBytes(key);\n if (key.length !== 32)\n throw new Error(`Expected 32 bytes`);\n return key;\n}\nfunction getKeyFromHash(hashed) {\n const head = adjustBytes25519(hashed.slice(0, 32));\n const prefix = hashed.slice(32, 64);\n const scalar = modlLE(head);\n const point = Point.BASE.multiply(scalar);\n const pointBytes = point.toRawBytes();\n return { head, prefix, scalar, point, pointBytes };\n}\nlet _sha512Sync;\nfunction sha512s(...m) {\n if (typeof _sha512Sync !== 'function')\n throw new Error('utils.sha512Sync must be set to use sync methods');\n return _sha512Sync(...m);\n}\nasync function getExtendedPublicKey(key) {\n return getKeyFromHash(await utils.sha512(checkPrivateKey(key)));\n}\nfunction getExtendedPublicKeySync(key) {\n return getKeyFromHash(sha512s(checkPrivateKey(key)));\n}\nexport async function getPublicKey(privateKey) {\n return (await getExtendedPublicKey(privateKey)).pointBytes;\n}\nfunction getPublicKeySync(privateKey) {\n return getExtendedPublicKeySync(privateKey).pointBytes;\n}\nexport async function sign(message, privateKey) {\n message = ensureBytes(message);\n const { prefix, scalar, pointBytes } = await getExtendedPublicKey(privateKey);\n const r = modlLE(await utils.sha512(prefix, message));\n const R = Point.BASE.multiply(r);\n const k = modlLE(await utils.sha512(R.toRawBytes(), pointBytes, message));\n const s = mod(r + k * scalar, CURVE.l);\n return new Signature(R, s).toRawBytes();\n}\nfunction signSync(message, privateKey) {\n message = ensureBytes(message);\n const { prefix, scalar, pointBytes } = getExtendedPublicKeySync(privateKey);\n const r = modlLE(sha512s(prefix, message));\n const R = Point.BASE.multiply(r);\n const k = modlLE(sha512s(R.toRawBytes(), pointBytes, message));\n const s = mod(r + k * scalar, CURVE.l);\n return new Signature(R, s).toRawBytes();\n}\nfunction prepareVerification(sig, message, publicKey) {\n message = ensureBytes(message);\n if (!(publicKey instanceof Point))\n publicKey = Point.fromHex(publicKey, false);\n const { r, s } = sig instanceof Signature ? sig.assertValidity() : Signature.fromHex(sig);\n const SB = ExtendedPoint.BASE.multiplyUnsafe(s);\n return { r, s, SB, pub: publicKey, msg: message };\n}\nfunction finishVerification(publicKey, r, SB, hashed) {\n const k = modlLE(hashed);\n const kA = ExtendedPoint.fromAffine(publicKey).multiplyUnsafe(k);\n const RkA = ExtendedPoint.fromAffine(r).add(kA);\n return RkA.subtract(SB).multiplyUnsafe(CURVE.h).equals(ExtendedPoint.ZERO);\n}\nexport async function verify(sig, message, publicKey) {\n const { r, SB, msg, pub } = prepareVerification(sig, message, publicKey);\n const hashed = await utils.sha512(r.toRawBytes(), pub.toRawBytes(), msg);\n return finishVerification(pub, r, SB, hashed);\n}\nfunction verifySync(sig, message, publicKey) {\n const { r, SB, msg, pub } = prepareVerification(sig, message, publicKey);\n const hashed = sha512s(r.toRawBytes(), pub.toRawBytes(), msg);\n return finishVerification(pub, r, SB, hashed);\n}\nexport const sync = {\n getExtendedPublicKey: getExtendedPublicKeySync,\n getPublicKey: getPublicKeySync,\n sign: signSync,\n verify: verifySync,\n};\nexport async function getSharedSecret(privateKey, publicKey) {\n const { head } = await getExtendedPublicKey(privateKey);\n const u = Point.fromHex(publicKey).toX25519();\n return curve25519.scalarMult(head, u);\n}\nPoint.BASE._setWindowSize(8);\nfunction cswap(swap, x_2, x_3) {\n const dummy = mod(swap * (x_2 - x_3));\n x_2 = mod(x_2 - dummy);\n x_3 = mod(x_3 + dummy);\n return [x_2, x_3];\n}\nfunction montgomeryLadder(pointU, scalar) {\n const { P } = CURVE;\n const u = normalizeScalar(pointU, P);\n const k = normalizeScalar(scalar, P);\n const a24 = BigInt(121665);\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n let sw;\n for (let t = BigInt(255 - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n swap = k_t;\n const A = x_2 + z_2;\n const AA = mod(A * A);\n const B = x_2 - z_2;\n const BB = mod(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = mod(D * A);\n const CB = mod(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = mod(dacb * dacb);\n z_3 = mod(x_1 * mod(da_cb * da_cb));\n x_2 = mod(AA * BB);\n z_2 = mod(E * (AA + mod(a24 * E)));\n }\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n const { pow_p_5_8, b2 } = pow_2_252_3(z_2);\n const xp2 = mod(pow2(pow_p_5_8, BigInt(3)) * b2);\n return mod(x_2 * xp2);\n}\nfunction encodeUCoordinate(u) {\n return numberTo32BytesLE(mod(u, CURVE.P));\n}\nfunction decodeUCoordinate(uEnc) {\n const u = ensureBytes(uEnc, 32);\n u[31] &= 127;\n return bytesToNumberLE(u);\n}\nexport const curve25519 = {\n BASE_POINT_U: '0900000000000000000000000000000000000000000000000000000000000000',\n scalarMult(privateKey, publicKey) {\n const u = decodeUCoordinate(publicKey);\n const p = decodeScalar25519(privateKey);\n const pu = montgomeryLadder(u, p);\n if (pu === _0n)\n throw new Error('Invalid private or public key received');\n return encodeUCoordinate(pu);\n },\n scalarMultBase(privateKey) {\n return curve25519.scalarMult(privateKey, curve25519.BASE_POINT_U);\n },\n};\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n bytesToHex,\n hexToBytes,\n concatBytes,\n getExtendedPublicKey,\n mod,\n invert,\n TORSION_SUBGROUP: [\n '0100000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n '0000000000000000000000000000000000000000000000000000000000000080',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n ],\n hashToPrivateScalar: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n return mod(bytesToNumberLE(hash), CURVE.l - _1n) + _1n;\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return new Uint8Array(randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.randomBytes(32);\n },\n sha512: async (...messages) => {\n const message = concatBytes(...messages);\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-512', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n return Uint8Array.from(crypto.node.createHash('sha512').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha512 function\");\n }\n },\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point.equals(Point.BASE) ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_2n);\n return cached;\n },\n sha512Sync: undefined,\n};\nObject.defineProperties(utils, {\n sha512Sync: {\n configurable: false,\n get() {\n return _sha512Sync;\n },\n set(val) {\n if (!_sha512Sync)\n _sha512Sync = val;\n },\n },\n});\n", "/**\r\n * Unified Signer Helpers (Functional)\r\n * Provides consistent interface for all signer types with caching\r\n */\r\n\r\nimport { getDevicePublicKey, getDevicePrivateKey, findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage, DeviceKeyPair } from '../utils/deviceKeyManager';\r\nimport { getDeviceEncryptedSecret } from '../wallet';\r\nimport type { WalletControllerGetDeviceEncryptedSecretResult } from '../wallet';\r\nimport { hkdf } from '@noble/hashes/hkdf';\r\nimport { sha256 } from '@noble/hashes/sha256';\r\nimport { getPublicKey, sign as ed25519Sign } from '@noble/ed25519';\r\n\r\nexport interface SignerInfo {\r\n signerId: string;\r\n walletId: string;\r\n type: 'email' | 'phone' | 'external' | 'apiKey' | 'passkey';\r\n email?: string;\r\n phone?: string;\r\n publicKey?: string;\r\n isActive: boolean;\r\n}\r\n\r\nexport interface Keypair {\r\n publicKey: Uint8Array;\r\n secretKey: Uint8Array;\r\n}\r\n\r\nexport interface CachedKeypair {\r\n keypair: Keypair;\r\n derivedAt: number;\r\n expiresAt: number;\r\n}\r\n\r\n// Signer cache (functional)\r\nconst signerCache = new Map<string, CachedKeypair>();\r\n\r\n/**\r\n * Configuration for cache behavior\r\n */\r\nexport interface CacheConfig {\r\n enabled?: boolean;\r\n ttl?: number; // Time to live in milliseconds (default: 1 hour)\r\n}\r\n\r\nconst DEFAULT_CACHE_TTL = 60 * 60 * 1000; // 1 hour\r\n\r\n/**\r\n * Derive keypair for any signer type (unified logic with caching)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param signerType - Type of signer\r\n * @param options - Configuration options\r\n */\r\nexport async function deriveSignerKeypair(\r\n walletId: string,\r\n signerId: string,\r\n signerType: string,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n devicePublicKey?: string; // Specify which device key to use\r\n }\r\n): Promise<Keypair> {\r\n const cacheKey = `${walletId}:${signerId}`;\r\n const cacheEnabled = options?.cache?.enabled !== false;\r\n \r\n // Check cache first\r\n if (cacheEnabled) {\r\n const cached = signerCache.get(cacheKey);\r\n if (cached && cached.expiresAt > Date.now()) {\r\n return cached.keypair;\r\n }\r\n }\r\n \r\n // Derive based on type\r\n let keypair: Keypair;\r\n \r\n switch (signerType.toLowerCase()) {\r\n case 'email':\r\n case 'phone':\r\n keypair = await deriveEmailPhoneKeypair(\r\n walletId,\r\n signerId,\r\n options?.deviceKeyManager,\r\n options?.devicePublicKey\r\n );\r\n break;\r\n case 'external':\r\n keypair = await deriveExternalKeypair(walletId, signerId);\r\n break;\r\n case 'apikey':\r\n case 'api_key':\r\n keypair = await deriveApiKeyKeypair(walletId, signerId);\r\n break;\r\n case 'passkey':\r\n keypair = await derivePasskeyKeypair(walletId, signerId);\r\n break;\r\n default:\r\n throw new Error(`Unsupported signer type: ${signerType}`);\r\n }\r\n \r\n // Cache result\r\n if (cacheEnabled) {\r\n const ttl = options?.cache?.ttl || DEFAULT_CACHE_TTL;\r\n signerCache.set(cacheKey, {\r\n keypair,\r\n derivedAt: Date.now(),\r\n expiresAt: Date.now() + ttl\r\n });\r\n }\r\n \r\n return keypair;\r\n}\r\n\r\n/**\r\n * Sign message with signer (unified interface)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param signerType - Type of signer\r\n * @param message - Message to sign\r\n * @param options - Configuration options\r\n */\r\nexport async function signWithSigner(\r\n walletId: string,\r\n signerId: string,\r\n signerType: string,\r\n message: Uint8Array,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n }\r\n): Promise<Uint8Array> {\r\n const keypair = await deriveSignerKeypair(\r\n walletId,\r\n signerId,\r\n signerType,\r\n options\r\n );\r\n \r\n return signMessage(keypair, message);\r\n}\r\n\r\n/**\r\n * Signer response from API (can have various formats)\r\n */\r\nexport interface SignerResponse {\r\n id?: string;\r\n signerId?: string;\r\n walletId?: string;\r\n wallet?: { id: string };\r\n type?: SignerInfo['type'];\r\n signerType?: SignerInfo['type'];\r\n email?: string;\r\n phone?: string;\r\n publicKey?: string;\r\n pubkey?: string;\r\n isActive?: boolean;\r\n active?: boolean;\r\n walletType?: string;\r\n wallet_type?: string;\r\n apiKey?: string;\r\n api_key?: string;\r\n credential?: unknown;\r\n passkey?: unknown;\r\n deviceIdentities?: Array<{\r\n deviceId?: string;\r\n device_id?: string;\r\n devicePublicKey?: string;\r\n device_public_key?: string;\r\n lastUsedAt?: string | null;\r\n last_used_at?: string | null;\r\n createdAt?: string;\r\n created_at?: string;\r\n }>;\r\n}\r\n\r\n/**\r\n * Parse API response consistently\r\n * @param response - API response\r\n */\r\nexport function parseSignerResponse(response: SignerResponse): SignerInfo {\r\n return {\r\n signerId: response.id || response.signerId || '',\r\n walletId: response.walletId || response.wallet?.id || '',\r\n type: response.type || response.signerType || inferSignerType(response),\r\n email: response.email,\r\n phone: response.phone,\r\n publicKey: response.publicKey || response.pubkey,\r\n isActive: response.isActive ?? response.active ?? true\r\n };\r\n}\r\n\r\n/**\r\n * Clear signer cache\r\n * @param walletId - Optional wallet ID to clear\r\n * @param signerId - Optional signer ID to clear\r\n */\r\nexport function clearSignerCache(walletId?: string, signerId?: string): void {\r\n if (walletId && signerId) {\r\n signerCache.delete(`${walletId}:${signerId}`);\r\n } else if (walletId) {\r\n // Clear all for wallet\r\n for (const key of signerCache.keys()) {\r\n if (key.startsWith(`${walletId}:`)) {\r\n signerCache.delete(key);\r\n }\r\n }\r\n } else {\r\n signerCache.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Get cache statistics\r\n */\r\nexport function getCacheStats(): {\r\n size: number;\r\n entries: Array<{ key: string; expiresIn: number }>;\r\n} {\r\n const now = Date.now();\r\n const entries = Array.from(signerCache.entries()).map(([key, value]) => ({\r\n key,\r\n expiresIn: Math.max(0, value.expiresAt - now)\r\n }));\r\n \r\n return {\r\n size: signerCache.size,\r\n entries\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Internal Helper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Derive keypair for email/phone signers\r\n * Supports automatic device key resolution when devicePublicKey is provided\r\n */\r\nasync function deriveEmailPhoneKeypair(\r\n walletId: string,\r\n signerId: string,\r\n storage?: DeviceKeyStorage,\r\n specifiedDevicePublicKey?: string\r\n): Promise<Keypair> {\r\n // 1. Get device key pair\r\n let devicePublicKey: string;\r\n let devicePrivateKey: DeviceKeyPair['privateKey'];\r\n\r\n if (specifiedDevicePublicKey && storage) {\r\n // Automatic resolution: Find device key by public key\r\n // This searches both cache and storage\r\n const deviceKeyPair = await findDeviceKeyByPublicKey(specifiedDevicePublicKey, storage);\r\n if (!deviceKeyPair) {\r\n throw new Error(\r\n `Device key with public key ${specifiedDevicePublicKey.substring(0, 20)}... not found in storage or cache. ` +\r\n `Please ensure the device key is stored with the correct public key.`\r\n );\r\n }\r\n devicePublicKey = deviceKeyPair.publicKey;\r\n devicePrivateKey = deviceKeyPair.privateKey;\r\n \r\n // Update metadata if available (for better searchability)\r\n if (deviceKeyPair.deviceId || deviceKeyPair.signerId || deviceKeyPair.walletId) {\r\n // Metadata already set, no need to update\r\n } else if (storage) {\r\n // Optionally update metadata for future searches\r\n // This is a no-op if key already has metadata\r\n }\r\n } else {\r\n // Use default device key (with automatic resolution support)\r\n devicePublicKey = await getDevicePublicKey(undefined, storage);\r\n devicePrivateKey = await getDevicePrivateKey(undefined, storage);\r\n }\r\n \r\n // 2. Get encrypted secret from API\r\n const response = await getDeviceEncryptedSecret(walletId, signerId, {\r\n devicePublicKey\r\n });\r\n \r\n // Extract encrypted data from response\r\n // API returns void, but we need to handle the actual response structure\r\n const encryptedData = extractEncryptedData(response as unknown as EncryptedSecretResponse | WalletControllerGetDeviceEncryptedSecretResult);\r\n \r\n // 3. Validate device private key\r\n if (!devicePrivateKey) {\r\n throw new Error(\r\n `Device private key is missing. ` +\r\n `This may happen if the device key was not properly stored or loaded. ` +\r\n `Please ensure the device key exists in storage for devicePublicKey: ${devicePublicKey.substring(0, 20)}...`\r\n );\r\n }\r\n \r\n // 4. Decrypt using ECDH\r\n const masterSecret = await decryptSecret(\r\n encryptedData,\r\n devicePrivateKey,\r\n devicePublicKey\r\n );\r\n \r\n // 5. Derive Solana keypair from master secret\r\n return await deriveSolanaKeypair(masterSecret);\r\n}\r\n\r\n/**\r\n * Derive keypair for external wallet signers\r\n */\r\nasync function deriveExternalKeypair(\r\n walletId: string,\r\n signerId: string\r\n): Promise<Keypair> {\r\n // External wallets don't derive - they use wallet adapter for signing\r\n // This returns a placeholder keypair - actual signing is delegated to wallet adapter\r\n throw new Error(\r\n 'External wallet signers require wallet adapter for signing. ' +\r\n 'Use getWalletAdapter() or WalletAdapterManager to connect and sign with external wallets.'\r\n );\r\n}\r\n\r\n/**\r\n * Derive keypair for API key signers (custodial)\r\n */\r\nasync function deriveApiKeyKeypair(\r\n walletId: string,\r\n signerId: string\r\n): Promise<Keypair> {\r\n // API key signers are custodial - signing happens server-side\r\n throw new Error('API key signers are custodial - use server-side signing');\r\n}\r\n\r\n/**\r\n * Derive keypair for passkey signers\r\n */\r\nasync function derivePasskeyKeypair(\r\n walletId: string,\r\n signerId: string\r\n): Promise<Keypair> {\r\n // Passkeys don't expose private keys - use authenticateWithPasskey() for signing\r\n throw new Error(\r\n 'Passkey signers require WebAuthn API for signing. ' +\r\n 'Use authenticateWithPasskey() from passkeyHelpers instead of deriveSignerKeypair().'\r\n );\r\n}\r\n\r\n/**\r\n * API response structure for encrypted secret\r\n */\r\ninterface EncryptedSecretResponse {\r\n data?: {\r\n encryptedSecret?: string;\r\n encrypted_secret?: string;\r\n };\r\n encryptedSecret?: string;\r\n encrypted_secret?: string;\r\n}\r\n\r\n/**\r\n * Extract encrypted data from API response\r\n * Handles actual API response format: { success: true, data: { encryptedSecret: \"...\" } }\r\n * The encryptedSecret is a single base64 string containing all components concatenated:\r\n * - First 65 bytes: ephemeral public key (uncompressed)\r\n * - Next 16 bytes: IV\r\n * - Next 16 bytes: auth tag\r\n * - Rest: encrypted payload\r\n */\r\nfunction extractEncryptedData(response: EncryptedSecretResponse | WalletControllerGetDeviceEncryptedSecretResult): {\r\n encryptedSecret: string; // Single base64 string with all components\r\n} {\r\n // Handle API response format: { success: true, data: { encryptedSecret: \"...\" } }\r\n const responseData = response as unknown;\r\n const data = (typeof responseData === 'object' && responseData !== null && 'data' in responseData \r\n ? (responseData as { data?: EncryptedSecretResponse }).data \r\n : responseData) || responseData;\r\n \r\n // Get encryptedSecret (required)\r\n const dataObj = data as EncryptedSecretResponse;\r\n const encryptedSecret = dataObj.encryptedSecret || dataObj.encrypted_secret || \r\n ((dataObj as { data?: { encryptedSecret?: string; encrypted_secret?: string } }).data?.encryptedSecret) ||\r\n ((dataObj as { data?: { encryptedSecret?: string; encrypted_secret?: string } }).data?.encrypted_secret);\r\n \r\n if (!encryptedSecret) {\r\n const dataKeys = typeof data === 'object' && data !== null ? Object.keys(data) : [];\r\n throw new Error(\r\n `Missing encryptedSecret in API response. ` +\r\n `Response structure: ${JSON.stringify(dataKeys)}. ` +\r\n `Full response: ${JSON.stringify(response).substring(0, 200)}...`\r\n );\r\n }\r\n \r\n // Validate minimum length (65 + 16 + 16 = 97 bytes minimum)\r\n try {\r\n const decoded = atob(encryptedSecret);\r\n if (decoded.length < 97) {\r\n throw new Error(\r\n `Encrypted secret is too short: expected at least 97 bytes, got ${decoded.length} bytes`\r\n );\r\n }\r\n } catch (error) {\r\n throw new Error(\r\n `Invalid encryptedSecret format: ${error}. ` +\r\n `Expected base64-encoded binary data containing: ephemeral key (65 bytes) + IV (16 bytes) + auth tag (16 bytes) + encrypted payload`\r\n );\r\n }\r\n \r\n // Return the single encryptedSecret string - decryption functions will parse it\r\n return {\r\n encryptedSecret\r\n };\r\n}\r\n\r\n/**\r\n * Decrypt secret using ECDH\r\n * encryptedSecret is a single base64 string containing all components concatenated\r\n */\r\nasync function decryptSecret(\r\n encryptedData: {\r\n encryptedSecret: string; // Single base64 string: ephemeral key (65) + IV (16) + tag (16) + encrypted payload\r\n },\r\n devicePrivateKey: DeviceKeyPair['privateKey'],\r\n devicePublicKey: string\r\n): Promise<Uint8Array> {\r\n // Browser environment with Web Crypto API\r\n if (typeof globalThis.crypto !== 'undefined' && globalThis.crypto.subtle) {\r\n return decryptSecretBrowser(encryptedData.encryptedSecret, devicePrivateKey);\r\n }\r\n \r\n // Node.js environment\r\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\r\n return decryptSecretNode(encryptedData.encryptedSecret, devicePrivateKey as string);\r\n }\r\n \r\n throw new Error('Unable to decrypt secret: unsupported environment');\r\n}\r\n\r\n/**\r\n * Decrypt secret in browser using Web Crypto API\r\n * encryptedSecret is a single base64 string containing all components concatenated:\r\n * - First 65 bytes: ephemeral public key (uncompressed)\r\n * - Next 16 bytes: IV\r\n * - Next 16 bytes: auth tag\r\n * - Rest: encrypted payload\r\n */\r\nasync function decryptSecretBrowser(\r\n encryptedSecret: string,\r\n devicePrivateKey: DeviceKeyPair['privateKey']\r\n): Promise<Uint8Array> {\r\n const crypto = globalThis.crypto;\r\n \r\n // Validate inputs\r\n if (!encryptedSecret || encryptedSecret.trim().length === 0) {\r\n throw new Error('Encrypted data is empty or missing');\r\n }\r\n \r\n if (!devicePrivateKey) {\r\n throw new Error('Device private key is undefined');\r\n }\r\n \r\n try {\r\n // Decode base64 encrypted data\r\n const encryptedBuffer = Uint8Array.from(atob(encryptedSecret), c => c.charCodeAt(0));\r\n \r\n // Validate minimum length: 65 (ephemeral key) + 16 (IV) + 16 (auth tag) = 97 bytes\r\n if (encryptedBuffer.length < 97) {\r\n throw new Error(\r\n `Encrypted data is too short: expected at least 97 bytes, got ${encryptedBuffer.length} bytes`\r\n );\r\n }\r\n \r\n // Extract components from encrypted buffer\r\n const ephemeralPublicKey = encryptedBuffer.slice(0, 65); // Uncompressed P-256 public key\r\n const iv = encryptedBuffer.slice(65, 81); // 16 bytes IV\r\n const authTag = encryptedBuffer.slice(81, 97); // 16 bytes auth tag\r\n const encrypted = encryptedBuffer.slice(97); // Rest is encrypted data\r\n \r\n if (encrypted.length === 0) {\r\n throw new Error('Encrypted payload is missing');\r\n }\r\n \r\n // Validate ephemeral public key format (should start with 0x04 for uncompressed)\r\n if (ephemeralPublicKey[0] !== 0x04) {\r\n throw new Error(\r\n 'Invalid ephemeral public key format: expected uncompressed format (starting with 0x04)'\r\n );\r\n }\r\n \r\n // Import device private key for ECDH\r\n // devicePrivateKey is already a CryptoKey (from storage adapter)\r\n // But handle case where it might be raw bytes or base64 string\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let deviceKey: any;\r\n if (devicePrivateKey && typeof devicePrivateKey === 'object' && 'type' in devicePrivateKey) {\r\n // Already a CryptoKey (from storage adapter)\r\n deviceKey = devicePrivateKey;\r\n } else {\r\n // Convert to Uint8Array if needed\r\n const privateKeyBytes = typeof devicePrivateKey === 'string'\r\n ? Uint8Array.from(atob(devicePrivateKey), c => c.charCodeAt(0))\r\n : new Uint8Array(devicePrivateKey);\r\n \r\n // Import as PKCS8 format\r\n deviceKey = await crypto.subtle.importKey(\r\n 'pkcs8',\r\n privateKeyBytes,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n false,\r\n ['deriveBits']\r\n );\r\n }\r\n \r\n // Import ephemeral public key (raw uncompressed format)\r\n const ephemeralKey = await crypto.subtle.importKey(\r\n 'raw',\r\n ephemeralPublicKey,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n false,\r\n []\r\n );\r\n \r\n // Derive shared secret using ECDH\r\n const sharedSecret = await crypto.subtle.deriveBits(\r\n {\r\n name: 'ECDH',\r\n public: ephemeralKey,\r\n },\r\n deviceKey,\r\n 256\r\n );\r\n \r\n // Derive encryption key using HKDF\r\n const encryptionKey = hkdf(\r\n sha256,\r\n new Uint8Array(sharedSecret),\r\n new TextEncoder().encode('device-encryption'),\r\n new TextEncoder().encode('master-secret'),\r\n 32\r\n );\r\n \r\n // Import encryption key for AES-GCM\r\n const key = await crypto.subtle.importKey(\r\n 'raw',\r\n encryptionKey,\r\n { name: 'AES-GCM' },\r\n false,\r\n ['decrypt']\r\n );\r\n \r\n // Combine encrypted data with auth tag for Web Crypto API\r\n const encryptedWithTag = new Uint8Array(encrypted.length + authTag.length);\r\n encryptedWithTag.set(encrypted, 0);\r\n encryptedWithTag.set(authTag, encrypted.length);\r\n \r\n // Decrypt using AES-GCM\r\n const decrypted = await crypto.subtle.decrypt(\r\n {\r\n name: 'AES-GCM',\r\n iv: iv,\r\n tagLength: 128, // 16 bytes = 128 bits\r\n },\r\n key,\r\n encryptedWithTag\r\n );\r\n \r\n return new Uint8Array(decrypted);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`Failed to decrypt master secret: ${error.message}`);\r\n }\r\n throw new Error(`Failed to decrypt master secret: ${String(error)}`);\r\n }\r\n}\r\n\r\n/**\r\n * Decrypt secret in Node.js\r\n * encryptedSecret is a single base64 string containing all components concatenated:\r\n * - First 65 bytes: ephemeral public key (uncompressed)\r\n * - Next 16 bytes: IV\r\n * - Next 16 bytes: auth tag\r\n * - Rest: encrypted payload\r\n */\r\nfunction decryptSecretNode(\r\n encryptedSecret: string,\r\n devicePrivateKeyBase64: string\r\n): Uint8Array {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const crypto = require('crypto');\r\n \r\n // Validate inputs\r\n if (!encryptedSecret || encryptedSecret.trim().length === 0) {\r\n throw new Error('Encrypted data is empty or missing');\r\n }\r\n \r\n // Convert devicePrivateKey to Buffer if it's a string\r\n const privateKeyBuffer = typeof devicePrivateKeyBase64 === 'string'\r\n ? Buffer.from(devicePrivateKeyBase64, 'base64')\r\n : devicePrivateKeyBase64;\r\n \r\n if (!privateKeyBuffer || privateKeyBuffer.length === 0) {\r\n throw new Error('Device private key is empty or missing');\r\n }\r\n \r\n try {\r\n // Decode base64 encrypted data\r\n const encryptedBuffer = Buffer.from(encryptedSecret, 'base64');\r\n \r\n // Validate minimum length: 65 (ephemeral key) + 16 (IV) + 16 (auth tag) = 97 bytes\r\n const MINIMUM_LENGTH = 97;\r\n if (encryptedBuffer.length < MINIMUM_LENGTH) {\r\n throw new Error(\r\n `Encrypted data is too short: expected at least ${MINIMUM_LENGTH} bytes, ` +\r\n `got ${encryptedBuffer.length} bytes. The encrypted secret may be corrupted.`\r\n );\r\n }\r\n \r\n // Extract components from encrypted buffer\r\n const ephemeralPublicKey = encryptedBuffer.subarray(0, 65); // Uncompressed P-256 public key\r\n const iv = encryptedBuffer.subarray(65, 81); // 16 bytes IV\r\n const authTag = encryptedBuffer.subarray(81, 97); // 16 bytes auth tag\r\n const encrypted = encryptedBuffer.subarray(97); // Rest is encrypted data\r\n \r\n // Validate we have encrypted data\r\n if (encrypted.length === 0) {\r\n throw new Error('Encrypted payload is missing. The encrypted secret appears incomplete.');\r\n }\r\n \r\n // Validate ephemeral public key format (should start with 0x04 for uncompressed)\r\n if (ephemeralPublicKey[0] !== 0x04 && ephemeralPublicKey.length === 65) {\r\n throw new Error(\r\n 'Invalid ephemeral public key format: expected uncompressed format (starting with 0x04)'\r\n );\r\n }\r\n \r\n // Create ECDH with device private key\r\n const ecdh = crypto.createECDH('prime256v1');\r\n ecdh.setPrivateKey(privateKeyBuffer);\r\n \r\n // Compute shared secret using ephemeral public key\r\n const sharedSecret = ecdh.computeSecret(ephemeralPublicKey);\r\n \r\n // Derive encryption key using HKDF\r\n const encryptionKey = hkdf(\r\n sha256,\r\n sharedSecret,\r\n Buffer.from('device-encryption'),\r\n Buffer.from('master-secret'),\r\n 32\r\n );\r\n \r\n // Decrypt using AES-256-GCM\r\n const decipher = crypto.createDecipheriv('aes-256-gcm', Buffer.from(encryptionKey), iv);\r\n decipher.setAuthTag(authTag);\r\n \r\n let decrypted = decipher.update(encrypted);\r\n decrypted = Buffer.concat([decrypted, decipher.final()]);\r\n \r\n return new Uint8Array(decrypted);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`Failed to decrypt master secret: ${error.message}`);\r\n }\r\n throw new Error(`Failed to decrypt master secret: ${String(error)}`);\r\n }\r\n}\r\n\r\n/**\r\n * Derive Solana keypair from master secret\r\n */\r\nasync function deriveSolanaKeypair(masterSecret: Uint8Array): Promise<Keypair> {\r\n // Use first 32 bytes as secret key\r\n const secretKey = masterSecret.slice(0, 32);\r\n \r\n // Derive public key from secret key using ed25519\r\n const publicKey = await deriveEd25519PublicKey(secretKey);\r\n \r\n return {\r\n publicKey,\r\n secretKey: new Uint8Array([...secretKey, ...publicKey]) // Solana format: 64 bytes\r\n };\r\n}\r\n\r\n/**\r\n * Derive Ed25519 public key from secret key\r\n * Uses @noble/ed25519 for pure JavaScript Ed25519 operations\r\n */\r\nasync function deriveEd25519PublicKey(secretKey: Uint8Array): Promise<Uint8Array> {\r\n if (secretKey.length !== 32) {\r\n throw new Error(`Invalid secret key length: expected 32 bytes, got ${secretKey.length}`);\r\n }\r\n \r\n // Derive public key from secret key using Ed25519\r\n // getPublicKey is synchronous but we make this async for consistency\r\n return getPublicKey(secretKey);\r\n}\r\n\r\n/**\r\n * Sign message with keypair using Ed25519\r\n * Uses @noble/ed25519 for pure JavaScript Ed25519 signing\r\n */\r\nasync function signMessage(keypair: Keypair, message: Uint8Array): Promise<Uint8Array> {\r\n // Extract the private key (first 32 bytes of secretKey)\r\n // Solana keypair format: secretKey is 64 bytes = privateKey (32) + publicKey (32)\r\n if (keypair.secretKey.length !== 64) {\r\n throw new Error(`Invalid keypair secretKey length: expected 64 bytes, got ${keypair.secretKey.length}`);\r\n }\r\n \r\n const privateKey = keypair.secretKey.slice(0, 32);\r\n \r\n // Sign the message using Ed25519\r\n return ed25519Sign(message, privateKey);\r\n}\r\n\r\n/**\r\n * Infer signer type from response structure\r\n */\r\nfunction inferSignerType(response: SignerResponse): SignerInfo['type'] {\r\n if (response.email) return 'email';\r\n if (response.phone) return 'phone';\r\n if (response.walletType || response.wallet_type) return 'external';\r\n if (response.apiKey || response.api_key) return 'apiKey';\r\n if (response.credential || response.passkey) return 'passkey';\r\n return 'external'; // Default\r\n}\r\n\r\n/**\r\n * Convert base64 to ArrayBuffer\r\n */\r\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\r\n if (typeof Buffer !== 'undefined') {\r\n return Buffer.from(base64, 'base64').buffer;\r\n }\r\n \r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\n/**\r\n * Convert base64 to PEM\r\n */\r\nfunction base64ToPem(base64: string): string {\r\n const formatted = base64.match(/.{1,64}/g)?.join('\\n') || base64;\r\n return `-----BEGIN PUBLIC KEY-----\\n${formatted}\\n-----END PUBLIC KEY-----`;\r\n}\r\n\r\n", "/**\r\n * SDK Error Classes\r\n * Provides clear, actionable error messages\r\n */\r\n\r\nexport interface SDKErrorDetails {\r\n [key: string]: any;\r\n helpUrl?: string;\r\n}\r\n\r\nexport class SDKError extends Error {\r\n public readonly code: string;\r\n public readonly details?: SDKErrorDetails;\r\n\r\n constructor(message: string, code: string, details?: SDKErrorDetails) {\r\n super(message);\r\n this.name = 'SDKError';\r\n this.code = code;\r\n this.details = details;\r\n\r\n // Maintains proper stack trace for where our error was thrown (only available on V8)\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, SDKError);\r\n }\r\n }\r\n\r\n toString(): string {\r\n let error = `${this.name} [${this.code}]: ${this.message}`;\r\n if (this.details?.helpUrl) {\r\n error += `\\nFor more information: ${this.details.helpUrl}`;\r\n }\r\n return error;\r\n }\r\n}\r\n\r\n/**\r\n * Device key mismatch error\r\n */\r\nexport class DeviceKeyMismatchError extends SDKError {\r\n constructor(\r\n expectedPublicKey: string,\r\n foundPublicKey: string | null,\r\n signerId: string,\r\n walletId: string\r\n ) {\r\n const message = foundPublicKey\r\n ? `Device key mismatch for signer ${signerId}. ` +\r\n `Expected device public key: ${expectedPublicKey.substring(0, 20)}..., ` +\r\n `Found in storage: ${foundPublicKey.substring(0, 20)}... ` +\r\n `Please ensure you're using the device key that was registered when creating the signer. ` +\r\n `If you have multiple devices, specify the devicePublicKey option.`\r\n : `Device key not found in storage for signer ${signerId}. ` +\r\n `Expected device public key: ${expectedPublicKey.substring(0, 20)}... ` +\r\n `Please ensure the device key is stored in localStorage/storage. ` +\r\n `You may need to re-create the signer if the device key was lost.`;\r\n\r\n super(message, 'DEVICE_KEY_MISMATCH', {\r\n expectedDevicePublicKey: expectedPublicKey,\r\n foundDevicePublicKey: foundPublicKey,\r\n signerId,\r\n walletId,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Device key not found error\r\n */\r\nexport class DeviceKeyNotFoundError extends SDKError {\r\n constructor(publicKey: string, signerId?: string) {\r\n const message = signerId\r\n ? `Device key with public key ${publicKey.substring(0, 20)}... not found in storage for signer ${signerId}. ` +\r\n `Please ensure the device key is stored in localStorage/storage.`\r\n : `Device key with public key ${publicKey.substring(0, 20)}... not found in storage. ` +\r\n `Please ensure the device key is stored in localStorage/storage.`;\r\n\r\n super(message, 'DEVICE_KEY_NOT_FOUND', {\r\n devicePublicKey: publicKey,\r\n signerId,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * No device identities found error\r\n */\r\nexport class NoDeviceIdentitiesError extends SDKError {\r\n constructor(signerId: string, walletId: string) {\r\n const message = `No device identities found for signer ${signerId} in wallet ${walletId}. ` +\r\n `This signer may not have been set up with device-based authentication. ` +\r\n `Please create a new email or phone signer with a device public key.`;\r\n\r\n super(message, 'NO_DEVICE_IDENTITIES', {\r\n signerId,\r\n walletId,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Multiple device identities found error\r\n */\r\nexport class MultipleDeviceIdentitiesError extends SDKError {\r\n constructor(\r\n signerId: string,\r\n walletId: string,\r\n deviceIdentities: Array<{ deviceId: string; devicePublicKey: string }>\r\n ) {\r\n const message = `Multiple device identities (${deviceIdentities.length}) found for signer ${signerId}. ` +\r\n `Please specify which device to use by providing the devicePublicKey option. ` +\r\n `Available device public keys: ${deviceIdentities.map(d => d.devicePublicKey.substring(0, 20) + '...').join(', ')}`;\r\n\r\n super(message, 'MULTIPLE_DEVICE_IDENTITIES', {\r\n signerId,\r\n walletId,\r\n deviceIdentities,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Signer validation error\r\n */\r\nexport class SignerValidationError extends SDKError {\r\n constructor(\r\n message: string,\r\n validationErrors: string[],\r\n signerId?: string\r\n ) {\r\n const fullMessage = `Signer validation failed: ${message}. Errors: ${validationErrors.join(', ')}`;\r\n\r\n super(fullMessage, 'SIGNER_VALIDATION_FAILED', {\r\n validationErrors,\r\n signerId,\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Signer not found error\r\n */\r\nexport class SignerNotFoundError extends SDKError {\r\n constructor(signerId: string, walletId: string) {\r\n const message = `Signer ${signerId} not found in wallet ${walletId}. ` +\r\n `Please verify the signer ID is correct.`;\r\n\r\n super(message, 'SIGNER_NOT_FOUND', {\r\n signerId,\r\n walletId,\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Signer inactive error\r\n */\r\nexport class SignerInactiveError extends SDKError {\r\n constructor(signerId: string, walletId: string) {\r\n const message = `Signer ${signerId} in wallet ${walletId} is inactive. ` +\r\n `Please activate the signer or create a new one.`;\r\n\r\n super(message, 'SIGNER_INACTIVE', {\r\n signerId,\r\n walletId,\r\n suggestion: 'Activate signer or create a new one',\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Unsupported signer type error\r\n */\r\nexport class UnsupportedSignerTypeError extends SDKError {\r\n constructor(signerType: string, supportedTypes: string[]) {\r\n const message = `Signer type '${signerType}' is not supported. ` +\r\n `Supported types: ${supportedTypes.join(', ')}`;\r\n\r\n super(message, 'UNSUPPORTED_SIGNER_TYPE', {\r\n signerType,\r\n supportedTypes,\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Device authorization error\r\n */\r\nexport class DeviceAuthorizationError extends SDKError {\r\n constructor(devicePublicKey: string, reason?: string) {\r\n const message = reason\r\n ? `Device ${devicePublicKey.substring(0, 20)}... is not authorized: ${reason}`\r\n : `Device ${devicePublicKey.substring(0, 20)}... is not authorized for this signer`;\r\n\r\n super(message, 'DEVICE_NOT_AUTHORIZED', {\r\n devicePublicKey,\r\n reason,\r\n suggestion: 'Authorize device or use an authorized device',\r\n helpUrl: 'https://docs.cilantro.com/device-auth'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Transaction signing error\r\n */\r\nexport class TransactionSigningError extends SDKError {\r\n constructor(reason: string, signerId?: string, details?: any) {\r\n const message = signerId\r\n ? `Failed to sign transaction with signer ${signerId}: ${reason}`\r\n : `Failed to sign transaction: ${reason}`;\r\n\r\n super(message, 'TRANSACTION_SIGNING_FAILED', {\r\n reason,\r\n signerId,\r\n ...details,\r\n helpUrl: 'https://docs.cilantro.com/signing'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * WebAuthn not supported error\r\n */\r\nexport class WebAuthnNotSupportedError extends SDKError {\r\n constructor() {\r\n const message = 'WebAuthn is not supported in this environment. ' +\r\n 'Please use a modern browser with WebAuthn support for passkey signers.';\r\n\r\n super(message, 'WEBAUTHN_NOT_SUPPORTED', {\r\n suggestion: 'Use a modern browser (Chrome, Firefox, Safari, Edge)',\r\n helpUrl: 'https://docs.cilantro.com/passkeys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Device compatibility error\r\n */\r\nexport class DeviceCompatibilityError extends SDKError {\r\n constructor(issues: string[]) {\r\n const message = `Device is not compatible with SDK requirements: ${issues.join(', ')}`;\r\n\r\n super(message, 'DEVICE_INCOMPATIBLE', {\r\n issues,\r\n helpUrl: 'https://docs.cilantro.com/compatibility'\r\n });\r\n }\r\n}\r\n\r\n", "/**\r\n * Device Key Helper Functions\r\n * Handles device key validation, resolution, and management for signers\r\n */\r\n\r\nimport { getSignerById, listSigners } from '../wallet';\r\nimport type { WalletControllerGetSignerByIdResult } from '../wallet';\r\nimport { findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage, DeviceKeyPair } from '../utils/deviceKeyManager';\r\nimport type { SignerResponse } from './signerHelpers';\r\nimport {\r\n DeviceKeyMismatchError,\r\n DeviceKeyNotFoundError,\r\n NoDeviceIdentitiesError,\r\n MultipleDeviceIdentitiesError\r\n} from '../errors';\r\n\r\nexport interface DeviceIdentity {\r\n deviceId: string;\r\n devicePublicKey: string;\r\n lastUsedAt?: string | null;\r\n createdAt?: string;\r\n}\r\n\r\nexport interface DeviceKeyValidationResult {\r\n isValid: boolean;\r\n storedDeviceKey?: string;\r\n apiDeviceKey: string;\r\n deviceId?: string;\r\n matchedDeviceIdentity?: DeviceIdentity;\r\n}\r\n\r\n/**\r\n * Get all device keys for a signer from the API\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @returns Array of device identities\r\n */\r\nexport async function getSignerDeviceKeys(\r\n walletId: string,\r\n signerId: string\r\n): Promise<DeviceIdentity[]> {\r\n const signer = await getSignerById(walletId, signerId);\r\n const signerData = signer as WalletControllerGetSignerByIdResult;\r\n const responseData = (signerData as { data?: SignerResponse }).data || signerData;\r\n const signerResponse = responseData as SignerResponse;\r\n \r\n const deviceIdentities = signerResponse.deviceIdentities || [];\r\n \r\n return deviceIdentities.map((di) => ({\r\n deviceId: di.deviceId || di.device_id || '',\r\n devicePublicKey: di.devicePublicKey || di.device_public_key || '',\r\n lastUsedAt: di.lastUsedAt || di.last_used_at,\r\n createdAt: di.createdAt || di.created_at\r\n }));\r\n}\r\n\r\n/**\r\n * Validates that a device key in storage matches one in the API\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param devicePublicKey - Device public key to validate\r\n * @param options - Configuration options\r\n * @returns Validation result\r\n */\r\nexport async function validateDeviceKey(\r\n walletId: string,\r\n signerId: string,\r\n devicePublicKey: string,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n }\r\n): Promise<DeviceKeyValidationResult> {\r\n // Get device identities from API\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // Find matching device identity in API\r\n const matchedIdentity = deviceIdentities.find(\r\n di => di.devicePublicKey === devicePublicKey\r\n );\r\n \r\n if (!matchedIdentity) {\r\n return {\r\n isValid: false,\r\n apiDeviceKey: deviceIdentities[0].devicePublicKey,\r\n storedDeviceKey: devicePublicKey\r\n };\r\n }\r\n \r\n // Check if device key exists in storage\r\n if (options?.deviceKeyManager) {\r\n const storedKey = await findDeviceKeyByPublicKey(\r\n devicePublicKey,\r\n options.deviceKeyManager\r\n );\r\n \r\n if (!storedKey) {\r\n return {\r\n isValid: false,\r\n apiDeviceKey: devicePublicKey,\r\n storedDeviceKey: undefined,\r\n deviceId: matchedIdentity.deviceId,\r\n matchedDeviceIdentity: matchedIdentity\r\n };\r\n }\r\n }\r\n \r\n return {\r\n isValid: true,\r\n apiDeviceKey: devicePublicKey,\r\n storedDeviceKey: devicePublicKey,\r\n deviceId: matchedIdentity.deviceId,\r\n matchedDeviceIdentity: matchedIdentity\r\n };\r\n}\r\n\r\n/**\r\n * Automatically resolves which device key to use for a signer\r\n * Tries to find a matching device key in storage from the signer's device identities\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param deviceKeyManager - Storage adapter\r\n * @returns Device key pair and device identity\r\n */\r\nexport async function resolveDeviceKey(\r\n walletId: string,\r\n signerId: string,\r\n deviceKeyManager: DeviceKeyStorage\r\n): Promise<{\r\n deviceKeyPair: DeviceKeyPair;\r\n deviceIdentity: DeviceIdentity;\r\n}> {\r\n // Get device identities from API\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // Try to find matching device key in storage\r\n for (const deviceIdentity of deviceIdentities) {\r\n const deviceKey = await findDeviceKeyByPublicKey(\r\n deviceIdentity.devicePublicKey,\r\n deviceKeyManager\r\n );\r\n \r\n if (deviceKey) {\r\n return {\r\n deviceKeyPair: deviceKey,\r\n deviceIdentity\r\n };\r\n }\r\n }\r\n \r\n // No match found\r\n throw new DeviceKeyNotFoundError(\r\n deviceIdentities[0].devicePublicKey,\r\n signerId\r\n );\r\n}\r\n\r\n/**\r\n * Find device key by public key with validation\r\n * @param devicePublicKey - Device public key\r\n * @param deviceKeyManager - Storage adapter\r\n * @param signerId - Optional signer ID for better error messages\r\n * @returns Device key pair\r\n * @throws DeviceKeyNotFoundError if not found\r\n */\r\nexport async function findAndValidateDeviceKey(\r\n devicePublicKey: string,\r\n deviceKeyManager: DeviceKeyStorage,\r\n signerId?: string\r\n): Promise<DeviceKeyPair> {\r\n const deviceKey = await findDeviceKeyByPublicKey(\r\n devicePublicKey,\r\n deviceKeyManager\r\n );\r\n \r\n if (!deviceKey) {\r\n throw new DeviceKeyNotFoundError(devicePublicKey, signerId);\r\n }\r\n \r\n return deviceKey;\r\n}\r\n\r\n/**\r\n * Get the best device identity to use (most recently used or first)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @returns Best device identity to use\r\n */\r\nexport async function getBestDeviceIdentity(\r\n walletId: string,\r\n signerId: string\r\n): Promise<DeviceIdentity> {\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // Sort by last used (most recent first), then by created date\r\n const sorted = deviceIdentities.sort((a, b) => {\r\n if (a.lastUsedAt && b.lastUsedAt) {\r\n return new Date(b.lastUsedAt).getTime() - new Date(a.lastUsedAt).getTime();\r\n }\r\n if (a.lastUsedAt) return -1;\r\n if (b.lastUsedAt) return 1;\r\n \r\n if (a.createdAt && b.createdAt) {\r\n return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();\r\n }\r\n return 0;\r\n });\r\n \r\n return sorted[0];\r\n}\r\n\r\n", "/**\r\n * Email Signer Helper Functions\r\n * Provides simplified API for email-based signers\r\n */\r\n\r\nimport { \r\n deriveSignerKeypair, \r\n signWithSigner, \r\n parseSignerResponse,\r\n clearSignerCache,\r\n type SignerInfo,\r\n type SignerResponse,\r\n type Keypair,\r\n type CacheConfig\r\n} from './signerHelpers';\r\nimport { getDevicePublicKey, findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { createEmailSigner, listSigners, getSignerById } from '../wallet';\r\nimport type { WalletControllerGetSignerByIdResult, WalletControllerListSignersResult } from '../wallet';\r\nimport { getSignerDeviceKeys, resolveDeviceKey, getBestDeviceIdentity, validateDeviceKey as validateDeviceKeyFn } from './deviceKeyHelpers';\r\nimport { DeviceKeyNotFoundError, DeviceKeyMismatchError } from '../errors';\r\n\r\nexport interface EmailSignerConfig {\r\n email: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n}\r\n\r\nexport interface EmailSignerOptions {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n devicePublicKey?: string; // Specify which device key to use\r\n deviceId?: string; // Alternative: specify by device ID\r\n validateDeviceKey?: boolean; // Validate device key matches API (default: true)\r\n}\r\n\r\n/**\r\n * Create email signer with automatic device key management\r\n * @param walletId - Wallet ID\r\n * @param config - Email signer configuration\r\n * @returns Created signer information\r\n */\r\nexport async function createEmailSignerHelper(\r\n walletId: string,\r\n config: EmailSignerConfig\r\n): Promise<SignerInfo> {\r\n // Generate or get device public key\r\n const devicePublicKey = await getDevicePublicKey(undefined, config.deviceKeyManager);\r\n \r\n // Create signer via API\r\n await createEmailSigner(walletId, {\r\n email: config.email,\r\n devicePublicKey\r\n });\r\n \r\n // Fetch created signer\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.email === config.email || \r\n (s.type === 'email' && s.email === config.email)\r\n );\r\n \r\n if (!signer) {\r\n throw new Error('Failed to create email signer');\r\n }\r\n \r\n return parseSignerResponse(signer);\r\n}\r\n\r\n/**\r\n * Get keypair for email signer (with caching and device key validation)\r\n * Automatically handles:\r\n * - Fetching signer from API\r\n * - Extracting devicePublicKey and deviceId from signer response\r\n * - Resolving device key from storage\r\n * - Validating device key matches API\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns Solana keypair\r\n */\r\nexport async function getEmailSignerKeypair(\r\n walletId: string,\r\n signerId: string,\r\n options?: EmailSignerOptions\r\n): Promise<Keypair> {\r\n const {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: providedDevicePublicKey,\r\n deviceId: providedDeviceId,\r\n validateDeviceKey = true\r\n } = options || {};\r\n\r\n let resolvedDevicePublicKey: string | undefined = providedDevicePublicKey;\r\n let resolvedDeviceId: string | undefined = providedDeviceId;\r\n\r\n // If deviceKeyManager is provided, handle automatic resolution\r\n if (deviceKeyManager) {\r\n // Step 1: Fetch signer from API to get device identities\r\n const signerResponse = await getSignerById(walletId, signerId);\r\n const signerData = signerResponse as WalletControllerGetSignerByIdResult;\r\n \r\n // Extract device identities from signer response\r\n const responseData = (signerData as { data?: SignerResponse }).data || signerData;\r\n const deviceIdentities = (responseData as SignerResponse).deviceIdentities || [];\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new Error(\r\n `No device identities found for signer ${signerId}. ` +\r\n `Please ensure the signer has been created with a device key.`\r\n );\r\n }\r\n\r\n // Step 2: Resolve devicePublicKey and deviceId\r\n if (providedDeviceId && !providedDevicePublicKey) {\r\n // Find device by deviceId\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.deviceId || di.device_id) === providedDeviceId\r\n );\r\n if (matchedDevice) {\r\n resolvedDevicePublicKey = matchedDevice.devicePublicKey || matchedDevice.device_public_key;\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n } else {\r\n throw new Error(\r\n `Device with ID ${providedDeviceId} not found for signer ${signerId}. ` +\r\n `Available device IDs: ${deviceIdentities.map((d) => d.deviceId || d.device_id).join(', ')}`\r\n );\r\n }\r\n } else if (providedDevicePublicKey) {\r\n // Find device by devicePublicKey\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.devicePublicKey || di.device_public_key) === providedDevicePublicKey\r\n );\r\n if (matchedDevice) {\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n }\r\n } else {\r\n // No device specified - use automatic resolution (best device or first)\r\n try {\r\n const bestDevice = await getBestDeviceIdentity(walletId, signerId);\r\n resolvedDevicePublicKey = bestDevice.devicePublicKey;\r\n resolvedDeviceId = bestDevice.deviceId;\r\n } catch {\r\n // Fallback to first device\r\n const firstDevice = deviceIdentities[0];\r\n resolvedDevicePublicKey = firstDevice.devicePublicKey || firstDevice.device_public_key;\r\n resolvedDeviceId = firstDevice.deviceId || firstDevice.device_id;\r\n }\r\n }\r\n\r\n // Step 3: Find device key in storage\r\n if (resolvedDevicePublicKey) {\r\n const foundKey = await findDeviceKeyByPublicKey(resolvedDevicePublicKey, deviceKeyManager);\r\n \r\n if (!foundKey) {\r\n throw new DeviceKeyNotFoundError(resolvedDevicePublicKey, signerId);\r\n }\r\n\r\n // Step 4: Validate device key matches API (if validation enabled)\r\n if (validateDeviceKey) {\r\n const validation = await validateDeviceKeyFn(\r\n walletId,\r\n signerId,\r\n resolvedDevicePublicKey,\r\n { deviceKeyManager }\r\n );\r\n\r\n if (!validation.isValid) {\r\n throw new DeviceKeyMismatchError(\r\n validation.apiDeviceKey,\r\n validation.storedDeviceKey || null,\r\n signerId,\r\n walletId\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Step 5: Derive keypair using resolved devicePublicKey\r\n return deriveSignerKeypair(walletId, signerId, 'email', {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: resolvedDevicePublicKey\r\n });\r\n}\r\n\r\n/**\r\n * Sign message with email signer\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param message - Message to sign\r\n * @param options - Configuration options\r\n * @returns Signature\r\n */\r\nexport async function signWithEmailSigner(\r\n walletId: string,\r\n signerId: string,\r\n message: Uint8Array,\r\n options?: EmailSignerOptions\r\n): Promise<Uint8Array> {\r\n return signWithSigner(walletId, signerId, 'email', message, {\r\n deviceKeyManager: options?.deviceKeyManager,\r\n cache: options?.cache\r\n });\r\n}\r\n\r\n/**\r\n * Clear email signer cache\r\n * @param walletId - Wallet ID\r\n * @param signerId - Optional signer ID to clear specific signer\r\n */\r\nexport function clearEmailSignerCache(walletId: string, signerId?: string): void {\r\n clearSignerCache(walletId, signerId);\r\n}\r\n\r\n/**\r\n * Get email signer by email address\r\n * @param walletId - Wallet ID\r\n * @param email - Email address\r\n * @returns Signer information or null if not found\r\n */\r\nexport async function getEmailSignerByEmail(\r\n walletId: string,\r\n email: string\r\n): Promise<SignerInfo | null> {\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.email === email || \r\n (s.type === 'email' && s.email === email)\r\n );\r\n \r\n return signer ? parseSignerResponse(signer) : null;\r\n}\r\n\r\n", "/**\r\n * Phone Signer Helper Functions\r\n * Provides simplified API for phone-based signers\r\n */\r\n\r\nimport { \r\n deriveSignerKeypair, \r\n signWithSigner, \r\n parseSignerResponse,\r\n clearSignerCache,\r\n type SignerInfo,\r\n type SignerResponse,\r\n type Keypair,\r\n type CacheConfig\r\n} from './signerHelpers';\r\nimport { getDevicePublicKey, findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { createPhoneSigner, listSigners, getSignerById } from '../wallet';\r\nimport type { WalletControllerGetSignerByIdResult, WalletControllerListSignersResult } from '../wallet';\r\nimport { getSignerDeviceKeys, getBestDeviceIdentity, validateDeviceKey as validateDeviceKeyFn } from './deviceKeyHelpers';\r\nimport { DeviceKeyNotFoundError, DeviceKeyMismatchError } from '../errors';\r\n\r\nexport interface PhoneSignerConfig {\r\n phone: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n}\r\n\r\nexport interface PhoneSignerOptions {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n devicePublicKey?: string; // Specify which device key to use\r\n deviceId?: string; // Alternative: specify by device ID\r\n validateDeviceKey?: boolean; // Validate device key matches API (default: true)\r\n}\r\n\r\n/**\r\n * Create phone signer with automatic device key management\r\n * @param walletId - Wallet ID\r\n * @param config - Phone signer configuration\r\n * @returns Created signer information\r\n */\r\nexport async function createPhoneSignerHelper(\r\n walletId: string,\r\n config: PhoneSignerConfig\r\n): Promise<SignerInfo> {\r\n // Generate or get device public key\r\n const devicePublicKey = await getDevicePublicKey(undefined, config.deviceKeyManager);\r\n \r\n // Create signer via API\r\n await createPhoneSigner(walletId, {\r\n phone: config.phone,\r\n devicePublicKey\r\n });\r\n \r\n // Fetch created signer\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.phone === config.phone || \r\n (s.type === 'phone' && s.phone === config.phone)\r\n );\r\n \r\n if (!signer) {\r\n throw new Error('Failed to create phone signer');\r\n }\r\n \r\n return parseSignerResponse(signer);\r\n}\r\n\r\n/**\r\n * Get keypair for phone signer (with caching and device key validation)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns Solana keypair\r\n */\r\n/**\r\n * Get keypair for phone signer (with caching and device key validation)\r\n * Automatically handles:\r\n * - Fetching signer from API\r\n * - Extracting devicePublicKey and deviceId from signer response\r\n * - Resolving device key from storage\r\n * - Validating device key matches API\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns Solana keypair\r\n */\r\nexport async function getPhoneSignerKeypair(\r\n walletId: string,\r\n signerId: string,\r\n options?: PhoneSignerOptions\r\n): Promise<Keypair> {\r\n const {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: providedDevicePublicKey,\r\n deviceId: providedDeviceId,\r\n validateDeviceKey = true\r\n } = options || {};\r\n\r\n let resolvedDevicePublicKey: string | undefined = providedDevicePublicKey;\r\n let resolvedDeviceId: string | undefined = providedDeviceId;\r\n\r\n // If deviceKeyManager is provided, handle automatic resolution\r\n if (deviceKeyManager) {\r\n // Step 1: Fetch signer from API to get device identities\r\n const signerResponse = await getSignerById(walletId, signerId);\r\n const signerData = signerResponse as WalletControllerGetSignerByIdResult;\r\n \r\n // Extract device identities from signer response\r\n const responseData = (signerData as { data?: SignerResponse }).data || signerData;\r\n const deviceIdentities = (responseData as SignerResponse).deviceIdentities || [];\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new Error(\r\n `No device identities found for signer ${signerId}. ` +\r\n `Please ensure the signer has been created with a device key.`\r\n );\r\n }\r\n\r\n // Step 2: Resolve devicePublicKey and deviceId\r\n if (providedDeviceId && !providedDevicePublicKey) {\r\n // Find device by deviceId\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.deviceId || di.device_id) === providedDeviceId\r\n );\r\n if (matchedDevice) {\r\n resolvedDevicePublicKey = matchedDevice.devicePublicKey || matchedDevice.device_public_key;\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n } else {\r\n throw new Error(\r\n `Device with ID ${providedDeviceId} not found for signer ${signerId}. ` +\r\n `Available device IDs: ${deviceIdentities.map((d) => d.deviceId || d.device_id).join(', ')}`\r\n );\r\n }\r\n } else if (providedDevicePublicKey) {\r\n // Find device by devicePublicKey\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.devicePublicKey || di.device_public_key) === providedDevicePublicKey\r\n );\r\n if (matchedDevice) {\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n }\r\n } else {\r\n // No device specified - use automatic resolution (best device or first)\r\n try {\r\n const bestDevice = await getBestDeviceIdentity(walletId, signerId);\r\n resolvedDevicePublicKey = bestDevice.devicePublicKey;\r\n resolvedDeviceId = bestDevice.deviceId;\r\n } catch {\r\n // Fallback to first device\r\n const firstDevice = deviceIdentities[0];\r\n resolvedDevicePublicKey = firstDevice.devicePublicKey || firstDevice.device_public_key;\r\n resolvedDeviceId = firstDevice.deviceId || firstDevice.device_id;\r\n }\r\n }\r\n\r\n // Step 3: Find device key in storage\r\n if (resolvedDevicePublicKey) {\r\n const foundKey = await findDeviceKeyByPublicKey(resolvedDevicePublicKey, deviceKeyManager);\r\n \r\n if (!foundKey) {\r\n throw new DeviceKeyNotFoundError(resolvedDevicePublicKey, signerId);\r\n }\r\n\r\n // Step 4: Validate device key matches API (if validation enabled)\r\n if (validateDeviceKey) {\r\n const validation = await validateDeviceKeyFn(\r\n walletId,\r\n signerId,\r\n resolvedDevicePublicKey,\r\n { deviceKeyManager }\r\n );\r\n\r\n if (!validation.isValid) {\r\n throw new DeviceKeyMismatchError(\r\n validation.apiDeviceKey,\r\n validation.storedDeviceKey || null,\r\n signerId,\r\n walletId\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Step 5: Derive keypair using resolved devicePublicKey\r\n return deriveSignerKeypair(walletId, signerId, 'phone', {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: resolvedDevicePublicKey\r\n });\r\n}\r\n\r\n/**\r\n * Sign message with phone signer\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param message - Message to sign\r\n * @param options - Configuration options\r\n * @returns Signature\r\n */\r\nexport async function signWithPhoneSigner(\r\n walletId: string,\r\n signerId: string,\r\n message: Uint8Array,\r\n options?: PhoneSignerOptions\r\n): Promise<Uint8Array> {\r\n return signWithSigner(walletId, signerId, 'phone', message, {\r\n deviceKeyManager: options?.deviceKeyManager,\r\n cache: options?.cache\r\n });\r\n}\r\n\r\n/**\r\n * Clear phone signer cache\r\n * @param walletId - Wallet ID\r\n * @param signerId - Optional signer ID to clear specific signer\r\n */\r\nexport function clearPhoneSignerCache(walletId: string, signerId?: string): void {\r\n clearSignerCache(walletId, signerId);\r\n}\r\n\r\n/**\r\n * Get phone signer by phone number\r\n * @param walletId - Wallet ID\r\n * @param phone - Phone number\r\n * @returns Signer information or null if not found\r\n */\r\nexport async function getPhoneSignerByPhone(\r\n walletId: string,\r\n phone: string\r\n): Promise<SignerInfo | null> {\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.phone === phone || \r\n (s.type === 'phone' && s.phone === phone)\r\n );\r\n \r\n return signer ? parseSignerResponse(signer) : null;\r\n}\r\n\r\n", "/**\r\n * Device Identity Helper Functions\r\n * Handles adding and replacing device identities for email/phone signers\r\n * Enables multi-device support and device migration\r\n */\r\n\r\nimport { updateDeviceIdentity, getDeviceEncryptedSecret } from '../wallet';\r\nimport type { WalletControllerGetDeviceEncryptedSecretResult } from '../wallet';\r\nimport type { UpdateDeviceIdentityDto } from '../wallet';\r\nimport { getDevicePublicKey, generateDeviceKeyPair } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { getSignerDeviceKeys } from './deviceKeyHelpers';\r\nimport { DeviceKeyNotFoundError, NoDeviceIdentitiesError } from '../errors';\r\n\r\nexport interface AddDeviceIdentityOptions {\r\n walletId?: string;\r\n signerId?: string;\r\n devicePublicKey?: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n deviceFingerprint?: string;\r\n oldDevicePublicKey?: string; // Optional: specify which device to replace\r\n trustLevel?: string; // Device trust level\r\n metadata?: Record<string, any>;\r\n}\r\n\r\nexport interface ReplaceDeviceIdentityOptions {\r\n walletId?: string;\r\n signerId?: string;\r\n oldDevicePublicKey: string;\r\n newDevicePublicKey: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n deviceFingerprint?: string;\r\n trustLevel?: string;\r\n}\r\n\r\n/**\r\n * Add a new device identity to an existing email/phone signer\r\n * This allows the user to sign from a new device\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns New device identity information\r\n * \r\n * @example\r\n * ```typescript\r\n * // On new device - add device identity\r\n * const newDevice = await addDeviceIdentityToSigner(\r\n * 'wallet-id',\r\n * 'signer-id',\r\n * {\r\n * deviceKeyManager: storage,\r\n * deviceFingerprint: 'Chrome on Windows'\r\n * }\r\n * );\r\n * \r\n * // Now can sign from new device\r\n * const keypair = await getEmailSignerKeypair(\r\n * 'wallet-id',\r\n * 'signer-id',\r\n * {\r\n * devicePublicKey: newDevice.devicePublicKey,\r\n * deviceKeyManager: storage\r\n * }\r\n * );\r\n * ```\r\n */\r\nexport async function addDeviceIdentityToSigner(\r\n walletId: string,\r\n signerId: string,\r\n options?: AddDeviceIdentityOptions\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n // Generate new device key on current device\r\n const deviceKeyPair = await generateDeviceKeyPair();\r\n const newDevicePublicKey = deviceKeyPair.publicKey;\r\n \r\n // Store the new device key\r\n if (options?.deviceKeyManager) {\r\n await options.deviceKeyManager.save(deviceKeyPair.keyId, deviceKeyPair);\r\n }\r\n \r\n // Get encrypted master secret from API using the new device public key\r\n // The API will encrypt the master secret for the new device\r\n let encryptedMasterSecret: string;\r\n \r\n try {\r\n const encryptedSecretResponse = await getDeviceEncryptedSecret(\r\n walletId,\r\n signerId,\r\n {\r\n devicePublicKey: newDevicePublicKey\r\n }\r\n );\r\n \r\n // Extract encrypted secret from response\r\n // API returns: { success: true, data: { encryptedSecret: \"...\" } }\r\n const responseData = encryptedSecretResponse as unknown as WalletControllerGetDeviceEncryptedSecretResult;\r\n const data = (typeof responseData === 'object' && responseData !== null && 'data' in responseData\r\n ? (responseData as { data?: { encryptedSecret?: string; encrypted_secret?: string } }).data\r\n : responseData) || responseData;\r\n const dataObj = data as { encryptedSecret?: string; encrypted_secret?: string };\r\n encryptedMasterSecret = dataObj.encryptedSecret || dataObj.encrypted_secret || '';\r\n \r\n if (!encryptedMasterSecret) {\r\n throw new Error(\r\n `Failed to get encrypted master secret from API. ` +\r\n `Response structure: ${JSON.stringify(Object.keys(responseData))}. ` +\r\n `Please check the API response format.`\r\n );\r\n }\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to get encrypted master secret for new device: ${error}. ` +\r\n `Make sure the signer exists and you have proper authentication.`\r\n );\r\n }\r\n \r\n // Update device identity (add new device)\r\n await updateDeviceIdentity(\r\n walletId,\r\n signerId,\r\n {\r\n oldDevicePublicKey: options?.oldDevicePublicKey, // Optional: replace specific device\r\n devicePublicKey: newDevicePublicKey,\r\n encryptedMasterSecret: encryptedMasterSecret,\r\n deviceFingerprint: options?.deviceFingerprint\r\n }\r\n );\r\n \r\n // Get updated device identities to return the new one\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n const newDevice = deviceIdentities.find(\r\n d => d.devicePublicKey === newDevicePublicKey\r\n );\r\n \r\n if (!newDevice) {\r\n throw new Error('Failed to retrieve new device identity after creation');\r\n }\r\n \r\n return {\r\n deviceId: newDevice.deviceId,\r\n devicePublicKey: newDevice.devicePublicKey,\r\n createdAt: newDevice.createdAt || new Date().toISOString()\r\n };\r\n}\r\n\r\n/**\r\n * Replace an existing device identity with a new one\r\n * Useful when migrating from one device to another\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns New device identity information\r\n * \r\n * @example\r\n * ```typescript\r\n * // Replace old device with new device\r\n * const newDevice = await replaceDeviceIdentity(\r\n * 'wallet-id',\r\n * 'signer-id',\r\n * {\r\n * oldDevicePublicKey: 'old-device-public-key',\r\n * deviceKeyManager: storage,\r\n * deviceFingerprint: 'New iPhone 15'\r\n * }\r\n * );\r\n * ```\r\n */\r\nexport async function replaceDeviceIdentity(\r\n walletId: string,\r\n signerId: string,\r\n options: ReplaceDeviceIdentityOptions\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n return addDeviceIdentityToSigner(walletId, signerId, {\r\n oldDevicePublicKey: options.oldDevicePublicKey,\r\n deviceKeyManager: options.deviceKeyManager,\r\n deviceFingerprint: options.deviceFingerprint\r\n });\r\n}\r\n\r\n/**\r\n * Add a new device identity when user changes devices\r\n * This is a convenience function that handles the common case\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns New device identity information\r\n */\r\nexport async function addNewDeviceToSigner(\r\n walletId: string,\r\n signerId: string,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n deviceFingerprint?: string;\r\n }\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n // Get existing device identities\r\n const existingDevices = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (existingDevices.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // If only one device exists, we can replace it\r\n // Otherwise, we add a new device\r\n const oldDevicePublicKey = existingDevices.length === 1 \r\n ? existingDevices[0].devicePublicKey \r\n : undefined;\r\n \r\n return addDeviceIdentityToSigner(walletId, signerId, {\r\n oldDevicePublicKey,\r\n deviceKeyManager: options?.deviceKeyManager,\r\n deviceFingerprint: options?.deviceFingerprint\r\n });\r\n}\r\n\r\n/**\r\n * Check if a device can be added to a signer\r\n * Validates that the signer exists and has device identities\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @returns True if device can be added\r\n */\r\nexport async function canAddDeviceToSigner(\r\n walletId: string,\r\n signerId: string\r\n): Promise<boolean> {\r\n try {\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n return deviceIdentities.length > 0;\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\n", "/* [@simplewebauthn/browser@10.0.0] */\nfunction bufferToBase64URLString(buffer) {\n const bytes = new Uint8Array(buffer);\n let str = '';\n for (const charCode of bytes) {\n str += String.fromCharCode(charCode);\n }\n const base64String = btoa(str);\n return base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\n\nfunction base64URLStringToBuffer(base64URLString) {\n const base64 = base64URLString.replace(/-/g, '+').replace(/_/g, '/');\n const padLength = (4 - (base64.length % 4)) % 4;\n const padded = base64.padEnd(base64.length + padLength, '=');\n const binary = atob(padded);\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction browserSupportsWebAuthn() {\n return (window?.PublicKeyCredential !== undefined &&\n typeof window.PublicKeyCredential === 'function');\n}\n\nfunction toPublicKeyCredentialDescriptor(descriptor) {\n const { id } = descriptor;\n return {\n ...descriptor,\n id: base64URLStringToBuffer(id),\n transports: descriptor.transports,\n };\n}\n\nfunction isValidDomain(hostname) {\n return (hostname === 'localhost' ||\n /^([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}$/i.test(hostname));\n}\n\nclass WebAuthnError extends Error {\n constructor({ message, code, cause, name, }) {\n super(message, { cause });\n this.name = name ?? cause.name;\n this.code = code;\n }\n}\n\nfunction identifyRegistrationError({ error, options, }) {\n const { publicKey } = options;\n if (!publicKey) {\n throw Error('options was missing required publicKey property');\n }\n if (error.name === 'AbortError') {\n if (options.signal instanceof AbortSignal) {\n return new WebAuthnError({\n message: 'Registration ceremony was sent an abort signal',\n code: 'ERROR_CEREMONY_ABORTED',\n cause: error,\n });\n }\n }\n else if (error.name === 'ConstraintError') {\n if (publicKey.authenticatorSelection?.requireResidentKey === true) {\n return new WebAuthnError({\n message: 'Discoverable credentials were required but no available authenticator supported it',\n code: 'ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT',\n cause: error,\n });\n }\n else if (publicKey.authenticatorSelection?.userVerification === 'required') {\n return new WebAuthnError({\n message: 'User verification was required but no available authenticator supported it',\n code: 'ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT',\n cause: error,\n });\n }\n }\n else if (error.name === 'InvalidStateError') {\n return new WebAuthnError({\n message: 'The authenticator was previously registered',\n code: 'ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED',\n cause: error,\n });\n }\n else if (error.name === 'NotAllowedError') {\n return new WebAuthnError({\n message: error.message,\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n }\n else if (error.name === 'NotSupportedError') {\n const validPubKeyCredParams = publicKey.pubKeyCredParams.filter((param) => param.type === 'public-key');\n if (validPubKeyCredParams.length === 0) {\n return new WebAuthnError({\n message: 'No entry in pubKeyCredParams was of type \"public-key\"',\n code: 'ERROR_MALFORMED_PUBKEYCREDPARAMS',\n cause: error,\n });\n }\n return new WebAuthnError({\n message: 'No available authenticator supported any of the specified pubKeyCredParams algorithms',\n code: 'ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG',\n cause: error,\n });\n }\n else if (error.name === 'SecurityError') {\n const effectiveDomain = window.location.hostname;\n if (!isValidDomain(effectiveDomain)) {\n return new WebAuthnError({\n message: `${window.location.hostname} is an invalid domain`,\n code: 'ERROR_INVALID_DOMAIN',\n cause: error,\n });\n }\n else if (publicKey.rp.id !== effectiveDomain) {\n return new WebAuthnError({\n message: `The RP ID \"${publicKey.rp.id}\" is invalid for this domain`,\n code: 'ERROR_INVALID_RP_ID',\n cause: error,\n });\n }\n }\n else if (error.name === 'TypeError') {\n if (publicKey.user.id.byteLength < 1 || publicKey.user.id.byteLength > 64) {\n return new WebAuthnError({\n message: 'User ID was not between 1 and 64 characters',\n code: 'ERROR_INVALID_USER_ID_LENGTH',\n cause: error,\n });\n }\n }\n else if (error.name === 'UnknownError') {\n return new WebAuthnError({\n message: 'The authenticator was unable to process the specified options, or could not create a new credential',\n code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n cause: error,\n });\n }\n return error;\n}\n\nclass BaseWebAuthnAbortService {\n createNewAbortSignal() {\n if (this.controller) {\n const abortError = new Error('Cancelling existing WebAuthn API call for new one');\n abortError.name = 'AbortError';\n this.controller.abort(abortError);\n }\n const newController = new AbortController();\n this.controller = newController;\n return newController.signal;\n }\n cancelCeremony() {\n if (this.controller) {\n const abortError = new Error('Manually cancelling existing WebAuthn API call');\n abortError.name = 'AbortError';\n this.controller.abort(abortError);\n this.controller = undefined;\n }\n }\n}\nconst WebAuthnAbortService = new BaseWebAuthnAbortService();\n\nconst attachments = ['cross-platform', 'platform'];\nfunction toAuthenticatorAttachment(attachment) {\n if (!attachment) {\n return;\n }\n if (attachments.indexOf(attachment) < 0) {\n return;\n }\n return attachment;\n}\n\nasync function startRegistration(optionsJSON) {\n if (!browserSupportsWebAuthn()) {\n throw new Error('WebAuthn is not supported in this browser');\n }\n const publicKey = {\n ...optionsJSON,\n challenge: base64URLStringToBuffer(optionsJSON.challenge),\n user: {\n ...optionsJSON.user,\n id: base64URLStringToBuffer(optionsJSON.user.id),\n },\n excludeCredentials: optionsJSON.excludeCredentials?.map(toPublicKeyCredentialDescriptor),\n };\n const options = { publicKey };\n options.signal = WebAuthnAbortService.createNewAbortSignal();\n let credential;\n try {\n credential = (await navigator.credentials.create(options));\n }\n catch (err) {\n throw identifyRegistrationError({ error: err, options });\n }\n if (!credential) {\n throw new Error('Registration was not completed');\n }\n const { id, rawId, response, type } = credential;\n let transports = undefined;\n if (typeof response.getTransports === 'function') {\n transports = response.getTransports();\n }\n let responsePublicKeyAlgorithm = undefined;\n if (typeof response.getPublicKeyAlgorithm === 'function') {\n try {\n responsePublicKeyAlgorithm = response.getPublicKeyAlgorithm();\n }\n catch (error) {\n warnOnBrokenImplementation('getPublicKeyAlgorithm()', error);\n }\n }\n let responsePublicKey = undefined;\n if (typeof response.getPublicKey === 'function') {\n try {\n const _publicKey = response.getPublicKey();\n if (_publicKey !== null) {\n responsePublicKey = bufferToBase64URLString(_publicKey);\n }\n }\n catch (error) {\n warnOnBrokenImplementation('getPublicKey()', error);\n }\n }\n let responseAuthenticatorData;\n if (typeof response.getAuthenticatorData === 'function') {\n try {\n responseAuthenticatorData = bufferToBase64URLString(response.getAuthenticatorData());\n }\n catch (error) {\n warnOnBrokenImplementation('getAuthenticatorData()', error);\n }\n }\n return {\n id,\n rawId: bufferToBase64URLString(rawId),\n response: {\n attestationObject: bufferToBase64URLString(response.attestationObject),\n clientDataJSON: bufferToBase64URLString(response.clientDataJSON),\n transports,\n publicKeyAlgorithm: responsePublicKeyAlgorithm,\n publicKey: responsePublicKey,\n authenticatorData: responseAuthenticatorData,\n },\n type,\n clientExtensionResults: credential.getClientExtensionResults(),\n authenticatorAttachment: toAuthenticatorAttachment(credential.authenticatorAttachment),\n };\n}\nfunction warnOnBrokenImplementation(methodName, cause) {\n console.warn(`The browser extension that intercepted this WebAuthn API call incorrectly implemented ${methodName}. You should report this error to them.\\n`, cause);\n}\n\nfunction browserSupportsWebAuthnAutofill() {\n if (!browserSupportsWebAuthn()) {\n return new Promise((resolve) => resolve(false));\n }\n const globalPublicKeyCredential = window\n .PublicKeyCredential;\n if (globalPublicKeyCredential.isConditionalMediationAvailable === undefined) {\n return new Promise((resolve) => resolve(false));\n }\n return globalPublicKeyCredential.isConditionalMediationAvailable();\n}\n\nfunction identifyAuthenticationError({ error, options, }) {\n const { publicKey } = options;\n if (!publicKey) {\n throw Error('options was missing required publicKey property');\n }\n if (error.name === 'AbortError') {\n if (options.signal instanceof AbortSignal) {\n return new WebAuthnError({\n message: 'Authentication ceremony was sent an abort signal',\n code: 'ERROR_CEREMONY_ABORTED',\n cause: error,\n });\n }\n }\n else if (error.name === 'NotAllowedError') {\n return new WebAuthnError({\n message: error.message,\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n }\n else if (error.name === 'SecurityError') {\n const effectiveDomain = window.location.hostname;\n if (!isValidDomain(effectiveDomain)) {\n return new WebAuthnError({\n message: `${window.location.hostname} is an invalid domain`,\n code: 'ERROR_INVALID_DOMAIN',\n cause: error,\n });\n }\n else if (publicKey.rpId !== effectiveDomain) {\n return new WebAuthnError({\n message: `The RP ID \"${publicKey.rpId}\" is invalid for this domain`,\n code: 'ERROR_INVALID_RP_ID',\n cause: error,\n });\n }\n }\n else if (error.name === 'UnknownError') {\n return new WebAuthnError({\n message: 'The authenticator was unable to process the specified options, or could not create a new assertion signature',\n code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n cause: error,\n });\n }\n return error;\n}\n\nasync function startAuthentication(optionsJSON, useBrowserAutofill = false) {\n if (!browserSupportsWebAuthn()) {\n throw new Error('WebAuthn is not supported in this browser');\n }\n let allowCredentials;\n if (optionsJSON.allowCredentials?.length !== 0) {\n allowCredentials = optionsJSON.allowCredentials?.map(toPublicKeyCredentialDescriptor);\n }\n const publicKey = {\n ...optionsJSON,\n challenge: base64URLStringToBuffer(optionsJSON.challenge),\n allowCredentials,\n };\n const options = {};\n if (useBrowserAutofill) {\n if (!(await browserSupportsWebAuthnAutofill())) {\n throw Error('Browser does not support WebAuthn autofill');\n }\n const eligibleInputs = document.querySelectorAll(\"input[autocomplete$='webauthn']\");\n if (eligibleInputs.length < 1) {\n throw Error('No <input> with \"webauthn\" as the only or last value in its `autocomplete` attribute was detected');\n }\n options.mediation = 'conditional';\n publicKey.allowCredentials = [];\n }\n options.publicKey = publicKey;\n options.signal = WebAuthnAbortService.createNewAbortSignal();\n let credential;\n try {\n credential = (await navigator.credentials.get(options));\n }\n catch (err) {\n throw identifyAuthenticationError({ error: err, options });\n }\n if (!credential) {\n throw new Error('Authentication was not completed');\n }\n const { id, rawId, response, type } = credential;\n let userHandle = undefined;\n if (response.userHandle) {\n userHandle = bufferToBase64URLString(response.userHandle);\n }\n return {\n id,\n rawId: bufferToBase64URLString(rawId),\n response: {\n authenticatorData: bufferToBase64URLString(response.authenticatorData),\n clientDataJSON: bufferToBase64URLString(response.clientDataJSON),\n signature: bufferToBase64URLString(response.signature),\n userHandle,\n },\n type,\n clientExtensionResults: credential.getClientExtensionResults(),\n authenticatorAttachment: toAuthenticatorAttachment(credential.authenticatorAttachment),\n };\n}\n\nfunction platformAuthenticatorIsAvailable() {\n if (!browserSupportsWebAuthn()) {\n return new Promise((resolve) => resolve(false));\n }\n return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n}\n\nexport { WebAuthnAbortService, WebAuthnError, base64URLStringToBuffer, browserSupportsWebAuthn, browserSupportsWebAuthnAutofill, bufferToBase64URLString, platformAuthenticatorIsAvailable, startAuthentication, startRegistration };\n", "/**\r\n * Passkey (WebAuthn) Signer Helpers\r\n * Simple WebAuthn implementation using SimpleWebAuthn library\r\n */\r\n\r\nimport { \r\n startRegistration, \r\n startAuthentication, \r\n browserSupportsWebAuthn, \r\n platformAuthenticatorIsAvailable\r\n} from '@simplewebauthn/browser';\r\n\r\n// Infer types from the library functions\r\ntype PublicKeyCredentialCreationOptionsJSON = Parameters<typeof startRegistration>[0];\r\ntype PublicKeyCredentialRequestOptionsJSON = Parameters<typeof startAuthentication>[0];\r\ntype RegistrationResponseJSON = Awaited<ReturnType<typeof startRegistration>>;\r\ntype AuthenticationResponseJSON = Awaited<ReturnType<typeof startAuthentication>>;\r\nimport { SDKError } from '../errors';\r\n\r\n/**\r\n * Ensure credential ID is properly base64url-encoded\r\n * Base64url uses - and _ instead of + and /, and omits padding\r\n * This ensures the credential ID format matches what the server expects\r\n * \r\n * @param credentialId - The credential ID to normalize\r\n * @returns The base64url-encoded credential ID\r\n */\r\nexport function ensureBase64URLCredentialId(credentialId: string): string {\r\n if (!credentialId) {\r\n return credentialId;\r\n }\r\n \r\n // Remove any padding if present\r\n let cleaned = credentialId.replace(/=/g, '');\r\n \r\n // Replace base64 characters with base64url characters\r\n cleaned = cleaned.replace(/\\+/g, '-').replace(/\\//g, '_');\r\n \r\n return cleaned;\r\n}\r\n\r\n/**\r\n * Format a registration response to ensure all credential IDs are properly base64url-encoded\r\n * This is useful when manually constructing registration responses or when using the raw WebAuthn API\r\n * \r\n * @param response - The registration response from startRegistration() or navigator.credentials.create()\r\n * @returns The formatted registration response with normalized credential IDs\r\n */\r\nexport function formatRegistrationResponse(\r\n response: RegistrationResponseJSON\r\n): RegistrationResponseJSON {\r\n const formatted = { ...response };\r\n \r\n // Ensure the credential ID is properly base64url-encoded\r\n if (formatted.id) {\r\n formatted.id = ensureBase64URLCredentialId(formatted.id);\r\n }\r\n if (formatted.rawId) {\r\n formatted.rawId = ensureBase64URLCredentialId(formatted.rawId);\r\n }\r\n \r\n return formatted;\r\n}\r\n\r\n/**\r\n * Format an authentication response to ensure all credential IDs are properly base64url-encoded\r\n * This is useful when manually constructing authentication responses or when using the raw WebAuthn API\r\n * \r\n * @param response - The authentication response from startAuthentication() or navigator.credentials.get()\r\n * @returns The formatted authentication response with normalized credential IDs\r\n */\r\nexport function formatAuthenticationResponse(\r\n response: AuthenticationResponseJSON\r\n): AuthenticationResponseJSON {\r\n const formatted = { ...response };\r\n \r\n // Ensure the credential ID is properly base64url-encoded\r\n if (formatted.id) {\r\n formatted.id = ensureBase64URLCredentialId(formatted.id);\r\n }\r\n if (formatted.rawId) {\r\n formatted.rawId = ensureBase64URLCredentialId(formatted.rawId);\r\n }\r\n \r\n return formatted;\r\n}\r\n\r\n/**\r\n * Check if WebAuthn is supported\r\n */\r\nexport function isWebAuthnSupported(): boolean {\r\n return browserSupportsWebAuthn();\r\n}\r\n\r\n/**\r\n * Check if platform authenticator is available\r\n */\r\nexport async function isPlatformAuthenticatorAvailable(): Promise<boolean> {\r\n return platformAuthenticatorIsAvailable();\r\n}\r\n\r\n/**\r\n * Register a new passkey\r\n */\r\nexport async function registerPasskey(\r\n options: PublicKeyCredentialCreationOptionsJSON\r\n): Promise<RegistrationResponseJSON> {\r\n if (!isWebAuthnSupported()) {\r\n throw new SDKError('WebAuthn not supported', 'WEBAUTHN_NOT_SUPPORTED');\r\n }\r\n\r\n try {\r\n const response = await startRegistration(options);\r\n \r\n // Ensure the credential ID is properly base64url-encoded\r\n // startRegistration() should already return it in the correct format,\r\n // but we normalize it to ensure compatibility with the server\r\n return formatRegistrationResponse(response);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Passkey registration failed: ${error instanceof Error ? error.message : String(error)}`,\r\n 'PASSKEY_REGISTRATION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Authenticate with passkey\r\n */\r\nexport async function authenticateWithPasskey(\r\n options: PublicKeyCredentialRequestOptionsJSON\r\n): Promise<AuthenticationResponseJSON> {\r\n if (!isWebAuthnSupported()) {\r\n throw new SDKError('WebAuthn not supported', 'WEBAUTHN_NOT_SUPPORTED');\r\n }\r\n\r\n try {\r\n const response = await startAuthentication(options);\r\n \r\n // Ensure the credential ID is properly base64url-encoded\r\n // startAuthentication() should already return it in the correct format,\r\n // but we normalize it to ensure compatibility with the server\r\n return formatAuthenticationResponse(response);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Passkey authentication failed: ${error instanceof Error ? error.message : String(error)}`,\r\n 'PASSKEY_AUTHENTICATION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Signer Lifecycle Management\r\n * Simple helpers for managing signer creation and deletion\r\n */\r\n\r\nimport { \r\n createEmailSigner, \r\n createPhoneSigner, \r\n listSigners, \r\n deleteSigner,\r\n type WalletControllerCreateEmailSignerResult,\r\n type WalletControllerCreatePhoneSignerResult,\r\n type WalletControllerListSignersResult\r\n} from '../wallet';\r\nimport type { CreateEmailSignerDto, CreatePhoneSignerDto } from '../wallet';\r\nimport { SDKError } from '../errors';\r\n\r\n/**\r\n * Create a new signer (thin wrapper around API)\r\n */\r\nexport async function createSigner(\r\n walletId: string,\r\n type: 'email' | 'phone',\r\n params: { email?: string; phone?: string; devicePublicKey?: string }\r\n): Promise<WalletControllerCreateEmailSignerResult | WalletControllerCreatePhoneSignerResult> {\r\n try {\r\n if (type === 'email') {\r\n if (!params.email) {\r\n throw new SDKError('Email is required', 'INVALID_PARAMS');\r\n }\r\n const createDto: CreateEmailSignerDto = {\r\n email: params.email,\r\n devicePublicKey: params.devicePublicKey || '',\r\n };\r\n return (await createEmailSigner(walletId, createDto)) as WalletControllerCreateEmailSignerResult;\r\n }\r\n\r\n if (type === 'phone') {\r\n if (!params.phone) {\r\n throw new SDKError('Phone is required', 'INVALID_PARAMS');\r\n }\r\n const createDto: CreatePhoneSignerDto = {\r\n phone: params.phone,\r\n devicePublicKey: params.devicePublicKey || '',\r\n };\r\n return (await createPhoneSigner(walletId, createDto)) as WalletControllerCreatePhoneSignerResult;\r\n }\r\n\r\n throw new SDKError(`Unsupported signer type: ${type}`, 'UNSUPPORTED_SIGNER_TYPE');\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to create signer: ${error instanceof Error ? error.message : String(error)}`,\r\n 'SIGNER_CREATION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Delete a signer (thin wrapper around API)\r\n */\r\nexport async function revokeSigner(walletId: string, signerId: string): Promise<void> {\r\n try {\r\n await deleteSigner(walletId, signerId);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to delete signer: ${error instanceof Error ? error.message : String(error)}`,\r\n 'SIGNER_DELETION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Get all signers for a wallet (thin wrapper around API)\r\n */\r\nexport async function getSigners(walletId: string): Promise<WalletControllerListSignersResult> {\r\n try {\r\n const response = await listSigners(walletId);\r\n return response as WalletControllerListSignersResult;\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to get signers: ${error instanceof Error ? error.message : String(error)}`,\r\n 'GET_SIGNERS_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Multi-Device Manager\r\n * Simple helpers for managing device identities\r\n */\r\n\r\nimport { updateDeviceIdentity } from '../wallet';\r\nimport type { UpdateDeviceIdentityDto, WalletControllerUpdateDeviceIdentityResult } from '../wallet';\r\nimport { addDeviceIdentityToSigner, replaceDeviceIdentity } from './deviceIdentityHelpers';\r\nimport type { DeviceIdentity } from './deviceKeyHelpers';\r\nimport { getSignerDeviceKeys } from './deviceKeyHelpers';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { SDKError } from '../errors';\r\n\r\n/**\r\n * Add a device to a signer (thin wrapper)\r\n */\r\nexport async function addDevice(\r\n walletId: string,\r\n signerId: string,\r\n devicePublicKey: string,\r\n deviceKeyManager?: DeviceKeyStorage\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n try {\r\n return await addDeviceIdentityToSigner(walletId, signerId, {\r\n devicePublicKey,\r\n deviceKeyManager,\r\n });\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to add device: ${error instanceof Error ? error.message : String(error)}`,\r\n 'ADD_DEVICE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Replace device identity (thin wrapper)\r\n */\r\nexport async function replaceDevice(\r\n walletId: string,\r\n signerId: string,\r\n oldDevicePublicKey: string,\r\n newDevicePublicKey: string,\r\n deviceKeyManager?: DeviceKeyStorage\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n try {\r\n return await replaceDeviceIdentity(walletId, signerId, {\r\n oldDevicePublicKey,\r\n newDevicePublicKey,\r\n deviceKeyManager,\r\n });\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to replace device: ${error instanceof Error ? error.message : String(error)}`,\r\n 'REPLACE_DEVICE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Get devices for a signer (thin wrapper)\r\n */\r\nexport async function getDevices(walletId: string, signerId: string): Promise<DeviceIdentity[]> {\r\n try {\r\n return await getSignerDeviceKeys(walletId, signerId);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to get devices: ${error instanceof Error ? error.message : String(error)}`,\r\n 'GET_DEVICES_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Update device identity (thin wrapper around API)\r\n */\r\nexport async function updateDevice(\r\n walletId: string,\r\n signerId: string,\r\n devicePublicKey: string\r\n): Promise<WalletControllerUpdateDeviceIdentityResult> {\r\n try {\r\n const updateDto: UpdateDeviceIdentityDto = { devicePublicKey };\r\n return await updateDeviceIdentity(walletId, signerId, updateDto) as WalletControllerUpdateDeviceIdentityResult;\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to update device: ${error instanceof Error ? error.message : String(error)}`,\r\n 'UPDATE_DEVICE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Signer Validation\r\n * Basic validation helpers\r\n */\r\n\r\nimport { browserSupportsWebAuthn } from '@simplewebauthn/browser';\r\n\r\n/**\r\n * Check if WebAuthn is supported\r\n */\r\nexport function isWebAuthnSupported(): boolean {\r\n return browserSupportsWebAuthn();\r\n}\r\n\r\n/**\r\n * Check if browser has required features\r\n */\r\nexport function isBrowserCompatible(): boolean {\r\n return (\r\n typeof globalThis !== 'undefined' &&\r\n typeof globalThis.crypto !== 'undefined' &&\r\n typeof globalThis.crypto.subtle !== 'undefined'\r\n );\r\n}\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function isValidEmail(email: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n}\r\n\r\n/**\r\n * Validate phone format (basic check)\r\n */\r\nexport function isValidPhone(phone: string): boolean {\r\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\r\n return phoneRegex.test(phone.replace(/[\\s\\-()]/g, ''));\r\n}\r\n", "/**\r\n * External Wallet Adapter\r\n * Simple helpers for connecting to Solana wallets\r\n */\r\n\r\nimport { SDKError } from '../errors';\r\n\r\n/**\r\n * Solana transaction type (compatible with @solana/web3.js Transaction)\r\n */\r\nexport interface SolanaTransaction {\r\n serialize(config?: { requireAllSignatures?: boolean; verifySignatures?: boolean }): Uint8Array;\r\n addSignature(publicKey: { toString(): string }, signature: Uint8Array): void;\r\n signatures?: Array<{ publicKey: { toString(): string }; signature?: Uint8Array }>;\r\n [key: string]: unknown; // Allow other transaction properties\r\n}\r\n\r\n/**\r\n * Standard wallet interface\r\n */\r\nexport interface SolanaWallet {\r\n name?: string;\r\n publicKey?: { toString(): string };\r\n connect(): Promise<{ publicKey: { toString(): string } }>;\r\n disconnect(): Promise<void>;\r\n signTransaction?(transaction: SolanaTransaction): Promise<SolanaTransaction>;\r\n signAllTransactions?(transactions: SolanaTransaction[]): Promise<SolanaTransaction[]>;\r\n signMessage?(message: Uint8Array): Promise<{ signature: Uint8Array }>;\r\n}\r\n\r\n/**\r\n * Detect available Solana wallets in the browser\r\n */\r\nexport function detectWallets(): SolanaWallet[] {\r\n const wallets: SolanaWallet[] = [];\r\n \r\n if (typeof globalThis === 'undefined' || typeof (globalThis as any).window === 'undefined') {\r\n return wallets;\r\n }\r\n \r\n const w = (globalThis as any).window;\r\n \r\n // Check for common Solana wallets\r\n if (w.phantom?.solana) wallets.push(w.phantom.solana);\r\n if (w.solflare) wallets.push(w.solflare);\r\n if (w.backpack) wallets.push(w.backpack);\r\n if (w.glow) wallets.push(w.glow);\r\n if (w.slope) wallets.push(w.slope);\r\n if (w.sollet) wallets.push(w.sollet);\r\n if (w.coin98?.sol) wallets.push(w.coin98.sol);\r\n \r\n return wallets;\r\n}\r\n\r\n/**\r\n * Get wallet by name\r\n */\r\nexport function getWallet(name: string): SolanaWallet | null {\r\n const wallets = detectWallets();\r\n const lowerName = name.toLowerCase();\r\n return wallets.find(w => w.name?.toLowerCase() === lowerName) || null;\r\n}\r\n\r\n/**\r\n * Connect to a wallet\r\n */\r\nexport async function connectWallet(wallet: SolanaWallet): Promise<string> {\r\n try {\r\n const result = await wallet.connect();\r\n return result.publicKey.toString();\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to connect wallet: ${error instanceof Error ? error.message : String(error)}`,\r\n 'WALLET_CONNECTION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Sign transaction with wallet\r\n */\r\nexport async function signTransaction(\r\n wallet: SolanaWallet, \r\n transaction: SolanaTransaction\r\n): Promise<SolanaTransaction> {\r\n if (!wallet.signTransaction) {\r\n throw new SDKError('Wallet does not support transaction signing', 'WALLET_SIGN_NOT_SUPPORTED');\r\n }\r\n \r\n try {\r\n return await wallet.signTransaction(transaction);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to sign transaction: ${error instanceof Error ? error.message : String(error)}`,\r\n 'WALLET_SIGN_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Sign message with wallet\r\n */\r\nexport async function signMessage(wallet: SolanaWallet, message: Uint8Array): Promise<Uint8Array> {\r\n if (!wallet.signMessage) {\r\n throw new SDKError('Wallet does not support message signing', 'WALLET_SIGN_MESSAGE_NOT_SUPPORTED');\r\n }\r\n \r\n try {\r\n const result = await wallet.signMessage(message);\r\n return result.signature;\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to sign message: ${error instanceof Error ? error.message : String(error)}`,\r\n 'WALLET_SIGN_MESSAGE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\r\n * Cilantro Smart SDK\r\n * Main entry point for the package\r\n */\r\n\r\n// Export SDK configuration functions\r\nexport { configure, setAuth, clearAuth } from './config';\r\nexport type { SDKConfig } from './config';\r\n\r\n// Export modules as namespaces to avoid naming conflicts\r\n// Use subpath imports for direct access: import { findAll } from 'cilantro-smart-sdk/platform'\r\nexport * as platform from './platform';\r\nexport * as user from './user';\r\nexport * as wallet from './wallet';\r\nexport * as admin from './admin';\r\nexport * as auth from './auth';\r\nexport * as subscriptions from './subscriptions';\r\nexport * as plans from './plans';\r\nexport * as transactions from './transactions';\r\nexport * as delegatedKeys from './delegated-keys';\r\nexport * as webhooks from './webhooks';\r\n\r\n// Export generated API functions and types (for backward compatibility)\r\nexport { getGUACSmartAPIV2 } from './api/gUACSmartAPIV2';\r\nexport type * from './api/gUACSmartAPIV2';\r\nexport * from './models';\r\n\r\n// Export utility functions\r\nexport { generateDevicePublicKey } from './utils/devicePublicKey';\r\n\r\n// Export helpers module (device key management and signer helpers)\r\nexport * as helpers from './helpers';\r\n\r\n// Export wallet functions including device identity management\r\nexport { updateDeviceIdentity } from './wallet';\r\nexport type { UpdateDeviceIdentityDto } from './models';\r\n\r\n// Export error classes\r\nexport {\r\n SDKError,\r\n DeviceKeyMismatchError,\r\n DeviceKeyNotFoundError,\r\n NoDeviceIdentitiesError,\r\n MultipleDeviceIdentitiesError,\r\n SignerValidationError,\r\n SignerNotFoundError,\r\n SignerInactiveError,\r\n UnsupportedSignerTypeError,\r\n DeviceAuthorizationError,\r\n TransactionSigningError,\r\n WebAuthnNotSupportedError,\r\n DeviceCompatibilityError,\r\n type SDKErrorDetails\r\n} from './errors';\r\n", "/**\r\n * SDK Configuration Management\r\n * Centralized configuration for authentication and API settings\r\n */\r\n\r\n/**\r\n * SDK Configuration interface\r\n */\r\nexport interface SDKConfig {\r\n /** JWT token for authentication */\r\n jwt?: string;\r\n /** API key for authentication (alternative to JWT) */\r\n apiKey?: string;\r\n /** Base URL for the API (defaults to https://api.cilantro.gg) */\r\n baseURL?: string;\r\n}\r\n\r\n/**\r\n * Internal configuration state\r\n * Uses global variable to share state across bundled modules\r\n */\r\nconst GLOBAL_CONFIG_KEY = '__CILANTRO_SDK_CONFIG__';\r\n\r\n// Extend global types\r\ndeclare global {\r\n var __CILANTRO_SDK_CONFIG__: SDKConfig | undefined;\r\n}\r\n\r\n// Get or create global config\r\nfunction getGlobalConfig(): SDKConfig {\r\n const defaultConfig: SDKConfig = {\r\n baseURL: process.env.CILANTRO_API_URL || 'https://api.cilantro.gg',\r\n };\r\n \r\n if (typeof global !== 'undefined') {\r\n if (!global.__CILANTRO_SDK_CONFIG__) {\r\n global.__CILANTRO_SDK_CONFIG__ = defaultConfig;\r\n }\r\n return global.__CILANTRO_SDK_CONFIG__;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n const win = (globalThis as any).window;\r\n if (!win[GLOBAL_CONFIG_KEY]) {\r\n win[GLOBAL_CONFIG_KEY] = defaultConfig;\r\n }\r\n return win[GLOBAL_CONFIG_KEY];\r\n }\r\n \r\n // Fallback for environments without global/window\r\n return defaultConfig;\r\n}\r\n\r\nlet currentConfig: SDKConfig = getGlobalConfig();\r\n\r\n/**\r\n * Configure the SDK with authentication credentials and settings\r\n * \r\n * @param config - Configuration options\r\n * @example\r\n * ```typescript\r\n * import { configure } from 'cilantro-smart-sdk';\r\n * \r\n * // Configure with API key\r\n * configure({ \r\n * apiKey: 'your-api-key',\r\n * baseURL: 'https://api.cilantro.gg' \r\n * });\r\n * \r\n * // Configure with JWT token\r\n * configure({ \r\n * jwt: 'your-jwt-token' \r\n * });\r\n * ```\r\n */\r\nexport function configure(config: SDKConfig): void {\r\n currentConfig = {\r\n ...currentConfig,\r\n ...config,\r\n };\r\n // Also update global config\r\n if (typeof global !== 'undefined') {\r\n global.__CILANTRO_SDK_CONFIG__ = currentConfig;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n ((globalThis as any).window as any)[GLOBAL_CONFIG_KEY] = currentConfig;\r\n }\r\n}\r\n\r\n/**\r\n * Set or update authentication credentials\r\n * \r\n * @param auth - Authentication credentials (JWT and/or API key)\r\n * @example\r\n * ```typescript\r\n * import { setAuth } from 'cilantro-smart-sdk';\r\n * import { login } from 'cilantro-smart-sdk/auth';\r\n * \r\n * const result = await login({ \r\n * usernameOrEmail: 'user@example.com',\r\n * password: 'password123' \r\n * });\r\n * \r\n * setAuth({ jwt: result.data.jwt });\r\n * ```\r\n */\r\nexport function setAuth(auth: { jwt?: string; apiKey?: string }): void {\r\n // Refresh from global first\r\n currentConfig = getGlobalConfig();\r\n \r\n if (auth.jwt !== undefined) {\r\n currentConfig.jwt = auth.jwt;\r\n }\r\n if (auth.apiKey !== undefined) {\r\n currentConfig.apiKey = auth.apiKey;\r\n }\r\n \r\n // Update global config\r\n if (typeof global !== 'undefined') {\r\n global.__CILANTRO_SDK_CONFIG__ = currentConfig;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n ((globalThis as any).window as any)[GLOBAL_CONFIG_KEY] = currentConfig;\r\n }\r\n}\r\n\r\n/**\r\n * Clear all authentication credentials\r\n * \r\n * @example\r\n * ```typescript\r\n * import { clearAuth } from 'cilantro-smart-sdk';\r\n * \r\n * clearAuth();\r\n * ```\r\n */\r\nexport function clearAuth(): void {\r\n currentConfig = getGlobalConfig();\r\n currentConfig.jwt = undefined;\r\n currentConfig.apiKey = undefined;\r\n \r\n // Update global config\r\n if (typeof global !== 'undefined') {\r\n global.__CILANTRO_SDK_CONFIG__ = currentConfig;\r\n } else if (typeof (globalThis as any).window !== 'undefined') {\r\n ((globalThis as any).window as any)[GLOBAL_CONFIG_KEY] = currentConfig;\r\n }\r\n}\r\n\r\n/**\r\n * Get current SDK configuration (internal use only)\r\n * @internal\r\n */\r\nexport function getConfig(): Readonly<SDKConfig> {\r\n // Always get fresh from global to ensure we have the latest config\r\n currentConfig = getGlobalConfig();\r\n return currentConfig;\r\n}\r\n", "/**\r\n * Platform module - Simplified exports for platform-related API functions\r\n */\r\n\r\nimport { getPlatforms } from './api/platforms/platforms';\r\n\r\nconst {\r\n platformControllerCreate,\r\n platformControllerFindAll,\r\n platformControllerGetOwnProfile,\r\n platformControllerUpdateOwnProfile,\r\n platformControllerFindOne,\r\n platformControllerUpdate,\r\n platformControllerRemove,\r\n platformControllerGetUsersForPlatform,\r\n platformControllerCreateUserForPlatform,\r\n platformControllerUpdateUserForPlatform,\r\n platformControllerRemoveUserForPlatform,\r\n platformControllerToggleUserActiveForPlatform,\r\n platformControllerGetWalletsForPlatform,\r\n} = getPlatforms();\r\n\r\n// Export platform functions with simplified names\r\nexport const create = platformControllerCreate;\r\nexport const findAll = platformControllerFindAll;\r\nexport const getOwnProfile = platformControllerGetOwnProfile;\r\nexport const updateOwnProfile = platformControllerUpdateOwnProfile;\r\nexport const findOne = platformControllerFindOne;\r\nexport const update = platformControllerUpdate;\r\nexport const remove = platformControllerRemove;\r\nexport const getUsers = platformControllerGetUsersForPlatform;\r\nexport const createUser = platformControllerCreateUserForPlatform;\r\nexport const updateUser = platformControllerUpdateUserForPlatform;\r\nexport const removeUser = platformControllerRemoveUserForPlatform;\r\nexport const toggleUserActive = platformControllerToggleUserActiveForPlatform;\r\nexport const getWallets = platformControllerGetWalletsForPlatform;\r\n\r\n// Export types\r\nexport type {\r\n PlatformControllerCreateResult,\r\n PlatformControllerFindAllResult,\r\n PlatformControllerGetOwnProfileResult,\r\n PlatformControllerUpdateOwnProfileResult,\r\n PlatformControllerFindOneResult,\r\n PlatformControllerUpdateResult,\r\n PlatformControllerRemoveResult,\r\n PlatformControllerGetUsersForPlatformResult,\r\n PlatformControllerCreateUserForPlatformResult,\r\n PlatformControllerUpdateUserForPlatformResult,\r\n PlatformControllerRemoveUserForPlatformResult,\r\n PlatformControllerToggleUserActiveForPlatformResult,\r\n PlatformControllerGetWalletsForPlatformResult,\r\n} from './api/platforms/platforms';\r\n\r\nexport type {\r\n CreatePlatformDto,\r\n UpdatePlatformDto,\r\n CreateUserDto,\r\n UpdateUserDto,\r\n} from './models';\r\n\r\n", "/**\r\n * Custom API client instance for Cilantro Smart SDK\r\n * Handles authentication (JWT tokens and API keys) automatically\r\n * @internal\r\n */\r\n\r\nimport axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\r\nimport { getConfig } from './config';\r\n\r\n// Create axios instance with dynamic baseURL\r\nconst axiosInstance: AxiosInstance = axios.create();\r\n\r\n// Request interceptor to add authentication headers and dynamic baseURL\r\naxiosInstance.interceptors.request.use(\r\n (config) => {\r\n const sdkConfig = getConfig();\r\n \r\n // Set baseURL dynamically from config\r\n config.baseURL = sdkConfig.baseURL || 'https://api.cilantro.gg';\r\n \r\n // Add JWT token if available\r\n if (sdkConfig.jwt) {\r\n config.headers.Authorization = `Bearer ${sdkConfig.jwt}`;\r\n }\r\n \r\n // Add API key if available (for platform/user authentication)\r\n if (sdkConfig.apiKey) {\r\n config.headers['X-API-Key'] = sdkConfig.apiKey;\r\n }\r\n \r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n/**\r\n * Custom instance wrapper for orval\r\n * @internal\r\n */\r\nexport const customInstance = <T>(\r\n config: AxiosRequestConfig,\r\n options?: AxiosRequestConfig,\r\n): Promise<T> => {\r\n const source = axios.CancelToken.source();\r\n const promise = axiosInstance({\r\n ...config,\r\n ...options,\r\n cancelToken: source.token,\r\n }).then(({ data }: AxiosResponse<T>) => data);\r\n\r\n // @ts-ignore\r\n promise.cancel = () => {\r\n source.cancel('Query was cancelled');\r\n };\r\n\r\n return promise;\r\n};\r\n\r\nexport default customInstance;\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n CancelSubscriptionDto,\n ChangePasswordDto,\n ConfirmPaymentDto,\n CreatePlatformDto,\n CreateUserDto,\n DowngradeSubscriptionDto,\n LinkPaymentDto,\n RenewSubscriptionDto,\n UpdatePlatformDto,\n UpdateUserDto,\n UpgradeSubscriptionDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getPlatforms = () => {\n /**\n * Create a new platform account. Returns API key for authentication. No prior authentication required.\n * @summary Register a new platform\n */\n const platformControllerCreate = (\n createPlatformDto: CreatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createPlatformDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all registered platforms. Requires platform JWT token.\n * @summary Get all platforms\n */\n const platformControllerFindAll = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>({ url: `/platforms`, method: \"GET\" }, options);\n };\n /**\n * Retrieve the authenticated platform's own profile information including settings and API key details. Requires platform JWT token.\n * @summary Get own platform profile\n */\n const platformControllerGetOwnProfile = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update the authenticated platform's profile information such as name, email, or settings. Requires platform JWT token.\n * @summary Update own platform profile\n */\n const platformControllerUpdateOwnProfile = (\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlatformDto,\n },\n options,\n );\n };\n /**\n * Change the authenticated platform's password. Requires current password. Requires platform JWT token.\n * @summary Change password\n */\n const platformControllerChangePassword = (\n changePasswordDto: ChangePasswordDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/password`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: changePasswordDto,\n },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific platform. Requires platform JWT token.\n * @summary Get platform by ID\n */\n const platformControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update platform information by ID. Requires platform JWT token.\n * @summary Update platform\n */\n const platformControllerUpdate = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlatformDto,\n },\n options,\n );\n };\n /**\n * Permanently delete a platform and all associated data. This action cannot be undone. Requires platform JWT token.\n * @summary Delete platform\n */\n const platformControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Retrieve all users that belong to the authenticated platform. Returns user profiles without sensitive data. Requires platform JWT token.\n * @summary Get all users under this platform\n */\n const platformControllerGetUsersForPlatform = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/users`, method: \"GET\" },\n options,\n );\n };\n /**\n * Create a new user account under the authenticated platform. The user will be automatically associated with the platform. Requires platform JWT token.\n * @summary Create user under this platform\n */\n const platformControllerCreateUserForPlatform = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/users`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createUserDto,\n },\n options,\n );\n };\n /**\n * Update a user's profile that belongs to the authenticated platform. Cannot update users from other platforms. Requires platform JWT token.\n * @summary Update user under this platform\n */\n const platformControllerUpdateUserForPlatform = (\n userId: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/users/${userId}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateUserDto,\n },\n options,\n );\n };\n /**\n * Permanently delete a user that belongs to the authenticated platform. Cannot delete users from other platforms. Requires platform JWT token.\n * @summary Delete user under this platform\n */\n const platformControllerRemoveUserForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/users/${userId}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Enable or disable a user account under the authenticated platform. Disabled users cannot login or perform actions. Requires platform JWT token.\n * @summary Toggle user active status under this platform\n */\n const platformControllerToggleUserActiveForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/users/${userId}/toggle-active`, method: \"PATCH\" },\n options,\n );\n };\n /**\n * Retrieve all wallets belonging to users under the authenticated platform. Read-only access for monitoring and analytics. Requires platform JWT token.\n * @summary Get all wallets of users under this platform (read-only)\n */\n const platformControllerGetWalletsForPlatform = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/wallets`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve all subscriptions (active, cancelled, expired, etc.) for the authenticated platform. Read-only access. Requires platform JWT token.\n * @summary Get all subscriptions for this platform\n */\n const platformControllerGetSubscriptionsForPlatform = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/subscriptions`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Get subscription by ID\n */\n const platformControllerGetSubscriptionById = (\n subscriptionId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/me/subscriptions/${subscriptionId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Manually renew a subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Renew subscription\n */\n const platformControllerRenewSubscription = (\n subscriptionId: string,\n renewSubscriptionDto: RenewSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/renew`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: renewSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Upgrade a subscription to a higher plan with prorated billing. Requires platform JWT token.\n * @summary Upgrade subscription\n */\n const platformControllerUpgradeSubscription = (\n subscriptionId: string,\n upgradeSubscriptionDto: UpgradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/upgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: upgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Downgrade a subscription to a lower plan with prorated billing. Requires platform JWT token.\n * @summary Downgrade subscription\n */\n const platformControllerDowngradeSubscription = (\n subscriptionId: string,\n downgradeSubscriptionDto: DowngradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/downgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: downgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Cancel a subscription immediately or at the end of the billing period. Requires platform JWT token.\n * @summary Cancel subscription\n */\n const platformControllerCancelSubscription = (\n subscriptionId: string,\n cancelSubscriptionDto: CancelSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/cancel`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: cancelSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Retrieve the audit trail for a subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Get subscription history\n */\n const platformControllerGetSubscriptionHistory = (\n subscriptionId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/history`,\n method: \"GET\",\n },\n options,\n );\n };\n /**\n * Link a Helio payment transaction ID to a subscription and activate it. This should be called after successful payment. Requires platform JWT token.\n * @summary Confirm payment and activate subscription\n */\n const platformControllerConfirmPayment = (\n subscriptionId: string,\n confirmPaymentDto: ConfirmPaymentDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/payment-confirm`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: confirmPaymentDto,\n },\n options,\n );\n };\n /**\n * Manually link a Helio payment transaction ID to a subscription without changing status. Useful for recording additional payments. Requires platform JWT token.\n * @summary Link payment transaction to subscription\n */\n const platformControllerLinkPayment = (\n subscriptionId: string,\n linkPaymentDto: LinkPaymentDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/payment-link`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: linkPaymentDto,\n },\n options,\n );\n };\n /**\n * Retrieve payment transaction history for a subscription belonging to the authenticated platform. Requires platform JWT token.\n * @summary Get payment history for subscription\n */\n const platformControllerGetPaymentHistory = (\n subscriptionId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/me/subscriptions/${subscriptionId}/payments`,\n method: \"GET\",\n },\n options,\n );\n };\n return {\n platformControllerCreate,\n platformControllerFindAll,\n platformControllerGetOwnProfile,\n platformControllerUpdateOwnProfile,\n platformControllerChangePassword,\n platformControllerFindOne,\n platformControllerUpdate,\n platformControllerRemove,\n platformControllerGetUsersForPlatform,\n platformControllerCreateUserForPlatform,\n platformControllerUpdateUserForPlatform,\n platformControllerRemoveUserForPlatform,\n platformControllerToggleUserActiveForPlatform,\n platformControllerGetWalletsForPlatform,\n platformControllerGetSubscriptionsForPlatform,\n platformControllerGetSubscriptionById,\n platformControllerRenewSubscription,\n platformControllerUpgradeSubscription,\n platformControllerDowngradeSubscription,\n platformControllerCancelSubscription,\n platformControllerGetSubscriptionHistory,\n platformControllerConfirmPayment,\n platformControllerLinkPayment,\n platformControllerGetPaymentHistory,\n };\n};\nexport type PlatformControllerCreateResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerCreate\"]>\n >\n>;\nexport type PlatformControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerFindAll\"]>\n >\n>;\nexport type PlatformControllerGetOwnProfileResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetOwnProfile\"]\n >\n >\n>;\nexport type PlatformControllerUpdateOwnProfileResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerUpdateOwnProfile\"]\n >\n >\n>;\nexport type PlatformControllerChangePasswordResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerChangePassword\"]\n >\n >\n>;\nexport type PlatformControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerFindOne\"]>\n >\n>;\nexport type PlatformControllerUpdateResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerUpdate\"]>\n >\n>;\nexport type PlatformControllerRemoveResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerRemove\"]>\n >\n>;\nexport type PlatformControllerGetUsersForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetUsersForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerCreateUserForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerCreateUserForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerUpdateUserForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerUpdateUserForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerRemoveUserForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerRemoveUserForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerToggleUserActiveForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getPlatforms\n >[\"platformControllerToggleUserActiveForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerGetWalletsForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetWalletsForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerGetSubscriptionsForPlatformResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getPlatforms\n >[\"platformControllerGetSubscriptionsForPlatform\"]\n >\n >\n>;\nexport type PlatformControllerGetSubscriptionByIdResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetSubscriptionById\"]\n >\n >\n>;\nexport type PlatformControllerRenewSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerRenewSubscription\"]\n >\n >\n>;\nexport type PlatformControllerUpgradeSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerUpgradeSubscription\"]\n >\n >\n>;\nexport type PlatformControllerDowngradeSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerDowngradeSubscription\"]\n >\n >\n>;\nexport type PlatformControllerCancelSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerCancelSubscription\"]\n >\n >\n>;\nexport type PlatformControllerGetSubscriptionHistoryResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getPlatforms\n >[\"platformControllerGetSubscriptionHistory\"]\n >\n >\n>;\nexport type PlatformControllerConfirmPaymentResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerConfirmPayment\"]\n >\n >\n>;\nexport type PlatformControllerLinkPaymentResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlatforms>[\"platformControllerLinkPayment\"]>\n >\n>;\nexport type PlatformControllerGetPaymentHistoryResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getPlatforms>[\"platformControllerGetPaymentHistory\"]\n >\n >\n>;\n", "/**\r\n * User module - Simplified exports for user-related API functions\r\n */\r\n\r\nimport { getUsers } from './api/users/users';\r\n\r\nconst {\r\n userControllerCreate,\r\n userControllerFindOne,\r\n userControllerUpdate,\r\n} = getUsers();\r\n\r\n// Export user functions with simplified names\r\nexport const create = userControllerCreate;\r\nexport const findOne = userControllerFindOne;\r\nexport const update = userControllerUpdate;\r\n\r\n// Export types\r\nexport type {\r\n UserControllerCreateResult,\r\n UserControllerFindOneResult,\r\n UserControllerUpdateResult,\r\n} from './api/users/users';\r\n\r\nexport type {\r\n CreateUserDto,\r\n UpdateUserDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n ChangePasswordDto,\n CreateUserDto,\n UpdateUserDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getUsers = () => {\n /**\n * @summary Register a new user\n */\n const userControllerCreate = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/users`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createUserDto,\n },\n options,\n );\n };\n /**\n * Retrieve user profile by ID. Users can only access their own profile. Requires user JWT token.\n * @summary Get user by ID\n */\n const userControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/users/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update user profile by ID. Users can only update their own profile. Requires user JWT token.\n * @summary Update user\n */\n const userControllerUpdate = (\n id: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/users/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateUserDto,\n },\n options,\n );\n };\n /**\n * Change the authenticated user's password. Requires current password. Users can only change their own password. Requires user JWT token.\n * @summary Change password\n */\n const userControllerChangePassword = (\n id: string,\n changePasswordDto: ChangePasswordDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/users/${id}/password`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: changePasswordDto,\n },\n options,\n );\n };\n return {\n userControllerCreate,\n userControllerFindOne,\n userControllerUpdate,\n userControllerChangePassword,\n };\n};\nexport type UserControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getUsers>[\"userControllerCreate\"]>>\n>;\nexport type UserControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getUsers>[\"userControllerFindOne\"]>>\n>;\nexport type UserControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getUsers>[\"userControllerUpdate\"]>>\n>;\nexport type UserControllerChangePasswordResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getUsers>[\"userControllerChangePassword\"]>\n >\n>;\n", "/**\r\n * Wallet module - Simplified exports for wallet-related API functions\r\n */\r\n\r\nimport { getWallets } from './api/wallets/wallets';\r\n\r\nconst {\r\n walletControllerCreate,\r\n walletControllerFindAll,\r\n walletControllerGetTotalBalance,\r\n walletControllerFindOne,\r\n walletControllerUpdate,\r\n walletControllerRemove,\r\n walletControllerFindByAddress,\r\n walletControllerSendSOL,\r\n walletControllerSendSPL,\r\n walletControllerMintNFT,\r\n walletControllerMintNFTSimple,\r\n walletControllerMintToken,\r\n walletControllerSendTransaction,\r\n walletControllerGetWalletAssets,\r\n walletControllerSyncWalletAssets,\r\n walletControllerDeactivateWallet,\r\n walletControllerActivateWallet,\r\n walletControllerBatchCreateWallets,\r\n walletControllerBatchSendSOL,\r\n walletControllerBatchSendSPL,\r\n walletControllerSimulateTransaction,\r\n walletControllerGetWalletCustodyInfo,\r\n walletControllerCreateEmailSigner,\r\n walletControllerCreatePhoneSigner,\r\n walletControllerStartPasskeyRegistration,\r\n walletControllerVerifyPasskeyRegistration,\r\n walletControllerStartPasskeyAuthentication,\r\n walletControllerVerifyPasskeyAuthentication,\r\n walletControllerCreateExternalWalletSigner,\r\n walletControllerCreateApiKeySigner,\r\n walletControllerGetSignerById,\r\n walletControllerUpdateSigner,\r\n walletControllerDeleteSigner,\r\n walletControllerGetDeviceEncryptedSecret,\r\n walletControllerUpdateDeviceIdentity,\r\n walletControllerAddSigner,\r\n walletControllerListSigners,\r\n walletControllerRemoveSigner,\r\n walletControllerUpdateSignerPermissions,\r\n walletControllerUpdateAdminSigner,\r\n} = getWallets();\r\n\r\n// Export wallet functions with simplified names\r\nexport const create = walletControllerCreate;\r\nexport const findAll = walletControllerFindAll;\r\nexport const getTotalBalance = walletControllerGetTotalBalance;\r\nexport const findOne = walletControllerFindOne;\r\nexport const update = walletControllerUpdate;\r\nexport const remove = walletControllerRemove;\r\nexport const findByAddress = walletControllerFindByAddress;\r\nexport const sendSOL = walletControllerSendSOL;\r\nexport const sendSPL = walletControllerSendSPL;\r\nexport const mintNFT = walletControllerMintNFT;\r\nexport const mintNFTSimple = walletControllerMintNFTSimple;\r\nexport const mintToken = walletControllerMintToken;\r\nexport const sendTransaction = walletControllerSendTransaction;\r\nexport const getAssets = walletControllerGetWalletAssets;\r\nexport const syncAssets = walletControllerSyncWalletAssets;\r\nexport const deactivate = walletControllerDeactivateWallet;\r\nexport const activate = walletControllerActivateWallet;\r\nexport const batchCreate = walletControllerBatchCreateWallets;\r\nexport const batchSendSOL = walletControllerBatchSendSOL;\r\nexport const batchSendSPL = walletControllerBatchSendSPL;\r\nexport const simulateTransaction = walletControllerSimulateTransaction;\r\n\r\n// Export signer management functions\r\nexport const getCustodyInfo = walletControllerGetWalletCustodyInfo;\r\nexport const createEmailSigner = walletControllerCreateEmailSigner;\r\nexport const createPhoneSigner = walletControllerCreatePhoneSigner;\r\nexport const startPasskeyRegistration = walletControllerStartPasskeyRegistration;\r\nexport const verifyPasskeyRegistration = walletControllerVerifyPasskeyRegistration;\r\nexport const startPasskeyAuthentication = walletControllerStartPasskeyAuthentication;\r\nexport const verifyPasskeyAuthentication = walletControllerVerifyPasskeyAuthentication;\r\nexport const createExternalWalletSigner = walletControllerCreateExternalWalletSigner;\r\nexport const createApiKeySigner = walletControllerCreateApiKeySigner;\r\nexport const getSignerById = walletControllerGetSignerById;\r\nexport const updateSigner = walletControllerUpdateSigner;\r\nexport const deleteSigner = walletControllerDeleteSigner;\r\nexport const getDeviceEncryptedSecret = walletControllerGetDeviceEncryptedSecret;\r\nexport const updateDeviceIdentity = walletControllerUpdateDeviceIdentity;\r\nexport const addSigner = walletControllerAddSigner;\r\nexport const listSigners = walletControllerListSigners;\r\nexport const removeSigner = walletControllerRemoveSigner;\r\nexport const updateSignerPermissions = walletControllerUpdateSignerPermissions;\r\nexport const updateAdminSigner = walletControllerUpdateAdminSigner;\r\n\r\n// Export types\r\nexport type {\r\n WalletControllerCreateResult,\r\n WalletControllerFindAllResult,\r\n WalletControllerGetTotalBalanceResult,\r\n WalletControllerFindOneResult,\r\n WalletControllerUpdateResult,\r\n WalletControllerRemoveResult,\r\n WalletControllerFindByAddressResult,\r\n WalletControllerSendSOLResult,\r\n WalletControllerSendSPLResult,\r\n WalletControllerMintNFTResult,\r\n WalletControllerMintNFTSimpleResult,\r\n WalletControllerMintTokenResult,\r\n WalletControllerSendTransactionResult,\r\n WalletControllerGetWalletAssetsResult,\r\n WalletControllerSyncWalletAssetsResult,\r\n WalletControllerDeactivateWalletResult,\r\n WalletControllerActivateWalletResult,\r\n WalletControllerBatchCreateWalletsResult,\r\n WalletControllerBatchSendSOLResult,\r\n WalletControllerBatchSendSPLResult,\r\n WalletControllerSimulateTransactionResult,\r\n WalletControllerGetWalletCustodyInfoResult,\r\n WalletControllerCreateEmailSignerResult,\r\n WalletControllerCreatePhoneSignerResult,\r\n WalletControllerStartPasskeyRegistrationResult,\r\n WalletControllerVerifyPasskeyRegistrationResult,\r\n WalletControllerStartPasskeyAuthenticationResult,\r\n WalletControllerVerifyPasskeyAuthenticationResult,\r\n WalletControllerCreateExternalWalletSignerResult,\r\n WalletControllerCreateApiKeySignerResult,\r\n WalletControllerGetSignerByIdResult,\r\n WalletControllerUpdateSignerResult,\r\n WalletControllerDeleteSignerResult,\r\n WalletControllerGetDeviceEncryptedSecretResult,\r\n WalletControllerUpdateDeviceIdentityResult,\r\n WalletControllerAddSignerResult,\r\n WalletControllerListSignersResult,\r\n WalletControllerRemoveSignerResult,\r\n WalletControllerUpdateSignerPermissionsResult,\r\n WalletControllerUpdateAdminSignerResult,\r\n} from './api/wallets/wallets';\r\n\r\nexport type {\r\n CreateWalletDto,\r\n UpdateWalletDto,\r\n SendSolDto,\r\n SendSplDto,\r\n MintNftDto,\r\n MintNftSimpleDto,\r\n MintTokenDto,\r\n SendTransactionDto,\r\n WalletControllerGetWalletAssetsParams,\r\n WalletAssetResponseDto,\r\n BatchCreateWalletDto,\r\n BatchSendSolDto,\r\n BatchSendSplDto,\r\n SimulateTransactionDto,\r\n AddSignerDto,\r\n CreateEmailSignerDto,\r\n CreatePhoneSignerDto,\r\n CreateExternalWalletSignerDto,\r\n CreateApiKeySignerDto,\r\n UpdateSignerDto,\r\n UpdateSignerPermissionsDto,\r\n UpdateAdminSignerDto,\r\n WalletControllerGetDeviceEncryptedSecretParams,\r\n UpdateDeviceIdentityDto,\r\n PasskeyAuthenticationDto,\r\n PasskeyAuthenticationDtoCredential,\r\n PasskeyRegistrationDto,\r\n PasskeyRegistrationDtoCredential,\r\n StartPasskeyAuthenticationDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AddSignerDto,\n BatchCreateWalletDto,\n BatchSendSolDto,\n BatchSendSplDto,\n CreateApiKeySignerDto,\n CreateEmailSignerDto,\n CreateExternalWalletSignerDto,\n CreatePhoneSignerDto,\n CreateWalletDto,\n MintNftDto,\n MintNftSimpleDto,\n MintTokenDto,\n PasskeyAuthenticationDto,\n PasskeyRegistrationDto,\n PrepareTransactionDto,\n SendSolDto,\n SendSplDto,\n SendTransactionDto,\n SignMessageDto,\n SimulateTransactionDto,\n StartPasskeyAuthenticationDto,\n SubmitTransactionDto,\n UpdateAdminSignerDto,\n UpdateDeviceIdentityDto,\n UpdateSignerDto,\n UpdateSignerPermissionsDto,\n UpdateWalletDto,\n WalletAssetResponseDto,\n WalletControllerFindAllParams,\n WalletControllerGetDeviceEncryptedSecretParams,\n WalletControllerGetWalletAssetsParams,\n WalletControllerMintNFT200,\n WalletControllerMintNFTSimple200,\n WalletControllerMintToken200,\n WalletControllerPrepareTransaction200,\n WalletControllerSendSOL200,\n WalletControllerSendSPL200,\n WalletControllerSendTransaction200,\n WalletControllerSignMessage200,\n WalletControllerSubmitTransaction200,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getWallets = () => {\n /**\n * @summary Create a new smart contract wallet\n */\n const walletControllerCreate = (\n createWalletDto: CreateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createWalletDto,\n },\n options,\n );\n };\n /**\n * @summary Get all wallets for authenticated user\n */\n const walletControllerFindAll = (\n params?: WalletControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * @summary Get total balance across all user wallets\n */\n const walletControllerGetTotalBalance = (\n options?: SecondParameter<typeof customInstance<number>>,\n ) => {\n return customInstance<number>(\n { url: `/wallets/balance/total`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Get wallet by ID\n */\n const walletControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Update wallet\n */\n const walletControllerUpdate = (\n id: string,\n updateWalletDto: UpdateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateWalletDto,\n },\n options,\n );\n };\n /**\n * @summary Delete wallet\n */\n const walletControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * @summary Get wallet by address\n */\n const walletControllerFindByAddress = (\n address: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/address/${address}`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Send SOL from wallet to recipient\n */\n const walletControllerSendSOL = (\n id: string,\n sendSolDto: SendSolDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSendSOL200>\n >,\n ) => {\n return customInstance<WalletControllerSendSOL200>(\n {\n url: `/wallets/${id}/send-sol`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendSolDto,\n },\n options,\n );\n };\n /**\n * @summary Send SPL tokens from wallet to recipient\n */\n const walletControllerSendSPL = (\n id: string,\n sendSplDto: SendSplDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSendSPL200>\n >,\n ) => {\n return customInstance<WalletControllerSendSPL200>(\n {\n url: `/wallets/${id}/send-spl`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendSplDto,\n },\n options,\n );\n };\n /**\n * @summary Mint NFT using Metaplex via CPI (Advanced)\n */\n const walletControllerMintNFT = (\n id: string,\n mintNftDto: MintNftDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerMintNFT200>\n >,\n ) => {\n return customInstance<WalletControllerMintNFT200>(\n {\n url: `/wallets/${id}/mint-nft`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: mintNftDto,\n },\n options,\n );\n };\n /**\n * @summary Mint NFT with metadata - handles all logic internally using Metaplex Core\n */\n const walletControllerMintNFTSimple = (\n id: string,\n mintNftSimpleDto: MintNftSimpleDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerMintNFTSimple200>\n >,\n ) => {\n return customInstance<WalletControllerMintNFTSimple200>(\n {\n url: `/wallets/${id}/mint-nft-simple`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: mintNftSimpleDto,\n },\n options,\n );\n };\n /**\n * @summary Mint fungible token (SPL or Token-2022) with initial supply to wallet\n */\n const walletControllerMintToken = (\n id: string,\n mintTokenDto: MintTokenDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerMintToken200>\n >,\n ) => {\n return customInstance<WalletControllerMintToken200>(\n {\n url: `/wallets/${id}/mint-token`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: mintTokenDto,\n },\n options,\n );\n };\n /**\n * @summary Execute arbitrary transaction via CPI to any Solana program\n */\n const walletControllerSendTransaction = (\n id: string,\n sendTransactionDto: SendTransactionDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSendTransaction200>\n >,\n ) => {\n return customInstance<WalletControllerSendTransaction200>(\n {\n url: `/wallets/${id}/send-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendTransactionDto,\n },\n options,\n );\n };\n /**\n * @summary Get all assets for a wallet (cached with auto-refresh)\n */\n const walletControllerGetWalletAssets = (\n id: string,\n params?: WalletControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,\n ) => {\n return customInstance<WalletAssetResponseDto[]>(\n { url: `/wallets/${id}/assets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * @summary Force sync wallet balance and assets from blockchain immediately\n */\n const walletControllerSyncWalletAssets = (\n id: string,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,\n ) => {\n return customInstance<WalletAssetResponseDto[]>(\n { url: `/wallets/${id}/sync`, method: \"POST\" },\n options,\n );\n };\n /**\n * @summary Deactivate a wallet\n */\n const walletControllerDeactivateWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/deactivate`, method: \"POST\" },\n options,\n );\n };\n /**\n * @summary Activate a wallet\n */\n const walletControllerActivateWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/activate`, method: \"POST\" },\n options,\n );\n };\n /**\n * @summary Batch create multiple wallets\n */\n const walletControllerBatchCreateWallets = (\n batchCreateWalletDto: BatchCreateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/batch/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: batchCreateWalletDto,\n },\n options,\n );\n };\n /**\n * @summary Batch send SOL to multiple recipients\n */\n const walletControllerBatchSendSOL = (\n id: string,\n batchSendSolDto: BatchSendSolDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/batch/send-sol`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: batchSendSolDto,\n },\n options,\n );\n };\n /**\n * @summary Batch send SPL tokens to multiple recipients\n */\n const walletControllerBatchSendSPL = (\n id: string,\n batchSendSplDto: BatchSendSplDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/batch/send-spl`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: batchSendSplDto,\n },\n options,\n );\n };\n /**\n * @summary Simulate a transaction without executing it\n */\n const walletControllerSimulateTransaction = (\n id: string,\n simulateTransactionDto: SimulateTransactionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/simulate-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: simulateTransactionDto,\n },\n options,\n );\n };\n /**\n * @summary Get wallet custody information and signers\n */\n const walletControllerGetWalletCustodyInfo = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/custody`, method: \"GET\" },\n options,\n );\n };\n /**\n * Create an email-based signer for the wallet and automatically register it on-chain. The user controls their keys via email authentication.\n * @summary Create email signer (non-custodial)\n */\n const walletControllerCreateEmailSigner = (\n id: string,\n createEmailSignerDto: CreateEmailSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/email`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createEmailSignerDto,\n },\n options,\n );\n };\n /**\n * Create a phone-based signer for the wallet and automatically register it on-chain. The user controls their keys via SMS authentication.\n * @summary Create phone signer (non-custodial)\n */\n const walletControllerCreatePhoneSigner = (\n id: string,\n createPhoneSignerDto: CreatePhoneSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/phone`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createPhoneSignerDto,\n },\n options,\n );\n };\n /**\n * Generate WebAuthn registration options for creating a passkey signer. Returns options to be used with the browser WebAuthn API.\n * @summary Start passkey registration\n */\n const walletControllerStartPasskeyRegistration = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/passkey/register`, method: \"POST\" },\n options,\n );\n };\n /**\n * Verify the WebAuthn registration response and create a passkey signer for the wallet, automatically registering it on-chain.\n * @summary Verify passkey registration and create signer\n */\n const walletControllerVerifyPasskeyRegistration = (\n id: string,\n passkeyRegistrationDto: PasskeyRegistrationDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/passkey/verify`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passkeyRegistrationDto,\n },\n options,\n );\n };\n /**\n * Generate WebAuthn authentication options for signing with an existing passkey. If credentialId is provided in the body, only that specific passkey will be included. Returns options to be used with the browser WebAuthn API.\n * @summary Start passkey authentication\n */\n const walletControllerStartPasskeyAuthentication = (\n id: string,\n startPasskeyAuthenticationDto: StartPasskeyAuthenticationDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/passkey/authenticate`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: startPasskeyAuthenticationDto,\n },\n options,\n );\n };\n /**\n * Verify the WebAuthn authentication response. Updates the passkey counter to prevent replay attacks.\n * @summary Verify passkey authentication\n */\n const walletControllerVerifyPasskeyAuthentication = (\n id: string,\n passkeyAuthenticationDto: PasskeyAuthenticationDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/passkey/verify-auth`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passkeyAuthenticationDto,\n },\n options,\n );\n };\n /**\n * Link an external wallet (e.g., Phantom, Solflare) as a signer for the wallet and automatically register it on-chain. The external wallet can then sign transactions.\n * @summary Create external wallet signer\n */\n const walletControllerCreateExternalWalletSigner = (\n id: string,\n createExternalWalletSignerDto: CreateExternalWalletSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/external-wallet`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createExternalWalletSignerDto,\n },\n options,\n );\n };\n /**\n * Create an API key-based custodial signer and automatically register it on-chain. The platform manages the signing keys on behalf of the user.\n * @summary Create API key signer (custodial)\n */\n const walletControllerCreateApiKeySigner = (\n id: string,\n createApiKeySignerDto: CreateApiKeySignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/api-key`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createApiKeySignerDto,\n },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific authentication signer.\n * @summary Get signer by ID\n */\n const walletControllerGetSignerById = (\n id: string,\n signerId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/${signerId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update signer configuration such as active status or primary designation.\n * @summary Update signer\n */\n const walletControllerUpdateSigner = (\n id: string,\n signerId: string,\n updateSignerDto: UpdateSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${signerId}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateSignerDto,\n },\n options,\n );\n };\n /**\n * Remove an authentication signer from the wallet. This will also remove it from on-chain registration. At least one signer must remain active.\n * @summary Delete signer\n */\n const walletControllerDeleteSigner = (\n id: string,\n signerId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/${signerId}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Retrieve the encrypted master secret for email/phone signers. Used for device-specific key recovery.\n * @summary Get encrypted master secret for device\n */\n const walletControllerGetDeviceEncryptedSecret = (\n id: string,\n signerId: string,\n params: WalletControllerGetDeviceEncryptedSecretParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${signerId}/encrypted-secret`,\n method: \"GET\",\n params,\n },\n options,\n );\n };\n /**\n * Replace a device for an email/phone signer while keeping the same signer. Provide oldDevicePublicKey (or omit if signer has only one device) and new devicePublicKey with encryptedMasterSecret. Can also update device fingerprint metadata.\n * @summary Update device identity\n */\n const walletControllerUpdateDeviceIdentity = (\n id: string,\n signerId: string,\n updateDeviceIdentityDto: UpdateDeviceIdentityDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${signerId}/device-identity`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateDeviceIdentityDto,\n },\n options,\n );\n };\n /**\n * @summary Add a new signer to the wallet (on-chain only)\n */\n const walletControllerAddSigner = (\n id: string,\n addSignerDto: AddSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: addSignerDto,\n },\n options,\n );\n };\n /**\n * @summary List all signers for the wallet (both authentication and on-chain signers)\n */\n const walletControllerListSigners = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers`, method: \"GET\" },\n options,\n );\n };\n /**\n * @summary Remove a signer from the wallet\n */\n const walletControllerRemoveSigner = (\n id: string,\n pubkey: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${id}/signers/${pubkey}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * @summary Update signer permissions\n */\n const walletControllerUpdateSignerPermissions = (\n id: string,\n pubkey: string,\n updateSignerPermissionsDto: UpdateSignerPermissionsDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/signers/${pubkey}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateSignerPermissionsDto,\n },\n options,\n );\n };\n /**\n * @summary Update admin signer (provider migration)\n */\n const walletControllerUpdateAdminSigner = (\n id: string,\n updateAdminSignerDto: UpdateAdminSignerDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${id}/admin/update`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateAdminSignerDto,\n },\n options,\n );\n };\n /**\n * Builds an unsigned transaction that can be signed by external wallet, passkey, or email/phone signer. Returns serialized transaction for signing. This enables non-custodial wallet flows where the user controls their keys.\n * @summary Prepare transaction for client-side signing\n */\n const walletControllerPrepareTransaction = (\n id: string,\n prepareTransactionDto: PrepareTransactionDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerPrepareTransaction200>\n >,\n ) => {\n return customInstance<WalletControllerPrepareTransaction200>(\n {\n url: `/wallets/${id}/prepare-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: prepareTransactionDto,\n },\n options,\n );\n };\n /**\n * Submits a client-signed transaction to the Solana blockchain. Use after preparing transaction with /prepare-transaction endpoint and signing it with your signer (external wallet, passkey, email/phone key derivation).\n * @summary Submit signed transaction to blockchain\n */\n const walletControllerSubmitTransaction = (\n id: string,\n submitTransactionDto: SubmitTransactionDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSubmitTransaction200>\n >,\n ) => {\n return customInstance<WalletControllerSubmitTransaction200>(\n {\n url: `/wallets/${id}/submit-transaction`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: submitTransactionDto,\n },\n options,\n );\n };\n /**\n * Sign a message using the wallet for authentication or verification purposes. Useful for proving wallet ownership, dApp authentication, or creating verifiable signatures.\n * @summary Sign arbitrary message with wallet\n */\n const walletControllerSignMessage = (\n id: string,\n signMessageDto: SignMessageDto,\n options?: SecondParameter<\n typeof customInstance<WalletControllerSignMessage200>\n >,\n ) => {\n return customInstance<WalletControllerSignMessage200>(\n {\n url: `/wallets/${id}/sign-message`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: signMessageDto,\n },\n options,\n );\n };\n return {\n walletControllerCreate,\n walletControllerFindAll,\n walletControllerGetTotalBalance,\n walletControllerFindOne,\n walletControllerUpdate,\n walletControllerRemove,\n walletControllerFindByAddress,\n walletControllerSendSOL,\n walletControllerSendSPL,\n walletControllerMintNFT,\n walletControllerMintNFTSimple,\n walletControllerMintToken,\n walletControllerSendTransaction,\n walletControllerGetWalletAssets,\n walletControllerSyncWalletAssets,\n walletControllerDeactivateWallet,\n walletControllerActivateWallet,\n walletControllerBatchCreateWallets,\n walletControllerBatchSendSOL,\n walletControllerBatchSendSPL,\n walletControllerSimulateTransaction,\n walletControllerGetWalletCustodyInfo,\n walletControllerCreateEmailSigner,\n walletControllerCreatePhoneSigner,\n walletControllerStartPasskeyRegistration,\n walletControllerVerifyPasskeyRegistration,\n walletControllerStartPasskeyAuthentication,\n walletControllerVerifyPasskeyAuthentication,\n walletControllerCreateExternalWalletSigner,\n walletControllerCreateApiKeySigner,\n walletControllerGetSignerById,\n walletControllerUpdateSigner,\n walletControllerDeleteSigner,\n walletControllerGetDeviceEncryptedSecret,\n walletControllerUpdateDeviceIdentity,\n walletControllerAddSigner,\n walletControllerListSigners,\n walletControllerRemoveSigner,\n walletControllerUpdateSignerPermissions,\n walletControllerUpdateAdminSigner,\n walletControllerPrepareTransaction,\n walletControllerSubmitTransaction,\n walletControllerSignMessage,\n };\n};\nexport type WalletControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerCreate\"]>>\n>;\nexport type WalletControllerFindAllResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerFindAll\"]>>\n>;\nexport type WalletControllerGetTotalBalanceResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerGetTotalBalance\"]>\n >\n>;\nexport type WalletControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerFindOne\"]>>\n>;\nexport type WalletControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerUpdate\"]>>\n>;\nexport type WalletControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerRemove\"]>>\n>;\nexport type WalletControllerFindByAddressResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerFindByAddress\"]>\n >\n>;\nexport type WalletControllerSendSOLResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerSendSOL\"]>>\n>;\nexport type WalletControllerSendSPLResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerSendSPL\"]>>\n>;\nexport type WalletControllerMintNFTResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWallets>[\"walletControllerMintNFT\"]>>\n>;\nexport type WalletControllerMintNFTSimpleResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerMintNFTSimple\"]>\n >\n>;\nexport type WalletControllerMintTokenResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerMintToken\"]>\n >\n>;\nexport type WalletControllerSendTransactionResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerSendTransaction\"]>\n >\n>;\nexport type WalletControllerGetWalletAssetsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerGetWalletAssets\"]>\n >\n>;\nexport type WalletControllerSyncWalletAssetsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerSyncWalletAssets\"]\n >\n >\n>;\nexport type WalletControllerDeactivateWalletResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerDeactivateWallet\"]\n >\n >\n>;\nexport type WalletControllerActivateWalletResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerActivateWallet\"]>\n >\n>;\nexport type WalletControllerBatchCreateWalletsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerBatchCreateWallets\"]\n >\n >\n>;\nexport type WalletControllerBatchSendSOLResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerBatchSendSOL\"]>\n >\n>;\nexport type WalletControllerBatchSendSPLResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerBatchSendSPL\"]>\n >\n>;\nexport type WalletControllerSimulateTransactionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerSimulateTransaction\"]\n >\n >\n>;\nexport type WalletControllerGetWalletCustodyInfoResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerGetWalletCustodyInfo\"]\n >\n >\n>;\nexport type WalletControllerCreateEmailSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerCreateEmailSigner\"]\n >\n >\n>;\nexport type WalletControllerCreatePhoneSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerCreatePhoneSigner\"]\n >\n >\n>;\nexport type WalletControllerStartPasskeyRegistrationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerStartPasskeyRegistration\"]\n >\n >\n>;\nexport type WalletControllerVerifyPasskeyRegistrationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerVerifyPasskeyRegistration\"]\n >\n >\n>;\nexport type WalletControllerStartPasskeyAuthenticationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getWallets\n >[\"walletControllerStartPasskeyAuthentication\"]\n >\n >\n>;\nexport type WalletControllerVerifyPasskeyAuthenticationResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getWallets\n >[\"walletControllerVerifyPasskeyAuthentication\"]\n >\n >\n>;\nexport type WalletControllerCreateExternalWalletSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getWallets\n >[\"walletControllerCreateExternalWalletSigner\"]\n >\n >\n>;\nexport type WalletControllerCreateApiKeySignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerCreateApiKeySigner\"]\n >\n >\n>;\nexport type WalletControllerGetSignerByIdResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerGetSignerById\"]>\n >\n>;\nexport type WalletControllerUpdateSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerUpdateSigner\"]>\n >\n>;\nexport type WalletControllerDeleteSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerDeleteSigner\"]>\n >\n>;\nexport type WalletControllerGetDeviceEncryptedSecretResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerGetDeviceEncryptedSecret\"]\n >\n >\n>;\nexport type WalletControllerUpdateDeviceIdentityResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerUpdateDeviceIdentity\"]\n >\n >\n>;\nexport type WalletControllerAddSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerAddSigner\"]>\n >\n>;\nexport type WalletControllerListSignersResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerListSigners\"]>\n >\n>;\nexport type WalletControllerRemoveSignerResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerRemoveSigner\"]>\n >\n>;\nexport type WalletControllerUpdateSignerPermissionsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerUpdateSignerPermissions\"]\n >\n >\n>;\nexport type WalletControllerUpdateAdminSignerResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerUpdateAdminSigner\"]\n >\n >\n>;\nexport type WalletControllerPrepareTransactionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerPrepareTransaction\"]\n >\n >\n>;\nexport type WalletControllerSubmitTransactionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getWallets>[\"walletControllerSubmitTransaction\"]\n >\n >\n>;\nexport type WalletControllerSignMessageResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWallets>[\"walletControllerSignMessage\"]>\n >\n>;\n", "/**\r\n * Admin module - Simplified exports for admin-related API functions\r\n */\r\n\r\nimport { getAdmin } from './api/admin/admin';\r\n\r\nconst {\r\n adminControllerCreate,\r\n adminControllerFindAll,\r\n adminControllerGetCurrentAdmin,\r\n adminControllerGetAllApiKeys,\r\n adminControllerGetplatformApiKey,\r\n adminControllerFindOne,\r\n adminControllerUpdate,\r\n adminControllerRemove,\r\n adminControllerToggleActive,\r\n adminControllerFindAllPlatforms,\r\n adminControllerFindOnePlatform,\r\n adminControllerUpdatePlatform,\r\n adminControllerRemovePlatform,\r\n adminControllerFindAllUsers,\r\n adminControllerFindOneUser,\r\n adminControllerFindAllWallets,\r\n adminControllerFindWalletsByUserId,\r\n adminControllerFindOneWallet,\r\n adminControllerGetOverviewAnalytics,\r\n adminControllerGetWalletAnalytics,\r\n adminControllerGetRecentActivity,\r\n adminControllerRegenerateApiKey,\r\n adminControllerGetPlatformsWithUsers,\r\n adminControllerGetUsersWithWallets,\r\n adminControllerGetWalletAssets,\r\n} = getAdmin();\r\n\r\n// Export admin functions with simplified names\r\nexport const create = adminControllerCreate;\r\nexport const findAll = adminControllerFindAll;\r\nexport const getCurrentAdmin = adminControllerGetCurrentAdmin;\r\nexport const getAllApiKeys = adminControllerGetAllApiKeys;\r\nexport const getPlatformApiKey = adminControllerGetplatformApiKey;\r\nexport const findOne = adminControllerFindOne;\r\nexport const update = adminControllerUpdate;\r\nexport const remove = adminControllerRemove;\r\nexport const toggleActive = adminControllerToggleActive;\r\nexport const findAllPlatforms = adminControllerFindAllPlatforms;\r\nexport const findOnePlatform = adminControllerFindOnePlatform;\r\nexport const updatePlatform = adminControllerUpdatePlatform;\r\nexport const removePlatform = adminControllerRemovePlatform;\r\nexport const findAllUsers = adminControllerFindAllUsers;\r\nexport const findOneUser = adminControllerFindOneUser;\r\nexport const findAllWallets = adminControllerFindAllWallets;\r\nexport const findWalletsByUserId = adminControllerFindWalletsByUserId;\r\nexport const findOneWallet = adminControllerFindOneWallet;\r\nexport const getOverviewAnalytics = adminControllerGetOverviewAnalytics;\r\nexport const getWalletAnalytics = adminControllerGetWalletAnalytics;\r\nexport const getRecentActivity = adminControllerGetRecentActivity;\r\nexport const regenerateApiKey = adminControllerRegenerateApiKey;\r\nexport const getPlatformsWithUsers = adminControllerGetPlatformsWithUsers;\r\nexport const getUsersWithWallets = adminControllerGetUsersWithWallets;\r\nexport const getWalletAssets = adminControllerGetWalletAssets;\r\n\r\n// Export types\r\nexport type {\r\n AdminControllerCreateResult,\r\n AdminControllerFindAllResult,\r\n AdminControllerGetCurrentAdminResult,\r\n AdminControllerGetAllApiKeysResult,\r\n AdminControllerGetplatformApiKeyResult,\r\n AdminControllerFindOneResult,\r\n AdminControllerUpdateResult,\r\n AdminControllerRemoveResult,\r\n AdminControllerToggleActiveResult,\r\n AdminControllerFindAllPlatformsResult,\r\n AdminControllerFindOnePlatformResult,\r\n AdminControllerUpdatePlatformResult,\r\n AdminControllerRemovePlatformResult,\r\n AdminControllerFindAllUsersResult,\r\n AdminControllerFindOneUserResult,\r\n AdminControllerFindAllWalletsResult,\r\n AdminControllerFindWalletsByUserIdResult,\r\n AdminControllerFindOneWalletResult,\r\n AdminControllerGetOverviewAnalyticsResult,\r\n AdminControllerGetWalletAnalyticsResult,\r\n AdminControllerGetRecentActivityResult,\r\n AdminControllerRegenerateApiKeyResult,\r\n AdminControllerGetPlatformsWithUsersResult,\r\n AdminControllerGetUsersWithWalletsResult,\r\n AdminControllerGetWalletAssetsResult,\r\n} from './api/admin/admin';\r\n\r\nexport type {\r\n CreateAdminDto,\r\n UpdateAdminDto,\r\n AdminControllerFindAllParams,\r\n AdminControllerFindAllPlatformsParams,\r\n AdminControllerGetPlatformsWithUsersParams,\r\n AdminControllerGetUsersWithWalletsParams,\r\n AdminControllerGetWalletAssetsParams,\r\n UpdatePlatformDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AdminControllerFindAllParams,\n AdminControllerFindAllPlatformsParams,\n AdminControllerGetPlatformActivityTimelineParams,\n AdminControllerGetPlatformGrowthTrendsParams,\n AdminControllerGetPlatformsWithUsersParams,\n AdminControllerGetTopPlatformsParams,\n AdminControllerGetUsersWithWalletsParams,\n AdminControllerGetWalletAssetsParams,\n CreateAdminDto,\n UpdateAdminDto,\n UpdatePlatformDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getAdmin = () => {\n /**\n * Create a new administrator account. No prior authentication required for initial admin creation.\n * @summary Register a new admin\n */\n const adminControllerCreate = (\n createAdminDto: CreateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createAdminDto,\n },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all administrators. Requires admin JWT token.\n * @summary Get all admins\n */\n const adminControllerFindAll = (\n params?: AdminControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve the authenticated admin's profile information. Requires admin JWT token.\n * @summary Get current admin profile\n */\n const adminControllerGetCurrentAdmin = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>({ url: `/admin/me`, method: \"GET\" }, options);\n };\n /**\n * Retrieve API keys for all platforms. Sensitive operation for key management. Requires admin JWT token.\n * @summary Get all platform API keys\n */\n const adminControllerGetAllApiKeys = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/api-keys`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve the API key for a specific platform. Requires admin JWT token.\n * @summary Get specific platform API key\n */\n const adminControllerGetplatformApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/api-keys/${platformId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific administrator. Requires admin JWT token.\n * @summary Get admin by ID\n */\n const adminControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update administrator information such as username, email, or password. Requires admin JWT token.\n * @summary Update admin\n */\n const adminControllerUpdate = (\n id: string,\n updateAdminDto: UpdateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateAdminDto,\n },\n options,\n );\n };\n /**\n * Permanently delete an administrator account. Cannot delete the last admin. Requires admin JWT token.\n * @summary Delete admin\n */\n const adminControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Enable or disable an administrator account. Disabled admins cannot login. Requires admin JWT token.\n * @summary Toggle admin active status\n */\n const adminControllerToggleActive = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/${id}/toggle-active`, method: \"PATCH\" },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all platforms in the system. Requires admin JWT token.\n * @summary View all platforms\n */\n const adminControllerFindAllPlatforms = (\n params?: AdminControllerFindAllPlatformsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/platforms/all`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific platform including users and wallets count. Requires admin JWT token.\n * @summary View platform details\n */\n const adminControllerFindOnePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/platforms/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update platform information such as name, email, or settings. Requires admin JWT token.\n * @summary Update platform\n */\n const adminControllerUpdatePlatform = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin/platforms/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlatformDto,\n },\n options,\n );\n };\n /**\n * Permanently delete a platform and all associated users, wallets, and data. This action cannot be undone. Requires admin JWT token.\n * @summary Delete platform\n */\n const adminControllerRemovePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/platforms/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Retrieve all users in the system across all platforms. Admin has read-only access to user data. Requires admin JWT token.\n * @summary View all users (read-only)\n */\n const adminControllerFindAllUsers = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/users/all`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific user including their wallets. Requires admin JWT token.\n * @summary View user details\n */\n const adminControllerFindOneUser = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/users/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve all wallets in the system across all users and platforms. Admin has read-only access to wallet data. Requires admin JWT token.\n * @summary View all wallets (read-only)\n */\n const adminControllerFindAllWallets = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/wallets/all`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve all wallets belonging to a specific user. Requires admin JWT token.\n * @summary View all wallets for a specific user (read-only)\n */\n const adminControllerFindWalletsByUserId = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/wallets/user/${userId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific wallet including balance and assets. Requires admin JWT token.\n * @summary View wallet details (read-only)\n */\n const adminControllerFindOneWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/wallets/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve high-level analytics including total platforms, users, wallets, and transaction volume. Requires admin JWT token.\n * @summary Get dashboard overview analytics\n */\n const adminControllerGetOverviewAnalytics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/overview`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve wallet-specific analytics including total balances, asset distribution, and activity metrics. Requires admin JWT token.\n * @summary Get wallet analytics and statistics\n */\n const adminControllerGetWalletAnalytics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/wallets`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve recent activity feed including new registrations, transactions, and system events. Requires admin JWT token.\n * @summary Get recent activity across all entities\n */\n const adminControllerGetRecentActivity = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/recent-activity`, method: \"GET\" },\n options,\n );\n };\n /**\n * Generate a new API key for a platform, invalidating the old one. The platform will need to update their integration. Requires admin JWT token.\n * @summary Regenerate platform API key\n */\n const adminControllerRegenerateApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/api-keys/${platformId}/regenerate`, method: \"POST\" },\n options,\n );\n };\n /**\n * Retrieve a paginated list of platforms with aggregated user counts for each. Useful for platform comparison. Requires admin JWT token.\n * @summary Get platforms with their user counts\n */\n const adminControllerGetPlatformsWithUsers = (\n params?: AdminControllerGetPlatformsWithUsersParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/data/platforms-with-users`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve a paginated list of users with aggregated wallet counts and total balances. Useful for user analytics. Requires admin JWT token.\n * @summary Get users with their wallet counts and balances\n */\n const adminControllerGetUsersWithWallets = (\n params?: AdminControllerGetUsersWithWalletsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/data/users-with-wallets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all wallet assets with optional filtering by asset type (NFT, SPL_TOKEN, SOL). Requires admin JWT token.\n * @summary Get all wallet assets with filtering\n */\n const adminControllerGetWalletAssets = (\n params?: AdminControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/data/wallet-assets`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve overall platform metrics including total platforms, active platforms, user counts, and averages. Requires admin JWT token.\n * @summary Get platform analytics overview\n */\n const adminControllerGetPlatformAnalytics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve usage metrics per platform including transaction counts, wallet counts, and user counts. Requires admin JWT token.\n * @summary Get platform usage metrics\n */\n const adminControllerGetPlatformUsageMetrics = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms/usage`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve growth trends showing new platform registrations over time (daily, weekly, or monthly). Requires admin JWT token.\n * @summary Get platform growth trends\n */\n const adminControllerGetPlatformGrowthTrends = (\n params?: AdminControllerGetPlatformGrowthTrendsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms/growth`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve top platforms ranked by users, wallets, or transactions. Requires admin JWT token.\n * @summary Get top platforms\n */\n const adminControllerGetTopPlatforms = (\n params?: AdminControllerGetTopPlatformsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/admin/analytics/platforms/top`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve activity timeline for a specific platform including users, wallets, and transactions. Requires admin JWT token.\n * @summary Get platform activity timeline\n */\n const adminControllerGetPlatformActivityTimeline = (\n id: string,\n params?: AdminControllerGetPlatformActivityTimelineParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/admin/analytics/platforms/${id}/activity`,\n method: \"GET\",\n params,\n },\n options,\n );\n };\n return {\n adminControllerCreate,\n adminControllerFindAll,\n adminControllerGetCurrentAdmin,\n adminControllerGetAllApiKeys,\n adminControllerGetplatformApiKey,\n adminControllerFindOne,\n adminControllerUpdate,\n adminControllerRemove,\n adminControllerToggleActive,\n adminControllerFindAllPlatforms,\n adminControllerFindOnePlatform,\n adminControllerUpdatePlatform,\n adminControllerRemovePlatform,\n adminControllerFindAllUsers,\n adminControllerFindOneUser,\n adminControllerFindAllWallets,\n adminControllerFindWalletsByUserId,\n adminControllerFindOneWallet,\n adminControllerGetOverviewAnalytics,\n adminControllerGetWalletAnalytics,\n adminControllerGetRecentActivity,\n adminControllerRegenerateApiKey,\n adminControllerGetPlatformsWithUsers,\n adminControllerGetUsersWithWallets,\n adminControllerGetWalletAssets,\n adminControllerGetPlatformAnalytics,\n adminControllerGetPlatformUsageMetrics,\n adminControllerGetPlatformGrowthTrends,\n adminControllerGetTopPlatforms,\n adminControllerGetPlatformActivityTimeline,\n };\n};\nexport type AdminControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerCreate\"]>>\n>;\nexport type AdminControllerFindAllResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAll\"]>>\n>;\nexport type AdminControllerGetCurrentAdminResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetCurrentAdmin\"]>\n >\n>;\nexport type AdminControllerGetAllApiKeysResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetAllApiKeys\"]>\n >\n>;\nexport type AdminControllerGetplatformApiKeyResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetplatformApiKey\"]>\n >\n>;\nexport type AdminControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOne\"]>>\n>;\nexport type AdminControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerUpdate\"]>>\n>;\nexport type AdminControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerRemove\"]>>\n>;\nexport type AdminControllerToggleActiveResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerToggleActive\"]>\n >\n>;\nexport type AdminControllerFindAllPlatformsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAllPlatforms\"]>\n >\n>;\nexport type AdminControllerFindOnePlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOnePlatform\"]>\n >\n>;\nexport type AdminControllerUpdatePlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerUpdatePlatform\"]>\n >\n>;\nexport type AdminControllerRemovePlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerRemovePlatform\"]>\n >\n>;\nexport type AdminControllerFindAllUsersResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAllUsers\"]>\n >\n>;\nexport type AdminControllerFindOneUserResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOneUser\"]>>\n>;\nexport type AdminControllerFindAllWalletsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindAllWallets\"]>\n >\n>;\nexport type AdminControllerFindWalletsByUserIdResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerFindWalletsByUserId\"]\n >\n >\n>;\nexport type AdminControllerFindOneWalletResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerFindOneWallet\"]>\n >\n>;\nexport type AdminControllerGetOverviewAnalyticsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetOverviewAnalytics\"]\n >\n >\n>;\nexport type AdminControllerGetWalletAnalyticsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetWalletAnalytics\"]>\n >\n>;\nexport type AdminControllerGetRecentActivityResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetRecentActivity\"]>\n >\n>;\nexport type AdminControllerRegenerateApiKeyResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerRegenerateApiKey\"]>\n >\n>;\nexport type AdminControllerGetPlatformsWithUsersResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformsWithUsers\"]\n >\n >\n>;\nexport type AdminControllerGetUsersWithWalletsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetUsersWithWallets\"]\n >\n >\n>;\nexport type AdminControllerGetWalletAssetsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetWalletAssets\"]>\n >\n>;\nexport type AdminControllerGetPlatformAnalyticsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformAnalytics\"]\n >\n >\n>;\nexport type AdminControllerGetPlatformUsageMetricsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformUsageMetrics\"]\n >\n >\n>;\nexport type AdminControllerGetPlatformGrowthTrendsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformGrowthTrends\"]\n >\n >\n>;\nexport type AdminControllerGetTopPlatformsResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAdmin>[\"adminControllerGetTopPlatforms\"]>\n >\n>;\nexport type AdminControllerGetPlatformActivityTimelineResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getAdmin>[\"adminControllerGetPlatformActivityTimeline\"]\n >\n >\n>;\n", "/**\r\n * Auth module - Simplified exports for authentication-related API functions\r\n */\r\n\r\nimport { getAuth } from './api/auth/auth';\r\nimport { setAuth } from './config';\r\n\r\nconst { authControllerLogin } = getAuth();\r\n\r\n// Export auth functions with simplified names\r\nexport const login = authControllerLogin;\r\n\r\n/**\r\n * Login and automatically set authentication credentials\r\n * This is a convenience function that calls login() and setAuth() automatically\r\n * \r\n * @param credentials - Login credentials\r\n * @returns Login result with user information\r\n * \r\n * @example\r\n * ```typescript\r\n * import { loginAndSetAuth } from 'cilantro-smart-sdk/auth';\r\n * import { sendSOL } from 'cilantro-smart-sdk/wallet';\r\n * \r\n * // Login and set auth in one step\r\n * const result = await loginAndSetAuth({\r\n * usernameOrEmail: 'user@example.com',\r\n * password: 'password123'\r\n * });\r\n * \r\n * // Now you can make authenticated requests\r\n * await sendSOL('wallet-id', { ... });\r\n * ```\r\n */\r\nexport async function loginAndSetAuth(\r\n credentials: import('./models').CommonLoginDto,\r\n options?: any\r\n): Promise<import('./api/auth/auth').AuthControllerLoginResult> {\r\n const result = await login(credentials, options);\r\n \r\n // Automatically set auth from login response\r\n if (result.data?.jwt) {\r\n setAuth({ jwt: result.data.jwt });\r\n }\r\n if (result.data?.apiKey) {\r\n setAuth({ apiKey: result.data.apiKey });\r\n }\r\n \r\n return result;\r\n}\r\n\r\n// Export types\r\nexport type {\r\n AuthControllerLoginResult,\r\n} from './api/auth/auth';\r\n\r\nexport type {\r\n CommonLoginDto,\r\n AuthControllerLogin200,\r\n AuthControllerLogin200Data,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AuthControllerLogin200,\n CommonLoginDto,\n PasswordResetConfirmDto,\n PasswordResetRequestDto,\n VerifyEmailDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getAuth = () => {\n /**\n * Authenticate as admin, platform, or user. Returns user type and appropriate JWT token.\n * @summary Universal login endpoint\n */\n const authControllerLogin = (\n commonLoginDto: CommonLoginDto,\n options?: SecondParameter<typeof customInstance<AuthControllerLogin200>>,\n ) => {\n return customInstance<AuthControllerLogin200>(\n {\n url: `/auth/login`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: commonLoginDto,\n },\n options,\n );\n };\n /**\n * Request a password reset link to be sent to the provided email address. Works for both platform and user accounts.\n * @summary Request password reset\n */\n const authControllerRequestPasswordReset = (\n passwordResetRequestDto: PasswordResetRequestDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/password-reset/request`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passwordResetRequestDto,\n },\n options,\n );\n };\n /**\n * Reset password using the token received via email.\n * @summary Confirm password reset\n */\n const authControllerConfirmPasswordReset = (\n passwordResetConfirmDto: PasswordResetConfirmDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/password-reset/confirm`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passwordResetConfirmDto,\n },\n options,\n );\n };\n /**\n * Verify email address using the token received via email.\n * @summary Verify email address\n */\n const authControllerVerifyEmail = (\n verifyEmailDto: VerifyEmailDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/verify-email`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: verifyEmailDto,\n },\n options,\n );\n };\n /**\n * Resend email verification link to the provided email address.\n * @summary Resend verification email\n */\n const authControllerResendVerification = (\n passwordResetRequestDto: PasswordResetRequestDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/auth/resend-verification`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: passwordResetRequestDto,\n },\n options,\n );\n };\n return {\n authControllerLogin,\n authControllerRequestPasswordReset,\n authControllerConfirmPasswordReset,\n authControllerVerifyEmail,\n authControllerResendVerification,\n };\n};\nexport type AuthControllerLoginResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAuth>[\"authControllerLogin\"]>>\n>;\nexport type AuthControllerRequestPasswordResetResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAuth>[\"authControllerRequestPasswordReset\"]>\n >\n>;\nexport type AuthControllerConfirmPasswordResetResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAuth>[\"authControllerConfirmPasswordReset\"]>\n >\n>;\nexport type AuthControllerVerifyEmailResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getAuth>[\"authControllerVerifyEmail\"]>>\n>;\nexport type AuthControllerResendVerificationResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getAuth>[\"authControllerResendVerification\"]>\n >\n>;\n", "/**\r\n * Subscriptions module - Simplified exports for subscription-related API functions\r\n */\r\n\r\nimport { getSubscriptions } from './api/subscriptions/subscriptions';\r\n\r\nconst {\r\n subscriptionControllerCreate,\r\n subscriptionControllerFindAll,\r\n subscriptionControllerFindOne,\r\n subscriptionControllerGetPlatformSubscription,\r\n subscriptionControllerUpgrade,\r\n subscriptionControllerDowngrade,\r\n subscriptionControllerCancel,\r\n subscriptionControllerRenew,\r\n subscriptionControllerGetHistory,\r\n} = getSubscriptions();\r\n\r\n// Export subscription functions with simplified names\r\nexport const create = subscriptionControllerCreate;\r\nexport const findAll = subscriptionControllerFindAll;\r\nexport const findOne = subscriptionControllerFindOne;\r\nexport const getPlatformSubscription = subscriptionControllerGetPlatformSubscription;\r\nexport const upgrade = subscriptionControllerUpgrade;\r\nexport const downgrade = subscriptionControllerDowngrade;\r\nexport const cancel = subscriptionControllerCancel;\r\nexport const renew = subscriptionControllerRenew;\r\nexport const getHistory = subscriptionControllerGetHistory;\r\n\r\n// Export types\r\nexport type {\r\n SubscriptionControllerCreateResult,\r\n SubscriptionControllerFindAllResult,\r\n SubscriptionControllerFindOneResult,\r\n SubscriptionControllerGetPlatformSubscriptionResult,\r\n SubscriptionControllerUpgradeResult,\r\n SubscriptionControllerDowngradeResult,\r\n SubscriptionControllerCancelResult,\r\n SubscriptionControllerRenewResult,\r\n SubscriptionControllerGetHistoryResult,\r\n} from './api/subscriptions/subscriptions';\r\n\r\nexport type {\r\n CreateSubscriptionDto,\r\n UpgradeSubscriptionDto,\r\n DowngradeSubscriptionDto,\r\n CancelSubscriptionDto,\r\n RenewSubscriptionDto,\r\n SubscriptionControllerFindAllParams,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n CancelSubscriptionDto,\n CreateSubscriptionDto,\n DowngradeSubscriptionDto,\n RenewSubscriptionDto,\n SubscriptionControllerFindAllParams,\n UpgradeSubscriptionDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getSubscriptions = () => {\n /**\n * Create a new subscription for a platform. Admin authentication required.\n * @summary Create a new subscription\n */\n const subscriptionControllerCreate = (\n createSubscriptionDto: CreateSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Retrieve a paginated list of all subscriptions with optional filters. Admin authentication required.\n * @summary Get all subscriptions\n */\n const subscriptionControllerFindAll = (\n params?: SubscriptionControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific subscription. Admin authentication required.\n * @summary Get subscription by ID\n */\n const subscriptionControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve the active subscription for a specific platform. Admin authentication required.\n * @summary Get platform subscription\n */\n const subscriptionControllerGetPlatformSubscription = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions/platform/${platformId}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Upgrade a subscription to a higher plan with prorated billing. Admin authentication required.\n * @summary Upgrade subscription\n */\n const subscriptionControllerUpgrade = (\n id: string,\n upgradeSubscriptionDto: UpgradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/upgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: upgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Downgrade a subscription to a lower plan with prorated billing. Admin authentication required.\n * @summary Downgrade subscription\n */\n const subscriptionControllerDowngrade = (\n id: string,\n downgradeSubscriptionDto: DowngradeSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/downgrade`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: downgradeSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Cancel a subscription immediately or at the end of the billing period. Admin authentication required.\n * @summary Cancel subscription\n */\n const subscriptionControllerCancel = (\n id: string,\n cancelSubscriptionDto: CancelSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/cancel`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: cancelSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Manually renew a subscription. Admin authentication required.\n * @summary Renew subscription\n */\n const subscriptionControllerRenew = (\n id: string,\n renewSubscriptionDto: RenewSubscriptionDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/subscriptions/${id}/renew`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: renewSubscriptionDto,\n },\n options,\n );\n };\n /**\n * Retrieve the audit trail for a subscription. Admin authentication required.\n * @summary Get subscription history\n */\n const subscriptionControllerGetHistory = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/subscriptions/${id}/history`, method: \"GET\" },\n options,\n );\n };\n return {\n subscriptionControllerCreate,\n subscriptionControllerFindAll,\n subscriptionControllerFindOne,\n subscriptionControllerGetPlatformSubscription,\n subscriptionControllerUpgrade,\n subscriptionControllerDowngrade,\n subscriptionControllerCancel,\n subscriptionControllerRenew,\n subscriptionControllerGetHistory,\n };\n};\nexport type SubscriptionControllerCreateResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerCreate\"]\n >\n >\n>;\nexport type SubscriptionControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerFindAll\"]\n >\n >\n>;\nexport type SubscriptionControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerFindOne\"]\n >\n >\n>;\nexport type SubscriptionControllerGetPlatformSubscriptionResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getSubscriptions\n >[\"subscriptionControllerGetPlatformSubscription\"]\n >\n >\n>;\nexport type SubscriptionControllerUpgradeResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerUpgrade\"]\n >\n >\n>;\nexport type SubscriptionControllerDowngradeResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerDowngrade\"]\n >\n >\n>;\nexport type SubscriptionControllerCancelResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerCancel\"]\n >\n >\n>;\nexport type SubscriptionControllerRenewResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerRenew\"]\n >\n >\n>;\nexport type SubscriptionControllerGetHistoryResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getSubscriptions>[\"subscriptionControllerGetHistory\"]\n >\n >\n>;\n", "/**\r\n * Plans module - Simplified exports for plan-related API functions\r\n */\r\n\r\nimport { getPlans } from './api/plans/plans';\r\n\r\nconst {\r\n planControllerFindAll,\r\n planControllerFindOne,\r\n planControllerUpdate,\r\n planControllerRemove,\r\n planControllerAssignToPlatform,\r\n planControllerAssignToUser,\r\n} = getPlans();\r\n\r\n// Export plan functions with simplified names\r\nexport const findAll = planControllerFindAll;\r\nexport const findOne = planControllerFindOne;\r\nexport const update = planControllerUpdate;\r\nexport const remove = planControllerRemove;\r\nexport const assignToPlatform = planControllerAssignToPlatform;\r\nexport const assignToUser = planControllerAssignToUser;\r\n\r\n// Export types\r\nexport type {\r\n PlanControllerFindAllResult,\r\n PlanControllerFindOneResult,\r\n PlanControllerUpdateResult,\r\n PlanControllerRemoveResult,\r\n PlanControllerAssignToPlatformResult,\r\n PlanControllerAssignToUserResult,\r\n} from './api/plans/plans';\r\n\r\nexport type {\r\n UpdatePlanDto,\r\n AssignPlanDto,\r\n} from './models';\r\n\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type { AssignPlanDto, CreatePlanDto, UpdatePlanDto } from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getPlans = () => {\n /**\n * Create a new subscription plan with specified limits and features. Admin authentication required.\n * @summary Create a new plan\n */\n const planControllerCreate = (\n createPlanDto: CreatePlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createPlanDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all subscription plans. Admin authentication required.\n * @summary Get all plans\n */\n const planControllerFindAll = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>({ url: `/plans`, method: \"GET\" }, options);\n };\n /**\n * Retrieve detailed information about a specific plan. Admin authentication required.\n * @summary Get plan by ID\n */\n const planControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/plans/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update plan details such as name, limits, or features. Admin authentication required.\n * @summary Update a plan\n */\n const planControllerUpdate = (\n id: string,\n updatePlanDto: UpdatePlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updatePlanDto,\n },\n options,\n );\n };\n /**\n * Soft delete a plan by deactivating it. Existing assignments will remain active. Admin authentication required.\n * @summary Delete (deactivate) a plan\n */\n const planControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/plans/${id}`, method: \"DELETE\" },\n options,\n );\n };\n /**\n * Assign an active subscription plan to a platform. Admin authentication required.\n * @summary Assign a plan to a platform\n */\n const planControllerAssignToPlatform = (\n id: string,\n platformId: string,\n assignPlanDto: AssignPlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans/${id}/assign-platform/${platformId}`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: assignPlanDto,\n },\n options,\n );\n };\n /**\n * Assign an active subscription plan to a user. Admin authentication required.\n * @summary Assign a plan to a user\n */\n const planControllerAssignToUser = (\n id: string,\n userId: string,\n assignPlanDto: AssignPlanDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/plans/${id}/assign-user/${userId}`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: assignPlanDto,\n },\n options,\n );\n };\n return {\n planControllerCreate,\n planControllerFindAll,\n planControllerFindOne,\n planControllerUpdate,\n planControllerRemove,\n planControllerAssignToPlatform,\n planControllerAssignToUser,\n };\n};\nexport type PlanControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerCreate\"]>>\n>;\nexport type PlanControllerFindAllResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerFindAll\"]>>\n>;\nexport type PlanControllerFindOneResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerFindOne\"]>>\n>;\nexport type PlanControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerUpdate\"]>>\n>;\nexport type PlanControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerRemove\"]>>\n>;\nexport type PlanControllerAssignToPlatformResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getPlans>[\"planControllerAssignToPlatform\"]>\n >\n>;\nexport type PlanControllerAssignToUserResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getPlans>[\"planControllerAssignToUser\"]>>\n>;\n", "/**\r\n * Transactions module - Simplified exports for transaction-related API functions\r\n */\r\n\r\nimport { getTransactions } from './api/transactions/transactions';\r\n\r\nconst {\r\n transactionControllerGetWalletTransactions,\r\n transactionControllerGetTransactionStatus,\r\n} = getTransactions();\r\n\r\n// Export transaction functions with simplified names\r\nexport const getWalletTransactions = transactionControllerGetWalletTransactions;\r\nexport const getTransactionStatus = transactionControllerGetTransactionStatus;\r\n\r\n// Export types\r\nexport type {\r\n TransactionControllerGetWalletTransactionsResult,\r\n TransactionControllerGetTransactionStatusResult,\r\n} from './api/transactions/transactions';\r\n\r\nexport type {\r\n TransactionControllerGetWalletTransactionsParams,\r\n TransactionType,\r\n TransactionStatus,\r\n} from './models';\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type { TransactionControllerGetWalletTransactionsParams } from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getTransactions = () => {\n /**\n * Retrieve paginated transaction history for a specific wallet. Supports filtering by transaction type, status, and date range.\n * @summary Get transaction history for a wallet\n */\n const transactionControllerGetWalletTransactions = (\n walletId: string,\n params?: TransactionControllerGetWalletTransactionsParams,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/transactions`, method: \"GET\", params },\n options,\n );\n };\n /**\n * Retrieve the current status and details of a transaction using its Solana signature. Includes confirmation status and any error information.\n * @summary Get transaction status by signature\n */\n const transactionControllerGetTransactionStatus = (\n signature: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/transactions/${signature}`, method: \"GET\" },\n options,\n );\n };\n return {\n transactionControllerGetWalletTransactions,\n transactionControllerGetTransactionStatus,\n };\n};\nexport type TransactionControllerGetWalletTransactionsResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getTransactions\n >[\"transactionControllerGetWalletTransactions\"]\n >\n >\n>;\nexport type TransactionControllerGetTransactionStatusResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<\n typeof getTransactions\n >[\"transactionControllerGetTransactionStatus\"]\n >\n >\n>;\n", "/**\r\n * Delegated Keys module - Simplified exports for delegated key management API functions\r\n */\r\n\r\nimport { getDelegatedKeys } from './api/delegated-keys/delegated-keys';\r\n\r\nconst {\r\n delegatedKeyControllerCreate,\r\n delegatedKeyControllerFindAll,\r\n delegatedKeyControllerFindOne,\r\n delegatedKeyControllerUpdate,\r\n delegatedKeyControllerRemove,\r\n} = getDelegatedKeys();\r\n\r\n// Export delegated key functions with simplified names\r\nexport const create = delegatedKeyControllerCreate;\r\nexport const findAll = delegatedKeyControllerFindAll;\r\nexport const findOne = delegatedKeyControllerFindOne;\r\nexport const update = delegatedKeyControllerUpdate;\r\nexport const remove = delegatedKeyControllerRemove;\r\n\r\n// Export types\r\nexport type {\r\n DelegatedKeyControllerCreateResult,\r\n DelegatedKeyControllerFindAllResult,\r\n DelegatedKeyControllerFindOneResult,\r\n DelegatedKeyControllerUpdateResult,\r\n DelegatedKeyControllerRemoveResult,\r\n} from './api/delegated-keys/delegated-keys';\r\n\r\nexport type {\r\n CreateDelegatedKeyDto,\r\n UpdateDelegatedKeyDto,\r\n DelegatedKeyPermissionsDto,\r\n} from './models';\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n CreateDelegatedKeyDto,\n UpdateDelegatedKeyDto,\n} from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getDelegatedKeys = () => {\n /**\n * Create a temporary delegated key that can sign transactions on behalf of the wallet. Useful for session-based signing without requiring the main key.\n * @summary Create a delegated key for a wallet\n */\n const delegatedKeyControllerCreate = (\n walletId: string,\n createDelegatedKeyDto: CreateDelegatedKeyDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${walletId}/delegated-keys`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createDelegatedKeyDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all delegated keys associated with the wallet, including their status and expiration.\n * @summary Get all delegated keys for a wallet\n */\n const delegatedKeyControllerFindAll = (\n walletId: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/delegated-keys`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific delegated key including its permissions and expiration.\n * @summary Get delegated key by ID\n */\n const delegatedKeyControllerFindOne = (\n walletId: string,\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/delegated-keys/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update delegated key configuration such as permissions, spending limits, or expiration time.\n * @summary Update delegated key\n */\n const delegatedKeyControllerUpdate = (\n walletId: string,\n id: string,\n updateDelegatedKeyDto: UpdateDelegatedKeyDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/wallets/${walletId}/delegated-keys/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateDelegatedKeyDto,\n },\n options,\n );\n };\n /**\n * Permanently revoke a delegated key. The key will no longer be able to sign transactions.\n * @summary Revoke delegated key\n */\n const delegatedKeyControllerRemove = (\n walletId: string,\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/wallets/${walletId}/delegated-keys/${id}`, method: \"DELETE\" },\n options,\n );\n };\n return {\n delegatedKeyControllerCreate,\n delegatedKeyControllerFindAll,\n delegatedKeyControllerFindOne,\n delegatedKeyControllerUpdate,\n delegatedKeyControllerRemove,\n };\n};\nexport type DelegatedKeyControllerCreateResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerCreate\"]\n >\n >\n>;\nexport type DelegatedKeyControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerFindAll\"]\n >\n >\n>;\nexport type DelegatedKeyControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerFindOne\"]\n >\n >\n>;\nexport type DelegatedKeyControllerUpdateResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerUpdate\"]\n >\n >\n>;\nexport type DelegatedKeyControllerRemoveResult = NonNullable<\n Awaited<\n ReturnType<\n ReturnType<typeof getDelegatedKeys>[\"delegatedKeyControllerRemove\"]\n >\n >\n>;\n", "/**\r\n * Webhooks module - Simplified exports for webhook management API functions\r\n */\r\n\r\nimport { getWebhooks } from './api/webhooks/webhooks';\r\n\r\nconst {\r\n webhookControllerCreate,\r\n webhookControllerFindAll,\r\n webhookControllerFindOne,\r\n webhookControllerUpdate,\r\n webhookControllerRemove,\r\n} = getWebhooks();\r\n\r\n// Export webhook functions with simplified names\r\nexport const create = webhookControllerCreate;\r\nexport const findAll = webhookControllerFindAll;\r\nexport const findOne = webhookControllerFindOne;\r\nexport const update = webhookControllerUpdate;\r\nexport const remove = webhookControllerRemove;\r\n\r\n// Export types\r\nexport type {\r\n WebhookControllerCreateResult,\r\n WebhookControllerFindAllResult,\r\n WebhookControllerFindOneResult,\r\n WebhookControllerUpdateResult,\r\n WebhookControllerRemoveResult,\r\n} from './api/webhooks/webhooks';\r\n\r\nexport type {\r\n CreateWebhookDto,\r\n UpdateWebhookDto,\r\n WebhookEvent,\r\n} from './models';\r\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type { CreateWebhookDto, UpdateWebhookDto } from \"../../models\";\n\nimport { customInstance } from \"../../api-client\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\nexport const getWebhooks = () => {\n /**\n * Register a new webhook endpoint to receive event notifications. The webhook URL must be HTTPS and accessible from the server.\n * @summary Create a new webhook\n */\n const webhookControllerCreate = (\n createWebhookDto: CreateWebhookDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/webhooks`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createWebhookDto,\n },\n options,\n );\n };\n /**\n * Retrieve a list of all webhook endpoints registered for the authenticated platform.\n * @summary Get all webhooks for the platform\n */\n const webhookControllerFindAll = (\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/webhooks`, method: \"GET\" },\n options,\n );\n };\n /**\n * Retrieve detailed information about a specific webhook including its configuration and delivery history.\n * @summary Get webhook by ID\n */\n const webhookControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/webhooks/${id}`, method: \"GET\" },\n options,\n );\n };\n /**\n * Update webhook configuration such as URL, events to subscribe to, or active status.\n * @summary Update webhook\n */\n const webhookControllerUpdate = (\n id: string,\n updateWebhookDto: UpdateWebhookDto,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n {\n url: `/platforms/webhooks/${id}`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateWebhookDto,\n },\n options,\n );\n };\n /**\n * Permanently remove a webhook endpoint. Any pending deliveries will be cancelled.\n * @summary Delete webhook\n */\n const webhookControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,\n ) => {\n return customInstance<void>(\n { url: `/platforms/webhooks/${id}`, method: \"DELETE\" },\n options,\n );\n };\n return {\n webhookControllerCreate,\n webhookControllerFindAll,\n webhookControllerFindOne,\n webhookControllerUpdate,\n webhookControllerRemove,\n };\n};\nexport type WebhookControllerCreateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerCreate\"]>>\n>;\nexport type WebhookControllerFindAllResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerFindAll\"]>\n >\n>;\nexport type WebhookControllerFindOneResult = NonNullable<\n Awaited<\n ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerFindOne\"]>\n >\n>;\nexport type WebhookControllerUpdateResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerUpdate\"]>>\n>;\nexport type WebhookControllerRemoveResult = NonNullable<\n Awaited<ReturnType<ReturnType<typeof getWebhooks>[\"webhookControllerRemove\"]>>\n>;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * GUAC Smart API v2\n * API documentation for GUAC Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\nimport type {\n AdminControllerFindAllParams,\n AdminControllerFindAllPlatformsParams,\n AdminControllerGetPlatformsWithUsersParams,\n AdminControllerGetUsersWithWalletsParams,\n AdminControllerGetWalletAssetsParams,\n AuthControllerLogin200,\n CommonLoginDto,\n CreateAdminDto,\n CreatePlatformDto,\n CreateUserDto,\n CreateWalletDto,\n LoginAdminDto,\n LoginPlatformDto,\n LoginUserDto,\n MintNftDto,\n MintNftSimpleDto,\n MintTokenDto,\n SendSolDto,\n SendSplDto,\n SendTransactionDto,\n UpdateAdminDto,\n UpdatePlatformDto,\n UpdateUserDto,\n UpdateWalletDto,\n WalletAssetResponseDto,\n WalletControllerGetWalletAssetsParams,\n WalletControllerMintNFT200,\n WalletControllerMintNFTSimple200,\n WalletControllerMintToken200,\n WalletControllerSendSOL200,\n WalletControllerSendSPL200,\n WalletControllerSendTransaction200\n} from '../models';\n\nimport { customInstance } from '../api-client';\n\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n\n export const getGUACSmartAPIV2 = () => {\nconst appControllerGetHello = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Register a new platform\n */\nconst platformControllerCreate = (\n createPlatformDto: CreatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createPlatformDto\n },\n options);\n }\n \n/**\n * @summary Get all platforms\n */\nconst platformControllerFindAll = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Platform login\n */\nconst platformControllerLogin = (\n loginPlatformDto: LoginPlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: loginPlatformDto\n },\n options);\n }\n \n/**\n * Retrieve the authenticated platform's own profile information. Requires platform JWT token.\n * @summary Get own platform profile\n */\nconst platformControllerGetOwnProfile = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update own platform profile\n */\nconst platformControllerUpdateOwnProfile = (\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updatePlatformDto\n },\n options);\n }\n \n/**\n * @summary Get platform by ID\n */\nconst platformControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update platform\n */\nconst platformControllerUpdate = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updatePlatformDto\n },\n options);\n }\n \n/**\n * @summary Delete platform\n */\nconst platformControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * Retrieve all users that belong to the authenticated platform. Requires platform JWT token.\n * @summary Get all users under this platform\n */\nconst platformControllerGetUsersForPlatform = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Create user under this platform\n */\nconst platformControllerCreateUserForPlatform = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createUserDto\n },\n options);\n }\n \n/**\n * @summary Update user under this platform\n */\nconst platformControllerUpdateUserForPlatform = (\n userId: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users/${userId}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateUserDto\n },\n options);\n }\n \n/**\n * @summary Delete user under this platform\n */\nconst platformControllerRemoveUserForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users/${userId}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * @summary Toggle user active status under this platform\n */\nconst platformControllerToggleUserActiveForPlatform = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/users/${userId}/toggle-active`, method: 'PATCH'\n },\n options);\n }\n \n/**\n * Retrieve all wallets belonging to users under the authenticated platform. Read-only access. Requires platform JWT token.\n * @summary Get all wallets of users under this platform (read-only)\n */\nconst platformControllerGetWalletsForPlatform = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/platforms/me/wallets`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Register a new user\n */\nconst userControllerCreate = (\n createUserDto: CreateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createUserDto\n },\n options);\n }\n \n/**\n * @summary User login\n */\nconst userControllerLogin = (\n loginUserDto: LoginUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: loginUserDto\n },\n options);\n }\n \n/**\n * Retrieve user profile by ID. Users can only access their own profile. Requires user JWT token.\n * @summary Get user by ID\n */\nconst userControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * Update user profile by ID. Users can only update their own profile. Requires user JWT token.\n * @summary Update user\n */\nconst userControllerUpdate = (\n id: string,\n updateUserDto: UpdateUserDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/users/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateUserDto\n },\n options);\n }\n \n/**\n * @summary Initialize a new wallet on-chain and store in database\n */\nconst walletControllerCreate = (\n createWalletDto: CreateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createWalletDto\n },\n options);\n }\n \n/**\n * @summary Get all wallets for authenticated user\n */\nconst walletControllerFindAll = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get total balance across all user wallets\n */\nconst walletControllerGetTotalBalance = (\n \n options?: SecondParameter<typeof customInstance<number>>,) => {\n return customInstance<number>(\n {url: `/wallets/balance/total`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get wallet by ID\n */\nconst walletControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update wallet\n */\nconst walletControllerUpdate = (\n id: string,\n updateWalletDto: UpdateWalletDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateWalletDto\n },\n options);\n }\n \n/**\n * @summary Delete wallet\n */\nconst walletControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * @summary Get wallet by address\n */\nconst walletControllerFindByAddress = (\n address: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/address/${address}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Send SOL from wallet to recipient\n */\nconst walletControllerSendSOL = (\n id: string,\n sendSolDto: SendSolDto,\n options?: SecondParameter<typeof customInstance<WalletControllerSendSOL200>>,) => {\n return customInstance<WalletControllerSendSOL200>(\n {url: `/wallets/${id}/send-sol`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: sendSolDto\n },\n options);\n }\n \n/**\n * @summary Send SPL tokens from wallet to recipient\n */\nconst walletControllerSendSPL = (\n id: string,\n sendSplDto: SendSplDto,\n options?: SecondParameter<typeof customInstance<WalletControllerSendSPL200>>,) => {\n return customInstance<WalletControllerSendSPL200>(\n {url: `/wallets/${id}/send-spl`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: sendSplDto\n },\n options);\n }\n \n/**\n * @summary Mint NFT using Metaplex via CPI (Advanced)\n */\nconst walletControllerMintNFT = (\n id: string,\n mintNftDto: MintNftDto,\n options?: SecondParameter<typeof customInstance<WalletControllerMintNFT200>>,) => {\n return customInstance<WalletControllerMintNFT200>(\n {url: `/wallets/${id}/mint-nft`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: mintNftDto\n },\n options);\n }\n \n/**\n * @summary Mint NFT with metadata - handles all logic internally using Metaplex Core\n */\nconst walletControllerMintNFTSimple = (\n id: string,\n mintNftSimpleDto: MintNftSimpleDto,\n options?: SecondParameter<typeof customInstance<WalletControllerMintNFTSimple200>>,) => {\n return customInstance<WalletControllerMintNFTSimple200>(\n {url: `/wallets/${id}/mint-nft-simple`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: mintNftSimpleDto\n },\n options);\n }\n \n/**\n * @summary Mint fungible token (SPL or Token-2022) with initial supply to wallet\n */\nconst walletControllerMintToken = (\n id: string,\n mintTokenDto: MintTokenDto,\n options?: SecondParameter<typeof customInstance<WalletControllerMintToken200>>,) => {\n return customInstance<WalletControllerMintToken200>(\n {url: `/wallets/${id}/mint-token`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: mintTokenDto\n },\n options);\n }\n \n/**\n * @summary Execute arbitrary transaction via CPI to any Solana program\n */\nconst walletControllerSendTransaction = (\n id: string,\n sendTransactionDto: SendTransactionDto,\n options?: SecondParameter<typeof customInstance<WalletControllerSendTransaction200>>,) => {\n return customInstance<WalletControllerSendTransaction200>(\n {url: `/wallets/${id}/send-transaction`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: sendTransactionDto\n },\n options);\n }\n \n/**\n * @summary Get all assets for a wallet (cached with auto-refresh)\n */\nconst walletControllerGetWalletAssets = (\n id: string,\n params?: WalletControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,) => {\n return customInstance<WalletAssetResponseDto[]>(\n {url: `/wallets/${id}/assets`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Force sync wallet balance and assets from blockchain immediately\n */\nconst walletControllerSyncWalletAssets = (\n id: string,\n options?: SecondParameter<typeof customInstance<WalletAssetResponseDto[]>>,) => {\n return customInstance<WalletAssetResponseDto[]>(\n {url: `/wallets/${id}/sync`, method: 'POST'\n },\n options);\n }\n \n/**\n * @summary Force refresh wallet balance immediately (alias for sync)\n */\nconst walletControllerForceRefresh = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/wallets/${id}/refresh`, method: 'POST'\n },\n options);\n }\n \n/**\n * @summary Register a new admin\n */\nconst adminControllerCreate = (\n createAdminDto: CreateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: createAdminDto\n },\n options);\n }\n \n/**\n * @summary Get all admins\n */\nconst adminControllerFindAll = (\n params?: AdminControllerFindAllParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Admin login\n */\nconst adminControllerLogin = (\n loginAdminDto: LoginAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: loginAdminDto\n },\n options);\n }\n \n/**\n * @summary Get current admin profile\n */\nconst adminControllerGetCurrentAdmin = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/me`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get all platform API keys\n */\nconst adminControllerGetAllApiKeys = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/api-keys`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get specific platform API key\n */\nconst adminControllerGetplatformApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/api-keys/${platformId}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get admin by ID\n */\nconst adminControllerFindOne = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update admin\n */\nconst adminControllerUpdate = (\n id: string,\n updateAdminDto: UpdateAdminDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updateAdminDto\n },\n options);\n }\n \n/**\n * @summary Delete admin\n */\nconst adminControllerRemove = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * @summary Toggle admin active status\n */\nconst adminControllerToggleActive = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/${id}/toggle-active`, method: 'PATCH'\n },\n options);\n }\n \n/**\n * @summary View all platforms\n */\nconst adminControllerFindAllPlatforms = (\n params?: AdminControllerFindAllPlatformsParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/all`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary View platform details\n */\nconst adminControllerFindOnePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Update platform\n */\nconst adminControllerUpdatePlatform = (\n id: string,\n updatePlatformDto: UpdatePlatformDto,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/${id}`, method: 'PATCH',\n headers: {'Content-Type': 'application/json', },\n data: updatePlatformDto\n },\n options);\n }\n \n/**\n * @summary Delete platform\n */\nconst adminControllerRemovePlatform = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/platforms/${id}`, method: 'DELETE'\n },\n options);\n }\n \n/**\n * Retrieve all users in the system. Admin has read-only access to user data. Requires admin JWT token.\n * @summary View all users (read-only)\n */\nconst adminControllerFindAllUsers = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/users/all`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary View user details\n */\nconst adminControllerFindOneUser = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/users/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * Retrieve all wallets in the system. Admin has read-only access to wallet data. Requires admin JWT token.\n * @summary View all wallets (read-only)\n */\nconst adminControllerFindAllWallets = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/wallets/all`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary View all wallets for a specific user (read-only)\n */\nconst adminControllerFindWalletsByUserId = (\n userId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/wallets/user/${userId}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary View wallet details (read-only)\n */\nconst adminControllerFindOneWallet = (\n id: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/wallets/${id}`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get dashboard overview analytics\n */\nconst adminControllerGetOverviewAnalytics = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/analytics/overview`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get wallet analytics and statistics\n */\nconst adminControllerGetWalletAnalytics = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/analytics/wallets`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Get recent activity across all entities\n */\nconst adminControllerGetRecentActivity = (\n \n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/analytics/recent-activity`, method: 'GET'\n },\n options);\n }\n \n/**\n * @summary Regenerate platform API key\n */\nconst adminControllerRegenerateApiKey = (\n platformId: string,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/api-keys/${platformId}/regenerate`, method: 'POST'\n },\n options);\n }\n \n/**\n * @summary Get platforms with their user counts\n */\nconst adminControllerGetPlatformsWithUsers = (\n params?: AdminControllerGetPlatformsWithUsersParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/data/platforms-with-users`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Get users with their wallet counts and balances\n */\nconst adminControllerGetUsersWithWallets = (\n params?: AdminControllerGetUsersWithWalletsParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/data/users-with-wallets`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * @summary Get all wallet assets with filtering\n */\nconst adminControllerGetWalletAssets = (\n params?: AdminControllerGetWalletAssetsParams,\n options?: SecondParameter<typeof customInstance<void>>,) => {\n return customInstance<void>(\n {url: `/admin/data/wallet-assets`, method: 'GET',\n params\n },\n options);\n }\n \n/**\n * Authenticate as admin, platform, or user. Returns user type and appropriate JWT token.\n * @summary Universal login endpoint\n */\nconst authControllerLogin = (\n commonLoginDto: CommonLoginDto,\n options?: SecondParameter<typeof customInstance<AuthControllerLogin200>>,) => {\n return customInstance<AuthControllerLogin200>(\n {url: `/auth/login`, method: 'POST',\n headers: {'Content-Type': 'application/json', },\n data: commonLoginDto\n },\n options);\n }\n \nreturn {appControllerGetHello,platformControllerCreate,platformControllerFindAll,platformControllerLogin,platformControllerGetOwnProfile,platformControllerUpdateOwnProfile,platformControllerFindOne,platformControllerUpdate,platformControllerRemove,platformControllerGetUsersForPlatform,platformControllerCreateUserForPlatform,platformControllerUpdateUserForPlatform,platformControllerRemoveUserForPlatform,platformControllerToggleUserActiveForPlatform,platformControllerGetWalletsForPlatform,userControllerCreate,userControllerLogin,userControllerFindOne,userControllerUpdate,walletControllerCreate,walletControllerFindAll,walletControllerGetTotalBalance,walletControllerFindOne,walletControllerUpdate,walletControllerRemove,walletControllerFindByAddress,walletControllerSendSOL,walletControllerSendSPL,walletControllerMintNFT,walletControllerMintNFTSimple,walletControllerMintToken,walletControllerSendTransaction,walletControllerGetWalletAssets,walletControllerSyncWalletAssets,walletControllerForceRefresh,adminControllerCreate,adminControllerFindAll,adminControllerLogin,adminControllerGetCurrentAdmin,adminControllerGetAllApiKeys,adminControllerGetplatformApiKey,adminControllerFindOne,adminControllerUpdate,adminControllerRemove,adminControllerToggleActive,adminControllerFindAllPlatforms,adminControllerFindOnePlatform,adminControllerUpdatePlatform,adminControllerRemovePlatform,adminControllerFindAllUsers,adminControllerFindOneUser,adminControllerFindAllWallets,adminControllerFindWalletsByUserId,adminControllerFindOneWallet,adminControllerGetOverviewAnalytics,adminControllerGetWalletAnalytics,adminControllerGetRecentActivity,adminControllerRegenerateApiKey,adminControllerGetPlatformsWithUsers,adminControllerGetUsersWithWallets,adminControllerGetWalletAssets,authControllerLogin}};\nexport type AppControllerGetHelloResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['appControllerGetHello']>>>\nexport type PlatformControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerCreate']>>>\nexport type PlatformControllerFindAllResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerFindAll']>>>\nexport type PlatformControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerLogin']>>>\nexport type PlatformControllerGetOwnProfileResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerGetOwnProfile']>>>\nexport type PlatformControllerUpdateOwnProfileResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerUpdateOwnProfile']>>>\nexport type PlatformControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerFindOne']>>>\nexport type PlatformControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerUpdate']>>>\nexport type PlatformControllerRemoveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerRemove']>>>\nexport type PlatformControllerGetUsersForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerGetUsersForPlatform']>>>\nexport type PlatformControllerCreateUserForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerCreateUserForPlatform']>>>\nexport type PlatformControllerUpdateUserForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerUpdateUserForPlatform']>>>\nexport type PlatformControllerRemoveUserForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerRemoveUserForPlatform']>>>\nexport type PlatformControllerToggleUserActiveForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerToggleUserActiveForPlatform']>>>\nexport type PlatformControllerGetWalletsForPlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['platformControllerGetWalletsForPlatform']>>>\nexport type UserControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerCreate']>>>\nexport type UserControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerLogin']>>>\nexport type UserControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerFindOne']>>>\nexport type UserControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['userControllerUpdate']>>>\nexport type WalletControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerCreate']>>>\nexport type WalletControllerFindAllResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerFindAll']>>>\nexport type WalletControllerGetTotalBalanceResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerGetTotalBalance']>>>\nexport type WalletControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerFindOne']>>>\nexport type WalletControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerUpdate']>>>\nexport type WalletControllerRemoveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerRemove']>>>\nexport type WalletControllerFindByAddressResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerFindByAddress']>>>\nexport type WalletControllerSendSOLResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSendSOL']>>>\nexport type WalletControllerSendSPLResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSendSPL']>>>\nexport type WalletControllerMintNFTResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerMintNFT']>>>\nexport type WalletControllerMintNFTSimpleResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerMintNFTSimple']>>>\nexport type WalletControllerMintTokenResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerMintToken']>>>\nexport type WalletControllerSendTransactionResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSendTransaction']>>>\nexport type WalletControllerGetWalletAssetsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerGetWalletAssets']>>>\nexport type WalletControllerSyncWalletAssetsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerSyncWalletAssets']>>>\nexport type WalletControllerForceRefreshResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['walletControllerForceRefresh']>>>\nexport type AdminControllerCreateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerCreate']>>>\nexport type AdminControllerFindAllResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAll']>>>\nexport type AdminControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerLogin']>>>\nexport type AdminControllerGetCurrentAdminResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetCurrentAdmin']>>>\nexport type AdminControllerGetAllApiKeysResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetAllApiKeys']>>>\nexport type AdminControllerGetplatformApiKeyResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetplatformApiKey']>>>\nexport type AdminControllerFindOneResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOne']>>>\nexport type AdminControllerUpdateResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerUpdate']>>>\nexport type AdminControllerRemoveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerRemove']>>>\nexport type AdminControllerToggleActiveResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerToggleActive']>>>\nexport type AdminControllerFindAllPlatformsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAllPlatforms']>>>\nexport type AdminControllerFindOnePlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOnePlatform']>>>\nexport type AdminControllerUpdatePlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerUpdatePlatform']>>>\nexport type AdminControllerRemovePlatformResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerRemovePlatform']>>>\nexport type AdminControllerFindAllUsersResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAllUsers']>>>\nexport type AdminControllerFindOneUserResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOneUser']>>>\nexport type AdminControllerFindAllWalletsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindAllWallets']>>>\nexport type AdminControllerFindWalletsByUserIdResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindWalletsByUserId']>>>\nexport type AdminControllerFindOneWalletResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerFindOneWallet']>>>\nexport type AdminControllerGetOverviewAnalyticsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetOverviewAnalytics']>>>\nexport type AdminControllerGetWalletAnalyticsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetWalletAnalytics']>>>\nexport type AdminControllerGetRecentActivityResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetRecentActivity']>>>\nexport type AdminControllerRegenerateApiKeyResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerRegenerateApiKey']>>>\nexport type AdminControllerGetPlatformsWithUsersResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetPlatformsWithUsers']>>>\nexport type AdminControllerGetUsersWithWalletsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetUsersWithWallets']>>>\nexport type AdminControllerGetWalletAssetsResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['adminControllerGetWalletAssets']>>>\nexport type AuthControllerLoginResult = NonNullable<Awaited<ReturnType<ReturnType<typeof getGUACSmartAPIV2>['authControllerLogin']>>>\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Signer type\n */\nexport type AddSignerDtoSignerType =\n (typeof AddSignerDtoSignerType)[keyof typeof AddSignerDtoSignerType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AddSignerDtoSignerType = {\n email: \"email\",\n phone: \"phone\",\n passkey: \"passkey\",\n external: \"external\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AdminControllerGetPlatformGrowthTrendsPeriod =\n (typeof AdminControllerGetPlatformGrowthTrendsPeriod)[keyof typeof AdminControllerGetPlatformGrowthTrendsPeriod];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminControllerGetPlatformGrowthTrendsPeriod = {\n daily: \"daily\",\n weekly: \"weekly\",\n monthly: \"monthly\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AdminControllerGetTopPlatformsMetric =\n (typeof AdminControllerGetTopPlatformsMetric)[keyof typeof AdminControllerGetTopPlatformsMetric];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminControllerGetTopPlatformsMetric = {\n users: \"users\",\n wallets: \"wallets\",\n transactions: \"transactions\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AdminControllerGetWalletAssetsAssetType =\n (typeof AdminControllerGetWalletAssetsAssetType)[keyof typeof AdminControllerGetWalletAssetsAssetType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminControllerGetWalletAssetsAssetType = {\n NFT: \"NFT\",\n SPL_TOKEN: \"SPL_TOKEN\",\n SOL: \"SOL\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Signer type for admin\n */\nexport type AdminSignerConfigDtoType =\n (typeof AdminSignerConfigDtoType)[keyof typeof AdminSignerConfigDtoType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AdminSignerConfigDtoType = {\n email: \"email\",\n phone: \"phone\",\n passkey: \"passkey\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Optional enforcement type override for this assignment\n */\nexport type AssignPlanDtoPlanEnforcementType =\n (typeof AssignPlanDtoPlanEnforcementType)[keyof typeof AssignPlanDtoPlanEnforcementType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AssignPlanDtoPlanEnforcementType = {\n hard_block: \"hard_block\",\n soft_warning: \"soft_warning\",\n none: \"none\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type AuthControllerLogin200DataUserType =\n (typeof AuthControllerLogin200DataUserType)[keyof typeof AuthControllerLogin200DataUserType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const AuthControllerLogin200DataUserType = {\n admin: \"admin\",\n platform: \"platform\",\n user: \"user\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Enforcement type for plan limits\n */\nexport type CreatePlanDtoEnforcementType =\n (typeof CreatePlanDtoEnforcementType)[keyof typeof CreatePlanDtoEnforcementType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const CreatePlanDtoEnforcementType = {\n hard_block: \"hard_block\",\n soft_warning: \"soft_warning\",\n none: \"none\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Billing cycle for the subscription\n */\nexport type CreatePlatformDtoBillingCycle =\n (typeof CreatePlatformDtoBillingCycle)[keyof typeof CreatePlatformDtoBillingCycle];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const CreatePlatformDtoBillingCycle = {\n monthly: \"monthly\",\n yearly: \"yearly\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Billing cycle\n */\nexport type CreateSubscriptionDtoBillingCycle =\n (typeof CreateSubscriptionDtoBillingCycle)[keyof typeof CreateSubscriptionDtoBillingCycle];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const CreateSubscriptionDtoBillingCycle = {\n monthly: \"monthly\",\n yearly: \"yearly\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type HealthControllerGetHealth200ChecksDatabaseStatus =\n (typeof HealthControllerGetHealth200ChecksDatabaseStatus)[keyof typeof HealthControllerGetHealth200ChecksDatabaseStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200ChecksDatabaseStatus = {\n up: \"up\",\n down: \"down\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type HealthControllerGetHealth200ChecksRedisStatus =\n (typeof HealthControllerGetHealth200ChecksRedisStatus)[keyof typeof HealthControllerGetHealth200ChecksRedisStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200ChecksRedisStatus = {\n up: \"up\",\n down: \"down\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type HealthControllerGetHealth200ChecksSolanaRpcStatus =\n (typeof HealthControllerGetHealth200ChecksSolanaRpcStatus)[keyof typeof HealthControllerGetHealth200ChecksSolanaRpcStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200ChecksSolanaRpcStatus = {\n up: \"up\",\n down: \"down\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Overall system status\n */\nexport type HealthControllerGetHealth200Status =\n (typeof HealthControllerGetHealth200Status)[keyof typeof HealthControllerGetHealth200Status];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const HealthControllerGetHealth200Status = {\n healthy: \"healthy\",\n degraded: \"degraded\",\n unhealthy: \"unhealthy\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Token standard to use\n */\nexport type MintTokenDtoTokenStandard =\n (typeof MintTokenDtoTokenStandard)[keyof typeof MintTokenDtoTokenStandard];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MintTokenDtoTokenStandard = {\n spl: \"spl\",\n \"token-2022\": \"token-2022\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Transaction type\n */\nexport type PrepareTransactionDtoType =\n (typeof PrepareTransactionDtoType)[keyof typeof PrepareTransactionDtoType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const PrepareTransactionDtoType = {\n send_sol: \"send_sol\",\n send_token: \"send_token\",\n execute_instruction: \"execute_instruction\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type SubscriptionControllerFindAllStatus =\n (typeof SubscriptionControllerFindAllStatus)[keyof typeof SubscriptionControllerFindAllStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const SubscriptionControllerFindAllStatus = {\n trial: \"trial\",\n active: \"active\",\n cancelled: \"cancelled\",\n expired: \"expired\",\n grace_period: \"grace_period\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type TransactionStatus =\n (typeof TransactionStatus)[keyof typeof TransactionStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TransactionStatus = {\n pending: \"pending\",\n confirmed: \"confirmed\",\n failed: \"failed\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type TransactionType =\n (typeof TransactionType)[keyof typeof TransactionType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TransactionType = {\n SEND_SOL: \"SEND_SOL\",\n SEND_SPL: \"SEND_SPL\",\n MINT_NFT: \"MINT_NFT\",\n MINT_TOKEN: \"MINT_TOKEN\",\n EXECUTE_TRANSACTION: \"EXECUTE_TRANSACTION\",\n WALLET_CREATED: \"WALLET_CREATED\",\n WALLET_DEACTIVATED: \"WALLET_DEACTIVATED\",\n WALLET_ACTIVATED: \"WALLET_ACTIVATED\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Enforcement type for plan limits\n */\nexport type UpdatePlanDtoEnforcementType =\n (typeof UpdatePlanDtoEnforcementType)[keyof typeof UpdatePlanDtoEnforcementType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const UpdatePlanDtoEnforcementType = {\n hard_block: \"hard_block\",\n soft_warning: \"soft_warning\",\n none: \"none\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type WalletAssetResponseDtoAssetType =\n (typeof WalletAssetResponseDtoAssetType)[keyof typeof WalletAssetResponseDtoAssetType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const WalletAssetResponseDtoAssetType = {\n NFT: \"NFT\",\n SPL_TOKEN: \"SPL_TOKEN\",\n SOL: \"SOL\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\nexport type WalletControllerGetWalletAssetsAssetType =\n (typeof WalletControllerGetWalletAssetsAssetType)[keyof typeof WalletControllerGetWalletAssetsAssetType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const WalletControllerGetWalletAssetsAssetType = {\n NFT: \"NFT\",\n SPL_TOKEN: \"SPL_TOKEN\",\n SOL: \"SOL\",\n} as const;\n", "/**\n * Generated by orval v7.17.0 \uD83C\uDF7A\n * Do not edit manually.\n * Cilantro Smart API v2\n * API documentation for Cilantro Smart API v2 - A Solana wallet management system\n * OpenAPI spec version: 2.0\n */\n\n/**\n * Array of events to subscribe to\n */\nexport type WebhookEvent = (typeof WebhookEvent)[keyof typeof WebhookEvent];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const WebhookEvent = {\n walletcreated: \"wallet.created\",\n walletdeactivated: \"wallet.deactivated\",\n walletactivated: \"wallet.activated\",\n transactionsent: \"transaction.sent\",\n transactionconfirmed: \"transaction.confirmed\",\n transactionfailed: \"transaction.failed\",\n assetreceived: \"asset.received\",\n nftminted: \"nft.minted\",\n tokenminted: \"token.minted\",\n} as const;\n", "/**\r\n * Utility function to generate a device public key for ECDH (P-256)\r\n * Works in both browser and Node.js environments\r\n * \r\n * The generated public key is a P-256 ECDH public key encoded in base64 format,\r\n * suitable for use with email and phone signers.\r\n * \r\n * @returns Promise<string> - Base64-encoded P-256 ECDH public key (raw uncompressed format, 65 bytes)\r\n * \r\n * @example\r\n * ```typescript\r\n * import { generateDevicePublicKey } from 'cilantro-sdk/utils';\r\n * import { createEmailSigner } from 'cilantro-sdk/wallet';\r\n * \r\n * // Generate device public key\r\n * const devicePublicKey = await generateDevicePublicKey();\r\n * \r\n * // Use with createEmailSigner\r\n * await createEmailSigner('wallet-id', {\r\n * email: 'user@example.com',\r\n * devicePublicKey: devicePublicKey\r\n * });\r\n * ```\r\n * \r\n * @example\r\n * ```typescript\r\n * // Browser usage\r\n * const devicePublicKey = await generateDevicePublicKey();\r\n * console.log('Device Public Key:', devicePublicKey);\r\n * ```\r\n * \r\n * @example\r\n * ```typescript\r\n * // Node.js usage\r\n * const { generateDevicePublicKey } = require('cilantro-sdk/utils');\r\n * const devicePublicKey = await generateDevicePublicKey();\r\n * ```\r\n */\r\nexport async function generateDevicePublicKey(): Promise<string> {\r\n // Check if we're in a browser environment (Web Crypto API available)\r\n // Use a type-safe check for window\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const hasWindow = typeof (globalThis as any).window !== 'undefined';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const globalWindow = hasWindow ? (globalThis as any).window : undefined;\r\n if (globalWindow && globalWindow.crypto && globalWindow.crypto.subtle) {\r\n return generateDevicePublicKeyBrowser();\r\n }\r\n \r\n // Check for global crypto (works in both browser and Node.js 15+)\r\n if (typeof globalThis !== 'undefined' && globalThis.crypto && globalThis.crypto.subtle) {\r\n return generateDevicePublicKeyBrowser();\r\n }\r\n \r\n // Node.js environment - try to use crypto module\r\n // Check for Node.js environment indicators\r\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\r\n try {\r\n // Use require for Node.js (works in both CommonJS and ESM when bundled)\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const crypto = require('crypto');\r\n return generateDevicePublicKeyNode(crypto);\r\n } catch (requireError) {\r\n throw new Error('Unable to generate device public key: Node.js crypto module not available.');\r\n }\r\n }\r\n \r\n throw new Error('Unable to generate device public key: no crypto implementation available. Make sure you are running in a browser with Web Crypto API support or Node.js with crypto module.');\r\n}\r\n\r\n/**\r\n * Generate device public key using Web Crypto API (browser)\r\n * Returns public key in raw uncompressed format (65 bytes)\r\n */\r\nasync function generateDevicePublicKeyBrowser(): Promise<string> {\r\n const crypto = globalThis.crypto;\r\n \r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Generate a P-256 ECDH key pair\r\n const keyPair = await crypto.subtle.generateKey(\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n true, // extractable\r\n ['deriveBits', 'deriveKey']\r\n );\r\n \r\n // Export the public key in raw format (uncompressed, 65 bytes)\r\n const publicKeyBuffer = await crypto.subtle.exportKey(\r\n 'raw',\r\n keyPair.publicKey\r\n );\r\n \r\n // Convert ArrayBuffer to base64 string\r\n const base64 = arrayBufferToBase64(publicKeyBuffer);\r\n \r\n return base64;\r\n}\r\n\r\n/**\r\n * Generate device public key using Node.js crypto module\r\n * Returns public key in raw uncompressed format (65 bytes)\r\n */\r\nfunction generateDevicePublicKeyNode(crypto: typeof import('crypto')): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // Create ECDH instance with P-256 curve\r\n const ecdh = crypto.createECDH('prime256v1'); // P-256\r\n \r\n // Generate keys\r\n ecdh.generateKeys();\r\n \r\n // Get public key in uncompressed format (65 bytes) and convert to base64\r\n const publicKey = ecdh.getPublicKey(null, 'uncompressed');\r\n const base64 = publicKey.toString('base64');\r\n \r\n resolve(base64);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to base64 string\r\n */\r\nfunction arrayBufferToBase64(buffer: ArrayBuffer): string {\r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(buffer).toString('base64');\r\n }\r\n \r\n // Browser environment\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return btoa(binary);\r\n}\r\n\r\n", "/**\r\n * Helper Functions Module\r\n * Simplified exports for device key management and signer helpers\r\n */\r\n\r\n// Device Key Management\r\nexport {\r\n generateDeviceKeyPair,\r\n getOrCreateDeviceKeyPair,\r\n getDevicePublicKey,\r\n getDevicePrivateKey,\r\n rotateDeviceKey,\r\n clearDeviceKeyCache,\r\n deleteDeviceKey,\r\n listDeviceKeys,\r\n findDeviceKeyByPublicKey,\r\n listAllDeviceKeys,\r\n type DeviceKeyPair,\r\n type DeviceKeyStorage\r\n} from './utils/deviceKeyManager';\r\n\r\n// Storage Adapters\r\nexport {\r\n createMemoryAdapter,\r\n createLocalStorageAdapter,\r\n createFileSystemAdapter,\r\n getDefaultStorageAdapter\r\n} from './utils/storage/adapters';\r\n\r\n// Key Format Utilities\r\nexport {\r\n normalizeSPKI,\r\n base64ToPEM,\r\n pemToBase64,\r\n base64ToArrayBuffer,\r\n arrayBufferToBase64,\r\n importSPKIPublicKey,\r\n exportToSPKI,\r\n isValidBase64\r\n} from './utils/keyFormats';\r\n\r\n// Core Signer Helpers\r\nexport {\r\n deriveSignerKeypair,\r\n signWithSigner,\r\n parseSignerResponse,\r\n clearSignerCache,\r\n getCacheStats,\r\n type SignerInfo,\r\n type Keypair,\r\n type CachedKeypair,\r\n type CacheConfig\r\n} from './signers/signerHelpers';\r\n\r\n// Email Signer Helpers\r\nexport {\r\n createEmailSignerHelper,\r\n getEmailSignerKeypair,\r\n signWithEmailSigner,\r\n clearEmailSignerCache,\r\n getEmailSignerByEmail,\r\n type EmailSignerConfig,\r\n type EmailSignerOptions\r\n} from './signers/emailSigner';\r\n\r\n// Phone Signer Helpers\r\nexport {\r\n createPhoneSignerHelper,\r\n getPhoneSignerKeypair,\r\n signWithPhoneSigner,\r\n clearPhoneSignerCache,\r\n getPhoneSignerByPhone,\r\n type PhoneSignerConfig,\r\n type PhoneSignerOptions\r\n} from './signers/phoneSigner';\r\n\r\n// Device Key Validation & Resolution\r\nexport {\r\n getSignerDeviceKeys,\r\n validateDeviceKey,\r\n resolveDeviceKey,\r\n findAndValidateDeviceKey,\r\n getBestDeviceIdentity,\r\n type DeviceIdentity,\r\n type DeviceKeyValidationResult\r\n} from './signers/deviceKeyHelpers';\r\n\r\n// Device Identity Management\r\nexport {\r\n addDeviceIdentityToSigner,\r\n replaceDeviceIdentity,\r\n addNewDeviceToSigner,\r\n canAddDeviceToSigner,\r\n type AddDeviceIdentityOptions,\r\n type ReplaceDeviceIdentityOptions\r\n} from './signers/deviceIdentityHelpers';\r\n\r\n// Passkey Helpers (simplified)\r\nexport {\r\n isWebAuthnSupported,\r\n isPlatformAuthenticatorAvailable,\r\n registerPasskey,\r\n authenticateWithPasskey,\r\n\r\n formatRegistrationResponse,\r\n formatAuthenticationResponse\r\n} from './signers/passkeyHelpers';\r\n\r\n// Signer Lifecycle (simplified)\r\nexport {\r\n createSigner,\r\n revokeSigner,\r\n getSigners\r\n} from './signers/signerLifecycle';\r\n\r\n// Multi-Device Management (simplified)\r\nexport {\r\n addDevice,\r\n replaceDevice,\r\n getDevices,\r\n updateDevice\r\n} from './signers/multiDeviceManager';\r\n\r\n// Validation (simplified)\r\nexport {\r\n isValidEmail,\r\n isValidPhone,\r\n isBrowserCompatible\r\n} from './signers/signerValidation';\r\n\r\n// External Wallet Adapter (simplified)\r\nexport {\r\n detectWallets,\r\n getWallet,\r\n connectWallet,\r\n signTransaction,\r\n signMessage,\r\n type SolanaWallet\r\n} from './signers/externalWalletAdapter';\r\n\r\n// Error Classes\r\nexport {\r\n SDKError,\r\n DeviceKeyMismatchError,\r\n DeviceKeyNotFoundError,\r\n NoDeviceIdentitiesError,\r\n MultipleDeviceIdentitiesError,\r\n SignerValidationError,\r\n SignerNotFoundError,\r\n SignerInactiveError,\r\n UnsupportedSignerTypeError,\r\n DeviceAuthorizationError,\r\n TransactionSigningError,\r\n WebAuthnNotSupportedError,\r\n DeviceCompatibilityError,\r\n type SDKErrorDetails\r\n} from './errors';\r\n", "/**\r\n * Unified Device Key Management API (Functional)\r\n * Handles generation, storage, retrieval, and rotation of device keys\r\n * Cross-platform support for browser and Node.js\r\n */\r\n\r\nexport interface DeviceKeyPair {\r\n publicKey: string; // Base64 raw uncompressed format (65 bytes)\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n privateKey: any; // CryptoKey in browser, base64 string in Node\r\n keyId: string;\r\n createdAt: Date;\r\n // Optional metadata for searchability\r\n deviceId?: string; // Device ID from API (if associated with a signer)\r\n signerId?: string; // Signer ID (if associated with a signer)\r\n walletId?: string; // Wallet ID (if associated with a signer)\r\n}\r\n\r\nexport interface DeviceKeyStorage {\r\n save(keyId: string, keyPair: DeviceKeyPair): Promise<void>;\r\n load(keyId: string): Promise<DeviceKeyPair | null>;\r\n list(): Promise<string[]>;\r\n remove(keyId: string): Promise<void>;\r\n // Enhanced methods for device key matching\r\n findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null>;\r\n listAll(): Promise<Array<{ keyId: string; publicKey: string }>>;\r\n}\r\n\r\n// Internal cache for device key pairs\r\nconst keyPairCache = new Map<string, DeviceKeyPair>();\r\n\r\n/**\r\n * Generate a new device key pair (P-256 ECDH)\r\n * Returns raw uncompressed format (65 bytes) consistently across platforms\r\n */\r\nexport async function generateDeviceKeyPair(): Promise<DeviceKeyPair> {\r\n const keyId = generateKeyId();\r\n const keyPair = await generateECDHKeyPair();\r\n \r\n const deviceKeyPair: DeviceKeyPair = {\r\n publicKey: keyPair.publicKey,\r\n privateKey: keyPair.privateKey,\r\n keyId,\r\n createdAt: new Date()\r\n };\r\n \r\n return deviceKeyPair;\r\n}\r\n\r\n/**\r\n * Get or create a device key pair with caching\r\n * Also supports finding by public key for automatic resolution\r\n * @param keyId - Optional key ID to retrieve, generates new if not found\r\n * @param storage - Optional storage adapter for persistence\r\n * @param devicePublicKey - Optional public key to search for (for automatic resolution)\r\n */\r\nexport async function getOrCreateDeviceKeyPair(\r\n keyId?: string,\r\n storage?: DeviceKeyStorage,\r\n devicePublicKey?: string\r\n): Promise<DeviceKeyPair> {\r\n // If devicePublicKey is provided, try to find by public key first\r\n if (devicePublicKey && storage) {\r\n const found = await findDeviceKeyByPublicKey(devicePublicKey, storage);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n \r\n // Check cache first\r\n if (keyId) {\r\n const cached = keyPairCache.get(keyId);\r\n if (cached) return cached;\r\n \r\n // Check storage if provided\r\n if (storage) {\r\n const stored = await storage.load(keyId);\r\n if (stored) {\r\n keyPairCache.set(keyId, stored);\r\n return stored;\r\n }\r\n }\r\n }\r\n \r\n // Generate new\r\n const keyPair = await generateDeviceKeyPair();\r\n if (storage) {\r\n await storage.save(keyPair.keyId, keyPair);\r\n }\r\n keyPairCache.set(keyPair.keyId, keyPair);\r\n \r\n return keyPair;\r\n}\r\n\r\n/**\r\n * Get public key in consistent format (raw uncompressed base64, 65 bytes)\r\n * Supports automatic resolution by devicePublicKey\r\n * @param keyId - Optional key ID\r\n * @param storage - Optional storage adapter\r\n * @param devicePublicKey - Optional public key to search for (for automatic resolution)\r\n */\r\nexport async function getDevicePublicKey(\r\n keyId?: string,\r\n storage?: DeviceKeyStorage,\r\n devicePublicKey?: string\r\n): Promise<string> {\r\n const keyPair = await getOrCreateDeviceKeyPair(keyId, storage, devicePublicKey);\r\n return keyPair.publicKey;\r\n}\r\n\r\n/**\r\n * Get private key for decryption\r\n * Supports automatic resolution by devicePublicKey\r\n * @param keyId - Optional key ID\r\n * @param storage - Optional storage adapter\r\n * @param devicePublicKey - Optional public key to search for (for automatic resolution)\r\n */\r\nexport async function getDevicePrivateKey(\r\n keyId?: string,\r\n storage?: DeviceKeyStorage,\r\n devicePublicKey?: string\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n): Promise<any> {\r\n const keyPair = await getOrCreateDeviceKeyPair(keyId, storage, devicePublicKey);\r\n return keyPair.privateKey;\r\n}\r\n\r\n/**\r\n * Rotate device key (generate new, optionally keep old for migration)\r\n * @param oldKeyId - ID of the old key\r\n * @param storage - Optional storage adapter\r\n */\r\nexport async function rotateDeviceKey(\r\n oldKeyId: string,\r\n storage?: DeviceKeyStorage\r\n): Promise<DeviceKeyPair> {\r\n const newKeyPair = await generateDeviceKeyPair();\r\n \r\n if (storage) {\r\n await storage.save(newKeyPair.keyId, newKeyPair);\r\n // Old key remains in storage for migration period\r\n }\r\n \r\n keyPairCache.set(newKeyPair.keyId, newKeyPair);\r\n return newKeyPair;\r\n}\r\n\r\n/**\r\n * Clear cache for a specific key or all keys\r\n * @param keyId - Optional key ID to clear, clears all if not provided\r\n */\r\nexport function clearDeviceKeyCache(keyId?: string): void {\r\n if (keyId) {\r\n keyPairCache.delete(keyId);\r\n } else {\r\n keyPairCache.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Delete a device key from storage and cache\r\n * @param keyId - Key ID to delete\r\n * @param storage - Storage adapter\r\n */\r\nexport async function deleteDeviceKey(\r\n keyId: string,\r\n storage: DeviceKeyStorage\r\n): Promise<void> {\r\n await storage.remove(keyId);\r\n keyPairCache.delete(keyId);\r\n}\r\n\r\n/**\r\n * List all device key IDs from storage\r\n * @param storage - Storage adapter\r\n */\r\nexport async function listDeviceKeys(storage: DeviceKeyStorage): Promise<string[]> {\r\n return storage.list();\r\n}\r\n\r\n/**\r\n * Find device key by public key\r\n * Searches both cache and storage to find matching device key\r\n * @param publicKey - Public key to search for\r\n * @param storage - Storage adapter\r\n * @returns Device key pair if found, null otherwise\r\n */\r\nexport async function findDeviceKeyByPublicKey(\r\n publicKey: string,\r\n storage?: DeviceKeyStorage\r\n): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison (remove whitespace, ensure consistent format)\r\n const normalizedPublicKey = normalizePublicKey(publicKey);\r\n \r\n // First, search in-memory cache\r\n for (const [keyId, cachedKeyPair] of keyPairCache.entries()) {\r\n if (normalizePublicKey(cachedKeyPair.publicKey) === normalizedPublicKey) {\r\n return cachedKeyPair;\r\n }\r\n }\r\n \r\n // If storage is provided, search in storage\r\n if (storage) {\r\n // Try the storage's native implementation first (most efficient)\r\n if (storage.findByPublicKey) {\r\n const found = await storage.findByPublicKey(normalizedPublicKey);\r\n if (found) {\r\n // Update cache with found key\r\n keyPairCache.set(found.keyId, found);\r\n return found;\r\n }\r\n }\r\n \r\n // Fallback: search through all keys in storage\r\n const allKeys = await storage.listAll();\r\n for (const { keyId, publicKey: storedPublicKey } of allKeys) {\r\n if (normalizePublicKey(storedPublicKey) === normalizedPublicKey) {\r\n const loaded = await storage.load(keyId);\r\n if (loaded) {\r\n // Update cache\r\n keyPairCache.set(keyId, loaded);\r\n return loaded;\r\n }\r\n }\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Normalize public key for consistent comparison\r\n * Removes whitespace and ensures consistent format\r\n */\r\nfunction normalizePublicKey(publicKey: string): string {\r\n return publicKey.trim().replace(/\\s/g, '');\r\n}\r\n\r\n/**\r\n * List all device keys with their public keys\r\n * @param storage - Storage adapter\r\n */\r\nexport async function listAllDeviceKeys(\r\n storage: DeviceKeyStorage\r\n): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n return storage.listAll();\r\n}\r\n\r\n// ============================================================================\r\n// Internal Helper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Generate a unique key ID\r\n */\r\nfunction generateKeyId(): string {\r\n const timestamp = Date.now();\r\n const random = Math.random().toString(36).substring(2, 11);\r\n return `device_key_${timestamp}_${random}`;\r\n}\r\n\r\n/**\r\n * Generate ECDH key pair (P-256) - cross-platform\r\n */\r\nasync function generateECDHKeyPair(): Promise<{\r\n publicKey: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n privateKey: any;\r\n}> {\r\n // Check if we're in a browser environment\r\n if (isBrowserEnvironment()) {\r\n return generateECDHKeyPairBrowser();\r\n }\r\n \r\n // Node.js environment\r\n if (isNodeEnvironment()) {\r\n return generateECDHKeyPairNode();\r\n }\r\n \r\n throw new Error('Unable to generate device key pair: unsupported environment');\r\n}\r\n\r\n/**\r\n * Check if running in browser\r\n */\r\nfunction isBrowserEnvironment(): boolean {\r\n return typeof globalThis !== 'undefined' && \r\n globalThis.crypto && \r\n globalThis.crypto.subtle !== undefined;\r\n}\r\n\r\n/**\r\n * Check if running in Node.js\r\n */\r\nfunction isNodeEnvironment(): boolean {\r\n return typeof process !== 'undefined' && \r\n process.versions && \r\n process.versions.node !== undefined;\r\n}\r\n\r\n/**\r\n * Generate ECDH key pair using Web Crypto API (browser)\r\n * Exports public key in raw uncompressed format to match Node.js implementation\r\n */\r\nasync function generateECDHKeyPairBrowser(): Promise<{\r\n publicKey: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n privateKey: any;\r\n}> {\r\n const crypto = globalThis.crypto;\r\n \r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Generate a P-256 ECDH key pair\r\n const keyPair = await crypto.subtle.generateKey(\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n true, // extractable\r\n ['deriveBits', 'deriveKey']\r\n );\r\n \r\n // Export the public key in raw format (uncompressed, 65 bytes)\r\n // This matches the Node.js implementation: uncompressed format\r\n const publicKeyBuffer = await crypto.subtle.exportKey('raw', keyPair.publicKey);\r\n \r\n // Convert ArrayBuffer to base64 string\r\n const publicKeyBase64 = arrayBufferToBase64(publicKeyBuffer);\r\n \r\n // Keep the private key as CryptoKey for browser security\r\n // It will be used directly for ECDH operations\r\n return {\r\n publicKey: publicKeyBase64,\r\n privateKey: keyPair.privateKey\r\n };\r\n}\r\n\r\n/**\r\n * Generate ECDH key pair using Node.js crypto module\r\n * Follows the pattern: createECDH -> generateKeys -> getPublicKey/getPrivateKey\r\n */\r\nfunction generateECDHKeyPairNode(): {\r\n publicKey: string;\r\n privateKey: string;\r\n} {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const crypto = require('crypto');\r\n \r\n // Create ECDH instance with P-256 curve\r\n const ecdh = crypto.createECDH('prime256v1'); // P-256\r\n \r\n // Generate keys\r\n ecdh.generateKeys();\r\n \r\n // Get public key in uncompressed format (65 bytes) and convert to base64\r\n const publicKey = ecdh.getPublicKey(null, 'uncompressed');\r\n const publicKeyBase64 = publicKey.toString('base64');\r\n \r\n // Get private key and convert to base64 for storage\r\n const privateKey = ecdh.getPrivateKey();\r\n const privateKeyBase64 = privateKey.toString('base64');\r\n \r\n return {\r\n publicKey: publicKeyBase64,\r\n privateKey: privateKeyBase64\r\n };\r\n } catch (error) {\r\n throw new Error(`Unable to generate device key pair in Node.js: ${error}`);\r\n }\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to base64 string\r\n */\r\nfunction arrayBufferToBase64(buffer: ArrayBuffer): string {\r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(buffer).toString('base64');\r\n }\r\n \r\n // Browser environment\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return btoa(binary);\r\n}\r\n\r\n/**\r\n * Convert PEM to base64 (remove headers and newlines)\r\n */\r\nfunction pemToBase64(pem: string): string {\r\n return pem\r\n .replace(/-----BEGIN PUBLIC KEY-----/g, '')\r\n .replace(/-----END PUBLIC KEY-----/g, '')\r\n .replace(/-----BEGIN PRIVATE KEY-----/g, '')\r\n .replace(/-----END PRIVATE KEY-----/g, '')\r\n .replace(/\\n/g, '')\r\n .replace(/\\r/g, '')\r\n .trim();\r\n}\r\n\r\n", "/**\r\n * Key format conversion utilities (Functional)\r\n * Handles SPKI, raw, PEM conversions consistently across platforms\r\n */\r\n\r\n/**\r\n * Normalize SPKI format (ensure consistent base64 without PEM headers)\r\n * @param spkiKey - Key in SPKI format (may have PEM headers)\r\n */\r\nexport function normalizeSPKI(spkiKey: string): string {\r\n return spkiKey\r\n .replace(/-----BEGIN PUBLIC KEY-----/g, '')\r\n .replace(/-----END PUBLIC KEY-----/g, '')\r\n .replace(/-----BEGIN PRIVATE KEY-----/g, '')\r\n .replace(/-----END PRIVATE KEY-----/g, '')\r\n .replace(/\\n/g, '')\r\n .replace(/\\r/g, '')\r\n .replace(/\\s/g, '')\r\n .trim();\r\n}\r\n\r\n/**\r\n * Convert base64 to PEM format\r\n * @param base64Key - Base64 encoded key\r\n * @param keyType - Type of key ('public' or 'private')\r\n */\r\nexport function base64ToPEM(base64Key: string, keyType: 'public' | 'private' = 'public'): string {\r\n const normalized = normalizeSPKI(base64Key);\r\n const header = keyType === 'public' ? 'PUBLIC KEY' : 'PRIVATE KEY';\r\n \r\n // Add line breaks every 64 characters\r\n const formatted = normalized.match(/.{1,64}/g)?.join('\\n') || normalized;\r\n \r\n return `-----BEGIN ${header}-----\\n${formatted}\\n-----END ${header}-----`;\r\n}\r\n\r\n/**\r\n * Convert PEM to base64 format\r\n * @param pemKey - PEM formatted key\r\n */\r\nexport function pemToBase64(pemKey: string): string {\r\n return normalizeSPKI(pemKey);\r\n}\r\n\r\n/**\r\n * Convert base64 string to ArrayBuffer\r\n * @param base64 - Base64 string\r\n */\r\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\r\n const normalized = normalizeSPKI(base64);\r\n \r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(normalized, 'base64').buffer;\r\n }\r\n \r\n // Browser environment\r\n const binaryString = atob(normalized);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to base64 string\r\n * @param buffer - ArrayBuffer\r\n */\r\nexport function arrayBufferToBase64(buffer: ArrayBuffer): string {\r\n if (typeof Buffer !== 'undefined') {\r\n // Node.js environment\r\n return Buffer.from(buffer).toString('base64');\r\n }\r\n \r\n // Browser environment\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return btoa(binary);\r\n}\r\n\r\n/**\r\n * Import SPKI public key in browser (Web Crypto API)\r\n * @param spkiBase64 - Public key in SPKI base64 format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport async function importSPKIPublicKey(spkiBase64: string): Promise<any> {\r\n if (typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n const normalized = normalizeSPKI(spkiBase64);\r\n const keyBuffer = base64ToArrayBuffer(normalized);\r\n \r\n return globalThis.crypto.subtle.importKey(\r\n 'spki',\r\n keyBuffer,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n true,\r\n []\r\n );\r\n}\r\n\r\n/**\r\n * Export CryptoKey to SPKI base64 format\r\n * @param key - CryptoKey\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport async function exportToSPKI(key: any): Promise<string> {\r\n if (typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n const exported = await globalThis.crypto.subtle.exportKey('spki', key);\r\n return arrayBufferToBase64(exported);\r\n}\r\n\r\n/**\r\n * Validate if a string is valid base64\r\n * @param str - String to validate\r\n */\r\nexport function isValidBase64(str: string): boolean {\r\n const normalized = normalizeSPKI(str);\r\n const base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;\r\n return base64Regex.test(normalized);\r\n}\r\n\r\n", "/**\r\n * Storage adapters for device key persistence (Functional)\r\n * Cross-platform support for browser and Node.js\r\n */\r\n\r\nimport type { DeviceKeyStorage, DeviceKeyPair } from '../deviceKeyManager';\r\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '../keyFormats';\r\n\r\n// ============================================================================\r\n// Memory Adapter (for testing and temporary storage)\r\n// ============================================================================\r\n\r\n/**\r\n * Create memory adapter (in-memory storage, does not persist)\r\n */\r\nexport function createMemoryAdapter(): DeviceKeyStorage {\r\n const storage = new Map<string, string>();\r\n \r\n return {\r\n async save(keyId: string, keyPair: DeviceKeyPair): Promise<void> {\r\n // Store with consistent, searchable format including metadata\r\n const serialized = JSON.stringify({\r\n publicKey: keyPair.publicKey,\r\n privateKey: typeof keyPair.privateKey === 'string' \r\n ? keyPair.privateKey \r\n : '[CryptoKey]', // Can't serialize CryptoKey\r\n keyId: keyPair.keyId,\r\n createdAt: keyPair.createdAt.toISOString(),\r\n isCryptoKey: typeof keyPair.privateKey !== 'string',\r\n // Metadata for searchability\r\n deviceId: keyPair.deviceId,\r\n signerId: keyPair.signerId,\r\n walletId: keyPair.walletId,\r\n // Index by public key for fast lookup\r\n _index: {\r\n publicKey: keyPair.publicKey.trim().replace(/\\s/g, '') // Normalized for search\r\n }\r\n });\r\n storage.set(keyId, serialized);\r\n },\r\n \r\n async load(keyId: string): Promise<DeviceKeyPair | null> {\r\n const serialized = storage.get(keyId);\r\n if (!serialized) return null;\r\n \r\n const data = JSON.parse(serialized);\r\n \r\n // Note: CryptoKeys cannot be deserialized from memory\r\n // This adapter is best for Node.js where privateKey is a string\r\n if (data.isCryptoKey) {\r\n throw new Error('Cannot deserialize CryptoKey from memory. Use a different storage adapter.');\r\n }\r\n \r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: data.privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt)\r\n };\r\n },\r\n \r\n async list(): Promise<string[]> {\r\n return Array.from(storage.keys());\r\n },\r\n \r\n async remove(keyId: string): Promise<void> {\r\n storage.delete(keyId);\r\n },\r\n \r\n async findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison\r\n const normalizedPublicKey = publicKey.trim().replace(/\\s/g, '');\r\n \r\n // Search through all keys\r\n for (const keyId of storage.keys()) {\r\n const serialized = storage.get(keyId);\r\n if (serialized) {\r\n const data = JSON.parse(serialized);\r\n // Check normalized public key from index or direct comparison\r\n const storedNormalized = data._index?.publicKey || data.publicKey?.trim().replace(/\\s/g, '');\r\n if (storedNormalized === normalizedPublicKey) {\r\n return this.load(keyId);\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n \r\n async listAll(): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n const result: Array<{ keyId: string; publicKey: string }> = [];\r\n for (const keyId of storage.keys()) {\r\n const serialized = storage.get(keyId);\r\n if (serialized) {\r\n const data = JSON.parse(serialized);\r\n result.push({ keyId, publicKey: data.publicKey });\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// LocalStorage Adapter (browser only)\r\n// ============================================================================\r\n\r\n/**\r\n * Create localStorage adapter (browser only, persists across sessions)\r\n */\r\nexport function createLocalStorageAdapter(): DeviceKeyStorage {\r\n if (typeof localStorage === 'undefined') {\r\n throw new Error('localStorage is not available. This adapter only works in browsers.');\r\n }\r\n \r\n const prefix = 'cilantro_device_key_';\r\n \r\n return {\r\n async save(keyId: string, keyPair: DeviceKeyPair): Promise<void> {\r\n const data: any = {\r\n publicKey: keyPair.publicKey,\r\n keyId: keyPair.keyId,\r\n createdAt: keyPair.createdAt.toISOString(),\r\n // Metadata for searchability\r\n deviceId: keyPair.deviceId,\r\n signerId: keyPair.signerId,\r\n walletId: keyPair.walletId,\r\n // Index by public key for fast lookup\r\n _index: {\r\n publicKey: keyPair.publicKey.trim().replace(/\\s/g, '') // Normalized for search\r\n }\r\n };\r\n \r\n if (typeof keyPair.privateKey === 'string') {\r\n // Node.js: private key is already a base64 string (raw format)\r\n data.privateKey = keyPair.privateKey;\r\n data.privateKeyType = 'raw';\r\n } else {\r\n // Browser: export CryptoKey to PKCS8 format (base64)\r\n // PKCS8 is the standard format for ECDH private keys in Web Crypto API\r\n try {\r\n const crypto = globalThis.crypto;\r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Export private key as PKCS8 format (standard for ECDH)\r\n const pkcs8Key = await crypto.subtle.exportKey('pkcs8', keyPair.privateKey);\r\n const pkcs8Base64 = arrayBufferToBase64(pkcs8Key);\r\n \r\n data.privateKey = pkcs8Base64;\r\n data.privateKeyType = 'cryptokey-pkcs8';\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to export CryptoKey for storage: ${error}. ` +\r\n `The private key may not be extractable. Consider using IndexedDB adapter.`\r\n );\r\n }\r\n }\r\n \r\n localStorage.setItem(prefix + keyId, JSON.stringify(data));\r\n },\r\n \r\n async load(keyId: string): Promise<DeviceKeyPair | null> {\r\n const stored = localStorage.getItem(prefix + keyId);\r\n if (!stored) return null;\r\n \r\n const data = JSON.parse(stored);\r\n \r\n let privateKey: any;\r\n \r\n if (data.privateKeyType === 'raw' || !data.privateKeyType) {\r\n // Node.js format: private key is already a base64 string (raw format)\r\n if (!data.privateKey) {\r\n throw new Error(\r\n `Private key is missing from storage for keyId: ${keyId}. ` +\r\n `The stored key may be corrupted. Consider regenerating the device key.`\r\n );\r\n }\r\n privateKey = data.privateKey;\r\n } else if (data.privateKeyType === 'cryptokey-pkcs8') {\r\n // Browser format: import PKCS8 private key back to CryptoKey\r\n if (!data.privateKey) {\r\n throw new Error(\r\n `Private key is missing from storage for keyId: ${keyId}. ` +\r\n `The stored key may be corrupted. Consider regenerating the device key.`\r\n );\r\n }\r\n try {\r\n const crypto = globalThis.crypto;\r\n if (!crypto || !crypto.subtle) {\r\n throw new Error('Web Crypto API not available');\r\n }\r\n \r\n // Convert base64 back to ArrayBuffer\r\n const pkcs8Buffer = base64ToArrayBuffer(data.privateKey);\r\n \r\n // Import as ECDH private key (P-256) from PKCS8 format\r\n privateKey = await crypto.subtle.importKey(\r\n 'pkcs8',\r\n pkcs8Buffer,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256'\r\n },\r\n true, // extractable\r\n ['deriveKey', 'deriveBits']\r\n );\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to import CryptoKey from storage: ${error}. ` +\r\n `The stored key may be corrupted. Consider regenerating the device key.`\r\n );\r\n }\r\n } else if (data.privateKeyType === 'cryptokey-raw') {\r\n // Legacy format: try to handle old format (should not happen, but for compatibility)\r\n throw new Error(\r\n 'Legacy CryptoKey format detected. Please regenerate your device key. ' +\r\n 'The old format is no longer supported.'\r\n );\r\n } else {\r\n throw new Error(\r\n `Unknown private key type: ${data.privateKeyType}. ` +\r\n `Cannot load device key. Consider regenerating.`\r\n );\r\n }\r\n \r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt),\r\n deviceId: data.deviceId,\r\n signerId: data.signerId,\r\n walletId: data.walletId\r\n };\r\n },\r\n \r\n async list(): Promise<string[]> {\r\n const keys: string[] = [];\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key?.startsWith(prefix)) {\r\n keys.push(key.replace(prefix, ''));\r\n }\r\n }\r\n return keys;\r\n },\r\n \r\n async remove(keyId: string): Promise<void> {\r\n localStorage.removeItem(prefix + keyId);\r\n },\r\n \r\n async findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison\r\n const normalizedPublicKey = publicKey.trim().replace(/\\s/g, '');\r\n \r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key?.startsWith(prefix)) {\r\n const stored = localStorage.getItem(key);\r\n if (stored) {\r\n const data = JSON.parse(stored);\r\n // Check normalized public key from index or direct comparison\r\n const storedNormalized = data._index?.publicKey || data.publicKey?.trim().replace(/\\s/g, '');\r\n if (storedNormalized === normalizedPublicKey) {\r\n const keyId = key.replace(prefix, '');\r\n return this.load(keyId);\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n \r\n async listAll(): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n const result: Array<{ keyId: string; publicKey: string }> = [];\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key?.startsWith(prefix)) {\r\n const stored = localStorage.getItem(key);\r\n if (stored) {\r\n const data = JSON.parse(stored);\r\n result.push({\r\n keyId: key.replace(prefix, ''),\r\n publicKey: data.publicKey\r\n });\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// File System Adapter (Node.js only)\r\n// ============================================================================\r\n\r\n/**\r\n * Create file system adapter (Node.js only, persists to disk)\r\n * @param basePath - Base directory path for storing keys\r\n */\r\nexport function createFileSystemAdapter(basePath: string): DeviceKeyStorage {\r\n if (typeof process === 'undefined' || !process.versions || !process.versions.node) {\r\n throw new Error('File system adapter only works in Node.js environment');\r\n }\r\n \r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const fs = require('fs');\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const path = require('path');\r\n \r\n // Ensure base directory exists\r\n if (!fs.existsSync(basePath)) {\r\n fs.mkdirSync(basePath, { recursive: true });\r\n }\r\n \r\n return {\r\n async save(keyId: string, keyPair: DeviceKeyPair): Promise<void> {\r\n const filePath = path.join(basePath, `${keyId}.json`);\r\n \r\n const data = {\r\n publicKey: keyPair.publicKey,\r\n privateKey: typeof keyPair.privateKey === 'string' \r\n ? keyPair.privateKey \r\n : null,\r\n keyId: keyPair.keyId,\r\n createdAt: keyPair.createdAt.toISOString(),\r\n // Metadata for searchability\r\n deviceId: keyPair.deviceId,\r\n signerId: keyPair.signerId,\r\n walletId: keyPair.walletId,\r\n // Index by public key for fast lookup\r\n _index: {\r\n publicKey: keyPair.publicKey.trim().replace(/\\s/g, '') // Normalized for search\r\n }\r\n };\r\n \r\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');\r\n },\r\n \r\n async load(keyId: string): Promise<DeviceKeyPair | null> {\r\n const filePath = path.join(basePath, `${keyId}.json`);\r\n \r\n if (!fs.existsSync(filePath)) {\r\n return null;\r\n }\r\n \r\n const fileContent = fs.readFileSync(filePath, 'utf-8');\r\n const data = JSON.parse(fileContent);\r\n \r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: data.privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt),\r\n deviceId: data.deviceId,\r\n signerId: data.signerId,\r\n walletId: data.walletId\r\n };\r\n },\r\n \r\n async list(): Promise<string[]> {\r\n const files = fs.readdirSync(basePath);\r\n return files\r\n .filter((file: string) => file.endsWith('.json'))\r\n .map((file: string) => file.replace('.json', ''));\r\n },\r\n \r\n async remove(keyId: string): Promise<void> {\r\n const filePath = path.join(basePath, `${keyId}.json`);\r\n if (fs.existsSync(filePath)) {\r\n fs.unlinkSync(filePath);\r\n }\r\n },\r\n \r\n async findByPublicKey(publicKey: string): Promise<DeviceKeyPair | null> {\r\n // Normalize public key for comparison\r\n const normalizedPublicKey = publicKey.trim().replace(/\\s/g, '');\r\n \r\n const files = fs.readdirSync(basePath);\r\n for (const file of files) {\r\n if (file.endsWith('.json')) {\r\n const filePath = path.join(basePath, file);\r\n const fileContent = fs.readFileSync(filePath, 'utf-8');\r\n const data = JSON.parse(fileContent);\r\n // Check normalized public key from index or direct comparison\r\n const storedNormalized = data._index?.publicKey || data.publicKey?.trim().replace(/\\s/g, '');\r\n if (storedNormalized === normalizedPublicKey) {\r\n return {\r\n publicKey: data.publicKey,\r\n privateKey: data.privateKey,\r\n keyId: data.keyId,\r\n createdAt: new Date(data.createdAt),\r\n deviceId: data.deviceId,\r\n signerId: data.signerId,\r\n walletId: data.walletId\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n \r\n async listAll(): Promise<Array<{ keyId: string; publicKey: string }>> {\r\n const result: Array<{ keyId: string; publicKey: string }> = [];\r\n const files = fs.readdirSync(basePath);\r\n for (const file of files) {\r\n if (file.endsWith('.json')) {\r\n const filePath = path.join(basePath, file);\r\n const fileContent = fs.readFileSync(filePath, 'utf-8');\r\n const data = JSON.parse(fileContent);\r\n result.push({\r\n keyId: file.replace('.json', ''),\r\n publicKey: data.publicKey\r\n });\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Helper: Get Default Storage Adapter\r\n// ============================================================================\r\n\r\n/**\r\n * Get default storage adapter based on environment\r\n * Browser: localStorage\r\n * Node.js: memory (caller should provide file system path if persistence needed)\r\n */\r\nexport function getDefaultStorageAdapter(): DeviceKeyStorage {\r\n // Browser environment\r\n if (typeof localStorage !== 'undefined') {\r\n return createLocalStorageAdapter();\r\n }\r\n \r\n // Node.js environment - use memory by default\r\n // Caller should use createFileSystemAdapter for persistence\r\n return createMemoryAdapter();\r\n}\r\n\r\n", "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n hashCons: () => Hash<T>\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash<T>;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n hashCons: (opts?: T) => Hash<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): Hash<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n hashCons: (opts?: T) => HashXOF<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts?: T): HashXOF<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: T) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes, type CHash, type Input } from './utils.ts';\n\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, _key: Input) {\n super();\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Input): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: HMAC<T>): HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Input, message: Input): Uint8Array;\n create(hash: CHash, key: Input): HMAC<any>;\n} = (hash: CHash, key: Input, message: Input): Uint8Array =>\n new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/**\n * HKDF (RFC 5869): extract + expand in one step.\n * See https://soatok.blog/2021/11/17/understanding-hkdf/.\n * @module\n */\nimport { hmac } from './hmac.ts';\nimport { ahash, anumber, type CHash, clean, type Input, toBytes } from './utils.ts';\n\n/**\n * HKDF-extract from spec. Less important part. `HKDF-Extract(IKM, salt) -> PRK`\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n */\nexport function extract(hash: CHash, ikm: Input, salt?: Input): Uint8Array {\n ahash(hash);\n // NOTE: some libraries treat zero-length array as 'not provided';\n // we don't, since we have undefined as 'not provided'\n // https://github.com/RustCrypto/KDFs/issues/15\n if (salt === undefined) salt = new Uint8Array(hash.outputLen);\n return hmac(hash, toBytes(salt), toBytes(ikm));\n}\n\nconst HKDF_COUNTER = /* @__PURE__ */ Uint8Array.from([0]);\nconst EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();\n\n/**\n * HKDF-expand from the spec. The most important part. `HKDF-Expand(PRK, info, L) -> OKM`\n * @param hash - hash function that would be used (e.g. sha256)\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n */\nexport function expand(hash: CHash, prk: Input, info?: Input, length: number = 32): Uint8Array {\n ahash(hash);\n anumber(length);\n const olen = hash.outputLen;\n if (length > 255 * olen) throw new Error('Length should be <= 255*HashLen');\n const blocks = Math.ceil(length / olen);\n if (info === undefined) info = EMPTY_BUFFER;\n // first L(ength) octets of T\n const okm = new Uint8Array(blocks * olen);\n // Re-use HMAC instance between blocks\n const HMAC = hmac.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER[0] = counter + 1;\n // T(0) = empty string (zero length)\n // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n .update(info)\n .update(HKDF_COUNTER)\n .digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n clean(T, HKDF_COUNTER);\n return okm.slice(0, length);\n}\n\n/**\n * HKDF (RFC 5869): derive keys from an initial input.\n * Combines hkdf_extract + hkdf_expand in one step\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n * @example\n * import { hkdf } from '@noble/hashes/hkdf';\n * import { sha256 } from '@noble/hashes/sha2';\n * import { randomBytes } from '@noble/hashes/utils';\n * const inputKey = randomBytes(32);\n * const salt = randomBytes(32);\n * const info = 'application-key';\n * const hk1 = hkdf(sha256, inputKey, salt, info, 32);\n */\nexport const hkdf = (\n hash: CHash,\n ikm: Input,\n salt: Input | undefined,\n info: Input | undefined,\n length: number\n): Uint8Array => expand(hash, extract(hash, ikm, salt), info, length);\n", "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n", "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n\n constructor(outputLen: number = 32) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\nexport class SHA224 extends SHA256 {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD<SHA512> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor(outputLen: number = 64) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\nexport class SHA384 extends SHA512 {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\nexport class SHA512_256 extends SHA512 {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n", "/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport {\n SHA224 as SHA224n,\n sha224 as sha224n,\n SHA256 as SHA256n,\n sha256 as sha256n,\n} from './sha2.ts';\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256: typeof SHA256n = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256: typeof sha256n = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224: typeof SHA224n = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224: typeof sha224n = sha224n;\n", "/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nimport * as nodeCrypto from 'crypto';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _8n = BigInt(8);\nconst CU_O = BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989');\nconst CURVE = Object.freeze({\n a: BigInt(-1),\n d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n P: BigInt('57896044618658097711785492504343953926634992332820282019728792003956564819949'),\n l: CU_O,\n n: CU_O,\n h: BigInt(8),\n Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n});\nexport { CURVE };\nconst POW_2_256 = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000');\nconst SQRT_M1 = BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');\nconst SQRT_D = BigInt('6853475219497561581579357271197624642482790079785650197046958215289687604742');\nconst SQRT_AD_MINUS_ONE = BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');\nconst INVSQRT_A_MINUS_D = BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');\nconst ONE_MINUS_D_SQ = BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');\nconst D_MINUS_ONE_SQ = BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');\nclass ExtendedPoint {\n constructor(x, y, z, t) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.t = t;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('ExtendedPoint#fromAffine: expected Point');\n }\n if (p.equals(Point.ZERO))\n return ExtendedPoint.ZERO;\n return new ExtendedPoint(p.x, p.y, _1n, mod(p.x * p.y));\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return this.toAffineBatch(points).map(this.fromAffine);\n }\n equals(other) {\n assertExtPoint(other);\n const { x: X1, y: Y1, z: Z1 } = this;\n const { x: X2, y: Y2, z: Z2 } = other;\n const X1Z2 = mod(X1 * Z2);\n const X2Z1 = mod(X2 * Z1);\n const Y1Z2 = mod(Y1 * Z2);\n const Y2Z1 = mod(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n negate() {\n return new ExtendedPoint(mod(-this.x), this.y, this.z, mod(-this.t));\n }\n double() {\n const { x: X1, y: Y1, z: Z1 } = this;\n const { a } = CURVE;\n const M = mod;\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(_2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new ExtendedPoint(X3, Y3, Z3, T3);\n }\n add(other) {\n const { x: X1, y: Y1, z: Z1, t: T1 } = this;\n assertExtPoint(other);\n const { x: X2, y: Y2, z: Z2, t: T2 } = other;\n const { a, d } = CURVE;\n const M = mod;\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new ExtendedPoint(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n precomputeWindow(W) {\n const windows = 1 + 256 / W;\n const points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(ExtendedPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = ExtendedPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = ExtendedPoint.ZERO;\n let f = ExtendedPoint.BASE;\n const windows = 1 + 256 / W;\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n const offset1 = offset;\n const offset2 = offset + Math.abs(wbits) - 1;\n const cond1 = window % 2 !== 0;\n const cond2 = wbits < 0;\n if (wbits === 0) {\n f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n }\n else {\n p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n }\n }\n return ExtendedPoint.normalizeZ([p, f])[0];\n }\n multiply(scalar, affinePoint) {\n return this.wNAF(normalizeScalar(scalar, CURVE.l), affinePoint);\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar, CURVE.l, false);\n const G = ExtendedPoint.BASE;\n const P0 = ExtendedPoint.ZERO;\n if (n === _0n)\n return P0;\n if (this.equals(P0) || n === _1n)\n return this;\n if (this.equals(G))\n return this.wNAF(n);\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n isSmallOrder() {\n return this.multiplyUnsafe(CURVE.h).equals(ExtendedPoint.ZERO);\n }\n isTorsionFree() {\n let p = this.multiplyUnsafe(CURVE.l / _2n).double();\n if (CURVE.l % _2n)\n p = p.add(this);\n return p.equals(ExtendedPoint.ZERO);\n }\n toAffine(invZ) {\n const { x, y, z } = this;\n const is0 = this.equals(ExtendedPoint.ZERO);\n if (invZ == null)\n invZ = is0 ? _8n : invert(z);\n const ax = mod(x * invZ);\n const ay = mod(y * invZ);\n const zz = mod(z * invZ);\n if (is0)\n return Point.ZERO;\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return new Point(ax, ay);\n }\n fromRistrettoBytes() {\n legacyRist();\n }\n toRistrettoBytes() {\n legacyRist();\n }\n fromRistrettoHash() {\n legacyRist();\n }\n}\nExtendedPoint.BASE = new ExtendedPoint(CURVE.Gx, CURVE.Gy, _1n, mod(CURVE.Gx * CURVE.Gy));\nExtendedPoint.ZERO = new ExtendedPoint(_0n, _1n, _1n, _0n);\nfunction constTimeNegate(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\nfunction assertExtPoint(other) {\n if (!(other instanceof ExtendedPoint))\n throw new TypeError('ExtendedPoint expected');\n}\nfunction assertRstPoint(other) {\n if (!(other instanceof RistrettoPoint))\n throw new TypeError('RistrettoPoint expected');\n}\nfunction legacyRist() {\n throw new Error('Legacy method: switch to RistrettoPoint');\n}\nclass RistrettoPoint {\n constructor(ep) {\n this.ep = ep;\n }\n static calcElligatorRistrettoMap(r0) {\n const { d } = CURVE;\n const r = mod(SQRT_M1 * r0 * r0);\n const Ns = mod((r + _1n) * ONE_MINUS_D_SQ);\n let c = BigInt(-1);\n const D = mod((c - d * r) * mod(r + d));\n let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D);\n let s_ = mod(s * r0);\n if (!edIsNegative(s_))\n s_ = mod(-s_);\n if (!Ns_D_is_sq)\n s = s_;\n if (!Ns_D_is_sq)\n c = r;\n const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D);\n const s2 = s * s;\n const W0 = mod((s + s) * D);\n const W1 = mod(Nt * SQRT_AD_MINUS_ONE);\n const W2 = mod(_1n - s2);\n const W3 = mod(_1n + s2);\n return new ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n }\n static hashToCurve(hex) {\n hex = ensureBytes(hex, 64);\n const r1 = bytes255ToNumberLE(hex.slice(0, 32));\n const R1 = this.calcElligatorRistrettoMap(r1);\n const r2 = bytes255ToNumberLE(hex.slice(32, 64));\n const R2 = this.calcElligatorRistrettoMap(r2);\n return new RistrettoPoint(R1.add(R2));\n }\n static fromHex(hex) {\n hex = ensureBytes(hex, 32);\n const { a, d } = CURVE;\n const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';\n const s = bytes255ToNumberLE(hex);\n if (!equalBytes(numberTo32BytesLE(s), hex) || edIsNegative(s))\n throw new Error(emsg);\n const s2 = mod(s * s);\n const u1 = mod(_1n + a * s2);\n const u2 = mod(_1n - a * s2);\n const u1_2 = mod(u1 * u1);\n const u2_2 = mod(u2 * u2);\n const v = mod(a * d * u1_2 - u2_2);\n const { isValid, value: I } = invertSqrt(mod(v * u2_2));\n const Dx = mod(I * u2);\n const Dy = mod(I * Dx * v);\n let x = mod((s + s) * Dx);\n if (edIsNegative(x))\n x = mod(-x);\n const y = mod(u1 * Dy);\n const t = mod(x * y);\n if (!isValid || edIsNegative(t) || y === _0n)\n throw new Error(emsg);\n return new RistrettoPoint(new ExtendedPoint(x, y, _1n, t));\n }\n toRawBytes() {\n let { x, y, z, t } = this.ep;\n const u1 = mod(mod(z + y) * mod(z - y));\n const u2 = mod(x * y);\n const u2sq = mod(u2 * u2);\n const { value: invsqrt } = invertSqrt(mod(u1 * u2sq));\n const D1 = mod(invsqrt * u1);\n const D2 = mod(invsqrt * u2);\n const zInv = mod(D1 * D2 * t);\n let D;\n if (edIsNegative(t * zInv)) {\n let _x = mod(y * SQRT_M1);\n let _y = mod(x * SQRT_M1);\n x = _x;\n y = _y;\n D = mod(D1 * INVSQRT_A_MINUS_D);\n }\n else {\n D = D2;\n }\n if (edIsNegative(x * zInv))\n y = mod(-y);\n let s = mod((z - y) * D);\n if (edIsNegative(s))\n s = mod(-s);\n return numberTo32BytesLE(s);\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n toString() {\n return this.toHex();\n }\n equals(other) {\n assertRstPoint(other);\n const a = this.ep;\n const b = other.ep;\n const one = mod(a.x * b.y) === mod(a.y * b.x);\n const two = mod(a.y * b.y) === mod(a.x * b.x);\n return one || two;\n }\n add(other) {\n assertRstPoint(other);\n return new RistrettoPoint(this.ep.add(other.ep));\n }\n subtract(other) {\n assertRstPoint(other);\n return new RistrettoPoint(this.ep.subtract(other.ep));\n }\n multiply(scalar) {\n return new RistrettoPoint(this.ep.multiply(scalar));\n }\n multiplyUnsafe(scalar) {\n return new RistrettoPoint(this.ep.multiplyUnsafe(scalar));\n }\n}\nRistrettoPoint.BASE = new RistrettoPoint(ExtendedPoint.BASE);\nRistrettoPoint.ZERO = new RistrettoPoint(ExtendedPoint.ZERO);\nconst pointPrecomputes = new WeakMap();\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromHex(hex, strict = true) {\n const { d, P } = CURVE;\n hex = ensureBytes(hex, 32);\n const normed = hex.slice();\n normed[31] = hex[31] & ~0x80;\n const y = bytesToNumberLE(normed);\n if (strict && y >= P)\n throw new Error('Expected 0 < hex < P');\n if (!strict && y >= POW_2_256)\n throw new Error('Expected 0 < hex < 2**256');\n const y2 = mod(y * y);\n const u = mod(y2 - _1n);\n const v = mod(d * y2 + _1n);\n let { isValid, value: x } = uvRatio(u, v);\n if (!isValid)\n throw new Error('Point.fromHex: invalid y coordinate');\n const isXOdd = (x & _1n) === _1n;\n const isLastByteOdd = (hex[31] & 0x80) !== 0;\n if (isLastByteOdd !== isXOdd) {\n x = mod(-x);\n }\n return new Point(x, y);\n }\n static async fromPrivateKey(privateKey) {\n return (await getExtendedPublicKey(privateKey)).point;\n }\n toRawBytes() {\n const bytes = numberTo32BytesLE(this.y);\n bytes[31] |= this.x & _1n ? 0x80 : 0;\n return bytes;\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n toX25519() {\n const { y } = this;\n const u = mod((_1n + y) * invert(_1n - y));\n return numberTo32BytesLE(u);\n }\n isTorsionFree() {\n return ExtendedPoint.fromAffine(this).isTorsionFree();\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(mod(-this.x), this.y);\n }\n add(other) {\n return ExtendedPoint.fromAffine(this).add(ExtendedPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return ExtendedPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n}\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _1n);\nclass Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n this.assertValidity();\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex, 64);\n const r = Point.fromHex(bytes.slice(0, 32), false);\n const s = bytesToNumberLE(bytes.slice(32, 64));\n return new Signature(r, s);\n }\n assertValidity() {\n const { r, s } = this;\n if (!(r instanceof Point))\n throw new Error('Expected Point instance');\n normalizeScalar(s, CURVE.l, false);\n return this;\n }\n toRawBytes() {\n const u8 = new Uint8Array(64);\n u8.set(this.r.toRawBytes());\n u8.set(numberTo32BytesLE(this.s), 32);\n return u8;\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n}\nexport { ExtendedPoint, Point, RistrettoPoint, Signature };\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\nfunction abytes(item) {\n if (!isBytes(item))\n throw new Error('Uint8Array expected');\n}\nfunction concatBytes(...arrays) {\n arrays.every(abytes);\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nconst hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\nexport function bytesToHex(bytes) {\n abytes(bytes);\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0;\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10);\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10);\n return;\n}\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2;\n }\n return array;\n}\nfunction numberTo32BytesBE(num) {\n const length = 32;\n const hex = num.toString(16).padStart(length * 2, '0');\n return hexToBytes(hex);\n}\nfunction numberTo32BytesLE(num) {\n return numberTo32BytesBE(num).reverse();\n}\nfunction edIsNegative(num) {\n return (mod(num) & _1n) === _1n;\n}\nfunction bytesToNumberLE(uint8a) {\n abytes(uint8a);\n return BigInt('0x' + bytesToHex(Uint8Array.from(uint8a).reverse()));\n}\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nfunction bytes255ToNumberLE(bytes) {\n return mod(bytesToNumberLE(bytes) & MAX_255B);\n}\nfunction mod(a, b = CURVE.P) {\n const res = a % b;\n return res >= _0n ? res : b + res;\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, p = CURVE.P) {\n const tmp = new Array(nums.length);\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (num === _0n)\n return acc;\n tmp[i] = acc;\n return mod(acc * num, p);\n }, _1n);\n const inverted = invert(lastMultiplied, p);\n nums.reduceRight((acc, num, i) => {\n if (num === _0n)\n return acc;\n tmp[i] = mod(acc * tmp[i], p);\n return mod(acc * num, p);\n }, inverted);\n return tmp;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction pow_2_252_3(x) {\n const { P } = CURVE;\n const _5n = BigInt(5);\n const _10n = BigInt(10);\n const _20n = BigInt(20);\n const _40n = BigInt(40);\n const _80n = BigInt(80);\n const x2 = (x * x) % P;\n const b2 = (x2 * x) % P;\n const b4 = (pow2(b2, _2n) * b2) % P;\n const b5 = (pow2(b4, _1n) * x) % P;\n const b10 = (pow2(b5, _5n) * b5) % P;\n const b20 = (pow2(b10, _10n) * b10) % P;\n const b40 = (pow2(b20, _20n) * b20) % P;\n const b80 = (pow2(b40, _40n) * b40) % P;\n const b160 = (pow2(b80, _80n) * b80) % P;\n const b240 = (pow2(b160, _80n) * b80) % P;\n const b250 = (pow2(b240, _10n) * b10) % P;\n const pow_p_5_8 = (pow2(b250, _2n) * x) % P;\n return { pow_p_5_8, b2 };\n}\nfunction uvRatio(u, v) {\n const v3 = mod(v * v * v);\n const v7 = mod(v3 * v3 * v);\n const pow = pow_2_252_3(u * v7).pow_p_5_8;\n let x = mod(u * v3 * pow);\n const vx2 = mod(v * x * x);\n const root1 = x;\n const root2 = mod(x * SQRT_M1);\n const useRoot1 = vx2 === u;\n const useRoot2 = vx2 === mod(-u);\n const noRoot = vx2 === mod(-u * SQRT_M1);\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2;\n if (edIsNegative(x))\n x = mod(-x);\n return { isValid: useRoot1 || useRoot2, value: x };\n}\nfunction invertSqrt(number) {\n return uvRatio(_1n, number);\n}\nfunction modlLE(hash) {\n return mod(bytesToNumberLE(hash), CURVE.l);\n}\nfunction equalBytes(b1, b2) {\n if (b1.length !== b2.length) {\n return false;\n }\n for (let i = 0; i < b1.length; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction ensureBytes(hex, expectedLength) {\n const bytes = isBytes(hex) ? Uint8Array.from(hex) : hexToBytes(hex);\n if (typeof expectedLength === 'number' && bytes.length !== expectedLength)\n throw new Error(`Expected ${expectedLength} bytes`);\n return bytes;\n}\nfunction normalizeScalar(num, max, strict = true) {\n if (!max)\n throw new TypeError('Specify max value');\n if (typeof num === 'number' && Number.isSafeInteger(num))\n num = BigInt(num);\n if (typeof num === 'bigint' && num < max) {\n if (strict) {\n if (_0n < num)\n return num;\n }\n else {\n if (_0n <= num)\n return num;\n }\n }\n throw new TypeError('Expected valid scalar: 0 < scalar < max');\n}\nfunction adjustBytes25519(bytes) {\n bytes[0] &= 248;\n bytes[31] &= 127;\n bytes[31] |= 64;\n return bytes;\n}\nfunction decodeScalar25519(n) {\n return bytesToNumberLE(adjustBytes25519(ensureBytes(n, 32)));\n}\nfunction checkPrivateKey(key) {\n key =\n typeof key === 'bigint' || typeof key === 'number'\n ? numberTo32BytesBE(normalizeScalar(key, POW_2_256))\n : ensureBytes(key);\n if (key.length !== 32)\n throw new Error(`Expected 32 bytes`);\n return key;\n}\nfunction getKeyFromHash(hashed) {\n const head = adjustBytes25519(hashed.slice(0, 32));\n const prefix = hashed.slice(32, 64);\n const scalar = modlLE(head);\n const point = Point.BASE.multiply(scalar);\n const pointBytes = point.toRawBytes();\n return { head, prefix, scalar, point, pointBytes };\n}\nlet _sha512Sync;\nfunction sha512s(...m) {\n if (typeof _sha512Sync !== 'function')\n throw new Error('utils.sha512Sync must be set to use sync methods');\n return _sha512Sync(...m);\n}\nasync function getExtendedPublicKey(key) {\n return getKeyFromHash(await utils.sha512(checkPrivateKey(key)));\n}\nfunction getExtendedPublicKeySync(key) {\n return getKeyFromHash(sha512s(checkPrivateKey(key)));\n}\nexport async function getPublicKey(privateKey) {\n return (await getExtendedPublicKey(privateKey)).pointBytes;\n}\nfunction getPublicKeySync(privateKey) {\n return getExtendedPublicKeySync(privateKey).pointBytes;\n}\nexport async function sign(message, privateKey) {\n message = ensureBytes(message);\n const { prefix, scalar, pointBytes } = await getExtendedPublicKey(privateKey);\n const r = modlLE(await utils.sha512(prefix, message));\n const R = Point.BASE.multiply(r);\n const k = modlLE(await utils.sha512(R.toRawBytes(), pointBytes, message));\n const s = mod(r + k * scalar, CURVE.l);\n return new Signature(R, s).toRawBytes();\n}\nfunction signSync(message, privateKey) {\n message = ensureBytes(message);\n const { prefix, scalar, pointBytes } = getExtendedPublicKeySync(privateKey);\n const r = modlLE(sha512s(prefix, message));\n const R = Point.BASE.multiply(r);\n const k = modlLE(sha512s(R.toRawBytes(), pointBytes, message));\n const s = mod(r + k * scalar, CURVE.l);\n return new Signature(R, s).toRawBytes();\n}\nfunction prepareVerification(sig, message, publicKey) {\n message = ensureBytes(message);\n if (!(publicKey instanceof Point))\n publicKey = Point.fromHex(publicKey, false);\n const { r, s } = sig instanceof Signature ? sig.assertValidity() : Signature.fromHex(sig);\n const SB = ExtendedPoint.BASE.multiplyUnsafe(s);\n return { r, s, SB, pub: publicKey, msg: message };\n}\nfunction finishVerification(publicKey, r, SB, hashed) {\n const k = modlLE(hashed);\n const kA = ExtendedPoint.fromAffine(publicKey).multiplyUnsafe(k);\n const RkA = ExtendedPoint.fromAffine(r).add(kA);\n return RkA.subtract(SB).multiplyUnsafe(CURVE.h).equals(ExtendedPoint.ZERO);\n}\nexport async function verify(sig, message, publicKey) {\n const { r, SB, msg, pub } = prepareVerification(sig, message, publicKey);\n const hashed = await utils.sha512(r.toRawBytes(), pub.toRawBytes(), msg);\n return finishVerification(pub, r, SB, hashed);\n}\nfunction verifySync(sig, message, publicKey) {\n const { r, SB, msg, pub } = prepareVerification(sig, message, publicKey);\n const hashed = sha512s(r.toRawBytes(), pub.toRawBytes(), msg);\n return finishVerification(pub, r, SB, hashed);\n}\nexport const sync = {\n getExtendedPublicKey: getExtendedPublicKeySync,\n getPublicKey: getPublicKeySync,\n sign: signSync,\n verify: verifySync,\n};\nexport async function getSharedSecret(privateKey, publicKey) {\n const { head } = await getExtendedPublicKey(privateKey);\n const u = Point.fromHex(publicKey).toX25519();\n return curve25519.scalarMult(head, u);\n}\nPoint.BASE._setWindowSize(8);\nfunction cswap(swap, x_2, x_3) {\n const dummy = mod(swap * (x_2 - x_3));\n x_2 = mod(x_2 - dummy);\n x_3 = mod(x_3 + dummy);\n return [x_2, x_3];\n}\nfunction montgomeryLadder(pointU, scalar) {\n const { P } = CURVE;\n const u = normalizeScalar(pointU, P);\n const k = normalizeScalar(scalar, P);\n const a24 = BigInt(121665);\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n let sw;\n for (let t = BigInt(255 - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n swap = k_t;\n const A = x_2 + z_2;\n const AA = mod(A * A);\n const B = x_2 - z_2;\n const BB = mod(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = mod(D * A);\n const CB = mod(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = mod(dacb * dacb);\n z_3 = mod(x_1 * mod(da_cb * da_cb));\n x_2 = mod(AA * BB);\n z_2 = mod(E * (AA + mod(a24 * E)));\n }\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n const { pow_p_5_8, b2 } = pow_2_252_3(z_2);\n const xp2 = mod(pow2(pow_p_5_8, BigInt(3)) * b2);\n return mod(x_2 * xp2);\n}\nfunction encodeUCoordinate(u) {\n return numberTo32BytesLE(mod(u, CURVE.P));\n}\nfunction decodeUCoordinate(uEnc) {\n const u = ensureBytes(uEnc, 32);\n u[31] &= 127;\n return bytesToNumberLE(u);\n}\nexport const curve25519 = {\n BASE_POINT_U: '0900000000000000000000000000000000000000000000000000000000000000',\n scalarMult(privateKey, publicKey) {\n const u = decodeUCoordinate(publicKey);\n const p = decodeScalar25519(privateKey);\n const pu = montgomeryLadder(u, p);\n if (pu === _0n)\n throw new Error('Invalid private or public key received');\n return encodeUCoordinate(pu);\n },\n scalarMultBase(privateKey) {\n return curve25519.scalarMult(privateKey, curve25519.BASE_POINT_U);\n },\n};\nconst crypto = {\n node: nodeCrypto,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexport const utils = {\n bytesToHex,\n hexToBytes,\n concatBytes,\n getExtendedPublicKey,\n mod,\n invert,\n TORSION_SUBGROUP: [\n '0100000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n '0000000000000000000000000000000000000000000000000000000000000080',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n ],\n hashToPrivateScalar: (hash) => {\n hash = ensureBytes(hash);\n if (hash.length < 40 || hash.length > 1024)\n throw new Error('Expected 40-1024 bytes of private key as per FIPS 186');\n return mod(bytesToNumberLE(hash), CURVE.l - _1n) + _1n;\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return new Uint8Array(randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return utils.randomBytes(32);\n },\n sha512: async (...messages) => {\n const message = concatBytes(...messages);\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-512', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n return Uint8Array.from(crypto.node.createHash('sha512').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha512 function\");\n }\n },\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point.equals(Point.BASE) ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_2n);\n return cached;\n },\n sha512Sync: undefined,\n};\nObject.defineProperties(utils, {\n sha512Sync: {\n configurable: false,\n get() {\n return _sha512Sync;\n },\n set(val) {\n if (!_sha512Sync)\n _sha512Sync = val;\n },\n },\n});\n", "/**\r\n * Unified Signer Helpers (Functional)\r\n * Provides consistent interface for all signer types with caching\r\n */\r\n\r\nimport { getDevicePublicKey, getDevicePrivateKey, findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage, DeviceKeyPair } from '../utils/deviceKeyManager';\r\nimport { getDeviceEncryptedSecret } from '../wallet';\r\nimport type { WalletControllerGetDeviceEncryptedSecretResult } from '../wallet';\r\nimport { hkdf } from '@noble/hashes/hkdf';\r\nimport { sha256 } from '@noble/hashes/sha256';\r\nimport { getPublicKey, sign as ed25519Sign } from '@noble/ed25519';\r\n\r\nexport interface SignerInfo {\r\n signerId: string;\r\n walletId: string;\r\n type: 'email' | 'phone' | 'external' | 'apiKey' | 'passkey';\r\n email?: string;\r\n phone?: string;\r\n publicKey?: string;\r\n isActive: boolean;\r\n}\r\n\r\nexport interface Keypair {\r\n publicKey: Uint8Array;\r\n secretKey: Uint8Array;\r\n}\r\n\r\nexport interface CachedKeypair {\r\n keypair: Keypair;\r\n derivedAt: number;\r\n expiresAt: number;\r\n}\r\n\r\n// Signer cache (functional)\r\nconst signerCache = new Map<string, CachedKeypair>();\r\n\r\n/**\r\n * Configuration for cache behavior\r\n */\r\nexport interface CacheConfig {\r\n enabled?: boolean;\r\n ttl?: number; // Time to live in milliseconds (default: 1 hour)\r\n}\r\n\r\nconst DEFAULT_CACHE_TTL = 60 * 60 * 1000; // 1 hour\r\n\r\n/**\r\n * Derive keypair for any signer type (unified logic with caching)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param signerType - Type of signer\r\n * @param options - Configuration options\r\n */\r\nexport async function deriveSignerKeypair(\r\n walletId: string,\r\n signerId: string,\r\n signerType: string,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n devicePublicKey?: string; // Specify which device key to use\r\n }\r\n): Promise<Keypair> {\r\n const cacheKey = `${walletId}:${signerId}`;\r\n const cacheEnabled = options?.cache?.enabled !== false;\r\n \r\n // Check cache first\r\n if (cacheEnabled) {\r\n const cached = signerCache.get(cacheKey);\r\n if (cached && cached.expiresAt > Date.now()) {\r\n return cached.keypair;\r\n }\r\n }\r\n \r\n // Derive based on type\r\n let keypair: Keypair;\r\n \r\n switch (signerType.toLowerCase()) {\r\n case 'email':\r\n case 'phone':\r\n keypair = await deriveEmailPhoneKeypair(\r\n walletId,\r\n signerId,\r\n options?.deviceKeyManager,\r\n options?.devicePublicKey\r\n );\r\n break;\r\n case 'external':\r\n keypair = await deriveExternalKeypair(walletId, signerId);\r\n break;\r\n case 'apikey':\r\n case 'api_key':\r\n keypair = await deriveApiKeyKeypair(walletId, signerId);\r\n break;\r\n case 'passkey':\r\n keypair = await derivePasskeyKeypair(walletId, signerId);\r\n break;\r\n default:\r\n throw new Error(`Unsupported signer type: ${signerType}`);\r\n }\r\n \r\n // Cache result\r\n if (cacheEnabled) {\r\n const ttl = options?.cache?.ttl || DEFAULT_CACHE_TTL;\r\n signerCache.set(cacheKey, {\r\n keypair,\r\n derivedAt: Date.now(),\r\n expiresAt: Date.now() + ttl\r\n });\r\n }\r\n \r\n return keypair;\r\n}\r\n\r\n/**\r\n * Sign message with signer (unified interface)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param signerType - Type of signer\r\n * @param message - Message to sign\r\n * @param options - Configuration options\r\n */\r\nexport async function signWithSigner(\r\n walletId: string,\r\n signerId: string,\r\n signerType: string,\r\n message: Uint8Array,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n }\r\n): Promise<Uint8Array> {\r\n const keypair = await deriveSignerKeypair(\r\n walletId,\r\n signerId,\r\n signerType,\r\n options\r\n );\r\n \r\n return signMessage(keypair, message);\r\n}\r\n\r\n/**\r\n * Signer response from API (can have various formats)\r\n */\r\nexport interface SignerResponse {\r\n id?: string;\r\n signerId?: string;\r\n walletId?: string;\r\n wallet?: { id: string };\r\n type?: SignerInfo['type'];\r\n signerType?: SignerInfo['type'];\r\n email?: string;\r\n phone?: string;\r\n publicKey?: string;\r\n pubkey?: string;\r\n isActive?: boolean;\r\n active?: boolean;\r\n walletType?: string;\r\n wallet_type?: string;\r\n apiKey?: string;\r\n api_key?: string;\r\n credential?: unknown;\r\n passkey?: unknown;\r\n deviceIdentities?: Array<{\r\n deviceId?: string;\r\n device_id?: string;\r\n devicePublicKey?: string;\r\n device_public_key?: string;\r\n lastUsedAt?: string | null;\r\n last_used_at?: string | null;\r\n createdAt?: string;\r\n created_at?: string;\r\n }>;\r\n}\r\n\r\n/**\r\n * Parse API response consistently\r\n * @param response - API response\r\n */\r\nexport function parseSignerResponse(response: SignerResponse): SignerInfo {\r\n return {\r\n signerId: response.id || response.signerId || '',\r\n walletId: response.walletId || response.wallet?.id || '',\r\n type: response.type || response.signerType || inferSignerType(response),\r\n email: response.email,\r\n phone: response.phone,\r\n publicKey: response.publicKey || response.pubkey,\r\n isActive: response.isActive ?? response.active ?? true\r\n };\r\n}\r\n\r\n/**\r\n * Clear signer cache\r\n * @param walletId - Optional wallet ID to clear\r\n * @param signerId - Optional signer ID to clear\r\n */\r\nexport function clearSignerCache(walletId?: string, signerId?: string): void {\r\n if (walletId && signerId) {\r\n signerCache.delete(`${walletId}:${signerId}`);\r\n } else if (walletId) {\r\n // Clear all for wallet\r\n for (const key of signerCache.keys()) {\r\n if (key.startsWith(`${walletId}:`)) {\r\n signerCache.delete(key);\r\n }\r\n }\r\n } else {\r\n signerCache.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Get cache statistics\r\n */\r\nexport function getCacheStats(): {\r\n size: number;\r\n entries: Array<{ key: string; expiresIn: number }>;\r\n} {\r\n const now = Date.now();\r\n const entries = Array.from(signerCache.entries()).map(([key, value]) => ({\r\n key,\r\n expiresIn: Math.max(0, value.expiresAt - now)\r\n }));\r\n \r\n return {\r\n size: signerCache.size,\r\n entries\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Internal Helper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Derive keypair for email/phone signers\r\n * Supports automatic device key resolution when devicePublicKey is provided\r\n */\r\nasync function deriveEmailPhoneKeypair(\r\n walletId: string,\r\n signerId: string,\r\n storage?: DeviceKeyStorage,\r\n specifiedDevicePublicKey?: string\r\n): Promise<Keypair> {\r\n // 1. Get device key pair\r\n let devicePublicKey: string;\r\n let devicePrivateKey: DeviceKeyPair['privateKey'];\r\n\r\n if (specifiedDevicePublicKey && storage) {\r\n // Automatic resolution: Find device key by public key\r\n // This searches both cache and storage\r\n const deviceKeyPair = await findDeviceKeyByPublicKey(specifiedDevicePublicKey, storage);\r\n if (!deviceKeyPair) {\r\n throw new Error(\r\n `Device key with public key ${specifiedDevicePublicKey.substring(0, 20)}... not found in storage or cache. ` +\r\n `Please ensure the device key is stored with the correct public key.`\r\n );\r\n }\r\n devicePublicKey = deviceKeyPair.publicKey;\r\n devicePrivateKey = deviceKeyPair.privateKey;\r\n \r\n // Update metadata if available (for better searchability)\r\n if (deviceKeyPair.deviceId || deviceKeyPair.signerId || deviceKeyPair.walletId) {\r\n // Metadata already set, no need to update\r\n } else if (storage) {\r\n // Optionally update metadata for future searches\r\n // This is a no-op if key already has metadata\r\n }\r\n } else {\r\n // Use default device key (with automatic resolution support)\r\n devicePublicKey = await getDevicePublicKey(undefined, storage);\r\n devicePrivateKey = await getDevicePrivateKey(undefined, storage);\r\n }\r\n \r\n // 2. Get encrypted secret from API\r\n const response = await getDeviceEncryptedSecret(walletId, signerId, {\r\n devicePublicKey\r\n });\r\n \r\n // Extract encrypted data from response\r\n // API returns void, but we need to handle the actual response structure\r\n const encryptedData = extractEncryptedData(response as unknown as EncryptedSecretResponse | WalletControllerGetDeviceEncryptedSecretResult);\r\n \r\n // 3. Validate device private key\r\n if (!devicePrivateKey) {\r\n throw new Error(\r\n `Device private key is missing. ` +\r\n `This may happen if the device key was not properly stored or loaded. ` +\r\n `Please ensure the device key exists in storage for devicePublicKey: ${devicePublicKey.substring(0, 20)}...`\r\n );\r\n }\r\n \r\n // 4. Decrypt using ECDH\r\n const masterSecret = await decryptSecret(\r\n encryptedData,\r\n devicePrivateKey,\r\n devicePublicKey\r\n );\r\n \r\n // 5. Derive Solana keypair from master secret\r\n return await deriveSolanaKeypair(masterSecret);\r\n}\r\n\r\n/**\r\n * Derive keypair for external wallet signers\r\n */\r\nasync function deriveExternalKeypair(\r\n walletId: string,\r\n signerId: string\r\n): Promise<Keypair> {\r\n // External wallets don't derive - they use wallet adapter for signing\r\n // This returns a placeholder keypair - actual signing is delegated to wallet adapter\r\n throw new Error(\r\n 'External wallet signers require wallet adapter for signing. ' +\r\n 'Use getWalletAdapter() or WalletAdapterManager to connect and sign with external wallets.'\r\n );\r\n}\r\n\r\n/**\r\n * Derive keypair for API key signers (custodial)\r\n */\r\nasync function deriveApiKeyKeypair(\r\n walletId: string,\r\n signerId: string\r\n): Promise<Keypair> {\r\n // API key signers are custodial - signing happens server-side\r\n throw new Error('API key signers are custodial - use server-side signing');\r\n}\r\n\r\n/**\r\n * Derive keypair for passkey signers\r\n */\r\nasync function derivePasskeyKeypair(\r\n walletId: string,\r\n signerId: string\r\n): Promise<Keypair> {\r\n // Passkeys don't expose private keys - use authenticateWithPasskey() for signing\r\n throw new Error(\r\n 'Passkey signers require WebAuthn API for signing. ' +\r\n 'Use authenticateWithPasskey() from passkeyHelpers instead of deriveSignerKeypair().'\r\n );\r\n}\r\n\r\n/**\r\n * API response structure for encrypted secret\r\n */\r\ninterface EncryptedSecretResponse {\r\n data?: {\r\n encryptedSecret?: string;\r\n encrypted_secret?: string;\r\n };\r\n encryptedSecret?: string;\r\n encrypted_secret?: string;\r\n}\r\n\r\n/**\r\n * Extract encrypted data from API response\r\n * Handles actual API response format: { success: true, data: { encryptedSecret: \"...\" } }\r\n * The encryptedSecret is a single base64 string containing all components concatenated:\r\n * - First 65 bytes: ephemeral public key (uncompressed)\r\n * - Next 16 bytes: IV\r\n * - Next 16 bytes: auth tag\r\n * - Rest: encrypted payload\r\n */\r\nfunction extractEncryptedData(response: EncryptedSecretResponse | WalletControllerGetDeviceEncryptedSecretResult): {\r\n encryptedSecret: string; // Single base64 string with all components\r\n} {\r\n // Handle API response format: { success: true, data: { encryptedSecret: \"...\" } }\r\n const responseData = response as unknown;\r\n const data = (typeof responseData === 'object' && responseData !== null && 'data' in responseData \r\n ? (responseData as { data?: EncryptedSecretResponse }).data \r\n : responseData) || responseData;\r\n \r\n // Get encryptedSecret (required)\r\n const dataObj = data as EncryptedSecretResponse;\r\n const encryptedSecret = dataObj.encryptedSecret || dataObj.encrypted_secret || \r\n ((dataObj as { data?: { encryptedSecret?: string; encrypted_secret?: string } }).data?.encryptedSecret) ||\r\n ((dataObj as { data?: { encryptedSecret?: string; encrypted_secret?: string } }).data?.encrypted_secret);\r\n \r\n if (!encryptedSecret) {\r\n const dataKeys = typeof data === 'object' && data !== null ? Object.keys(data) : [];\r\n throw new Error(\r\n `Missing encryptedSecret in API response. ` +\r\n `Response structure: ${JSON.stringify(dataKeys)}. ` +\r\n `Full response: ${JSON.stringify(response).substring(0, 200)}...`\r\n );\r\n }\r\n \r\n // Validate minimum length (65 + 16 + 16 = 97 bytes minimum)\r\n try {\r\n const decoded = atob(encryptedSecret);\r\n if (decoded.length < 97) {\r\n throw new Error(\r\n `Encrypted secret is too short: expected at least 97 bytes, got ${decoded.length} bytes`\r\n );\r\n }\r\n } catch (error) {\r\n throw new Error(\r\n `Invalid encryptedSecret format: ${error}. ` +\r\n `Expected base64-encoded binary data containing: ephemeral key (65 bytes) + IV (16 bytes) + auth tag (16 bytes) + encrypted payload`\r\n );\r\n }\r\n \r\n // Return the single encryptedSecret string - decryption functions will parse it\r\n return {\r\n encryptedSecret\r\n };\r\n}\r\n\r\n/**\r\n * Decrypt secret using ECDH\r\n * encryptedSecret is a single base64 string containing all components concatenated\r\n */\r\nasync function decryptSecret(\r\n encryptedData: {\r\n encryptedSecret: string; // Single base64 string: ephemeral key (65) + IV (16) + tag (16) + encrypted payload\r\n },\r\n devicePrivateKey: DeviceKeyPair['privateKey'],\r\n devicePublicKey: string\r\n): Promise<Uint8Array> {\r\n // Browser environment with Web Crypto API\r\n if (typeof globalThis.crypto !== 'undefined' && globalThis.crypto.subtle) {\r\n return decryptSecretBrowser(encryptedData.encryptedSecret, devicePrivateKey);\r\n }\r\n \r\n // Node.js environment\r\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\r\n return decryptSecretNode(encryptedData.encryptedSecret, devicePrivateKey as string);\r\n }\r\n \r\n throw new Error('Unable to decrypt secret: unsupported environment');\r\n}\r\n\r\n/**\r\n * Decrypt secret in browser using Web Crypto API\r\n * encryptedSecret is a single base64 string containing all components concatenated:\r\n * - First 65 bytes: ephemeral public key (uncompressed)\r\n * - Next 16 bytes: IV\r\n * - Next 16 bytes: auth tag\r\n * - Rest: encrypted payload\r\n */\r\nasync function decryptSecretBrowser(\r\n encryptedSecret: string,\r\n devicePrivateKey: DeviceKeyPair['privateKey']\r\n): Promise<Uint8Array> {\r\n const crypto = globalThis.crypto;\r\n \r\n // Validate inputs\r\n if (!encryptedSecret || encryptedSecret.trim().length === 0) {\r\n throw new Error('Encrypted data is empty or missing');\r\n }\r\n \r\n if (!devicePrivateKey) {\r\n throw new Error('Device private key is undefined');\r\n }\r\n \r\n try {\r\n // Decode base64 encrypted data\r\n const encryptedBuffer = Uint8Array.from(atob(encryptedSecret), c => c.charCodeAt(0));\r\n \r\n // Validate minimum length: 65 (ephemeral key) + 16 (IV) + 16 (auth tag) = 97 bytes\r\n if (encryptedBuffer.length < 97) {\r\n throw new Error(\r\n `Encrypted data is too short: expected at least 97 bytes, got ${encryptedBuffer.length} bytes`\r\n );\r\n }\r\n \r\n // Extract components from encrypted buffer\r\n const ephemeralPublicKey = encryptedBuffer.slice(0, 65); // Uncompressed P-256 public key\r\n const iv = encryptedBuffer.slice(65, 81); // 16 bytes IV\r\n const authTag = encryptedBuffer.slice(81, 97); // 16 bytes auth tag\r\n const encrypted = encryptedBuffer.slice(97); // Rest is encrypted data\r\n \r\n if (encrypted.length === 0) {\r\n throw new Error('Encrypted payload is missing');\r\n }\r\n \r\n // Validate ephemeral public key format (should start with 0x04 for uncompressed)\r\n if (ephemeralPublicKey[0] !== 0x04) {\r\n throw new Error(\r\n 'Invalid ephemeral public key format: expected uncompressed format (starting with 0x04)'\r\n );\r\n }\r\n \r\n // Import device private key for ECDH\r\n // devicePrivateKey is already a CryptoKey (from storage adapter)\r\n // But handle case where it might be raw bytes or base64 string\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let deviceKey: any;\r\n if (devicePrivateKey && typeof devicePrivateKey === 'object' && 'type' in devicePrivateKey) {\r\n // Already a CryptoKey (from storage adapter)\r\n deviceKey = devicePrivateKey;\r\n } else {\r\n // Convert to Uint8Array if needed\r\n const privateKeyBytes = typeof devicePrivateKey === 'string'\r\n ? Uint8Array.from(atob(devicePrivateKey), c => c.charCodeAt(0))\r\n : new Uint8Array(devicePrivateKey);\r\n \r\n // Import as PKCS8 format\r\n deviceKey = await crypto.subtle.importKey(\r\n 'pkcs8',\r\n privateKeyBytes,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n false,\r\n ['deriveBits']\r\n );\r\n }\r\n \r\n // Import ephemeral public key (raw uncompressed format)\r\n const ephemeralKey = await crypto.subtle.importKey(\r\n 'raw',\r\n ephemeralPublicKey,\r\n {\r\n name: 'ECDH',\r\n namedCurve: 'P-256',\r\n },\r\n false,\r\n []\r\n );\r\n \r\n // Derive shared secret using ECDH\r\n const sharedSecret = await crypto.subtle.deriveBits(\r\n {\r\n name: 'ECDH',\r\n public: ephemeralKey,\r\n },\r\n deviceKey,\r\n 256\r\n );\r\n \r\n // Derive encryption key using HKDF\r\n const encryptionKey = hkdf(\r\n sha256,\r\n new Uint8Array(sharedSecret),\r\n new TextEncoder().encode('device-encryption'),\r\n new TextEncoder().encode('master-secret'),\r\n 32\r\n );\r\n \r\n // Import encryption key for AES-GCM\r\n const key = await crypto.subtle.importKey(\r\n 'raw',\r\n encryptionKey,\r\n { name: 'AES-GCM' },\r\n false,\r\n ['decrypt']\r\n );\r\n \r\n // Combine encrypted data with auth tag for Web Crypto API\r\n const encryptedWithTag = new Uint8Array(encrypted.length + authTag.length);\r\n encryptedWithTag.set(encrypted, 0);\r\n encryptedWithTag.set(authTag, encrypted.length);\r\n \r\n // Decrypt using AES-GCM\r\n const decrypted = await crypto.subtle.decrypt(\r\n {\r\n name: 'AES-GCM',\r\n iv: iv,\r\n tagLength: 128, // 16 bytes = 128 bits\r\n },\r\n key,\r\n encryptedWithTag\r\n );\r\n \r\n return new Uint8Array(decrypted);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`Failed to decrypt master secret: ${error.message}`);\r\n }\r\n throw new Error(`Failed to decrypt master secret: ${String(error)}`);\r\n }\r\n}\r\n\r\n/**\r\n * Decrypt secret in Node.js\r\n * encryptedSecret is a single base64 string containing all components concatenated:\r\n * - First 65 bytes: ephemeral public key (uncompressed)\r\n * - Next 16 bytes: IV\r\n * - Next 16 bytes: auth tag\r\n * - Rest: encrypted payload\r\n */\r\nfunction decryptSecretNode(\r\n encryptedSecret: string,\r\n devicePrivateKeyBase64: string\r\n): Uint8Array {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const crypto = require('crypto');\r\n \r\n // Validate inputs\r\n if (!encryptedSecret || encryptedSecret.trim().length === 0) {\r\n throw new Error('Encrypted data is empty or missing');\r\n }\r\n \r\n // Convert devicePrivateKey to Buffer if it's a string\r\n const privateKeyBuffer = typeof devicePrivateKeyBase64 === 'string'\r\n ? Buffer.from(devicePrivateKeyBase64, 'base64')\r\n : devicePrivateKeyBase64;\r\n \r\n if (!privateKeyBuffer || privateKeyBuffer.length === 0) {\r\n throw new Error('Device private key is empty or missing');\r\n }\r\n \r\n try {\r\n // Decode base64 encrypted data\r\n const encryptedBuffer = Buffer.from(encryptedSecret, 'base64');\r\n \r\n // Validate minimum length: 65 (ephemeral key) + 16 (IV) + 16 (auth tag) = 97 bytes\r\n const MINIMUM_LENGTH = 97;\r\n if (encryptedBuffer.length < MINIMUM_LENGTH) {\r\n throw new Error(\r\n `Encrypted data is too short: expected at least ${MINIMUM_LENGTH} bytes, ` +\r\n `got ${encryptedBuffer.length} bytes. The encrypted secret may be corrupted.`\r\n );\r\n }\r\n \r\n // Extract components from encrypted buffer\r\n const ephemeralPublicKey = encryptedBuffer.subarray(0, 65); // Uncompressed P-256 public key\r\n const iv = encryptedBuffer.subarray(65, 81); // 16 bytes IV\r\n const authTag = encryptedBuffer.subarray(81, 97); // 16 bytes auth tag\r\n const encrypted = encryptedBuffer.subarray(97); // Rest is encrypted data\r\n \r\n // Validate we have encrypted data\r\n if (encrypted.length === 0) {\r\n throw new Error('Encrypted payload is missing. The encrypted secret appears incomplete.');\r\n }\r\n \r\n // Validate ephemeral public key format (should start with 0x04 for uncompressed)\r\n if (ephemeralPublicKey[0] !== 0x04 && ephemeralPublicKey.length === 65) {\r\n throw new Error(\r\n 'Invalid ephemeral public key format: expected uncompressed format (starting with 0x04)'\r\n );\r\n }\r\n \r\n // Create ECDH with device private key\r\n const ecdh = crypto.createECDH('prime256v1');\r\n ecdh.setPrivateKey(privateKeyBuffer);\r\n \r\n // Compute shared secret using ephemeral public key\r\n const sharedSecret = ecdh.computeSecret(ephemeralPublicKey);\r\n \r\n // Derive encryption key using HKDF\r\n const encryptionKey = hkdf(\r\n sha256,\r\n sharedSecret,\r\n Buffer.from('device-encryption'),\r\n Buffer.from('master-secret'),\r\n 32\r\n );\r\n \r\n // Decrypt using AES-256-GCM\r\n const decipher = crypto.createDecipheriv('aes-256-gcm', Buffer.from(encryptionKey), iv);\r\n decipher.setAuthTag(authTag);\r\n \r\n let decrypted = decipher.update(encrypted);\r\n decrypted = Buffer.concat([decrypted, decipher.final()]);\r\n \r\n return new Uint8Array(decrypted);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`Failed to decrypt master secret: ${error.message}`);\r\n }\r\n throw new Error(`Failed to decrypt master secret: ${String(error)}`);\r\n }\r\n}\r\n\r\n/**\r\n * Derive Solana keypair from master secret\r\n */\r\nasync function deriveSolanaKeypair(masterSecret: Uint8Array): Promise<Keypair> {\r\n // Use first 32 bytes as secret key\r\n const secretKey = masterSecret.slice(0, 32);\r\n \r\n // Derive public key from secret key using ed25519\r\n const publicKey = await deriveEd25519PublicKey(secretKey);\r\n \r\n return {\r\n publicKey,\r\n secretKey: new Uint8Array([...secretKey, ...publicKey]) // Solana format: 64 bytes\r\n };\r\n}\r\n\r\n/**\r\n * Derive Ed25519 public key from secret key\r\n * Uses @noble/ed25519 for pure JavaScript Ed25519 operations\r\n */\r\nasync function deriveEd25519PublicKey(secretKey: Uint8Array): Promise<Uint8Array> {\r\n if (secretKey.length !== 32) {\r\n throw new Error(`Invalid secret key length: expected 32 bytes, got ${secretKey.length}`);\r\n }\r\n \r\n // Derive public key from secret key using Ed25519\r\n // getPublicKey is synchronous but we make this async for consistency\r\n return getPublicKey(secretKey);\r\n}\r\n\r\n/**\r\n * Sign message with keypair using Ed25519\r\n * Uses @noble/ed25519 for pure JavaScript Ed25519 signing\r\n */\r\nasync function signMessage(keypair: Keypair, message: Uint8Array): Promise<Uint8Array> {\r\n // Extract the private key (first 32 bytes of secretKey)\r\n // Solana keypair format: secretKey is 64 bytes = privateKey (32) + publicKey (32)\r\n if (keypair.secretKey.length !== 64) {\r\n throw new Error(`Invalid keypair secretKey length: expected 64 bytes, got ${keypair.secretKey.length}`);\r\n }\r\n \r\n const privateKey = keypair.secretKey.slice(0, 32);\r\n \r\n // Sign the message using Ed25519\r\n return ed25519Sign(message, privateKey);\r\n}\r\n\r\n/**\r\n * Infer signer type from response structure\r\n */\r\nfunction inferSignerType(response: SignerResponse): SignerInfo['type'] {\r\n if (response.email) return 'email';\r\n if (response.phone) return 'phone';\r\n if (response.walletType || response.wallet_type) return 'external';\r\n if (response.apiKey || response.api_key) return 'apiKey';\r\n if (response.credential || response.passkey) return 'passkey';\r\n return 'external'; // Default\r\n}\r\n\r\n/**\r\n * Convert base64 to ArrayBuffer\r\n */\r\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\r\n if (typeof Buffer !== 'undefined') {\r\n return Buffer.from(base64, 'base64').buffer;\r\n }\r\n \r\n const binaryString = atob(base64);\r\n const bytes = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\n/**\r\n * Convert base64 to PEM\r\n */\r\nfunction base64ToPem(base64: string): string {\r\n const formatted = base64.match(/.{1,64}/g)?.join('\\n') || base64;\r\n return `-----BEGIN PUBLIC KEY-----\\n${formatted}\\n-----END PUBLIC KEY-----`;\r\n}\r\n\r\n", "/**\r\n * SDK Error Classes\r\n * Provides clear, actionable error messages\r\n */\r\n\r\nexport interface SDKErrorDetails {\r\n [key: string]: any;\r\n helpUrl?: string;\r\n}\r\n\r\nexport class SDKError extends Error {\r\n public readonly code: string;\r\n public readonly details?: SDKErrorDetails;\r\n\r\n constructor(message: string, code: string, details?: SDKErrorDetails) {\r\n super(message);\r\n this.name = 'SDKError';\r\n this.code = code;\r\n this.details = details;\r\n\r\n // Maintains proper stack trace for where our error was thrown (only available on V8)\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, SDKError);\r\n }\r\n }\r\n\r\n toString(): string {\r\n let error = `${this.name} [${this.code}]: ${this.message}`;\r\n if (this.details?.helpUrl) {\r\n error += `\\nFor more information: ${this.details.helpUrl}`;\r\n }\r\n return error;\r\n }\r\n}\r\n\r\n/**\r\n * Device key mismatch error\r\n */\r\nexport class DeviceKeyMismatchError extends SDKError {\r\n constructor(\r\n expectedPublicKey: string,\r\n foundPublicKey: string | null,\r\n signerId: string,\r\n walletId: string\r\n ) {\r\n const message = foundPublicKey\r\n ? `Device key mismatch for signer ${signerId}. ` +\r\n `Expected device public key: ${expectedPublicKey.substring(0, 20)}..., ` +\r\n `Found in storage: ${foundPublicKey.substring(0, 20)}... ` +\r\n `Please ensure you're using the device key that was registered when creating the signer. ` +\r\n `If you have multiple devices, specify the devicePublicKey option.`\r\n : `Device key not found in storage for signer ${signerId}. ` +\r\n `Expected device public key: ${expectedPublicKey.substring(0, 20)}... ` +\r\n `Please ensure the device key is stored in localStorage/storage. ` +\r\n `You may need to re-create the signer if the device key was lost.`;\r\n\r\n super(message, 'DEVICE_KEY_MISMATCH', {\r\n expectedDevicePublicKey: expectedPublicKey,\r\n foundDevicePublicKey: foundPublicKey,\r\n signerId,\r\n walletId,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Device key not found error\r\n */\r\nexport class DeviceKeyNotFoundError extends SDKError {\r\n constructor(publicKey: string, signerId?: string) {\r\n const message = signerId\r\n ? `Device key with public key ${publicKey.substring(0, 20)}... not found in storage for signer ${signerId}. ` +\r\n `Please ensure the device key is stored in localStorage/storage.`\r\n : `Device key with public key ${publicKey.substring(0, 20)}... not found in storage. ` +\r\n `Please ensure the device key is stored in localStorage/storage.`;\r\n\r\n super(message, 'DEVICE_KEY_NOT_FOUND', {\r\n devicePublicKey: publicKey,\r\n signerId,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * No device identities found error\r\n */\r\nexport class NoDeviceIdentitiesError extends SDKError {\r\n constructor(signerId: string, walletId: string) {\r\n const message = `No device identities found for signer ${signerId} in wallet ${walletId}. ` +\r\n `This signer may not have been set up with device-based authentication. ` +\r\n `Please create a new email or phone signer with a device public key.`;\r\n\r\n super(message, 'NO_DEVICE_IDENTITIES', {\r\n signerId,\r\n walletId,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Multiple device identities found error\r\n */\r\nexport class MultipleDeviceIdentitiesError extends SDKError {\r\n constructor(\r\n signerId: string,\r\n walletId: string,\r\n deviceIdentities: Array<{ deviceId: string; devicePublicKey: string }>\r\n ) {\r\n const message = `Multiple device identities (${deviceIdentities.length}) found for signer ${signerId}. ` +\r\n `Please specify which device to use by providing the devicePublicKey option. ` +\r\n `Available device public keys: ${deviceIdentities.map(d => d.devicePublicKey.substring(0, 20) + '...').join(', ')}`;\r\n\r\n super(message, 'MULTIPLE_DEVICE_IDENTITIES', {\r\n signerId,\r\n walletId,\r\n deviceIdentities,\r\n helpUrl: 'https://docs.cilantro.com/device-keys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Signer validation error\r\n */\r\nexport class SignerValidationError extends SDKError {\r\n constructor(\r\n message: string,\r\n validationErrors: string[],\r\n signerId?: string\r\n ) {\r\n const fullMessage = `Signer validation failed: ${message}. Errors: ${validationErrors.join(', ')}`;\r\n\r\n super(fullMessage, 'SIGNER_VALIDATION_FAILED', {\r\n validationErrors,\r\n signerId,\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Signer not found error\r\n */\r\nexport class SignerNotFoundError extends SDKError {\r\n constructor(signerId: string, walletId: string) {\r\n const message = `Signer ${signerId} not found in wallet ${walletId}. ` +\r\n `Please verify the signer ID is correct.`;\r\n\r\n super(message, 'SIGNER_NOT_FOUND', {\r\n signerId,\r\n walletId,\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Signer inactive error\r\n */\r\nexport class SignerInactiveError extends SDKError {\r\n constructor(signerId: string, walletId: string) {\r\n const message = `Signer ${signerId} in wallet ${walletId} is inactive. ` +\r\n `Please activate the signer or create a new one.`;\r\n\r\n super(message, 'SIGNER_INACTIVE', {\r\n signerId,\r\n walletId,\r\n suggestion: 'Activate signer or create a new one',\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Unsupported signer type error\r\n */\r\nexport class UnsupportedSignerTypeError extends SDKError {\r\n constructor(signerType: string, supportedTypes: string[]) {\r\n const message = `Signer type '${signerType}' is not supported. ` +\r\n `Supported types: ${supportedTypes.join(', ')}`;\r\n\r\n super(message, 'UNSUPPORTED_SIGNER_TYPE', {\r\n signerType,\r\n supportedTypes,\r\n helpUrl: 'https://docs.cilantro.com/signers'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Device authorization error\r\n */\r\nexport class DeviceAuthorizationError extends SDKError {\r\n constructor(devicePublicKey: string, reason?: string) {\r\n const message = reason\r\n ? `Device ${devicePublicKey.substring(0, 20)}... is not authorized: ${reason}`\r\n : `Device ${devicePublicKey.substring(0, 20)}... is not authorized for this signer`;\r\n\r\n super(message, 'DEVICE_NOT_AUTHORIZED', {\r\n devicePublicKey,\r\n reason,\r\n suggestion: 'Authorize device or use an authorized device',\r\n helpUrl: 'https://docs.cilantro.com/device-auth'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Transaction signing error\r\n */\r\nexport class TransactionSigningError extends SDKError {\r\n constructor(reason: string, signerId?: string, details?: any) {\r\n const message = signerId\r\n ? `Failed to sign transaction with signer ${signerId}: ${reason}`\r\n : `Failed to sign transaction: ${reason}`;\r\n\r\n super(message, 'TRANSACTION_SIGNING_FAILED', {\r\n reason,\r\n signerId,\r\n ...details,\r\n helpUrl: 'https://docs.cilantro.com/signing'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * WebAuthn not supported error\r\n */\r\nexport class WebAuthnNotSupportedError extends SDKError {\r\n constructor() {\r\n const message = 'WebAuthn is not supported in this environment. ' +\r\n 'Please use a modern browser with WebAuthn support for passkey signers.';\r\n\r\n super(message, 'WEBAUTHN_NOT_SUPPORTED', {\r\n suggestion: 'Use a modern browser (Chrome, Firefox, Safari, Edge)',\r\n helpUrl: 'https://docs.cilantro.com/passkeys'\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Device compatibility error\r\n */\r\nexport class DeviceCompatibilityError extends SDKError {\r\n constructor(issues: string[]) {\r\n const message = `Device is not compatible with SDK requirements: ${issues.join(', ')}`;\r\n\r\n super(message, 'DEVICE_INCOMPATIBLE', {\r\n issues,\r\n helpUrl: 'https://docs.cilantro.com/compatibility'\r\n });\r\n }\r\n}\r\n\r\n", "/**\r\n * Device Key Helper Functions\r\n * Handles device key validation, resolution, and management for signers\r\n */\r\n\r\nimport { getSignerById, listSigners } from '../wallet';\r\nimport type { WalletControllerGetSignerByIdResult } from '../wallet';\r\nimport { findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage, DeviceKeyPair } from '../utils/deviceKeyManager';\r\nimport type { SignerResponse } from './signerHelpers';\r\nimport {\r\n DeviceKeyMismatchError,\r\n DeviceKeyNotFoundError,\r\n NoDeviceIdentitiesError,\r\n MultipleDeviceIdentitiesError\r\n} from '../errors';\r\n\r\nexport interface DeviceIdentity {\r\n deviceId: string;\r\n devicePublicKey: string;\r\n lastUsedAt?: string | null;\r\n createdAt?: string;\r\n}\r\n\r\nexport interface DeviceKeyValidationResult {\r\n isValid: boolean;\r\n storedDeviceKey?: string;\r\n apiDeviceKey: string;\r\n deviceId?: string;\r\n matchedDeviceIdentity?: DeviceIdentity;\r\n}\r\n\r\n/**\r\n * Get all device keys for a signer from the API\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @returns Array of device identities\r\n */\r\nexport async function getSignerDeviceKeys(\r\n walletId: string,\r\n signerId: string\r\n): Promise<DeviceIdentity[]> {\r\n const signer = await getSignerById(walletId, signerId);\r\n const signerData = signer as WalletControllerGetSignerByIdResult;\r\n const responseData = (signerData as { data?: SignerResponse }).data || signerData;\r\n const signerResponse = responseData as SignerResponse;\r\n \r\n const deviceIdentities = signerResponse.deviceIdentities || [];\r\n \r\n return deviceIdentities.map((di) => ({\r\n deviceId: di.deviceId || di.device_id || '',\r\n devicePublicKey: di.devicePublicKey || di.device_public_key || '',\r\n lastUsedAt: di.lastUsedAt || di.last_used_at,\r\n createdAt: di.createdAt || di.created_at\r\n }));\r\n}\r\n\r\n/**\r\n * Validates that a device key in storage matches one in the API\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param devicePublicKey - Device public key to validate\r\n * @param options - Configuration options\r\n * @returns Validation result\r\n */\r\nexport async function validateDeviceKey(\r\n walletId: string,\r\n signerId: string,\r\n devicePublicKey: string,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n }\r\n): Promise<DeviceKeyValidationResult> {\r\n // Get device identities from API\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // Find matching device identity in API\r\n const matchedIdentity = deviceIdentities.find(\r\n di => di.devicePublicKey === devicePublicKey\r\n );\r\n \r\n if (!matchedIdentity) {\r\n return {\r\n isValid: false,\r\n apiDeviceKey: deviceIdentities[0].devicePublicKey,\r\n storedDeviceKey: devicePublicKey\r\n };\r\n }\r\n \r\n // Check if device key exists in storage\r\n if (options?.deviceKeyManager) {\r\n const storedKey = await findDeviceKeyByPublicKey(\r\n devicePublicKey,\r\n options.deviceKeyManager\r\n );\r\n \r\n if (!storedKey) {\r\n return {\r\n isValid: false,\r\n apiDeviceKey: devicePublicKey,\r\n storedDeviceKey: undefined,\r\n deviceId: matchedIdentity.deviceId,\r\n matchedDeviceIdentity: matchedIdentity\r\n };\r\n }\r\n }\r\n \r\n return {\r\n isValid: true,\r\n apiDeviceKey: devicePublicKey,\r\n storedDeviceKey: devicePublicKey,\r\n deviceId: matchedIdentity.deviceId,\r\n matchedDeviceIdentity: matchedIdentity\r\n };\r\n}\r\n\r\n/**\r\n * Automatically resolves which device key to use for a signer\r\n * Tries to find a matching device key in storage from the signer's device identities\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param deviceKeyManager - Storage adapter\r\n * @returns Device key pair and device identity\r\n */\r\nexport async function resolveDeviceKey(\r\n walletId: string,\r\n signerId: string,\r\n deviceKeyManager: DeviceKeyStorage\r\n): Promise<{\r\n deviceKeyPair: DeviceKeyPair;\r\n deviceIdentity: DeviceIdentity;\r\n}> {\r\n // Get device identities from API\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // Try to find matching device key in storage\r\n for (const deviceIdentity of deviceIdentities) {\r\n const deviceKey = await findDeviceKeyByPublicKey(\r\n deviceIdentity.devicePublicKey,\r\n deviceKeyManager\r\n );\r\n \r\n if (deviceKey) {\r\n return {\r\n deviceKeyPair: deviceKey,\r\n deviceIdentity\r\n };\r\n }\r\n }\r\n \r\n // No match found\r\n throw new DeviceKeyNotFoundError(\r\n deviceIdentities[0].devicePublicKey,\r\n signerId\r\n );\r\n}\r\n\r\n/**\r\n * Find device key by public key with validation\r\n * @param devicePublicKey - Device public key\r\n * @param deviceKeyManager - Storage adapter\r\n * @param signerId - Optional signer ID for better error messages\r\n * @returns Device key pair\r\n * @throws DeviceKeyNotFoundError if not found\r\n */\r\nexport async function findAndValidateDeviceKey(\r\n devicePublicKey: string,\r\n deviceKeyManager: DeviceKeyStorage,\r\n signerId?: string\r\n): Promise<DeviceKeyPair> {\r\n const deviceKey = await findDeviceKeyByPublicKey(\r\n devicePublicKey,\r\n deviceKeyManager\r\n );\r\n \r\n if (!deviceKey) {\r\n throw new DeviceKeyNotFoundError(devicePublicKey, signerId);\r\n }\r\n \r\n return deviceKey;\r\n}\r\n\r\n/**\r\n * Get the best device identity to use (most recently used or first)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @returns Best device identity to use\r\n */\r\nexport async function getBestDeviceIdentity(\r\n walletId: string,\r\n signerId: string\r\n): Promise<DeviceIdentity> {\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // Sort by last used (most recent first), then by created date\r\n const sorted = deviceIdentities.sort((a, b) => {\r\n if (a.lastUsedAt && b.lastUsedAt) {\r\n return new Date(b.lastUsedAt).getTime() - new Date(a.lastUsedAt).getTime();\r\n }\r\n if (a.lastUsedAt) return -1;\r\n if (b.lastUsedAt) return 1;\r\n \r\n if (a.createdAt && b.createdAt) {\r\n return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();\r\n }\r\n return 0;\r\n });\r\n \r\n return sorted[0];\r\n}\r\n\r\n", "/**\r\n * Email Signer Helper Functions\r\n * Provides simplified API for email-based signers\r\n */\r\n\r\nimport { \r\n deriveSignerKeypair, \r\n signWithSigner, \r\n parseSignerResponse,\r\n clearSignerCache,\r\n type SignerInfo,\r\n type SignerResponse,\r\n type Keypair,\r\n type CacheConfig\r\n} from './signerHelpers';\r\nimport { getDevicePublicKey, findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { createEmailSigner, listSigners, getSignerById } from '../wallet';\r\nimport type { WalletControllerGetSignerByIdResult, WalletControllerListSignersResult } from '../wallet';\r\nimport { getSignerDeviceKeys, resolveDeviceKey, getBestDeviceIdentity, validateDeviceKey as validateDeviceKeyFn } from './deviceKeyHelpers';\r\nimport { DeviceKeyNotFoundError, DeviceKeyMismatchError } from '../errors';\r\n\r\nexport interface EmailSignerConfig {\r\n email: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n}\r\n\r\nexport interface EmailSignerOptions {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n devicePublicKey?: string; // Specify which device key to use\r\n deviceId?: string; // Alternative: specify by device ID\r\n validateDeviceKey?: boolean; // Validate device key matches API (default: true)\r\n}\r\n\r\n/**\r\n * Create email signer with automatic device key management\r\n * @param walletId - Wallet ID\r\n * @param config - Email signer configuration\r\n * @returns Created signer information\r\n */\r\nexport async function createEmailSignerHelper(\r\n walletId: string,\r\n config: EmailSignerConfig\r\n): Promise<SignerInfo> {\r\n // Generate or get device public key\r\n const devicePublicKey = await getDevicePublicKey(undefined, config.deviceKeyManager);\r\n \r\n // Create signer via API\r\n await createEmailSigner(walletId, {\r\n email: config.email,\r\n devicePublicKey\r\n });\r\n \r\n // Fetch created signer\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.email === config.email || \r\n (s.type === 'email' && s.email === config.email)\r\n );\r\n \r\n if (!signer) {\r\n throw new Error('Failed to create email signer');\r\n }\r\n \r\n return parseSignerResponse(signer);\r\n}\r\n\r\n/**\r\n * Get keypair for email signer (with caching and device key validation)\r\n * Automatically handles:\r\n * - Fetching signer from API\r\n * - Extracting devicePublicKey and deviceId from signer response\r\n * - Resolving device key from storage\r\n * - Validating device key matches API\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns Solana keypair\r\n */\r\nexport async function getEmailSignerKeypair(\r\n walletId: string,\r\n signerId: string,\r\n options?: EmailSignerOptions\r\n): Promise<Keypair> {\r\n const {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: providedDevicePublicKey,\r\n deviceId: providedDeviceId,\r\n validateDeviceKey = true\r\n } = options || {};\r\n\r\n let resolvedDevicePublicKey: string | undefined = providedDevicePublicKey;\r\n let resolvedDeviceId: string | undefined = providedDeviceId;\r\n\r\n // If deviceKeyManager is provided, handle automatic resolution\r\n if (deviceKeyManager) {\r\n // Step 1: Fetch signer from API to get device identities\r\n const signerResponse = await getSignerById(walletId, signerId);\r\n const signerData = signerResponse as WalletControllerGetSignerByIdResult;\r\n \r\n // Extract device identities from signer response\r\n const responseData = (signerData as { data?: SignerResponse }).data || signerData;\r\n const deviceIdentities = (responseData as SignerResponse).deviceIdentities || [];\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new Error(\r\n `No device identities found for signer ${signerId}. ` +\r\n `Please ensure the signer has been created with a device key.`\r\n );\r\n }\r\n\r\n // Step 2: Resolve devicePublicKey and deviceId\r\n if (providedDeviceId && !providedDevicePublicKey) {\r\n // Find device by deviceId\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.deviceId || di.device_id) === providedDeviceId\r\n );\r\n if (matchedDevice) {\r\n resolvedDevicePublicKey = matchedDevice.devicePublicKey || matchedDevice.device_public_key;\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n } else {\r\n throw new Error(\r\n `Device with ID ${providedDeviceId} not found for signer ${signerId}. ` +\r\n `Available device IDs: ${deviceIdentities.map((d) => d.deviceId || d.device_id).join(', ')}`\r\n );\r\n }\r\n } else if (providedDevicePublicKey) {\r\n // Find device by devicePublicKey\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.devicePublicKey || di.device_public_key) === providedDevicePublicKey\r\n );\r\n if (matchedDevice) {\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n }\r\n } else {\r\n // No device specified - use automatic resolution (best device or first)\r\n try {\r\n const bestDevice = await getBestDeviceIdentity(walletId, signerId);\r\n resolvedDevicePublicKey = bestDevice.devicePublicKey;\r\n resolvedDeviceId = bestDevice.deviceId;\r\n } catch {\r\n // Fallback to first device\r\n const firstDevice = deviceIdentities[0];\r\n resolvedDevicePublicKey = firstDevice.devicePublicKey || firstDevice.device_public_key;\r\n resolvedDeviceId = firstDevice.deviceId || firstDevice.device_id;\r\n }\r\n }\r\n\r\n // Step 3: Find device key in storage\r\n if (resolvedDevicePublicKey) {\r\n const foundKey = await findDeviceKeyByPublicKey(resolvedDevicePublicKey, deviceKeyManager);\r\n \r\n if (!foundKey) {\r\n throw new DeviceKeyNotFoundError(resolvedDevicePublicKey, signerId);\r\n }\r\n\r\n // Step 4: Validate device key matches API (if validation enabled)\r\n if (validateDeviceKey) {\r\n const validation = await validateDeviceKeyFn(\r\n walletId,\r\n signerId,\r\n resolvedDevicePublicKey,\r\n { deviceKeyManager }\r\n );\r\n\r\n if (!validation.isValid) {\r\n throw new DeviceKeyMismatchError(\r\n validation.apiDeviceKey,\r\n validation.storedDeviceKey || null,\r\n signerId,\r\n walletId\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Step 5: Derive keypair using resolved devicePublicKey\r\n return deriveSignerKeypair(walletId, signerId, 'email', {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: resolvedDevicePublicKey\r\n });\r\n}\r\n\r\n/**\r\n * Sign message with email signer\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param message - Message to sign\r\n * @param options - Configuration options\r\n * @returns Signature\r\n */\r\nexport async function signWithEmailSigner(\r\n walletId: string,\r\n signerId: string,\r\n message: Uint8Array,\r\n options?: EmailSignerOptions\r\n): Promise<Uint8Array> {\r\n return signWithSigner(walletId, signerId, 'email', message, {\r\n deviceKeyManager: options?.deviceKeyManager,\r\n cache: options?.cache\r\n });\r\n}\r\n\r\n/**\r\n * Clear email signer cache\r\n * @param walletId - Wallet ID\r\n * @param signerId - Optional signer ID to clear specific signer\r\n */\r\nexport function clearEmailSignerCache(walletId: string, signerId?: string): void {\r\n clearSignerCache(walletId, signerId);\r\n}\r\n\r\n/**\r\n * Get email signer by email address\r\n * @param walletId - Wallet ID\r\n * @param email - Email address\r\n * @returns Signer information or null if not found\r\n */\r\nexport async function getEmailSignerByEmail(\r\n walletId: string,\r\n email: string\r\n): Promise<SignerInfo | null> {\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.email === email || \r\n (s.type === 'email' && s.email === email)\r\n );\r\n \r\n return signer ? parseSignerResponse(signer) : null;\r\n}\r\n\r\n", "/**\r\n * Phone Signer Helper Functions\r\n * Provides simplified API for phone-based signers\r\n */\r\n\r\nimport { \r\n deriveSignerKeypair, \r\n signWithSigner, \r\n parseSignerResponse,\r\n clearSignerCache,\r\n type SignerInfo,\r\n type SignerResponse,\r\n type Keypair,\r\n type CacheConfig\r\n} from './signerHelpers';\r\nimport { getDevicePublicKey, findDeviceKeyByPublicKey } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { createPhoneSigner, listSigners, getSignerById } from '../wallet';\r\nimport type { WalletControllerGetSignerByIdResult, WalletControllerListSignersResult } from '../wallet';\r\nimport { getSignerDeviceKeys, getBestDeviceIdentity, validateDeviceKey as validateDeviceKeyFn } from './deviceKeyHelpers';\r\nimport { DeviceKeyNotFoundError, DeviceKeyMismatchError } from '../errors';\r\n\r\nexport interface PhoneSignerConfig {\r\n phone: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n}\r\n\r\nexport interface PhoneSignerOptions {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n cache?: CacheConfig;\r\n devicePublicKey?: string; // Specify which device key to use\r\n deviceId?: string; // Alternative: specify by device ID\r\n validateDeviceKey?: boolean; // Validate device key matches API (default: true)\r\n}\r\n\r\n/**\r\n * Create phone signer with automatic device key management\r\n * @param walletId - Wallet ID\r\n * @param config - Phone signer configuration\r\n * @returns Created signer information\r\n */\r\nexport async function createPhoneSignerHelper(\r\n walletId: string,\r\n config: PhoneSignerConfig\r\n): Promise<SignerInfo> {\r\n // Generate or get device public key\r\n const devicePublicKey = await getDevicePublicKey(undefined, config.deviceKeyManager);\r\n \r\n // Create signer via API\r\n await createPhoneSigner(walletId, {\r\n phone: config.phone,\r\n devicePublicKey\r\n });\r\n \r\n // Fetch created signer\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.phone === config.phone || \r\n (s.type === 'phone' && s.phone === config.phone)\r\n );\r\n \r\n if (!signer) {\r\n throw new Error('Failed to create phone signer');\r\n }\r\n \r\n return parseSignerResponse(signer);\r\n}\r\n\r\n/**\r\n * Get keypair for phone signer (with caching and device key validation)\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns Solana keypair\r\n */\r\n/**\r\n * Get keypair for phone signer (with caching and device key validation)\r\n * Automatically handles:\r\n * - Fetching signer from API\r\n * - Extracting devicePublicKey and deviceId from signer response\r\n * - Resolving device key from storage\r\n * - Validating device key matches API\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns Solana keypair\r\n */\r\nexport async function getPhoneSignerKeypair(\r\n walletId: string,\r\n signerId: string,\r\n options?: PhoneSignerOptions\r\n): Promise<Keypair> {\r\n const {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: providedDevicePublicKey,\r\n deviceId: providedDeviceId,\r\n validateDeviceKey = true\r\n } = options || {};\r\n\r\n let resolvedDevicePublicKey: string | undefined = providedDevicePublicKey;\r\n let resolvedDeviceId: string | undefined = providedDeviceId;\r\n\r\n // If deviceKeyManager is provided, handle automatic resolution\r\n if (deviceKeyManager) {\r\n // Step 1: Fetch signer from API to get device identities\r\n const signerResponse = await getSignerById(walletId, signerId);\r\n const signerData = signerResponse as WalletControllerGetSignerByIdResult;\r\n \r\n // Extract device identities from signer response\r\n const responseData = (signerData as { data?: SignerResponse }).data || signerData;\r\n const deviceIdentities = (responseData as SignerResponse).deviceIdentities || [];\r\n \r\n if (deviceIdentities.length === 0) {\r\n throw new Error(\r\n `No device identities found for signer ${signerId}. ` +\r\n `Please ensure the signer has been created with a device key.`\r\n );\r\n }\r\n\r\n // Step 2: Resolve devicePublicKey and deviceId\r\n if (providedDeviceId && !providedDevicePublicKey) {\r\n // Find device by deviceId\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.deviceId || di.device_id) === providedDeviceId\r\n );\r\n if (matchedDevice) {\r\n resolvedDevicePublicKey = matchedDevice.devicePublicKey || matchedDevice.device_public_key;\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n } else {\r\n throw new Error(\r\n `Device with ID ${providedDeviceId} not found for signer ${signerId}. ` +\r\n `Available device IDs: ${deviceIdentities.map((d) => d.deviceId || d.device_id).join(', ')}`\r\n );\r\n }\r\n } else if (providedDevicePublicKey) {\r\n // Find device by devicePublicKey\r\n const matchedDevice = deviceIdentities.find(\r\n (di) => (di.devicePublicKey || di.device_public_key) === providedDevicePublicKey\r\n );\r\n if (matchedDevice) {\r\n resolvedDeviceId = matchedDevice.deviceId || matchedDevice.device_id;\r\n }\r\n } else {\r\n // No device specified - use automatic resolution (best device or first)\r\n try {\r\n const bestDevice = await getBestDeviceIdentity(walletId, signerId);\r\n resolvedDevicePublicKey = bestDevice.devicePublicKey;\r\n resolvedDeviceId = bestDevice.deviceId;\r\n } catch {\r\n // Fallback to first device\r\n const firstDevice = deviceIdentities[0];\r\n resolvedDevicePublicKey = firstDevice.devicePublicKey || firstDevice.device_public_key;\r\n resolvedDeviceId = firstDevice.deviceId || firstDevice.device_id;\r\n }\r\n }\r\n\r\n // Step 3: Find device key in storage\r\n if (resolvedDevicePublicKey) {\r\n const foundKey = await findDeviceKeyByPublicKey(resolvedDevicePublicKey, deviceKeyManager);\r\n \r\n if (!foundKey) {\r\n throw new DeviceKeyNotFoundError(resolvedDevicePublicKey, signerId);\r\n }\r\n\r\n // Step 4: Validate device key matches API (if validation enabled)\r\n if (validateDeviceKey) {\r\n const validation = await validateDeviceKeyFn(\r\n walletId,\r\n signerId,\r\n resolvedDevicePublicKey,\r\n { deviceKeyManager }\r\n );\r\n\r\n if (!validation.isValid) {\r\n throw new DeviceKeyMismatchError(\r\n validation.apiDeviceKey,\r\n validation.storedDeviceKey || null,\r\n signerId,\r\n walletId\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Step 5: Derive keypair using resolved devicePublicKey\r\n return deriveSignerKeypair(walletId, signerId, 'phone', {\r\n deviceKeyManager,\r\n cache,\r\n devicePublicKey: resolvedDevicePublicKey\r\n });\r\n}\r\n\r\n/**\r\n * Sign message with phone signer\r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param message - Message to sign\r\n * @param options - Configuration options\r\n * @returns Signature\r\n */\r\nexport async function signWithPhoneSigner(\r\n walletId: string,\r\n signerId: string,\r\n message: Uint8Array,\r\n options?: PhoneSignerOptions\r\n): Promise<Uint8Array> {\r\n return signWithSigner(walletId, signerId, 'phone', message, {\r\n deviceKeyManager: options?.deviceKeyManager,\r\n cache: options?.cache\r\n });\r\n}\r\n\r\n/**\r\n * Clear phone signer cache\r\n * @param walletId - Wallet ID\r\n * @param signerId - Optional signer ID to clear specific signer\r\n */\r\nexport function clearPhoneSignerCache(walletId: string, signerId?: string): void {\r\n clearSignerCache(walletId, signerId);\r\n}\r\n\r\n/**\r\n * Get phone signer by phone number\r\n * @param walletId - Wallet ID\r\n * @param phone - Phone number\r\n * @returns Signer information or null if not found\r\n */\r\nexport async function getPhoneSignerByPhone(\r\n walletId: string,\r\n phone: string\r\n): Promise<SignerInfo | null> {\r\n const signers = await listSigners(walletId);\r\n const signerResponse = signers as unknown as WalletControllerListSignersResult;\r\n const signerList = Array.isArray(signerResponse) ? signerResponse : \r\n (Array.isArray((signerResponse as unknown as { data?: unknown }).data) \r\n ? ((signerResponse as unknown as { data: SignerResponse[] }).data) \r\n : []);\r\n \r\n const signer = signerList.find((s: SignerResponse) => \r\n s.phone === phone || \r\n (s.type === 'phone' && s.phone === phone)\r\n );\r\n \r\n return signer ? parseSignerResponse(signer) : null;\r\n}\r\n\r\n", "/**\r\n * Device Identity Helper Functions\r\n * Handles adding and replacing device identities for email/phone signers\r\n * Enables multi-device support and device migration\r\n */\r\n\r\nimport { updateDeviceIdentity, getDeviceEncryptedSecret } from '../wallet';\r\nimport type { WalletControllerGetDeviceEncryptedSecretResult } from '../wallet';\r\nimport type { UpdateDeviceIdentityDto } from '../wallet';\r\nimport { getDevicePublicKey, generateDeviceKeyPair } from '../utils/deviceKeyManager';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { getSignerDeviceKeys } from './deviceKeyHelpers';\r\nimport { DeviceKeyNotFoundError, NoDeviceIdentitiesError } from '../errors';\r\n\r\nexport interface AddDeviceIdentityOptions {\r\n walletId?: string;\r\n signerId?: string;\r\n devicePublicKey?: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n deviceFingerprint?: string;\r\n oldDevicePublicKey?: string; // Optional: specify which device to replace\r\n trustLevel?: string; // Device trust level\r\n metadata?: Record<string, any>;\r\n}\r\n\r\nexport interface ReplaceDeviceIdentityOptions {\r\n walletId?: string;\r\n signerId?: string;\r\n oldDevicePublicKey: string;\r\n newDevicePublicKey: string;\r\n deviceKeyManager?: DeviceKeyStorage;\r\n deviceFingerprint?: string;\r\n trustLevel?: string;\r\n}\r\n\r\n/**\r\n * Add a new device identity to an existing email/phone signer\r\n * This allows the user to sign from a new device\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns New device identity information\r\n * \r\n * @example\r\n * ```typescript\r\n * // On new device - add device identity\r\n * const newDevice = await addDeviceIdentityToSigner(\r\n * 'wallet-id',\r\n * 'signer-id',\r\n * {\r\n * deviceKeyManager: storage,\r\n * deviceFingerprint: 'Chrome on Windows'\r\n * }\r\n * );\r\n * \r\n * // Now can sign from new device\r\n * const keypair = await getEmailSignerKeypair(\r\n * 'wallet-id',\r\n * 'signer-id',\r\n * {\r\n * devicePublicKey: newDevice.devicePublicKey,\r\n * deviceKeyManager: storage\r\n * }\r\n * );\r\n * ```\r\n */\r\nexport async function addDeviceIdentityToSigner(\r\n walletId: string,\r\n signerId: string,\r\n options?: AddDeviceIdentityOptions\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n // Generate new device key on current device\r\n const deviceKeyPair = await generateDeviceKeyPair();\r\n const newDevicePublicKey = deviceKeyPair.publicKey;\r\n \r\n // Store the new device key\r\n if (options?.deviceKeyManager) {\r\n await options.deviceKeyManager.save(deviceKeyPair.keyId, deviceKeyPair);\r\n }\r\n \r\n // Get encrypted master secret from API using the new device public key\r\n // The API will encrypt the master secret for the new device\r\n let encryptedMasterSecret: string;\r\n \r\n try {\r\n const encryptedSecretResponse = await getDeviceEncryptedSecret(\r\n walletId,\r\n signerId,\r\n {\r\n devicePublicKey: newDevicePublicKey\r\n }\r\n );\r\n \r\n // Extract encrypted secret from response\r\n // API returns: { success: true, data: { encryptedSecret: \"...\" } }\r\n const responseData = encryptedSecretResponse as unknown as WalletControllerGetDeviceEncryptedSecretResult;\r\n const data = (typeof responseData === 'object' && responseData !== null && 'data' in responseData\r\n ? (responseData as { data?: { encryptedSecret?: string; encrypted_secret?: string } }).data\r\n : responseData) || responseData;\r\n const dataObj = data as { encryptedSecret?: string; encrypted_secret?: string };\r\n encryptedMasterSecret = dataObj.encryptedSecret || dataObj.encrypted_secret || '';\r\n \r\n if (!encryptedMasterSecret) {\r\n throw new Error(\r\n `Failed to get encrypted master secret from API. ` +\r\n `Response structure: ${JSON.stringify(Object.keys(responseData))}. ` +\r\n `Please check the API response format.`\r\n );\r\n }\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to get encrypted master secret for new device: ${error}. ` +\r\n `Make sure the signer exists and you have proper authentication.`\r\n );\r\n }\r\n \r\n // Update device identity (add new device)\r\n await updateDeviceIdentity(\r\n walletId,\r\n signerId,\r\n {\r\n oldDevicePublicKey: options?.oldDevicePublicKey, // Optional: replace specific device\r\n devicePublicKey: newDevicePublicKey,\r\n encryptedMasterSecret: encryptedMasterSecret,\r\n deviceFingerprint: options?.deviceFingerprint\r\n }\r\n );\r\n \r\n // Get updated device identities to return the new one\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n const newDevice = deviceIdentities.find(\r\n d => d.devicePublicKey === newDevicePublicKey\r\n );\r\n \r\n if (!newDevice) {\r\n throw new Error('Failed to retrieve new device identity after creation');\r\n }\r\n \r\n return {\r\n deviceId: newDevice.deviceId,\r\n devicePublicKey: newDevice.devicePublicKey,\r\n createdAt: newDevice.createdAt || new Date().toISOString()\r\n };\r\n}\r\n\r\n/**\r\n * Replace an existing device identity with a new one\r\n * Useful when migrating from one device to another\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns New device identity information\r\n * \r\n * @example\r\n * ```typescript\r\n * // Replace old device with new device\r\n * const newDevice = await replaceDeviceIdentity(\r\n * 'wallet-id',\r\n * 'signer-id',\r\n * {\r\n * oldDevicePublicKey: 'old-device-public-key',\r\n * deviceKeyManager: storage,\r\n * deviceFingerprint: 'New iPhone 15'\r\n * }\r\n * );\r\n * ```\r\n */\r\nexport async function replaceDeviceIdentity(\r\n walletId: string,\r\n signerId: string,\r\n options: ReplaceDeviceIdentityOptions\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n return addDeviceIdentityToSigner(walletId, signerId, {\r\n oldDevicePublicKey: options.oldDevicePublicKey,\r\n deviceKeyManager: options.deviceKeyManager,\r\n deviceFingerprint: options.deviceFingerprint\r\n });\r\n}\r\n\r\n/**\r\n * Add a new device identity when user changes devices\r\n * This is a convenience function that handles the common case\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @param options - Configuration options\r\n * @returns New device identity information\r\n */\r\nexport async function addNewDeviceToSigner(\r\n walletId: string,\r\n signerId: string,\r\n options?: {\r\n deviceKeyManager?: DeviceKeyStorage;\r\n deviceFingerprint?: string;\r\n }\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n // Get existing device identities\r\n const existingDevices = await getSignerDeviceKeys(walletId, signerId);\r\n \r\n if (existingDevices.length === 0) {\r\n throw new NoDeviceIdentitiesError(signerId, walletId);\r\n }\r\n \r\n // If only one device exists, we can replace it\r\n // Otherwise, we add a new device\r\n const oldDevicePublicKey = existingDevices.length === 1 \r\n ? existingDevices[0].devicePublicKey \r\n : undefined;\r\n \r\n return addDeviceIdentityToSigner(walletId, signerId, {\r\n oldDevicePublicKey,\r\n deviceKeyManager: options?.deviceKeyManager,\r\n deviceFingerprint: options?.deviceFingerprint\r\n });\r\n}\r\n\r\n/**\r\n * Check if a device can be added to a signer\r\n * Validates that the signer exists and has device identities\r\n * \r\n * @param walletId - Wallet ID\r\n * @param signerId - Signer ID\r\n * @returns True if device can be added\r\n */\r\nexport async function canAddDeviceToSigner(\r\n walletId: string,\r\n signerId: string\r\n): Promise<boolean> {\r\n try {\r\n const deviceIdentities = await getSignerDeviceKeys(walletId, signerId);\r\n return deviceIdentities.length > 0;\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\n", "/* [@simplewebauthn/browser@10.0.0] */\nfunction bufferToBase64URLString(buffer) {\n const bytes = new Uint8Array(buffer);\n let str = '';\n for (const charCode of bytes) {\n str += String.fromCharCode(charCode);\n }\n const base64String = btoa(str);\n return base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\n\nfunction base64URLStringToBuffer(base64URLString) {\n const base64 = base64URLString.replace(/-/g, '+').replace(/_/g, '/');\n const padLength = (4 - (base64.length % 4)) % 4;\n const padded = base64.padEnd(base64.length + padLength, '=');\n const binary = atob(padded);\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction browserSupportsWebAuthn() {\n return (window?.PublicKeyCredential !== undefined &&\n typeof window.PublicKeyCredential === 'function');\n}\n\nfunction toPublicKeyCredentialDescriptor(descriptor) {\n const { id } = descriptor;\n return {\n ...descriptor,\n id: base64URLStringToBuffer(id),\n transports: descriptor.transports,\n };\n}\n\nfunction isValidDomain(hostname) {\n return (hostname === 'localhost' ||\n /^([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}$/i.test(hostname));\n}\n\nclass WebAuthnError extends Error {\n constructor({ message, code, cause, name, }) {\n super(message, { cause });\n this.name = name ?? cause.name;\n this.code = code;\n }\n}\n\nfunction identifyRegistrationError({ error, options, }) {\n const { publicKey } = options;\n if (!publicKey) {\n throw Error('options was missing required publicKey property');\n }\n if (error.name === 'AbortError') {\n if (options.signal instanceof AbortSignal) {\n return new WebAuthnError({\n message: 'Registration ceremony was sent an abort signal',\n code: 'ERROR_CEREMONY_ABORTED',\n cause: error,\n });\n }\n }\n else if (error.name === 'ConstraintError') {\n if (publicKey.authenticatorSelection?.requireResidentKey === true) {\n return new WebAuthnError({\n message: 'Discoverable credentials were required but no available authenticator supported it',\n code: 'ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT',\n cause: error,\n });\n }\n else if (publicKey.authenticatorSelection?.userVerification === 'required') {\n return new WebAuthnError({\n message: 'User verification was required but no available authenticator supported it',\n code: 'ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT',\n cause: error,\n });\n }\n }\n else if (error.name === 'InvalidStateError') {\n return new WebAuthnError({\n message: 'The authenticator was previously registered',\n code: 'ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED',\n cause: error,\n });\n }\n else if (error.name === 'NotAllowedError') {\n return new WebAuthnError({\n message: error.message,\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n }\n else if (error.name === 'NotSupportedError') {\n const validPubKeyCredParams = publicKey.pubKeyCredParams.filter((param) => param.type === 'public-key');\n if (validPubKeyCredParams.length === 0) {\n return new WebAuthnError({\n message: 'No entry in pubKeyCredParams was of type \"public-key\"',\n code: 'ERROR_MALFORMED_PUBKEYCREDPARAMS',\n cause: error,\n });\n }\n return new WebAuthnError({\n message: 'No available authenticator supported any of the specified pubKeyCredParams algorithms',\n code: 'ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG',\n cause: error,\n });\n }\n else if (error.name === 'SecurityError') {\n const effectiveDomain = window.location.hostname;\n if (!isValidDomain(effectiveDomain)) {\n return new WebAuthnError({\n message: `${window.location.hostname} is an invalid domain`,\n code: 'ERROR_INVALID_DOMAIN',\n cause: error,\n });\n }\n else if (publicKey.rp.id !== effectiveDomain) {\n return new WebAuthnError({\n message: `The RP ID \"${publicKey.rp.id}\" is invalid for this domain`,\n code: 'ERROR_INVALID_RP_ID',\n cause: error,\n });\n }\n }\n else if (error.name === 'TypeError') {\n if (publicKey.user.id.byteLength < 1 || publicKey.user.id.byteLength > 64) {\n return new WebAuthnError({\n message: 'User ID was not between 1 and 64 characters',\n code: 'ERROR_INVALID_USER_ID_LENGTH',\n cause: error,\n });\n }\n }\n else if (error.name === 'UnknownError') {\n return new WebAuthnError({\n message: 'The authenticator was unable to process the specified options, or could not create a new credential',\n code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n cause: error,\n });\n }\n return error;\n}\n\nclass BaseWebAuthnAbortService {\n createNewAbortSignal() {\n if (this.controller) {\n const abortError = new Error('Cancelling existing WebAuthn API call for new one');\n abortError.name = 'AbortError';\n this.controller.abort(abortError);\n }\n const newController = new AbortController();\n this.controller = newController;\n return newController.signal;\n }\n cancelCeremony() {\n if (this.controller) {\n const abortError = new Error('Manually cancelling existing WebAuthn API call');\n abortError.name = 'AbortError';\n this.controller.abort(abortError);\n this.controller = undefined;\n }\n }\n}\nconst WebAuthnAbortService = new BaseWebAuthnAbortService();\n\nconst attachments = ['cross-platform', 'platform'];\nfunction toAuthenticatorAttachment(attachment) {\n if (!attachment) {\n return;\n }\n if (attachments.indexOf(attachment) < 0) {\n return;\n }\n return attachment;\n}\n\nasync function startRegistration(optionsJSON) {\n if (!browserSupportsWebAuthn()) {\n throw new Error('WebAuthn is not supported in this browser');\n }\n const publicKey = {\n ...optionsJSON,\n challenge: base64URLStringToBuffer(optionsJSON.challenge),\n user: {\n ...optionsJSON.user,\n id: base64URLStringToBuffer(optionsJSON.user.id),\n },\n excludeCredentials: optionsJSON.excludeCredentials?.map(toPublicKeyCredentialDescriptor),\n };\n const options = { publicKey };\n options.signal = WebAuthnAbortService.createNewAbortSignal();\n let credential;\n try {\n credential = (await navigator.credentials.create(options));\n }\n catch (err) {\n throw identifyRegistrationError({ error: err, options });\n }\n if (!credential) {\n throw new Error('Registration was not completed');\n }\n const { id, rawId, response, type } = credential;\n let transports = undefined;\n if (typeof response.getTransports === 'function') {\n transports = response.getTransports();\n }\n let responsePublicKeyAlgorithm = undefined;\n if (typeof response.getPublicKeyAlgorithm === 'function') {\n try {\n responsePublicKeyAlgorithm = response.getPublicKeyAlgorithm();\n }\n catch (error) {\n warnOnBrokenImplementation('getPublicKeyAlgorithm()', error);\n }\n }\n let responsePublicKey = undefined;\n if (typeof response.getPublicKey === 'function') {\n try {\n const _publicKey = response.getPublicKey();\n if (_publicKey !== null) {\n responsePublicKey = bufferToBase64URLString(_publicKey);\n }\n }\n catch (error) {\n warnOnBrokenImplementation('getPublicKey()', error);\n }\n }\n let responseAuthenticatorData;\n if (typeof response.getAuthenticatorData === 'function') {\n try {\n responseAuthenticatorData = bufferToBase64URLString(response.getAuthenticatorData());\n }\n catch (error) {\n warnOnBrokenImplementation('getAuthenticatorData()', error);\n }\n }\n return {\n id,\n rawId: bufferToBase64URLString(rawId),\n response: {\n attestationObject: bufferToBase64URLString(response.attestationObject),\n clientDataJSON: bufferToBase64URLString(response.clientDataJSON),\n transports,\n publicKeyAlgorithm: responsePublicKeyAlgorithm,\n publicKey: responsePublicKey,\n authenticatorData: responseAuthenticatorData,\n },\n type,\n clientExtensionResults: credential.getClientExtensionResults(),\n authenticatorAttachment: toAuthenticatorAttachment(credential.authenticatorAttachment),\n };\n}\nfunction warnOnBrokenImplementation(methodName, cause) {\n console.warn(`The browser extension that intercepted this WebAuthn API call incorrectly implemented ${methodName}. You should report this error to them.\\n`, cause);\n}\n\nfunction browserSupportsWebAuthnAutofill() {\n if (!browserSupportsWebAuthn()) {\n return new Promise((resolve) => resolve(false));\n }\n const globalPublicKeyCredential = window\n .PublicKeyCredential;\n if (globalPublicKeyCredential.isConditionalMediationAvailable === undefined) {\n return new Promise((resolve) => resolve(false));\n }\n return globalPublicKeyCredential.isConditionalMediationAvailable();\n}\n\nfunction identifyAuthenticationError({ error, options, }) {\n const { publicKey } = options;\n if (!publicKey) {\n throw Error('options was missing required publicKey property');\n }\n if (error.name === 'AbortError') {\n if (options.signal instanceof AbortSignal) {\n return new WebAuthnError({\n message: 'Authentication ceremony was sent an abort signal',\n code: 'ERROR_CEREMONY_ABORTED',\n cause: error,\n });\n }\n }\n else if (error.name === 'NotAllowedError') {\n return new WebAuthnError({\n message: error.message,\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n }\n else if (error.name === 'SecurityError') {\n const effectiveDomain = window.location.hostname;\n if (!isValidDomain(effectiveDomain)) {\n return new WebAuthnError({\n message: `${window.location.hostname} is an invalid domain`,\n code: 'ERROR_INVALID_DOMAIN',\n cause: error,\n });\n }\n else if (publicKey.rpId !== effectiveDomain) {\n return new WebAuthnError({\n message: `The RP ID \"${publicKey.rpId}\" is invalid for this domain`,\n code: 'ERROR_INVALID_RP_ID',\n cause: error,\n });\n }\n }\n else if (error.name === 'UnknownError') {\n return new WebAuthnError({\n message: 'The authenticator was unable to process the specified options, or could not create a new assertion signature',\n code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n cause: error,\n });\n }\n return error;\n}\n\nasync function startAuthentication(optionsJSON, useBrowserAutofill = false) {\n if (!browserSupportsWebAuthn()) {\n throw new Error('WebAuthn is not supported in this browser');\n }\n let allowCredentials;\n if (optionsJSON.allowCredentials?.length !== 0) {\n allowCredentials = optionsJSON.allowCredentials?.map(toPublicKeyCredentialDescriptor);\n }\n const publicKey = {\n ...optionsJSON,\n challenge: base64URLStringToBuffer(optionsJSON.challenge),\n allowCredentials,\n };\n const options = {};\n if (useBrowserAutofill) {\n if (!(await browserSupportsWebAuthnAutofill())) {\n throw Error('Browser does not support WebAuthn autofill');\n }\n const eligibleInputs = document.querySelectorAll(\"input[autocomplete$='webauthn']\");\n if (eligibleInputs.length < 1) {\n throw Error('No <input> with \"webauthn\" as the only or last value in its `autocomplete` attribute was detected');\n }\n options.mediation = 'conditional';\n publicKey.allowCredentials = [];\n }\n options.publicKey = publicKey;\n options.signal = WebAuthnAbortService.createNewAbortSignal();\n let credential;\n try {\n credential = (await navigator.credentials.get(options));\n }\n catch (err) {\n throw identifyAuthenticationError({ error: err, options });\n }\n if (!credential) {\n throw new Error('Authentication was not completed');\n }\n const { id, rawId, response, type } = credential;\n let userHandle = undefined;\n if (response.userHandle) {\n userHandle = bufferToBase64URLString(response.userHandle);\n }\n return {\n id,\n rawId: bufferToBase64URLString(rawId),\n response: {\n authenticatorData: bufferToBase64URLString(response.authenticatorData),\n clientDataJSON: bufferToBase64URLString(response.clientDataJSON),\n signature: bufferToBase64URLString(response.signature),\n userHandle,\n },\n type,\n clientExtensionResults: credential.getClientExtensionResults(),\n authenticatorAttachment: toAuthenticatorAttachment(credential.authenticatorAttachment),\n };\n}\n\nfunction platformAuthenticatorIsAvailable() {\n if (!browserSupportsWebAuthn()) {\n return new Promise((resolve) => resolve(false));\n }\n return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n}\n\nexport { WebAuthnAbortService, WebAuthnError, base64URLStringToBuffer, browserSupportsWebAuthn, browserSupportsWebAuthnAutofill, bufferToBase64URLString, platformAuthenticatorIsAvailable, startAuthentication, startRegistration };\n", "/**\r\n * Passkey (WebAuthn) Signer Helpers\r\n * Simple WebAuthn implementation using SimpleWebAuthn library\r\n */\r\n\r\nimport { \r\n startRegistration, \r\n startAuthentication, \r\n browserSupportsWebAuthn, \r\n platformAuthenticatorIsAvailable\r\n } from '@simplewebauthn/browser';\r\n \r\n // Infer types from the library functions\r\n type PublicKeyCredentialCreationOptionsJSON = Parameters<typeof startRegistration>[0];\r\n type PublicKeyCredentialRequestOptionsJSON = Parameters<typeof startAuthentication>[0];\r\n type RegistrationResponseJSON = Awaited<ReturnType<typeof startRegistration>>;\r\n type AuthenticationResponseJSON = Awaited<ReturnType<typeof startAuthentication>>;\r\n import { SDKError } from '../errors';\r\n \r\n /**\r\n * Convert an array of numbers or ArrayBuffer-like value to base64url string\r\n * This handles the case where ArrayBuffers are serialized as number arrays\r\n * \r\n * @param value - Array of numbers, ArrayBuffer, Uint8Array, or base64url string\r\n * @returns Base64url-encoded string\r\n */\r\n function toBase64URL(value: string | number[] | ArrayBuffer | Uint8Array): string {\r\n // If it's already a string, check if it needs normalization\r\n if (typeof value === 'string') {\r\n // If it contains base64 characters, convert to base64url\r\n if (value.includes('+') || value.includes('/') || value.includes('=')) {\r\n return value.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n }\r\n // Already base64url\r\n return value;\r\n }\r\n \r\n // Convert array/ArrayBuffer to base64url\r\n let uint8Array: Uint8Array;\r\n if (Array.isArray(value)) {\r\n uint8Array = new Uint8Array(value);\r\n } else if (value instanceof ArrayBuffer) {\r\n uint8Array = new Uint8Array(value);\r\n } else {\r\n uint8Array = value;\r\n }\r\n \r\n // Convert to base64, then to base64url\r\n const base64 = btoa(String.fromCharCode(...uint8Array));\r\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n }\r\n \r\n /**\r\n * Check if a value is an array of numbers (serialized ArrayBuffer)\r\n */\r\n function isArrayBuffer(value: any): value is number[] | ArrayBuffer | Uint8Array {\r\n if (Array.isArray(value)) return true;\r\n if (value instanceof ArrayBuffer) return true;\r\n if (value instanceof Uint8Array) return true;\r\n return false;\r\n }\r\n \r\n /**\r\n * Format a registration response to ensure all fields are properly base64url-encoded\r\n * This handles cases where ArrayBuffers are serialized as number arrays\r\n * \r\n * @param response - The registration response from startRegistration()\r\n * @returns The formatted registration response with normalized fields\r\n */\r\n export function formatRegistrationResponse(\r\n response: RegistrationResponseJSON\r\n ): RegistrationResponseJSON {\r\n const formatted = { ...response };\r\n \r\n // Normalize credential ID fields\r\n if (formatted.id) {\r\n formatted.id = toBase64URL(formatted.id as any);\r\n }\r\n if (formatted.rawId) {\r\n formatted.rawId = toBase64URL(formatted.rawId as any);\r\n }\r\n \r\n // Normalize response fields if they're arrays\r\n if (formatted.response) {\r\n const formattedResponse: any = { ...formatted.response };\r\n \r\n if (isArrayBuffer(formattedResponse.clientDataJSON)) {\r\n formattedResponse.clientDataJSON = toBase64URL(formattedResponse.clientDataJSON);\r\n }\r\n \r\n if (isArrayBuffer(formattedResponse.attestationObject)) {\r\n formattedResponse.attestationObject = toBase64URL(formattedResponse.attestationObject);\r\n }\r\n \r\n formatted.response = formattedResponse;\r\n }\r\n \r\n return formatted;\r\n }\r\n \r\n /**\r\n * Format an authentication response to ensure all fields are properly base64url-encoded\r\n * This handles cases where ArrayBuffers are serialized as number arrays\r\n * \r\n * @param response - The authentication response from startAuthentication()\r\n * @returns The formatted authentication response with normalized fields\r\n */\r\n export function formatAuthenticationResponse(\r\n response: AuthenticationResponseJSON\r\n ): AuthenticationResponseJSON {\r\n const formatted = { ...response };\r\n \r\n // Normalize credential ID fields\r\n if (formatted.id) {\r\n formatted.id = toBase64URL(formatted.id as any);\r\n }\r\n if (formatted.rawId) {\r\n formatted.rawId = toBase64URL(formatted.rawId as any);\r\n }\r\n \r\n // Normalize response fields if they're arrays\r\n if (formatted.response) {\r\n const formattedResponse: any = { ...formatted.response };\r\n \r\n if (isArrayBuffer(formattedResponse.clientDataJSON)) {\r\n formattedResponse.clientDataJSON = toBase64URL(formattedResponse.clientDataJSON);\r\n }\r\n \r\n if (isArrayBuffer(formattedResponse.authenticatorData)) {\r\n formattedResponse.authenticatorData = toBase64URL(formattedResponse.authenticatorData);\r\n }\r\n \r\n if (isArrayBuffer(formattedResponse.signature)) {\r\n formattedResponse.signature = toBase64URL(formattedResponse.signature);\r\n }\r\n \r\n formatted.response = formattedResponse;\r\n }\r\n \r\n return formatted;\r\n }\r\n \r\n /**\r\n * Check if WebAuthn is supported\r\n */\r\n export function isWebAuthnSupported(): boolean {\r\n return browserSupportsWebAuthn();\r\n }\r\n \r\n /**\r\n * Check if platform authenticator is available\r\n */\r\n export async function isPlatformAuthenticatorAvailable(): Promise<boolean> {\r\n return platformAuthenticatorIsAvailable();\r\n }\r\n \r\n /**\r\n * Register a new passkey\r\n */\r\n export async function registerPasskey(\r\n options: PublicKeyCredentialCreationOptionsJSON\r\n ): Promise<RegistrationResponseJSON> {\r\n if (!isWebAuthnSupported()) {\r\n throw new SDKError('WebAuthn not supported', 'WEBAUTHN_NOT_SUPPORTED');\r\n }\r\n \r\n try {\r\n const response = await startRegistration(options);\r\n \r\n // Normalize all ArrayBuffer fields to base64url strings\r\n // This ensures compatibility even if the data gets serialized/deserialized\r\n return formatRegistrationResponse(response);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Passkey registration failed: ${error instanceof Error ? error.message : String(error)}`,\r\n 'PASSKEY_REGISTRATION_FAILED',\r\n { error }\r\n );\r\n }\r\n }\r\n \r\n /**\r\n * Authenticate with passkey\r\n */\r\n export async function authenticateWithPasskey(\r\n options: PublicKeyCredentialRequestOptionsJSON\r\n ): Promise<AuthenticationResponseJSON> {\r\n if (!isWebAuthnSupported()) {\r\n throw new SDKError('WebAuthn not supported', 'WEBAUTHN_NOT_SUPPORTED');\r\n }\r\n \r\n try {\r\n const response = await startAuthentication(options);\r\n \r\n // Normalize all ArrayBuffer fields to base64url strings\r\n // This ensures compatibility even if the data gets serialized/deserialized\r\n return formatAuthenticationResponse(response);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Passkey authentication failed: ${error instanceof Error ? error.message : String(error)}`,\r\n 'PASSKEY_AUTHENTICATION_FAILED',\r\n { error }\r\n );\r\n }\r\n }", "/**\r\n * Signer Lifecycle Management\r\n * Simple helpers for managing signer creation and deletion\r\n */\r\n\r\nimport { \r\n createEmailSigner, \r\n createPhoneSigner, \r\n listSigners, \r\n deleteSigner,\r\n type WalletControllerCreateEmailSignerResult,\r\n type WalletControllerCreatePhoneSignerResult,\r\n type WalletControllerListSignersResult\r\n} from '../wallet';\r\nimport type { CreateEmailSignerDto, CreatePhoneSignerDto } from '../wallet';\r\nimport { SDKError } from '../errors';\r\n\r\n/**\r\n * Create a new signer (thin wrapper around API)\r\n */\r\nexport async function createSigner(\r\n walletId: string,\r\n type: 'email' | 'phone',\r\n params: { email?: string; phone?: string; devicePublicKey?: string }\r\n): Promise<WalletControllerCreateEmailSignerResult | WalletControllerCreatePhoneSignerResult> {\r\n try {\r\n if (type === 'email') {\r\n if (!params.email) {\r\n throw new SDKError('Email is required', 'INVALID_PARAMS');\r\n }\r\n const createDto: CreateEmailSignerDto = {\r\n email: params.email,\r\n devicePublicKey: params.devicePublicKey || '',\r\n };\r\n return (await createEmailSigner(walletId, createDto)) as WalletControllerCreateEmailSignerResult;\r\n }\r\n\r\n if (type === 'phone') {\r\n if (!params.phone) {\r\n throw new SDKError('Phone is required', 'INVALID_PARAMS');\r\n }\r\n const createDto: CreatePhoneSignerDto = {\r\n phone: params.phone,\r\n devicePublicKey: params.devicePublicKey || '',\r\n };\r\n return (await createPhoneSigner(walletId, createDto)) as WalletControllerCreatePhoneSignerResult;\r\n }\r\n\r\n throw new SDKError(`Unsupported signer type: ${type}`, 'UNSUPPORTED_SIGNER_TYPE');\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to create signer: ${error instanceof Error ? error.message : String(error)}`,\r\n 'SIGNER_CREATION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Delete a signer (thin wrapper around API)\r\n */\r\nexport async function revokeSigner(walletId: string, signerId: string): Promise<void> {\r\n try {\r\n await deleteSigner(walletId, signerId);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to delete signer: ${error instanceof Error ? error.message : String(error)}`,\r\n 'SIGNER_DELETION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Get all signers for a wallet (thin wrapper around API)\r\n */\r\nexport async function getSigners(walletId: string): Promise<WalletControllerListSignersResult> {\r\n try {\r\n const response = await listSigners(walletId);\r\n return response as WalletControllerListSignersResult;\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to get signers: ${error instanceof Error ? error.message : String(error)}`,\r\n 'GET_SIGNERS_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Multi-Device Manager\r\n * Simple helpers for managing device identities\r\n */\r\n\r\nimport { updateDeviceIdentity } from '../wallet';\r\nimport type { UpdateDeviceIdentityDto, WalletControllerUpdateDeviceIdentityResult } from '../wallet';\r\nimport { addDeviceIdentityToSigner, replaceDeviceIdentity } from './deviceIdentityHelpers';\r\nimport type { DeviceIdentity } from './deviceKeyHelpers';\r\nimport { getSignerDeviceKeys } from './deviceKeyHelpers';\r\nimport type { DeviceKeyStorage } from '../utils/deviceKeyManager';\r\nimport { SDKError } from '../errors';\r\n\r\n/**\r\n * Add a device to a signer (thin wrapper)\r\n */\r\nexport async function addDevice(\r\n walletId: string,\r\n signerId: string,\r\n devicePublicKey: string,\r\n deviceKeyManager?: DeviceKeyStorage\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n try {\r\n return await addDeviceIdentityToSigner(walletId, signerId, {\r\n devicePublicKey,\r\n deviceKeyManager,\r\n });\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to add device: ${error instanceof Error ? error.message : String(error)}`,\r\n 'ADD_DEVICE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Replace device identity (thin wrapper)\r\n */\r\nexport async function replaceDevice(\r\n walletId: string,\r\n signerId: string,\r\n oldDevicePublicKey: string,\r\n newDevicePublicKey: string,\r\n deviceKeyManager?: DeviceKeyStorage\r\n): Promise<{\r\n deviceId: string;\r\n devicePublicKey: string;\r\n createdAt: string;\r\n}> {\r\n try {\r\n return await replaceDeviceIdentity(walletId, signerId, {\r\n oldDevicePublicKey,\r\n newDevicePublicKey,\r\n deviceKeyManager,\r\n });\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to replace device: ${error instanceof Error ? error.message : String(error)}`,\r\n 'REPLACE_DEVICE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Get devices for a signer (thin wrapper)\r\n */\r\nexport async function getDevices(walletId: string, signerId: string): Promise<DeviceIdentity[]> {\r\n try {\r\n return await getSignerDeviceKeys(walletId, signerId);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to get devices: ${error instanceof Error ? error.message : String(error)}`,\r\n 'GET_DEVICES_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Update device identity (thin wrapper around API)\r\n */\r\nexport async function updateDevice(\r\n walletId: string,\r\n signerId: string,\r\n devicePublicKey: string\r\n): Promise<WalletControllerUpdateDeviceIdentityResult> {\r\n try {\r\n const updateDto: UpdateDeviceIdentityDto = { devicePublicKey };\r\n return await updateDeviceIdentity(walletId, signerId, updateDto) as WalletControllerUpdateDeviceIdentityResult;\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to update device: ${error instanceof Error ? error.message : String(error)}`,\r\n 'UPDATE_DEVICE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Signer Validation\r\n * Basic validation helpers\r\n */\r\n\r\nimport { browserSupportsWebAuthn } from '@simplewebauthn/browser';\r\n\r\n/**\r\n * Check if WebAuthn is supported\r\n */\r\nexport function isWebAuthnSupported(): boolean {\r\n return browserSupportsWebAuthn();\r\n}\r\n\r\n/**\r\n * Check if browser has required features\r\n */\r\nexport function isBrowserCompatible(): boolean {\r\n return (\r\n typeof globalThis !== 'undefined' &&\r\n typeof globalThis.crypto !== 'undefined' &&\r\n typeof globalThis.crypto.subtle !== 'undefined'\r\n );\r\n}\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function isValidEmail(email: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n}\r\n\r\n/**\r\n * Validate phone format (basic check)\r\n */\r\nexport function isValidPhone(phone: string): boolean {\r\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\r\n return phoneRegex.test(phone.replace(/[\\s\\-()]/g, ''));\r\n}\r\n", "/**\r\n * External Wallet Adapter\r\n * Simple helpers for connecting to Solana wallets\r\n */\r\n\r\nimport { SDKError } from '../errors';\r\n\r\n/**\r\n * Solana transaction type (compatible with @solana/web3.js Transaction)\r\n */\r\nexport interface SolanaTransaction {\r\n serialize(config?: { requireAllSignatures?: boolean; verifySignatures?: boolean }): Uint8Array;\r\n addSignature(publicKey: { toString(): string }, signature: Uint8Array): void;\r\n signatures?: Array<{ publicKey: { toString(): string }; signature?: Uint8Array }>;\r\n [key: string]: unknown; // Allow other transaction properties\r\n}\r\n\r\n/**\r\n * Standard wallet interface\r\n */\r\nexport interface SolanaWallet {\r\n name?: string;\r\n publicKey?: { toString(): string };\r\n connect(): Promise<{ publicKey: { toString(): string } }>;\r\n disconnect(): Promise<void>;\r\n signTransaction?(transaction: SolanaTransaction): Promise<SolanaTransaction>;\r\n signAllTransactions?(transactions: SolanaTransaction[]): Promise<SolanaTransaction[]>;\r\n signMessage?(message: Uint8Array): Promise<{ signature: Uint8Array }>;\r\n}\r\n\r\n/**\r\n * Detect available Solana wallets in the browser\r\n */\r\nexport function detectWallets(): SolanaWallet[] {\r\n const wallets: SolanaWallet[] = [];\r\n \r\n if (typeof globalThis === 'undefined' || typeof (globalThis as any).window === 'undefined') {\r\n return wallets;\r\n }\r\n \r\n const w = (globalThis as any).window;\r\n \r\n // Check for common Solana wallets\r\n if (w.phantom?.solana) wallets.push(w.phantom.solana);\r\n if (w.solflare) wallets.push(w.solflare);\r\n if (w.backpack) wallets.push(w.backpack);\r\n if (w.glow) wallets.push(w.glow);\r\n if (w.slope) wallets.push(w.slope);\r\n if (w.sollet) wallets.push(w.sollet);\r\n if (w.coin98?.sol) wallets.push(w.coin98.sol);\r\n \r\n return wallets;\r\n}\r\n\r\n/**\r\n * Get wallet by name\r\n */\r\nexport function getWallet(name: string): SolanaWallet | null {\r\n const wallets = detectWallets();\r\n const lowerName = name.toLowerCase();\r\n return wallets.find(w => w.name?.toLowerCase() === lowerName) || null;\r\n}\r\n\r\n/**\r\n * Connect to a wallet\r\n */\r\nexport async function connectWallet(wallet: SolanaWallet): Promise<string> {\r\n try {\r\n const result = await wallet.connect();\r\n return result.publicKey.toString();\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to connect wallet: ${error instanceof Error ? error.message : String(error)}`,\r\n 'WALLET_CONNECTION_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Sign transaction with wallet\r\n */\r\nexport async function signTransaction(\r\n wallet: SolanaWallet, \r\n transaction: SolanaTransaction\r\n): Promise<SolanaTransaction> {\r\n if (!wallet.signTransaction) {\r\n throw new SDKError('Wallet does not support transaction signing', 'WALLET_SIGN_NOT_SUPPORTED');\r\n }\r\n \r\n try {\r\n return await wallet.signTransaction(transaction);\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to sign transaction: ${error instanceof Error ? error.message : String(error)}`,\r\n 'WALLET_SIGN_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Sign message with wallet\r\n */\r\nexport async function signMessage(wallet: SolanaWallet, message: Uint8Array): Promise<Uint8Array> {\r\n if (!wallet.signMessage) {\r\n throw new SDKError('Wallet does not support message signing', 'WALLET_SIGN_MESSAGE_NOT_SUPPORTED');\r\n }\r\n \r\n try {\r\n const result = await wallet.signMessage(message);\r\n return result.signature;\r\n } catch (error) {\r\n throw new SDKError(\r\n `Failed to sign message: ${error instanceof Error ? error.message : String(error)}`,\r\n 'WALLET_SIGN_MESSAGE_FAILED',\r\n { error }\r\n );\r\n }\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["axios", "platformControllerCreate", "platformControllerFindAll", "platformControllerGetOwnProfile", "platformControllerUpdateOwnProfile", "platformControllerFindOne", "platformControllerUpdate", "platformControllerRemove", "platformControllerGetUsersForPlatform", "platformControllerCreateUserForPlatform", "platformControllerUpdateUserForPlatform", "platformControllerRemoveUserForPlatform", "platformControllerToggleUserActiveForPlatform", "platformControllerGetWalletsForPlatform", "create", "findOne", "update", "getUsers", "userControllerCreate", "userControllerFindOne", "userControllerUpdate", "getUsers", "create", "findOne", "update", "create", "findAll", "findOne", "remove", "update", "getWallets", "walletControllerCreate", "walletControllerFindAll", "walletControllerGetTotalBalance", "walletControllerFindOne", "walletControllerUpdate", "walletControllerRemove", "walletControllerFindByAddress", "walletControllerSendSOL", "walletControllerSendSPL", "walletControllerMintNFT", "walletControllerMintNFTSimple", "walletControllerMintToken", "walletControllerSendTransaction", "walletControllerGetWalletAssets", "walletControllerSyncWalletAssets", "walletControllerDeactivateWallet", "walletControllerActivateWallet", "walletControllerBatchCreateWallets", "walletControllerBatchSendSOL", "walletControllerBatchSendSPL", "walletControllerSimulateTransaction", "walletControllerGetWalletCustodyInfo", "walletControllerCreateEmailSigner", "walletControllerCreatePhoneSigner", "walletControllerStartPasskeyRegistration", "walletControllerVerifyPasskeyRegistration", "walletControllerStartPasskeyAuthentication", "walletControllerVerifyPasskeyAuthentication", "walletControllerCreateExternalWalletSigner", "walletControllerCreateApiKeySigner", "walletControllerGetSignerById", "walletControllerUpdateSigner", "walletControllerDeleteSigner", "walletControllerGetDeviceEncryptedSecret", "walletControllerUpdateDeviceIdentity", "walletControllerAddSigner", "walletControllerListSigners", "walletControllerRemoveSigner", "walletControllerUpdateSignerPermissions", "walletControllerUpdateAdminSigner", "getWallets", "create", "findAll", "findOne", "update", "remove", "create", "findAll", "findOne", "remove", "update", "adminControllerCreate", "adminControllerFindAll", "adminControllerGetCurrentAdmin", "adminControllerGetAllApiKeys", "adminControllerGetplatformApiKey", "adminControllerFindOne", "adminControllerUpdate", "adminControllerRemove", "adminControllerToggleActive", "adminControllerFindAllPlatforms", "adminControllerFindOnePlatform", "adminControllerUpdatePlatform", "adminControllerRemovePlatform", "adminControllerFindAllUsers", "adminControllerFindOneUser", "adminControllerFindAllWallets", "adminControllerFindWalletsByUserId", "adminControllerFindOneWallet", "adminControllerGetOverviewAnalytics", "adminControllerGetWalletAnalytics", "adminControllerGetRecentActivity", "adminControllerRegenerateApiKey", "adminControllerGetPlatformsWithUsers", "adminControllerGetUsersWithWallets", "adminControllerGetWalletAssets", "create", "findAll", "findOne", "update", "remove", "authControllerLogin", "create", "findAll", "findOne", "subscriptionControllerCreate", "subscriptionControllerFindAll", "subscriptionControllerFindOne", "subscriptionControllerGetPlatformSubscription", "subscriptionControllerUpgrade", "subscriptionControllerDowngrade", "subscriptionControllerCancel", "subscriptionControllerRenew", "subscriptionControllerGetHistory", "create", "findAll", "findOne", "findAll", "findOne", "remove", "update", "planControllerFindAll", "planControllerFindOne", "planControllerUpdate", "planControllerRemove", "planControllerAssignToPlatform", "planControllerAssignToUser", "findAll", "findOne", "update", "remove", "transactionControllerGetWalletTransactions", "transactionControllerGetTransactionStatus", "create", "findAll", "findOne", "remove", "update", "delegatedKeyControllerCreate", "delegatedKeyControllerFindAll", "delegatedKeyControllerFindOne", "delegatedKeyControllerUpdate", "delegatedKeyControllerRemove", "create", "findAll", "findOne", "update", "remove", "create", "findAll", "findOne", "remove", "update", "webhookControllerCreate", "webhookControllerFindAll", "webhookControllerFindOne", "webhookControllerUpdate", "webhookControllerRemove", "create", "findAll", "findOne", "update", "remove", "platformControllerCreate", "platformControllerFindAll", "platformControllerGetOwnProfile", "platformControllerUpdateOwnProfile", "platformControllerFindOne", "platformControllerUpdate", "platformControllerRemove", "platformControllerGetUsersForPlatform", "platformControllerCreateUserForPlatform", "platformControllerUpdateUserForPlatform", "platformControllerRemoveUserForPlatform", "platformControllerToggleUserActiveForPlatform", "platformControllerGetWalletsForPlatform", "userControllerCreate", "userControllerFindOne", "userControllerUpdate", "walletControllerCreate", "walletControllerFindAll", "walletControllerGetTotalBalance", "walletControllerFindOne", "walletControllerUpdate", "walletControllerRemove", "walletControllerFindByAddress", "walletControllerSendSOL", "walletControllerSendSPL", "walletControllerMintNFT", "walletControllerMintNFTSimple", "walletControllerMintToken", "walletControllerSendTransaction", "walletControllerGetWalletAssets", "walletControllerSyncWalletAssets", "adminControllerCreate", "adminControllerFindAll", "adminControllerGetCurrentAdmin", "adminControllerGetAllApiKeys", "adminControllerGetplatformApiKey", "adminControllerFindOne", "adminControllerUpdate", "adminControllerRemove", "adminControllerToggleActive", "adminControllerFindAllPlatforms", "adminControllerFindOnePlatform", "adminControllerUpdatePlatform", "adminControllerRemovePlatform", "adminControllerFindAllUsers", "adminControllerFindOneUser", "adminControllerFindAllWallets", "adminControllerFindWalletsByUserId", "adminControllerFindOneWallet", "adminControllerGetOverviewAnalytics", "adminControllerGetWalletAnalytics", "adminControllerGetRecentActivity", "adminControllerRegenerateApiKey", "adminControllerGetPlatformsWithUsers", "adminControllerGetUsersWithWallets", "adminControllerGetWalletAssets", "authControllerLogin", "crypto", "arrayBufferToBase64", "signMessage", "crypto", "arrayBufferToBase64", "arrayBufferToBase64", "crypto", "arrayBufferToBase64", "HMAC", "sha256", "window", "isBytes", "abytes", "crypto", "sha256", "validateDeviceKey", "validateDeviceKey", "signMessage"]
|
|
7
7
|
}
|