/** * SDK Resource Registry * * Provides a registry pattern for scope-specific resource factories. * Each scope registers its own factories, eliminating switch statements * in the main SDK class. * * @example * ```typescript * // In resources/mx/registry.ts * import { registerScope } from '../../sdk/registry'; * import { MexClientsResource } from './clients'; * * registerScope('MX', { * clients: (config) => new MexClientsResource(config), * // ... * }); * * // In ComplianceSDK.ts * const factories = getResourceFactories(scope); * this.clients = factories.clients(config); * ``` */ import { type Scope } from "@artu-ai/shared"; import type { AddressesResource } from "../resources/addresses"; import type { AlertsResource } from "../resources/alerts"; import type { BankAccountsResource } from "../resources/bank-accounts"; import type { ResourceConfig } from "../resources/base"; import type { ClientsResource } from "../resources/clients"; import type { ProductsResource } from "../resources/products"; import type { TransactionsResource } from "../resources/transactions"; /** * Factory function that creates a resource instance */ export type ResourceFactory = (config: ResourceConfig) => T; /** * Resource factories for a specific scope (scope/activity) * * Each scope/activity registers factories that create the appropriate * resource class instances. */ export interface ScopeResourceFactories { /** Factory for creating clients resource */ clients: ResourceFactory; /** Factory for creating transactions resource */ transactions: ResourceFactory; /** Factory for creating alerts resource */ alerts: ResourceFactory; /** Factory for creating products resource (optional - falls back to base) */ products?: ResourceFactory; /** Factory for creating bank accounts resource (optional - falls back to base) */ bankAccounts?: ResourceFactory; /** Factory for creating addresses resource (optional for backwards compat) */ addresses?: ResourceFactory; } /** * Generates a scope key from a Scope value. * * @param scope - SDK scope (e.g., "MX", "MX:AV:AVI", undefined) * @returns Scope key string (e.g., "base", "MX", "MX:AV:AVI") */ export declare function getScopeKey(scope: Scope | undefined): string; /** * Registers resource factories for a specific scope. * * Called by scope modules during initialization. * Each scope/activity registers its own factories. * * @param scopeKey - Scope identifier (e.g., "base", "MX", "MX:AV:AVI") * @param factories - Resource factory functions * * @example * ```typescript * // Register Mexico AVI factories * registerScope('MX:AVI', { * clients: (config) => new AVIClientsResource(config), * transactions: (config) => new AVITransactionsResource(config), * alerts: (config) => new AVIAlertsResource(config) as unknown as AlertsResource, * bankAccounts: (config) => new MexBankAccountsResource(config), * }); * ``` */ export declare function registerScope(scopeKey: string, factories: ScopeResourceFactories): void; /** * Gets resource factories for a specific scope. * * Looks up factories with fallback: * 1. Exact scope match (e.g., "MX:AV:AVI") * 2. Jurisdiction parent (e.g., "MX" from "MX:AV:AVI") * 3. Base/default factories * * @param scope - SDK scope * @returns Resource factories for the scope * @throws Error if no factories are registered (not even base) * * @example * ```typescript * const factories = getResourceFactories("MX:AV:AVI"); * const clientsResource = factories.clients(config); * ``` */ export declare function getResourceFactories(scope: Scope | undefined): ScopeResourceFactories; /** * Checks if factories are registered for a scope * * @param scopeKey - Scope identifier to check * @returns true if factories are registered */ export declare function hasScope(scopeKey: string): boolean; /** * Gets all registered scope keys (for debugging/testing) * * @returns Array of registered scope keys */ export declare function getRegisteredScopes(): string[];