@almadar/integrations 2.21.0 → 2.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{contracts-CYtxZXrR.d.ts → contracts-CLTh6gjT.d.ts} +9 -0
- package/dist/index.d.ts +13 -2
- package/dist/index.js +31 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/index.d.ts +12 -1
- package/dist/runtime/index.js +3473 -183
- package/dist/runtime/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/registry.ts","../../src/factory.ts","../../src/core/logger.ts","../../src/core/validation.ts","../../src/core/retry.ts","../../src/core/BaseIntegration.ts","../../src/types.ts","../../src/mocks/MockIntegration.ts","../../src/runtime/effectHandler.ts","../../src/runtime/RuntimeIntegrationManager.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { IntegrationConfig } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\n\n/**\n * Integration constructor type\n */\nexport type IntegrationConstructor = new (\n config: IntegrationConfig,\n) => BaseIntegration;\n\n/**\n * Integration registry (populated as integrations are imported)\n */\nexport const INTEGRATION_REGISTRY: Record<string, IntegrationConstructor> = {};\n\n/**\n * Register an integration\n */\nexport function registerIntegration(\n name: string,\n constructor: IntegrationConstructor,\n): void {\n INTEGRATION_REGISTRY[name] = constructor;\n}\n\n/**\n * Get integration constructor by name\n */\nexport function getIntegration(\n name: string,\n): IntegrationConstructor | undefined {\n return INTEGRATION_REGISTRY[name];\n}\n\n/**\n * Check if integration is known\n */\nexport function isKnownIntegration(name: string): boolean {\n return name in INTEGRATION_REGISTRY;\n}\n\n/**\n * Get all registered integration names\n */\nexport function getRegisteredIntegrations(): string[] {\n return Object.keys(INTEGRATION_REGISTRY);\n}\n","import type { IntegrationConfig, IntegrationResult, IntegrationParams } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\nimport { getIntegration } from './registry';\n\n/**\n * Factory for creating and managing integration instances\n */\nexport class IntegrationFactory {\n private instances: Map<string, BaseIntegration> = new Map();\n private configs: Map<string, IntegrationConfig> = new Map();\n\n /**\n * Configure an integration (doesn't instantiate yet)\n */\n configure(name: string, config: Omit<IntegrationConfig, 'name'>): void {\n this.configs.set(name, { name, ...config });\n }\n\n /**\n * Get or create an integration instance\n */\n get(name: string): BaseIntegration {\n // Return existing instance\n if (this.instances.has(name)) {\n return this.instances.get(name)!;\n }\n\n // Get constructor\n const Constructor = getIntegration(name);\n if (!Constructor) {\n throw new Error(`Unknown integration: ${name}. Make sure it's imported.`);\n }\n\n // Get config\n const config = this.configs.get(name);\n if (!config) {\n throw new Error(\n `Integration not configured: ${name}. Call configure() first.`,\n );\n }\n\n // Create instance\n const instance = new Constructor(config);\n this.instances.set(name, instance);\n\n return instance;\n }\n\n /**\n * Execute an action on an integration\n */\n async execute(\n integration: string,\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const instance = this.get(integration);\n return await instance.execute(action, params);\n }\n\n /**\n * Check if integration is configured\n */\n isConfigured(name: string): boolean {\n return this.configs.has(name);\n }\n\n /**\n * Register an integration instance directly (used by mock infrastructure)\n */\n registerInstance(name: string, instance: BaseIntegration): void {\n this.instances.set(name, instance);\n }\n\n /**\n * Clear all instances (useful for testing)\n */\n clear(): void {\n this.instances.clear();\n }\n\n /**\n * Clear all instances and configs\n */\n reset(): void {\n this.instances.clear();\n this.configs.clear();\n }\n}\n\nlet _factory: IntegrationFactory | null = null;\n\nexport function getIntegrationFactory(): IntegrationFactory {\n if (!_factory) {\n _factory = new IntegrationFactory();\n }\n return _factory;\n}\n\nexport function resetIntegrationFactory(): void {\n _factory?.reset();\n _factory = null;\n}\n","import { createLogger, type Logger } from '@almadar/logger';\nimport type { IntegrationLogger, LogMeta } from '../types';\n\n/**\n * Console-based logger implementation.\n *\n * Routes through `@almadar/logger`'s shared gate so namespace filtering\n * (`ALMADAR_DEBUG`, `globalThis.__ALMADAR_DEBUG__`) and the production\n * level default (WARN+) apply uniformly with the rest of `@almadar/*`.\n *\n * The constructor's `level` argument is retained for backwards\n * compatibility but is now a no-op — the active level is owned by the\n * shared logger (compile-time + env). To filter integration logs at\n * runtime, set `globalThis.__ALMADAR_DEBUG__ = 'almadar:integrations:*'`.\n */\nexport class ConsoleLogger implements IntegrationLogger {\n private readonly log: Logger;\n\n constructor(_level: 'debug' | 'info' | 'warn' | 'error' = 'info') {\n void _level;\n this.log = createLogger('almadar:integrations');\n }\n\n debug(message: string, meta?: LogMeta): void {\n this.log.debug(message, meta);\n }\n info(message: string, meta?: LogMeta): void {\n this.log.info(message, meta);\n }\n warn(message: string, meta?: LogMeta): void {\n this.log.warn(message, meta);\n }\n error(message: string, meta?: LogMeta): void {\n this.log.error(message, meta);\n }\n}\n","import type { ValidationResult, ValidationError, IntegrationParams } from '../types';\n\n// Import integrators registry from the package main export (JSON is inlined in the bundle)\nimport { integratorsRegistry } from '@almadar/core/patterns';\n\ninterface ActionParam {\n name: string;\n type: string;\n required?: boolean;\n description?: string;\n}\n\ninterface ActionDef {\n name: string;\n description?: string;\n params: ActionParam[];\n}\n\ninterface IntegratorEntry {\n name: string;\n description?: string;\n category?: string;\n actions: ActionDef[];\n}\n\ntype IntegratorsRegistry = Record<string, {\n version?: string;\n exportedAt?: string;\n integrators: Record<string, IntegratorEntry>;\n}>;\n\n/**\n * Validate action params against registry schema\n */\nexport function validateParams(\n integration: string,\n action: string,\n params: IntegrationParams,\n): ValidationResult {\n const typedRegistry = integratorsRegistry as IntegratorsRegistry[string];\n const registry = typedRegistry.integrators[integration];\n\n if (!registry) {\n return {\n valid: false,\n errors: [\n {\n param: 'integration',\n message: `Unknown integration: ${integration}`,\n },\n ],\n };\n }\n\n const actionDef = registry.actions.find((a: ActionDef) => a.name === action);\n\n if (!actionDef) {\n return {\n valid: false,\n errors: [{ param: 'action', message: `Unknown action: ${action}` }],\n };\n }\n\n const errors: ValidationError[] = [];\n\n // Check required params\n for (const paramDef of actionDef.params) {\n if (paramDef.required && !(paramDef.name in params)) {\n errors.push({\n param: paramDef.name,\n message: `Missing required parameter: ${paramDef.name}`,\n });\n }\n\n // Type validation\n if (paramDef.name in params) {\n const value = params[paramDef.name];\n const expectedType = paramDef.type;\n const actualType = typeof value;\n\n if (expectedType === 'number' && actualType !== 'number') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'string' && actualType !== 'string') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'array' && !Array.isArray(value)) {\n errors.push({\n param: paramDef.name,\n message: `Expected array, got ${actualType}`,\n });\n }\n\n if (\n expectedType === 'object' &&\n (actualType !== 'object' || Array.isArray(value) || value === null)\n ) {\n errors.push({\n param: paramDef.name,\n message: `Expected object, got ${actualType}`,\n });\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n","import type { IntegrationError, IntegrationErrorCode } from '../types';\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n retryableErrors?: IntegrationErrorCode[];\n}\n\n/**\n * Execute a function with retry logic\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config: RetryConfig,\n): Promise<T> {\n const {\n maxAttempts,\n backoffMs,\n maxBackoffMs = 30000,\n retryableErrors,\n } = config;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Check if error is retryable\n if (\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n retryableErrors\n ) {\n const integrationError = error as IntegrationError;\n if (!retryableErrors.includes(integrationError.code)) {\n throw error;\n }\n }\n\n // Last attempt, throw\n if (attempt === maxAttempts) {\n throw error;\n }\n\n // Wait before retry (exponential backoff)\n const delay = Math.min(\n backoffMs * Math.pow(2, attempt - 1),\n maxBackoffMs,\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import type {\n IntegrationConfig,\n IntegrationResult,\n IntegrationLogger,\n IntegrationError,\n IntegrationParams,\n} from '../types';\nimport { ConsoleLogger } from './logger';\nimport { validateParams } from './validation';\nimport { withRetry } from './retry';\n\n/**\n * Base class for all integrations\n */\nexport abstract class BaseIntegration {\n protected config: IntegrationConfig;\n protected logger: IntegrationLogger;\n\n constructor(config: IntegrationConfig) {\n this.config = config;\n this.logger = config.logger || new ConsoleLogger();\n }\n\n /**\n * Execute an action\n */\n abstract execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult>;\n\n /**\n * Validate action params against registry\n */\n protected validateParams(\n action: string,\n params: IntegrationParams,\n ): ReturnType<typeof validateParams> {\n return validateParams(this.config.name, action, params);\n }\n\n /**\n * Handle errors uniformly\n */\n protected handleError(action: string, error: unknown): IntegrationResult {\n this.logger.error(`Integration error in ${this.config.name}.${action}`, {\n error: error instanceof Error ? error : new Error(String(error)),\n });\n\n const integrationError =\n error instanceof Error\n ? error\n : new Error(String(error));\n\n return {\n success: false,\n error: integrationError as IntegrationError,\n metadata: this.createMetadata(action, 0, 0),\n };\n }\n\n /**\n * Create metadata for result\n */\n protected createMetadata(\n action: string,\n duration: number,\n retries: number = 0,\n ): IntegrationResult['metadata'] {\n return {\n integration: this.config.name,\n action,\n duration,\n retries,\n timestamp: Date.now(),\n };\n }\n\n /**\n * Execute with retry logic\n */\n protected async executeWithRetry<T>(\n fn: () => Promise<T>,\n ): Promise<T> {\n if (!this.config.retry) {\n return fn();\n }\n\n return withRetry(fn, {\n maxAttempts: this.config.retry.maxAttempts,\n backoffMs: this.config.retry.backoffMs,\n maxBackoffMs: this.config.retry.maxBackoffMs,\n retryableErrors: [\n 'TIMEOUT_ERROR',\n 'NETWORK_ERROR',\n 'RATE_LIMIT_ERROR',\n ],\n });\n }\n}\n","/**\n * Core types for Almadar integrations\n */\n\n/**\n * Configuration for an integration instance\n */\nexport interface IntegrationConfig {\n /** Integration name (matches registry) */\n name: string;\n\n /** Environment variables (API keys, secrets) */\n env: Record<string, string>;\n\n /** Optional logger */\n logger?: IntegrationLogger;\n\n /** Optional rate limiting config */\n rateLimit?: {\n requestsPerSecond: number;\n burstSize: number;\n };\n\n /** Optional timeout (ms) */\n timeout?: number;\n\n /** Optional retry config */\n retry?: {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n };\n}\n\n/**\n * Result of an integration action call\n */\nexport interface IntegrationResult<T = unknown> {\n /** Success flag */\n success: boolean;\n\n /** Response data (on success) */\n data?: T;\n\n /** Error (on failure) */\n error?: IntegrationError;\n\n /** Metadata (timing, retries, etc.) */\n metadata: {\n integration: string;\n action: string;\n duration: number;\n retries: number;\n timestamp: number;\n };\n}\n\n/**\n * Integration error codes\n */\nexport type IntegrationErrorCode =\n | 'VALIDATION_ERROR'\n | 'AUTH_ERROR'\n | 'RATE_LIMIT_ERROR'\n | 'TIMEOUT_ERROR'\n | 'NETWORK_ERROR'\n | 'SERVICE_ERROR'\n | 'UNKNOWN_ERROR';\n\n/**\n * Integration error\n */\nexport class IntegrationError extends Error {\n code: IntegrationErrorCode;\n integration?: string;\n action?: string;\n details?: unknown;\n\n constructor(\n message: string,\n code: IntegrationErrorCode = 'UNKNOWN_ERROR',\n details?: unknown,\n ) {\n super(message);\n this.name = 'IntegrationError';\n this.code = code;\n this.details = details;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n integration: this.integration,\n action: this.action,\n details: this.details,\n };\n }\n}\n\nimport type { LogMeta } from '@almadar/core';\n\n/** Re-export LogMeta from @almadar/core as the canonical log metadata type. */\nexport type { LogMeta };\n\n/**\n * Logger interface\n */\nexport interface IntegrationLogger {\n debug(message: string, meta?: LogMeta): void;\n info(message: string, meta?: LogMeta): void;\n warn(message: string, meta?: LogMeta): void;\n error(message: string, meta?: LogMeta): void;\n}\n\n/**\n * Integration action parameters.\n * Each integration's execute() method receives params as this type.\n * Individual methods cast to specific param shapes from their contracts.\n *\n * Per-key value union is widened to admit `@almadar/core`'s `FieldValue`\n * shape (entity / payload values flowing into call-service args): `Date`\n * for date fields, `IntegrationParams[]` for nested object arrays, and a\n * raw-value array catch-all so `string[]` / `number[]` / mixed payload\n * arrays satisfy the index signature without requiring `as unknown as`\n * casts at the call site. Adapters narrow these to their canonical input\n * types (typically JSON-string serialisation for `Date`).\n */\nexport type IntegrationParamValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | ReadonlyArray<IntegrationParamValue>\n | { readonly [key: string]: IntegrationParamValue };\n\nexport interface IntegrationParams {\n [key: string]: IntegrationParamValue;\n}\n\n/**\n * Validation result\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n param: string;\n message: string;\n}\n","import { BaseIntegration } from '../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationParams } from '../types';\nimport { IntegrationError } from '../types';\n\n/**\n * Mock integration for testing\n */\nexport class MockIntegration extends BaseIntegration {\n private responses: Map<string, unknown> = new Map();\n private calls: Array<{ action: string; params: IntegrationParams }> =\n [];\n\n constructor(config: IntegrationConfig) {\n super(config);\n }\n\n /**\n * Set mock response for an action\n */\n setResponse(action: string, data: unknown): void {\n this.responses.set(action, data);\n }\n\n /**\n * Get all calls made to this integration\n */\n getCalls(): Array<{ action: string; params: IntegrationParams }> {\n return this.calls;\n }\n\n /**\n * Clear all calls\n */\n clearCalls(): void {\n this.calls = [];\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n // Record the call\n this.calls.push({ action, params });\n\n const data = this.responses.get(action);\n\n if (!data) {\n return {\n success: false,\n error: new IntegrationError(\n `No mock response for action: ${action}`,\n 'UNKNOWN_ERROR',\n ),\n metadata: this.createMetadata(action, 0),\n };\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, 0),\n };\n }\n}\n","import { IntegrationFactory } from '../factory';\nimport type { IntegrationResult, IntegrationParams } from '../types';\nimport type {\n IntegrationContracts,\n IntegrationName,\n IntegrationActionName,\n} from '../contracts';\n\n/**\n * Signature of the call-service handler returned by `createCallServiceHandler`\n * and `RuntimeIntegrationManager.getCallServiceHandler`. Exported so that\n * consumers (e.g. orbital-codegen-emitted `clients.ts`) can give the value\n * a public type and avoid TS2742 \"inferred type cannot be named without a\n * reference to <bundler-internal>\" errors when emitting `.d.ts`.\n *\n * Overloaded: when the caller passes a service + action LITERAL pair the\n * compiler narrows to `IntegrationContracts[Service][Action]['result']`.\n * Codegen-emitted call sites pass string literals (`callService('github',\n * 'listIssues', ...)`) so they get the typed result for free and no\n * longer need a `: unknown` annotation or downstream `as <Result>` casts.\n * The wide fallback signature keeps non-literal call sites (e.g. dynamic\n * dispatch via `manager.getCallServiceHandler()`) working.\n */\nexport interface CallServiceHandler {\n <S extends IntegrationName, A extends IntegrationActionName<S>>(\n service: S,\n action: A,\n params: IntegrationContracts[S][A] extends { params: infer P } ? P : IntegrationParams | undefined,\n ): Promise<\n IntegrationContracts[S][A] extends { result: infer R } ? R : unknown\n >;\n (\n service: string,\n action: string,\n params: IntegrationParams | undefined,\n ): Promise<unknown>;\n}\n\n/**\n * Create a callService effect handler for @almadar/runtime.\n *\n * The implementation is the wide form `(string, string, params) =>\n * Promise<unknown>` — at runtime we don't know which action's result\n * shape to return. The handler is returned as `CallServiceHandler`,\n * whose typed overload narrows to `IntegrationContracts[S][A]['result']`\n * at every literal call site (codegen-emitted `callService('github',\n * 'listIssues', ...)` gets typed result for free). The cast is to a\n * specific callable interface — not `unknown` / `any` — so the\n * `no-as-any` / `no-unknown-type` rules are unaffected.\n */\nexport function createCallServiceHandler(factory: IntegrationFactory): CallServiceHandler {\n const handler = async (\n service: string,\n action: string,\n params: IntegrationParams | undefined,\n ): Promise<unknown> => {\n const result = await factory.execute(service, action, params || {});\n\n if (!result.success) {\n throw result.error;\n }\n\n return result.data;\n };\n return handler as CallServiceHandler;\n}\n","import { createRequire } from 'node:module';\nimport { IntegrationFactory } from '../factory';\nimport { MockIntegration } from '../mocks/MockIntegration';\nimport { createCallServiceHandler, type CallServiceHandler } from './effectHandler';\nimport type { IntegrationResult, IntegrationParams } from '../types';\n\n/** Mock data value types generated from response shapes */\ntype MockValue = string | number | boolean | Record<string, never> | never[];\n\n/**\n * Generate mock data from a responseShape definition.\n * Maps type strings to realistic placeholder values.\n */\nfunction generateMockFromShape(shape: Record<string, string>): Record<string, MockValue> {\n const data: Record<string, MockValue> = {};\n for (const [key, type] of Object.entries(shape)) {\n switch (type) {\n case 'string': data[key] = `mock_${key}`; break;\n case 'number': data[key] = 42; break;\n case 'boolean': data[key] = true; break;\n case 'object': data[key] = {}; break;\n case 'string[]': data[key] = []; break;\n default: data[key] = `mock_${key}`;\n }\n }\n return data;\n}\n\n/**\n * Runtime integration manager\n * Auto-configures integrations from environment variables.\n * When USE_MOCK_DATA=true, registers mock integrations for all services\n * using response shapes from services-registry.json.\n */\nexport class RuntimeIntegrationManager {\n private factory: IntegrationFactory;\n\n constructor() {\n this.factory = new IntegrationFactory();\n }\n\n /**\n * Configure from environment variables.\n * In mock mode (USE_MOCK_DATA=true), all services return realistic mock data.\n */\n configureFromEnv(): void {\n const env = process.env;\n\n if (env.USE_MOCK_DATA === 'true') {\n this.configureMockMode();\n return;\n }\n\n // Stripe\n if (env.STRIPE_SECRET_KEY) {\n this.factory.configure('stripe', {\n env: {\n STRIPE_SECRET_KEY: env.STRIPE_SECRET_KEY,\n },\n });\n }\n\n // YouTube\n if (env.YOUTUBE_API_KEY) {\n this.factory.configure('youtube', {\n env: {\n YOUTUBE_API_KEY: env.YOUTUBE_API_KEY,\n },\n });\n }\n\n // Twilio\n if (env.TWILIO_ACCOUNT_SID && env.TWILIO_AUTH_TOKEN) {\n this.factory.configure('twilio', {\n env: {\n TWILIO_ACCOUNT_SID: env.TWILIO_ACCOUNT_SID,\n TWILIO_AUTH_TOKEN: env.TWILIO_AUTH_TOKEN,\n TWILIO_PHONE_NUMBER: env.TWILIO_PHONE_NUMBER || '',\n },\n });\n }\n\n // Email (SendGrid)\n if (env.SENDGRID_API_KEY) {\n this.factory.configure('email', {\n env: {\n PROVIDER: 'sendgrid',\n SENDGRID_API_KEY: env.SENDGRID_API_KEY,\n FROM_EMAIL: env.FROM_EMAIL || 'noreply@example.com',\n },\n });\n }\n // Email (Resend)\n else if (env.RESEND_API_KEY) {\n this.factory.configure('email', {\n env: {\n PROVIDER: 'resend',\n RESEND_API_KEY: env.RESEND_API_KEY,\n FROM_EMAIL: env.FROM_EMAIL || 'noreply@example.com',\n },\n });\n }\n\n // LLM (Anthropic)\n if (env.ANTHROPIC_API_KEY) {\n this.factory.configure('llm', {\n env: {\n PROVIDER: 'anthropic',\n ANTHROPIC_API_KEY: env.ANTHROPIC_API_KEY,\n },\n });\n }\n // LLM (OpenAI)\n else if (env.OPENAI_API_KEY) {\n this.factory.configure('llm', {\n env: {\n PROVIDER: 'openai',\n OPENAI_API_KEY: env.OPENAI_API_KEY,\n },\n });\n }\n\n // ML (model inference via a deployed serving orbital)\n if (env.MASAR_URL && env.MASAR_ML_TRAIT) {\n this.factory.configure('ml', {\n env: {\n MASAR_URL: env.MASAR_URL,\n MASAR_ML_TRAIT: env.MASAR_ML_TRAIT,\n MASAR_ML_TIMEOUT_MS: env.MASAR_ML_TIMEOUT_MS || '',\n },\n });\n }\n\n // DeepAgent\n if (env.DEEPAGENT_API_URL) {\n this.factory.configure('deepagent', {\n env: {\n DEEPAGENT_API_URL: env.DEEPAGENT_API_URL,\n DEEPAGENT_API_KEY: env.DEEPAGENT_API_KEY || '',\n },\n });\n }\n\n // GitHub\n if (env.GITHUB_TOKEN) {\n this.factory.configure('github', {\n env: {\n GITHUB_TOKEN: env.GITHUB_TOKEN,\n GITHUB_OWNER: env.GITHUB_OWNER || '',\n GITHUB_REPO: env.GITHUB_REPO || '',\n GITHUB_WORK_DIR: env.GITHUB_WORK_DIR || '',\n },\n });\n }\n }\n\n /**\n * Configure mock mode: register MockIntegration for all known services\n * with auto-generated responses from the services registry.\n */\n private configureMockMode(): void {\n // Load registry and populate mocks\n const registry = this.loadServicesRegistry();\n\n for (const [serviceName, service] of Object.entries(registry)) {\n const mock = new MockIntegration({ name: serviceName, env: {} });\n\n for (const action of service.actions) {\n if (action.responseShape && Object.keys(action.responseShape).length > 0) {\n mock.setResponse(action.name, generateMockFromShape(action.responseShape));\n } else {\n // No responseShape defined: return generic success\n mock.setResponse(action.name, { success: true, _mock: true, _action: action.name });\n }\n }\n\n this.factory.configure(serviceName, { env: {} });\n this.factory.registerInstance(serviceName, mock);\n }\n\n // Wrap factory.execute with a fallback for unknown services (e.g., custom-bearer-api).\n // Unknown services return an echo response with the input params.\n const originalExecute = this.factory.execute.bind(this.factory);\n this.factory.execute = async (\n integration: string,\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> => {\n try {\n return await originalExecute(integration, action, params);\n } catch {\n // Unknown/unconfigured service in mock mode: echo params\n return {\n success: true,\n data: { ...params, _mock: true, _service: integration, _action: action },\n metadata: { integration, action, duration: 0, retries: 0, timestamp: Date.now() },\n };\n }\n };\n }\n\n /**\n * Load services registry from @almadar/core/patterns.\n * Returns a map of service name to { actions: [...] }.\n */\n private loadServicesRegistry(): Record<string, { actions: Array<{ name: string; responseShape: Record<string, string> }> }> {\n try {\n const esmRequire = createRequire(import.meta.url);\n const registry = esmRequire('@almadar/core/patterns/services-registry.json') as {\n services: Record<string, { actions: Array<{ name: string; responseShape: Record<string, string> }> }>;\n };\n return registry.services;\n } catch {\n // Registry not available (e.g., not installed). Return empty - fallback mock handles everything.\n return {};\n }\n }\n\n /**\n * Get effect handler for runtime. Annotated with `CallServiceHandler` so\n * the inferred type at consumer call sites resolves to a public exported\n * name instead of a tsup-bundler-generated chunk path (which causes\n * TS2742 in `.d.ts` emit).\n */\n getCallServiceHandler(): CallServiceHandler {\n return createCallServiceHandler(this.factory);\n }\n\n /**\n * Get factory (for advanced usage)\n */\n getFactory(): IntegrationFactory {\n return this.factory;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/types.ts","../../src/core/logger.ts","../../src/core/validation.ts","../../src/core/retry.ts","../../src/core/BaseIntegration.ts","../../src/registry.ts","../../src/factory.ts","../../src/integrations/stripe/index.ts","../../src/integrations/youtube/index.ts","../../src/integrations/twilio/index.ts","../../src/integrations/email/index.ts","../../src/integrations/llm/index.ts","../../src/integrations/ml/index.ts","../../src/integrations/deepagent/index.ts","../../src/integrations/github/github-git.ts","../../src/integrations/github/github-api.ts","../../src/integrations/github/index.ts","../../src/integrations/cli/index.ts","../../src/integrations/redis/index.ts","../../src/integrations/queue/index.ts","../../src/integrations/otel/index.ts","../../src/integrations/oauth/index.ts","../../src/integrations/storage/index.ts","../../src/integrations/docker/index.ts","../../src/integrations/database/sql-guard.ts","../../src/integrations/database/index.ts","../../src/integrations/wikimedia/index.ts","../../src/integrations/iconify/index.ts","../../src/integrations/arxiv/index.ts","../../src/mocks/MockIntegration.ts","../../src/runtime/effectHandler.ts","../../src/runtime/RuntimeIntegrationManager.ts"],"names":["Stripe","sub","fs","join","DEFAULT_TIMEOUT_MS","DEFAULT_UA"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Core types for Almadar integrations\n */\n\n/**\n * Configuration for an integration instance\n */\nexport interface IntegrationConfig {\n /** Integration name (matches registry) */\n name: string;\n\n /** Environment variables (API keys, secrets) */\n env: Record<string, string>;\n\n /** Optional logger */\n logger?: IntegrationLogger;\n\n /** Optional rate limiting config */\n rateLimit?: {\n requestsPerSecond: number;\n burstSize: number;\n };\n\n /** Optional timeout (ms) */\n timeout?: number;\n\n /** Optional retry config */\n retry?: {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n };\n}\n\n/**\n * Result of an integration action call\n */\nexport interface IntegrationResult<T = unknown> {\n /** Success flag */\n success: boolean;\n\n /** Response data (on success) */\n data?: T;\n\n /** Error (on failure) */\n error?: IntegrationError;\n\n /** Metadata (timing, retries, etc.) */\n metadata: {\n integration: string;\n action: string;\n duration: number;\n retries: number;\n timestamp: number;\n };\n}\n\n/**\n * Integration error codes\n */\nexport type IntegrationErrorCode =\n | 'VALIDATION_ERROR'\n | 'AUTH_ERROR'\n | 'RATE_LIMIT_ERROR'\n | 'TIMEOUT_ERROR'\n | 'NETWORK_ERROR'\n | 'SERVICE_ERROR'\n | 'UNKNOWN_ERROR';\n\n/**\n * Integration error\n */\nexport class IntegrationError extends Error {\n code: IntegrationErrorCode;\n integration?: string;\n action?: string;\n details?: unknown;\n\n constructor(\n message: string,\n code: IntegrationErrorCode = 'UNKNOWN_ERROR',\n details?: unknown,\n ) {\n super(message);\n this.name = 'IntegrationError';\n this.code = code;\n this.details = details;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n integration: this.integration,\n action: this.action,\n details: this.details,\n };\n }\n}\n\nimport type { LogMeta } from '@almadar/core';\n\n/** Re-export LogMeta from @almadar/core as the canonical log metadata type. */\nexport type { LogMeta };\n\n/**\n * Logger interface\n */\nexport interface IntegrationLogger {\n debug(message: string, meta?: LogMeta): void;\n info(message: string, meta?: LogMeta): void;\n warn(message: string, meta?: LogMeta): void;\n error(message: string, meta?: LogMeta): void;\n}\n\n/**\n * Integration action parameters.\n * Each integration's execute() method receives params as this type.\n * Individual methods cast to specific param shapes from their contracts.\n *\n * Per-key value union is widened to admit `@almadar/core`'s `FieldValue`\n * shape (entity / payload values flowing into call-service args): `Date`\n * for date fields, `IntegrationParams[]` for nested object arrays, and a\n * raw-value array catch-all so `string[]` / `number[]` / mixed payload\n * arrays satisfy the index signature without requiring `as unknown as`\n * casts at the call site. Adapters narrow these to their canonical input\n * types (typically JSON-string serialisation for `Date`).\n */\nexport type IntegrationParamValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | ReadonlyArray<IntegrationParamValue>\n | { readonly [key: string]: IntegrationParamValue };\n\nexport interface IntegrationParams {\n [key: string]: IntegrationParamValue;\n}\n\n/**\n * Validation result\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n param: string;\n message: string;\n}\n","import { createLogger, type Logger } from '@almadar/logger';\nimport type { IntegrationLogger, LogMeta } from '../types';\n\n/**\n * Console-based logger implementation.\n *\n * Routes through `@almadar/logger`'s shared gate so namespace filtering\n * (`ALMADAR_DEBUG`, `globalThis.__ALMADAR_DEBUG__`) and the production\n * level default (WARN+) apply uniformly with the rest of `@almadar/*`.\n *\n * The constructor's `level` argument is retained for backwards\n * compatibility but is now a no-op — the active level is owned by the\n * shared logger (compile-time + env). To filter integration logs at\n * runtime, set `globalThis.__ALMADAR_DEBUG__ = 'almadar:integrations:*'`.\n */\nexport class ConsoleLogger implements IntegrationLogger {\n private readonly log: Logger;\n\n constructor(_level: 'debug' | 'info' | 'warn' | 'error' = 'info') {\n void _level;\n this.log = createLogger('almadar:integrations');\n }\n\n debug(message: string, meta?: LogMeta): void {\n this.log.debug(message, meta);\n }\n info(message: string, meta?: LogMeta): void {\n this.log.info(message, meta);\n }\n warn(message: string, meta?: LogMeta): void {\n this.log.warn(message, meta);\n }\n error(message: string, meta?: LogMeta): void {\n this.log.error(message, meta);\n }\n}\n","import type { ValidationResult, ValidationError, IntegrationParams } from '../types';\n\n// Import integrators registry from the package main export (JSON is inlined in the bundle)\nimport { integratorsRegistry } from '@almadar/core/patterns';\n\ninterface ActionParam {\n name: string;\n type: string;\n required?: boolean;\n description?: string;\n}\n\ninterface ActionDef {\n name: string;\n description?: string;\n params: ActionParam[];\n}\n\ninterface IntegratorEntry {\n name: string;\n description?: string;\n category?: string;\n actions: ActionDef[];\n}\n\ntype IntegratorsRegistry = Record<string, {\n version?: string;\n exportedAt?: string;\n integrators: Record<string, IntegratorEntry>;\n}>;\n\n/**\n * Validate action params against registry schema\n */\nexport function validateParams(\n integration: string,\n action: string,\n params: IntegrationParams,\n): ValidationResult {\n const typedRegistry = integratorsRegistry as IntegratorsRegistry[string];\n const registry = typedRegistry.integrators[integration];\n\n if (!registry) {\n return {\n valid: false,\n errors: [\n {\n param: 'integration',\n message: `Unknown integration: ${integration}`,\n },\n ],\n };\n }\n\n const actionDef = registry.actions.find((a: ActionDef) => a.name === action);\n\n if (!actionDef) {\n return {\n valid: false,\n errors: [{ param: 'action', message: `Unknown action: ${action}` }],\n };\n }\n\n const errors: ValidationError[] = [];\n\n // Check required params\n for (const paramDef of actionDef.params) {\n if (paramDef.required && !(paramDef.name in params)) {\n errors.push({\n param: paramDef.name,\n message: `Missing required parameter: ${paramDef.name}`,\n });\n }\n\n // Type validation\n if (paramDef.name in params) {\n const value = params[paramDef.name];\n const expectedType = paramDef.type;\n const actualType = typeof value;\n\n if (expectedType === 'number' && actualType !== 'number') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'string' && actualType !== 'string') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'array' && !Array.isArray(value)) {\n errors.push({\n param: paramDef.name,\n message: `Expected array, got ${actualType}`,\n });\n }\n\n if (\n expectedType === 'object' &&\n (actualType !== 'object' || Array.isArray(value) || value === null)\n ) {\n errors.push({\n param: paramDef.name,\n message: `Expected object, got ${actualType}`,\n });\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n","import type { IntegrationError, IntegrationErrorCode } from '../types';\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n retryableErrors?: IntegrationErrorCode[];\n}\n\n/**\n * Execute a function with retry logic\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config: RetryConfig,\n): Promise<T> {\n const {\n maxAttempts,\n backoffMs,\n maxBackoffMs = 30000,\n retryableErrors,\n } = config;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Check if error is retryable\n if (\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n retryableErrors\n ) {\n const integrationError = error as IntegrationError;\n if (!retryableErrors.includes(integrationError.code)) {\n throw error;\n }\n }\n\n // Last attempt, throw\n if (attempt === maxAttempts) {\n throw error;\n }\n\n // Wait before retry (exponential backoff)\n const delay = Math.min(\n backoffMs * Math.pow(2, attempt - 1),\n maxBackoffMs,\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import type {\n IntegrationConfig,\n IntegrationResult,\n IntegrationLogger,\n IntegrationError,\n IntegrationParams,\n} from '../types';\nimport { ConsoleLogger } from './logger';\nimport { validateParams } from './validation';\nimport { withRetry } from './retry';\n\n/**\n * Base class for all integrations\n */\nexport abstract class BaseIntegration {\n protected config: IntegrationConfig;\n protected logger: IntegrationLogger;\n\n constructor(config: IntegrationConfig) {\n this.config = config;\n this.logger = config.logger || new ConsoleLogger();\n }\n\n /**\n * Execute an action\n */\n abstract execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult>;\n\n /**\n * Validate action params against registry\n */\n protected validateParams(\n action: string,\n params: IntegrationParams,\n ): ReturnType<typeof validateParams> {\n return validateParams(this.config.name, action, params);\n }\n\n /**\n * Handle errors uniformly\n */\n protected handleError(action: string, error: unknown): IntegrationResult {\n this.logger.error(`Integration error in ${this.config.name}.${action}`, {\n error: error instanceof Error ? error : new Error(String(error)),\n });\n\n const integrationError =\n error instanceof Error\n ? error\n : new Error(String(error));\n\n return {\n success: false,\n error: integrationError as IntegrationError,\n metadata: this.createMetadata(action, 0, 0),\n };\n }\n\n /**\n * Create metadata for result\n */\n protected createMetadata(\n action: string,\n duration: number,\n retries: number = 0,\n ): IntegrationResult['metadata'] {\n return {\n integration: this.config.name,\n action,\n duration,\n retries,\n timestamp: Date.now(),\n };\n }\n\n /**\n * Execute with retry logic\n */\n protected async executeWithRetry<T>(\n fn: () => Promise<T>,\n ): Promise<T> {\n if (!this.config.retry) {\n return fn();\n }\n\n return withRetry(fn, {\n maxAttempts: this.config.retry.maxAttempts,\n backoffMs: this.config.retry.backoffMs,\n maxBackoffMs: this.config.retry.maxBackoffMs,\n retryableErrors: [\n 'TIMEOUT_ERROR',\n 'NETWORK_ERROR',\n 'RATE_LIMIT_ERROR',\n ],\n });\n }\n}\n","import type { IntegrationConfig } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\n\n/**\n * Integration constructor type\n */\nexport type IntegrationConstructor = new (\n config: IntegrationConfig,\n) => BaseIntegration;\n\n/**\n * Integration registry (populated as integrations are imported)\n */\nexport const INTEGRATION_REGISTRY: Record<string, IntegrationConstructor> = {};\n\n/**\n * Register an integration\n */\nexport function registerIntegration(\n name: string,\n constructor: IntegrationConstructor,\n): void {\n INTEGRATION_REGISTRY[name] = constructor;\n}\n\n/**\n * Get integration constructor by name\n */\nexport function getIntegration(\n name: string,\n): IntegrationConstructor | undefined {\n return INTEGRATION_REGISTRY[name];\n}\n\n/**\n * Check if integration is known\n */\nexport function isKnownIntegration(name: string): boolean {\n return name in INTEGRATION_REGISTRY;\n}\n\n/**\n * Get all registered integration names\n */\nexport function getRegisteredIntegrations(): string[] {\n return Object.keys(INTEGRATION_REGISTRY);\n}\n","import type { IntegrationConfig, IntegrationResult, IntegrationParams } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\nimport { getIntegration } from './registry';\n\n/**\n * Factory for creating and managing integration instances\n */\nexport class IntegrationFactory {\n private instances: Map<string, BaseIntegration> = new Map();\n private configs: Map<string, IntegrationConfig> = new Map();\n\n /**\n * Configure an integration (doesn't instantiate yet)\n */\n configure(name: string, config: Omit<IntegrationConfig, 'name'>): void {\n this.configs.set(name, { name, ...config });\n }\n\n /**\n * Get or create an integration instance\n */\n get(name: string): BaseIntegration {\n // Return existing instance\n if (this.instances.has(name)) {\n return this.instances.get(name)!;\n }\n\n // Get constructor\n const Constructor = getIntegration(name);\n if (!Constructor) {\n throw new Error(`Unknown integration: ${name}. Make sure it's imported.`);\n }\n\n // Get config\n const config = this.configs.get(name);\n if (!config) {\n throw new Error(\n `Integration not configured: ${name}. Call configure() first.`,\n );\n }\n\n // Create instance\n const instance = new Constructor(config);\n this.instances.set(name, instance);\n\n return instance;\n }\n\n /**\n * Execute an action on an integration\n */\n async execute(\n integration: string,\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const instance = this.get(integration);\n return await instance.execute(action, params);\n }\n\n /**\n * Check if integration is configured\n */\n isConfigured(name: string): boolean {\n return this.configs.has(name);\n }\n\n /**\n * Register an integration instance directly (used by mock infrastructure)\n */\n registerInstance(name: string, instance: BaseIntegration): void {\n this.instances.set(name, instance);\n }\n\n /**\n * Clear all instances (useful for testing)\n */\n clear(): void {\n this.instances.clear();\n }\n\n /**\n * Clear all instances and configs\n */\n reset(): void {\n this.instances.clear();\n this.configs.clear();\n }\n}\n\nlet _factory: IntegrationFactory | null = null;\n\nexport function getIntegrationFactory(): IntegrationFactory {\n if (!_factory) {\n _factory = new IntegrationFactory();\n }\n return _factory;\n}\n\nexport function resetIntegrationFactory(): void {\n _factory?.reset();\n _factory = null;\n}\n","import Stripe from 'stripe';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type {\n IntegrationConfig,\n IntegrationResult,\n IntegrationError,\n IntegrationParams,\n} from '../../types';\nimport { registerIntegration } from '../../registry';\nimport type {\n AlmadarCheckoutSession,\n AlmadarCustomer,\n AlmadarPortalSession,\n AlmadarSubscription,\n AlmadarSubscriptionStatus,\n AlmadarTier,\n CancelSubscriptionInput,\n CreateCheckoutInput,\n CreateCustomerInput,\n CreatePortalInput,\n StripePriceMap,\n UpdateSubscriptionInput,\n} from './types';\n\nexport type {\n AlmadarCheckoutSession,\n AlmadarCustomer,\n AlmadarPortalSession,\n AlmadarSubscription,\n AlmadarSubscriptionStatus,\n AlmadarTier,\n AlmadarInvoicePayment,\n AlmadarInvoiceFailure,\n AlmadarStripeEvent,\n AlmadarStripeEventOk,\n CancelSubscriptionInput,\n CreateCheckoutInput,\n CreateCustomerInput,\n CreatePortalInput,\n StripePriceMap,\n UpdateSubscriptionInput,\n} from './types';\n\nexport { verifyAndParseStripeEvent } from './webhooks';\nexport type { VerifyAndParseInput } from './webhooks';\n\nconst STRIPE_API_VERSION: Stripe.LatestApiVersion = '2025-02-24.acacia';\n\nfunction isoFromUnix(seconds: number): string {\n return new Date(seconds * 1000).toISOString();\n}\n\nfunction priceToTier(priceId: string, prices: StripePriceMap): AlmadarTier | null {\n if (priceId === prices.solo) return 'solo';\n if (priceId === prices.teams) return 'teams';\n return null;\n}\n\nfunction mapStatus(status: Stripe.Subscription.Status): AlmadarSubscriptionStatus {\n switch (status) {\n case 'active':\n case 'past_due':\n case 'canceled':\n case 'incomplete':\n case 'incomplete_expired':\n case 'trialing':\n case 'unpaid':\n return status;\n case 'paused':\n return 'unpaid';\n default: {\n const _exhaustive: never = status;\n void _exhaustive;\n return 'incomplete';\n }\n }\n}\n\nfunction shapeSubscription(\n sub: Stripe.Subscription,\n prices: StripePriceMap,\n): AlmadarSubscription {\n const firstItem = sub.items.data[0];\n const priceId = firstItem?.price.id ?? '';\n const quantity = firstItem?.quantity ?? 1;\n const customerId =\n typeof sub.customer === 'string' ? sub.customer : sub.customer.id;\n return {\n subscriptionId: sub.id,\n customerId,\n status: mapStatus(sub.status),\n priceId,\n quantity,\n currentPeriodStart: isoFromUnix(sub.current_period_start),\n currentPeriodEnd: isoFromUnix(sub.current_period_end),\n cancelAtPeriodEnd: sub.cancel_at_period_end,\n tier: priceToTier(priceId, prices),\n };\n}\n\nfunction shapeCustomer(customer: Stripe.Customer): AlmadarCustomer {\n return {\n customerId: customer.id,\n email: customer.email ?? null,\n almadarUid: customer.metadata?.almadarUid ?? null,\n };\n}\n\n/**\n * Stripe integration for payment processing and subscription billing.\n *\n * Two surfaces:\n * - Legacy `execute(action, params)` switch for the original three\n * PaymentIntent actions (kept for back-compat).\n * - New typed methods (`createCustomer`, `createCheckoutSession`,\n * `createSubscription`, etc.) that return canonical `Almadar*`\n * types. Consumers MUST prefer these — `Stripe.*` types never leak.\n */\nexport class StripeIntegration extends BaseIntegration {\n private client: Stripe;\n private prices: StripePriceMap;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const apiKey = config.env.STRIPE_SECRET_KEY;\n if (!apiKey) {\n throw new Error('STRIPE_SECRET_KEY not configured');\n }\n\n this.client = new Stripe(apiKey, {\n apiVersion: STRIPE_API_VERSION,\n });\n\n this.prices = {\n solo: config.env.STRIPE_PRICE_SOLO ?? '',\n teams: config.env.STRIPE_PRICE_TEAMS ?? '',\n };\n\n this.logger.info('Stripe integration initialized');\n }\n\n /** Provisioned Price IDs the integration was constructed with. */\n getPrices(): StripePriceMap {\n return this.prices;\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n const retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'createPaymentIntent':\n data = await this.executeWithRetry(() =>\n this.createPaymentIntent(params),\n );\n break;\n case 'confirmPayment':\n data = await this.executeWithRetry(() => this.confirmPayment(params));\n break;\n case 'refund':\n data = await this.executeWithRetry(() => this.refund(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async createPaymentIntent(params: IntegrationParams) {\n const { amount, currency, metadata } = params;\n this.logger.debug('Creating payment intent', {\n amount: Number(amount),\n currency: String(currency ?? ''),\n });\n return await this.client.paymentIntents.create({\n amount: amount as number,\n currency: currency as string,\n metadata: metadata as Stripe.MetadataParam | undefined,\n });\n }\n\n private async confirmPayment(params: IntegrationParams) {\n const { paymentIntentId } = params;\n this.logger.debug('Confirming payment', {\n paymentIntentId: String(paymentIntentId ?? ''),\n });\n return await this.client.paymentIntents.confirm(paymentIntentId as string);\n }\n\n private async refund(params: IntegrationParams) {\n const { paymentIntentId, amount } = params;\n this.logger.debug('Creating refund', {\n paymentIntentId: String(paymentIntentId ?? ''),\n amount: Number(amount),\n });\n return await this.client.refunds.create({\n payment_intent: paymentIntentId as string,\n amount: amount as number | undefined,\n });\n }\n\n // ───────────────────────────────────────────────────────────────────\n // Typed action surface — canonical Almadar shapes only.\n // ───────────────────────────────────────────────────────────────────\n\n /** Look up an existing customer by Stripe ID. */\n async getCustomer(customerId: string): Promise<AlmadarCustomer | null> {\n this.logger.debug('Fetching customer', { customerId });\n const customer = await this.client.customers.retrieve(customerId);\n if (customer.deleted === true) return null;\n return shapeCustomer(customer);\n }\n\n /**\n * Create a Stripe Customer for the given Almadar user. `almadarUid` is\n * stored as Stripe metadata so webhook handlers can resolve back to\n * the right `users/{uid}` document.\n */\n async createCustomer(input: CreateCustomerInput): Promise<AlmadarCustomer> {\n this.logger.debug('Creating customer', { almadarUid: input.almadarUid });\n const customer = await this.client.customers.create({\n email: input.email,\n name: input.displayName ?? undefined,\n metadata: { almadarUid: input.almadarUid },\n });\n return shapeCustomer(customer);\n }\n\n /**\n * Create a Stripe-hosted Checkout Session for the given tier. Client\n * redirects the user to the returned `url`; on success Stripe fires\n * `customer.subscription.created`, which the apps/builder webhook\n * handler turns into a `users/{uid}.tier` write.\n */\n async createCheckoutSession(\n input: CreateCheckoutInput,\n ): Promise<AlmadarCheckoutSession> {\n const price = input.tier === 'solo' ? this.prices.solo : this.prices.teams;\n if (!price) {\n throw new Error(`STRIPE_PRICE_${input.tier.toUpperCase()} not configured`);\n }\n\n this.logger.debug('Creating Checkout session', {\n tier: input.tier,\n quantity: input.quantity,\n hasCustomer: input.customerId !== null,\n });\n\n const session = await this.client.checkout.sessions.create({\n mode: 'subscription',\n customer: input.customerId ?? undefined,\n line_items: [{ price, quantity: input.quantity }],\n success_url: input.successUrl,\n cancel_url: input.cancelUrl,\n subscription_data: {\n metadata: input.metadata,\n },\n automatic_tax: { enabled: true },\n allow_promotion_codes: true,\n });\n\n return {\n url: session.url ?? '',\n sessionId: session.id,\n customerId:\n typeof session.customer === 'string'\n ? session.customer\n : session.customer?.id ?? null,\n };\n }\n\n /** Create a Billing Portal session for self-service plan management. */\n async createBillingPortalSession(\n input: CreatePortalInput,\n ): Promise<AlmadarPortalSession> {\n this.logger.debug('Creating Portal session', { customerId: input.customerId });\n const session = await this.client.billingPortal.sessions.create({\n customer: input.customerId,\n return_url: input.returnUrl,\n });\n return {\n url: session.url,\n customerId: input.customerId,\n };\n }\n\n /** Fetch a subscription and shape it into the canonical form. */\n async getSubscription(subscriptionId: string): Promise<AlmadarSubscription> {\n this.logger.debug('Fetching subscription', { subscriptionId });\n const sub = await this.client.subscriptions.retrieve(subscriptionId);\n return shapeSubscription(sub, this.prices);\n }\n\n /**\n * Create a subscription directly (server-side, no Checkout). Used by\n * P13.3 Solo → Teams upgrade flow.\n */\n async createSubscription(input: {\n customerId: string;\n tier: 'solo' | 'teams';\n quantity: number;\n metadata: Record<string, string>;\n }): Promise<AlmadarSubscription> {\n const price = input.tier === 'solo' ? this.prices.solo : this.prices.teams;\n if (!price) {\n throw new Error(`STRIPE_PRICE_${input.tier.toUpperCase()} not configured`);\n }\n this.logger.debug('Creating subscription', {\n customerId: input.customerId,\n tier: input.tier,\n quantity: input.quantity,\n });\n const sub = await this.client.subscriptions.create({\n customer: input.customerId,\n items: [{ price, quantity: input.quantity }],\n metadata: input.metadata,\n proration_behavior: 'create_prorations',\n automatic_tax: { enabled: true },\n });\n return shapeSubscription(sub, this.prices);\n }\n\n /**\n * Update quantity or cancel-at-period-end. Used for Teams seat resize\n * and Solo → Teams transition.\n */\n async updateSubscription(\n input: UpdateSubscriptionInput,\n ): Promise<AlmadarSubscription> {\n this.logger.debug('Updating subscription', { subscriptionId: input.subscriptionId });\n const update: Stripe.SubscriptionUpdateParams = {\n proration_behavior: 'create_prorations',\n };\n if (typeof input.quantity === 'number') {\n const existing = await this.client.subscriptions.retrieve(input.subscriptionId);\n const itemId = existing.items.data[0]?.id;\n if (itemId !== undefined) {\n update.items = [{ id: itemId, quantity: input.quantity }];\n }\n }\n if (typeof input.cancelAtPeriodEnd === 'boolean') {\n update.cancel_at_period_end = input.cancelAtPeriodEnd;\n }\n const sub = await this.client.subscriptions.update(\n input.subscriptionId,\n update,\n );\n return shapeSubscription(sub, this.prices);\n }\n\n /**\n * Cancel a subscription. Defaults to `atPeriodEnd: true` so the user\n * keeps access until the current period ends.\n */\n async cancelSubscription(\n input: CancelSubscriptionInput,\n ): Promise<AlmadarSubscription> {\n this.logger.debug('Canceling subscription', {\n subscriptionId: input.subscriptionId,\n atPeriodEnd: input.atPeriodEnd,\n });\n if (input.atPeriodEnd) {\n const sub = await this.client.subscriptions.update(input.subscriptionId, {\n cancel_at_period_end: true,\n });\n return shapeSubscription(sub, this.prices);\n }\n const sub = await this.client.subscriptions.cancel(input.subscriptionId);\n return shapeSubscription(sub, this.prices);\n }\n}\n\n// Auto-register\nregisterIntegration('stripe', StripeIntegration);\n","import { google, youtube_v3 } from 'googleapis';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * YouTube Data API integration\n */\nexport class YouTubeIntegration extends BaseIntegration {\n private client: youtube_v3.Youtube;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const apiKey = config.env.YOUTUBE_API_KEY;\n if (!apiKey) {\n throw new Error('YOUTUBE_API_KEY not configured');\n }\n\n this.client = google.youtube({\n version: 'v3',\n auth: apiKey,\n });\n\n this.logger.info('YouTube integration initialized');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'search':\n data = await this.executeWithRetry(() => this.search(params));\n break;\n case 'getVideo':\n data = await this.executeWithRetry(() => this.getVideo(params));\n break;\n case 'getChannel':\n data = await this.executeWithRetry(() => this.getChannel(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async search(params: IntegrationParams) {\n const { query, maxResults, type } = params;\n\n this.logger.debug('Searching YouTube', { query: String(query ?? ''), maxResults: Number(maxResults ?? 10), type: String(type ?? '') });\n\n const response = await this.client.search.list({\n part: ['snippet'],\n q: query as string,\n maxResults: (maxResults as number) || 10,\n type: type ? [type as string] : undefined,\n });\n\n return response.data.items?.map((item) => ({\n videoId: item.id?.videoId,\n title: item.snippet?.title,\n thumbnail: item.snippet?.thumbnails?.default?.url,\n description: item.snippet?.description,\n }));\n }\n\n private async getVideo(params: IntegrationParams) {\n const { videoId } = params;\n\n this.logger.debug('Getting video details', { videoId: String(videoId ?? '') });\n\n const response = await this.client.videos.list({\n part: ['snippet', 'statistics'],\n id: [videoId as string],\n });\n\n const video = response.data.items?.[0];\n if (!video) {\n throw new Error(`Video not found: ${videoId}`);\n }\n\n return {\n title: video.snippet?.title,\n description: video.snippet?.description,\n viewCount: video.statistics?.viewCount,\n likeCount: video.statistics?.likeCount,\n };\n }\n\n private async getChannel(params: IntegrationParams) {\n const { channelId } = params;\n\n this.logger.debug('Getting channel details', { channelId: String(channelId ?? '') });\n\n const response = await this.client.channels.list({\n part: ['snippet', 'statistics'],\n id: [channelId as string],\n });\n\n const channel = response.data.items?.[0];\n if (!channel) {\n throw new Error(`Channel not found: ${channelId}`);\n }\n\n return {\n name: channel.snippet?.title,\n description: channel.snippet?.description,\n subscriberCount: channel.statistics?.subscriberCount,\n };\n }\n}\n\n// Auto-register\nregisterIntegration('youtube', YouTubeIntegration);\n","import twilio from 'twilio';\nimport type { Twilio } from 'twilio';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * Twilio messaging integration\n */\nexport class TwilioIntegration extends BaseIntegration {\n private client: Twilio;\n private phoneNumber: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const accountSid = config.env.TWILIO_ACCOUNT_SID;\n const authToken = config.env.TWILIO_AUTH_TOKEN;\n this.phoneNumber = config.env.TWILIO_PHONE_NUMBER || '';\n\n if (!accountSid || !authToken) {\n throw new Error('TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN not configured');\n }\n\n this.client = twilio(accountSid, authToken);\n\n this.logger.info('Twilio integration initialized');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'sendSMS':\n data = await this.executeWithRetry(() => this.sendSMS(params));\n break;\n case 'sendWhatsApp':\n data = await this.executeWithRetry(() => this.sendWhatsApp(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async sendSMS(params: IntegrationParams) {\n const { to, body } = params;\n\n this.logger.debug('Sending SMS', { to: String(to ?? '') });\n\n const message = await this.client.messages.create({\n from: this.phoneNumber,\n to: to as string,\n body: body as string,\n });\n\n return {\n sid: message.sid,\n status: message.status,\n };\n }\n\n private async sendWhatsApp(params: IntegrationParams) {\n const { to, body } = params;\n\n this.logger.debug('Sending WhatsApp message', { to: String(to ?? '') });\n\n const message = await this.client.messages.create({\n from: `whatsapp:${this.phoneNumber}`,\n to: `whatsapp:${to}`,\n body: body as string,\n });\n\n return {\n sid: message.sid,\n status: message.status,\n };\n }\n}\n\n// Auto-register\nregisterIntegration('twilio', TwilioIntegration);\n","import sgMail from '@sendgrid/mail';\nimport { Resend } from 'resend';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\ntype EmailProvider = 'sendgrid' | 'resend';\n\n/**\n * Email integration (SendGrid/Resend)\n */\nexport class EmailIntegration extends BaseIntegration {\n private provider: EmailProvider;\n private fromEmail: string;\n private resendClient?: Resend;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.provider = (config.env.PROVIDER as EmailProvider) || 'sendgrid';\n this.fromEmail = config.env.FROM_EMAIL || 'noreply@example.com';\n\n if (this.provider === 'sendgrid') {\n const apiKey = config.env.SENDGRID_API_KEY;\n if (!apiKey) {\n throw new Error('SENDGRID_API_KEY not configured');\n }\n sgMail.setApiKey(apiKey);\n } else if (this.provider === 'resend') {\n const apiKey = config.env.RESEND_API_KEY;\n if (!apiKey) {\n throw new Error('RESEND_API_KEY not configured');\n }\n this.resendClient = new Resend(apiKey);\n }\n\n this.logger.info(`Email integration initialized (${this.provider})`);\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'send':\n data = await this.executeWithRetry(() => this.send(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async send(params: IntegrationParams) {\n const { to, subject, body, from } = params;\n\n this.logger.debug('Sending email', { to: String(to), subject: String(subject), provider: this.provider });\n\n if (this.provider === 'sendgrid') {\n return await this.sendViaSendGrid(\n to as string,\n subject as string,\n body as string,\n (from as string) || this.fromEmail,\n );\n } else if (this.provider === 'resend') {\n return await this.sendViaResend(\n to as string,\n subject as string,\n body as string,\n (from as string) || this.fromEmail,\n );\n }\n\n throw new Error(`Unknown email provider: ${this.provider}`);\n }\n\n private async sendViaSendGrid(\n to: string,\n subject: string,\n body: string,\n from: string,\n ) {\n const msg = {\n to,\n from,\n subject,\n html: body,\n };\n\n const response = await sgMail.send(msg);\n\n return {\n id: response[0].headers['x-message-id'],\n status: 'sent',\n };\n }\n\n private async sendViaResend(\n to: string,\n subject: string,\n body: string,\n from: string,\n ) {\n if (!this.resendClient) {\n throw new Error('Resend client not initialized');\n }\n\n const response = await this.resendClient.emails.send({\n from,\n to,\n subject,\n html: body,\n });\n\n return {\n id: response.data?.id,\n status: 'sent',\n };\n }\n}\n\n// Auto-register\nregisterIntegration('email', EmailIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport {\n LLMClient,\n EmbeddingClient,\n getAvailableProvider,\n type LLMCallOptions,\n type LLMProvider,\n} from '@almadar/llm';\nimport { z } from 'zod';\n\n/**\n * LLM integration using @almadar/llm\n *\n * Provides 5 actions:\n * - generate: Generate text content from a prompt\n * - classify: Classify text into predefined categories\n * - extract: Extract structured data from text using a schema\n * - summarize: Summarize long text content\n * - embed: Generate embeddings for an array of texts\n */\nexport class LLMIntegration extends BaseIntegration {\n private client: LLMClient | null = null;\n private embeddings: EmbeddingClient | null = null;\n private provider: LLMProvider;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n // Determine provider from config or auto-detect from available API keys\n const configuredProvider = config.env.PROVIDER as LLMProvider | undefined;\n this.provider = configuredProvider || getAvailableProvider() || 'anthropic';\n\n this.logger.info(`LLM integration initialized (provider: ${this.provider})`);\n }\n\n /**\n * Lazily create client — avoids throwing on construction if API key is missing.\n * The client will throw a clear error when actually used without a key.\n */\n private getClient(): LLMClient {\n if (!this.client) {\n this.client = new LLMClient({\n provider: this.provider,\n temperature: 0.7,\n trackTokens: true,\n });\n }\n return this.client;\n }\n\n /**\n * Lazily create the embeddings client. Embeddings route through a dedicated\n * embedding model (default OpenRouter `baai/bge-base-en-v1.5`, matching\n * `@almadar/curation-core`), independent of the chat provider/key, because\n * most chat providers do not expose an embeddings endpoint. Override via\n * `EMBEDDING_PROVIDER` / `EMBEDDING_MODEL` / `EMBEDDING_API_KEY`.\n */\n private getEmbeddings(): EmbeddingClient {\n if (!this.embeddings) {\n this.embeddings = new EmbeddingClient({\n provider: (this.config.env.EMBEDDING_PROVIDER as 'openai' | 'openrouter') ?? 'openrouter',\n model: this.config.env.EMBEDDING_MODEL ?? 'baai/bge-base-en-v1.5',\n apiKey: this.config.env.EMBEDDING_API_KEY,\n });\n }\n return this.embeddings;\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'generate':\n data = await this.executeWithRetry(() => this.generate(params));\n break;\n case 'classify':\n data = await this.executeWithRetry(() => this.classify(params));\n break;\n case 'extract':\n data = await this.executeWithRetry(() => this.extract(params));\n break;\n case 'summarize':\n data = await this.executeWithRetry(() => this.summarize(params));\n break;\n case 'embed':\n data = await this.executeWithRetry(() => this.embed(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async generate(params: IntegrationParams) {\n const {\n systemPrompt,\n userPrompt,\n model,\n temperature,\n maxTokens,\n } = params as {\n systemPrompt?: string;\n userPrompt: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n };\n\n this.logger.debug('Generating content', { model, temperature });\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: temperature ?? 0.7 })\n : this.getClient();\n\n const response = await client.callWithMetadata<string>({\n systemPrompt: systemPrompt || 'You are a helpful assistant.',\n userPrompt,\n maxTokens: maxTokens ?? 1024,\n temperature,\n skipSchemaValidation: true,\n });\n\n return {\n content: response.data,\n usage: response.usage\n ? {\n promptTokens: response.usage.promptTokens,\n completionTokens: response.usage.completionTokens,\n totalTokens: response.usage.totalTokens,\n }\n : { tokens: 0 },\n };\n }\n\n private async classify(params: IntegrationParams) {\n const { text, categories, model } = params as {\n text: string;\n categories: string[];\n model?: string;\n };\n\n this.logger.debug('Classifying text', { categories: categories.join(', ') });\n\n const ClassificationSchema = z.object({\n category: z.enum(categories as [string, ...string[]]),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n });\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: 0.1 })\n : this.getClient();\n\n const result = await client.call({\n systemPrompt: `You are a text classifier. Classify the given text into one of these categories: ${categories.join(', ')}. Return JSON with: category, confidence (0-1), and reasoning.`,\n userPrompt: text,\n schema: ClassificationSchema,\n temperature: 0.1,\n });\n\n return result;\n }\n\n private async extract(params: IntegrationParams) {\n const { text, schema, model } = params as {\n text: string;\n schema: IntegrationParams;\n model?: string;\n };\n\n this.logger.debug('Extracting structured data', { schema: String(schema ?? '') });\n\n // Build a Zod schema from the JSON schema description.\n // For complex schemas, we use z.record to accept any shape and let the LLM\n // follow the schema description in the prompt.\n const ExtractSchema = z.record(z.unknown());\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: 0.2 })\n : this.getClient();\n\n const schemaDescription = JSON.stringify(schema, null, 2);\n\n const result = await client.call({\n systemPrompt: `You are a structured data extractor. Extract data from the given text according to this schema:\\n\\n${schemaDescription}\\n\\nReturn ONLY valid JSON matching the schema.`,\n userPrompt: text,\n schema: ExtractSchema,\n temperature: 0.2,\n skipSchemaValidation: true,\n });\n\n return result;\n }\n\n private async summarize(params: IntegrationParams) {\n const { text, maxLength, style, model } = params as {\n text: string;\n maxLength?: number;\n style?: string;\n model?: string;\n };\n\n this.logger.debug('Summarizing text', { maxLength, style });\n\n const SummarySchema = z.object({\n summary: z.string(),\n keyPoints: z.array(z.string()),\n });\n\n const styleInstructions = style === 'bullet'\n ? 'Use bullet points.'\n : style === 'detailed'\n ? 'Be thorough and detailed.'\n : 'Be concise.';\n\n const lengthInstructions = maxLength\n ? `Keep the summary under ${maxLength} words.`\n : '';\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: 0.3 })\n : this.getClient();\n\n const result = await client.call({\n systemPrompt: `You are a text summarizer. ${styleInstructions} ${lengthInstructions} Return JSON with: summary (string) and keyPoints (array of strings).`,\n userPrompt: text,\n schema: SummarySchema,\n temperature: 0.3,\n });\n\n return result;\n }\n\n private async embed(params: IntegrationParams) {\n const { texts } = params as { texts: string[] };\n\n if (!Array.isArray(texts)) {\n throw new Error('llm.embed: `texts` must be an array of strings');\n }\n\n this.logger.debug('Embedding texts', { count: texts.length });\n\n const batch = await this.getEmbeddings().embedBatch(texts);\n return { embeddings: batch.embeddings };\n }\n}\n\n// Auto-register\nregisterIntegration('llm', LLMIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport { IntegrationError } from '../../types';\nimport type { IntegrationConfig, IntegrationResult, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport type { ServiceParams, ServiceParamsValue } from '@almadar/core';\n\n/**\n * ML integration — model inference via a deployed serving orbital.\n *\n * The serving orbital is a separate compiled app (Python/PyTorch) with no\n * dedicated inference route; it is reached through the generic per-trait\n * event endpoint every compiled Almadar app exposes: `POST\n * /api/<kebab-trait>/events`. This integration posts an `INFER` event and\n * reads the prediction back out of the returned `effectResults` — the\n * `emit` effect result whose `data.event` matches `INFERRED_EVENT`.\n *\n * Provides 1 action:\n * - infer: Run inference against a deployed model checkpoint\n */\n\n/** Success/failure event names the serving orbital's `INFER` transition emits — mirrors `std-ml-infer`'s own emit vocabulary. */\nconst INFERRED_EVENT = 'INFERRED';\nconst INFER_FAILED_EVENT = 'INFER_FAILED';\n\nconst DEFAULT_TIMEOUT_MS = 60_000; // masar scales to zero — cold starts run long.\n\ninterface MLEffectResult {\n effect: string;\n action?: string;\n entityType?: string;\n data?: ServiceParamsValue;\n success: boolean;\n error?: string;\n}\n\ninterface MLEventsResponse {\n success: boolean;\n newState?: string;\n data?: Record<string, ServiceParamsValue>;\n effectResults?: MLEffectResult[];\n error?: string;\n}\n\ninterface InferResult {\n output: ServiceParamsValue;\n confidence: number;\n violations: readonly ServiceParamsValue[];\n}\n\nfunction isServiceParams(value: ServiceParamsValue | undefined): value is ServiceParams {\n return typeof value === 'object' && value !== null && !Array.isArray(value) && !(value instanceof Date);\n}\n\n/**\n * Find the `INFERRED` emit result in the serving orbital's `effectResults`\n * and pull `{ output, confidence, violations }` out of its payload. Returns\n * `null` on any shape mismatch — the caller turns that into a typed failure,\n * never a fabricated result.\n */\nfunction extractInferResult(response: MLEventsResponse): InferResult | null {\n const emitted = (response.effectResults ?? []).find(\n (result) => result.effect === 'emit' && result.success && isServiceParams(result.data) && result.data.event === INFERRED_EVENT,\n );\n if (!emitted || !isServiceParams(emitted.data)) {\n return null;\n }\n\n const payload = emitted.data.payload;\n if (!isServiceParams(payload)) {\n return null;\n }\n\n if (!('output' in payload) || typeof payload.confidence !== 'number' || !Array.isArray(payload.violations)) {\n return null;\n }\n\n return {\n output: payload.output,\n confidence: payload.confidence,\n violations: payload.violations,\n };\n}\n\nexport class MLIntegration extends BaseIntegration {\n private readonly eventsUrl: string;\n private readonly timeoutMs: number;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const baseUrl = config.env.MASAR_URL;\n const traitPrefix = config.env.MASAR_ML_TRAIT;\n if (!baseUrl || !traitPrefix) {\n throw new Error(\n 'ML integration requires MASAR_URL (serving orbital host) and MASAR_ML_TRAIT (kebab-case trait name of its /events route) to be configured',\n );\n }\n\n this.eventsUrl = `${baseUrl.replace(/\\/+$/, '')}/api/${traitPrefix}/events`;\n this.timeoutMs = config.env.MASAR_ML_TIMEOUT_MS ? Number(config.env.MASAR_ML_TIMEOUT_MS) : DEFAULT_TIMEOUT_MS;\n\n this.logger.info('ML integration initialized', { eventsUrl: this.eventsUrl });\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'infer':\n data = await this.executeWithRetry(() => this.infer(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async infer(params: IntegrationParams): Promise<InferResult> {\n const { model, input } = params as { model: string; input: ServiceParamsValue };\n\n this.logger.debug('Running ML inference', { model });\n\n const response = await this.postEvent(model, input);\n\n if (!response.success) {\n throw new IntegrationError(\n `ML service reported failure: ${response.error ?? 'unknown error'}`,\n 'SERVICE_ERROR',\n { model, response },\n );\n }\n\n const failed = (response.effectResults ?? []).find(\n (result) => result.effect === 'emit' && isServiceParams(result.data) && result.data.event === INFER_FAILED_EVENT,\n );\n if (failed) {\n throw new IntegrationError(\n `ML service could not infer: ${failed.error ?? 'model unavailable'}`,\n 'SERVICE_ERROR',\n { model, response },\n );\n }\n\n const inferred = extractInferResult(response);\n if (!inferred) {\n throw new IntegrationError(\n 'ML service response did not include a valid inference result',\n 'SERVICE_ERROR',\n { model, response },\n );\n }\n\n return inferred;\n }\n\n private async postEvent(model: string, input: ServiceParamsValue): Promise<MLEventsResponse> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let httpResponse: Response;\n try {\n httpResponse = await fetch(this.eventsUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ event: 'INFER', payload: { model, input } }),\n signal: controller.signal,\n });\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new IntegrationError(\n `ML service request timed out after ${this.timeoutMs}ms (model may be cold-starting)`,\n 'TIMEOUT_ERROR',\n { model, eventsUrl: this.eventsUrl },\n );\n }\n throw new IntegrationError(\n `ML service request failed: ${error instanceof Error ? error.message : String(error)}`,\n 'NETWORK_ERROR',\n { model, eventsUrl: this.eventsUrl },\n );\n } finally {\n clearTimeout(timer);\n }\n\n if (!httpResponse.ok) {\n const body = await httpResponse.text().catch(() => '');\n throw new IntegrationError(\n `ML service responded with status ${httpResponse.status}`,\n 'SERVICE_ERROR',\n { model, status: httpResponse.status, body },\n );\n }\n\n try {\n return (await httpResponse.json()) as MLEventsResponse;\n } catch (error) {\n throw new IntegrationError(\n `ML service returned a malformed response body: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { model },\n );\n }\n }\n}\n\n// Auto-register\nregisterIntegration('ml', MLIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * DeepAgent integration for AI code generation\n */\nexport class DeepAgentIntegration extends BaseIntegration {\n private apiUrl: string;\n private apiKey: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.apiUrl = config.env.DEEPAGENT_API_URL || 'http://localhost:3000';\n this.apiKey = config.env.DEEPAGENT_API_KEY || '';\n\n this.logger.info('DeepAgent integration initialized', { apiUrl: this.apiUrl });\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'sendMessage':\n data = await this.executeWithRetry(() => this.sendMessage(params));\n break;\n case 'cancelGeneration':\n data = await this.executeWithRetry(() =>\n this.cancelGeneration(params),\n );\n break;\n case 'validateSchema':\n data = await this.executeWithRetry(() => this.validateSchema(params));\n break;\n case 'compileSchema':\n data = await this.executeWithRetry(() => this.compileSchema(params));\n break;\n case 'getThreadHistory':\n data = await this.executeWithRetry(() =>\n this.getThreadHistory(params),\n );\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async sendMessage(params: IntegrationParams) {\n const { message, threadId, skill, context } = params;\n\n this.logger.debug('Sending message to DeepAgent', { threadId: String(threadId ?? ''), skill: String(skill ?? '') });\n\n const response = await this.request('/api/agent/message', {\n message,\n threadId,\n skill,\n context,\n });\n\n return response;\n }\n\n private async cancelGeneration(params: IntegrationParams) {\n const { threadId } = params;\n\n this.logger.debug('Cancelling generation', { threadId: String(threadId ?? '') });\n\n const response = await this.request('/api/agent/cancel', {\n threadId,\n });\n\n return response;\n }\n\n private async validateSchema(params: IntegrationParams) {\n const { schema } = params;\n\n this.logger.debug('Validating schema');\n\n const response = await this.request('/api/schema/validate', {\n schema,\n });\n\n return response;\n }\n\n private async compileSchema(params: IntegrationParams) {\n const { schema, shell } = params;\n\n this.logger.debug('Compiling schema', { shell: String(shell ?? '') });\n\n const response = await this.request('/api/schema/compile', {\n schema,\n shell,\n });\n\n return response;\n }\n\n private async getThreadHistory(params: IntegrationParams) {\n const { threadId } = params;\n\n this.logger.debug('Getting thread history', { threadId: String(threadId ?? '') });\n\n const response = await this.request('/api/agent/history', {\n threadId,\n });\n\n return response;\n }\n\n private async request(endpoint: string, body: IntegrationParams) {\n const url = `${this.apiUrl}${endpoint}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new Error(\n `DeepAgent request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n return await response.json();\n }\n}\n\n// Auto-register\nregisterIntegration('deepagent', DeepAgentIntegration);\n","/**\n * Git CLI operations for GitHub integration\n */\n\nimport { spawn } from 'child_process';\nimport { promises as fs } from 'fs';\nimport { join } from 'path';\nimport { IntegrationError } from '../../types';\nimport type {\n GitHubCloneParams,\n GitHubCreateBranchParams,\n GitHubCommitParams,\n GitHubPushParams,\n GitHubInitParams,\n GitHubPullParams,\n GitHubPullResult,\n GitHubAddRemoteParams,\n GitHubSetUserConfigParams,\n GitHubRenameBranchParams,\n} from './types';\nimport type { GitHubCommit } from './github-api';\n\n/**\n * Execute a git command\n */\nasync function execGit(\n args: string[],\n cwd: string,\n env?: Record<string, string>\n): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const proc = spawn('git', args, {\n cwd,\n env: { ...process.env, ...env },\n stdio: 'pipe',\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve({ stdout, stderr });\n } else {\n reject(\n new IntegrationError(\n `Git command failed: ${args.join(' ')}\\n${stderr}`,\n 'SERVICE_ERROR',\n { code, stderr }\n )\n );\n }\n });\n\n proc.on('error', (error) => {\n reject(\n new IntegrationError(\n `Failed to execute git: ${error.message}`,\n 'SERVICE_ERROR',\n { error }\n )\n );\n });\n });\n}\n\n/**\n * Clone a repository\n */\nexport async function cloneRepo(\n params: GitHubCloneParams,\n token: string\n): Promise<void> {\n const { repoUrl, targetDir, branch, depth = 1 } = params;\n\n // Inject token into URL for authentication\n const authUrl = injectTokenIntoUrl(repoUrl, token);\n\n const args = ['clone'];\n\n if (depth > 0) {\n args.push('--depth', depth.toString());\n }\n\n if (branch) {\n args.push('--branch', branch);\n }\n\n args.push(authUrl, targetDir);\n\n try {\n await execGit(args, process.cwd());\n\n // Immediately scrub the token from git config\n await scrubTokenFromRemote(targetDir, repoUrl);\n } catch (error) {\n throw new IntegrationError(\n `Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { repoUrl, error }\n );\n }\n}\n\n/**\n * Create a new branch\n */\nexport async function createBranch(\n params: GitHubCreateBranchParams,\n workDir: string\n): Promise<void> {\n const { branchName, baseBranch } = params;\n const cwd = params.workDir || workDir;\n\n try {\n // If baseBranch is specified, check it out first\n if (baseBranch) {\n await execGit(['checkout', baseBranch], cwd);\n }\n\n // Create and checkout new branch\n await execGit(['checkout', '-b', branchName], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to create branch: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { branchName, baseBranch, error }\n );\n }\n}\n\n/**\n * Commit changes\n */\nexport async function commit(\n params: GitHubCommitParams,\n workDir: string\n): Promise<void> {\n const { message, files } = params;\n const cwd = params.workDir || workDir;\n\n try {\n // Stage files\n if (files && files.length > 0) {\n await execGit(['add', ...files], cwd);\n } else {\n // Stage all changes\n await execGit(['add', '.'], cwd);\n }\n\n // Commit\n await execGit(['commit', '-m', message], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to commit: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { message, error }\n );\n }\n}\n\n/**\n * Push branch to remote\n */\nexport async function push(\n params: GitHubPushParams,\n workDir: string,\n token: string\n): Promise<void> {\n const { branchName, force = false } = params;\n const cwd = params.workDir || workDir;\n\n // Security: Never allow force push to protected branches\n const protectedBranches = ['main', 'master', 'production', 'prod'];\n if (force && protectedBranches.includes(branchName.toLowerCase())) {\n throw new IntegrationError(\n `Force push to protected branch '${branchName}' is not allowed`,\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // Create a temporary credential helper script\n const credHelper = await createTempCredentialHelper(token);\n\n const args = ['push'];\n\n if (force) {\n args.push('--force');\n }\n\n args.push('-u', 'origin', branchName);\n\n // Use GIT_ASKPASS for authentication\n await execGit(args, cwd, {\n GIT_ASKPASS: credHelper,\n GIT_TERMINAL_PROMPT: '0',\n });\n\n // Clean up credential helper\n await fs.unlink(credHelper);\n } catch (error) {\n throw new IntegrationError(\n `Failed to push: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { branchName, error }\n );\n }\n}\n\n/**\n * Inject token into repository URL for authentication\n */\nfunction injectTokenIntoUrl(repoUrl: string, token: string): string {\n const url = new URL(repoUrl);\n url.username = 'x-access-token';\n url.password = token;\n return url.toString();\n}\n\n/**\n * Remove token from git remote URL (security measure)\n */\nasync function scrubTokenFromRemote(workDir: string, originalUrl: string): Promise<void> {\n try {\n // Parse the URL to ensure it's clean (no credentials)\n const url = new URL(originalUrl);\n url.username = '';\n url.password = '';\n const cleanUrl = url.toString();\n\n await execGit(['remote', 'set-url', 'origin', cleanUrl], workDir);\n } catch (error) {\n // Log but don't fail - the clone succeeded\n console.error('Warning: Failed to scrub token from remote URL:', error);\n }\n}\n\n/**\n * Create a temporary credential helper script for GIT_ASKPASS\n */\nasync function createTempCredentialHelper(token: string): Promise<string> {\n const tmpDir = process.env.TMPDIR || '/tmp';\n const helperPath = join(tmpDir, `git-cred-${Date.now()}.sh`);\n\n const script = `#!/bin/sh\\necho \"${token}\"`;\n\n await fs.writeFile(helperPath, script, { mode: 0o700 });\n\n return helperPath;\n}\n\n/**\n * Get current branch name\n */\nexport async function getCurrentBranch(workDir: string): Promise<string> {\n try {\n const { stdout } = await execGit(['branch', '--show-current'], workDir);\n return stdout.trim();\n } catch (error) {\n throw new IntegrationError(\n `Failed to get current branch: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Check if working directory has uncommitted changes\n */\nexport async function hasUncommittedChanges(workDir: string): Promise<boolean> {\n try {\n const { stdout } = await execGit(['status', '--porcelain'], workDir);\n return stdout.trim().length > 0;\n } catch (error) {\n throw new IntegrationError(\n `Failed to check git status: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Initialize a git repository in `workDir`. No-op when `.git/` already\n * exists. The default initial branch is `main` to match what GitHub\n * creates for new repos.\n */\nexport async function init(params: GitHubInitParams): Promise<void> {\n const { workDir, initialBranch = 'main' } = params;\n try {\n // `git init -b <branch>` works on git >= 2.28; the runtime ships 2.x.\n // The command is idempotent — re-running on an existing repo just\n // re-asserts the initial branch ref (no error).\n await execGit(['init', '-b', initialBranch], workDir);\n } catch (error) {\n throw new IntegrationError(\n `Failed to git init: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { workDir, error }\n );\n }\n}\n\n/**\n * Add a remote to the repository. Used after `init` to attach the\n * freshly-created GitHub remote as `origin`.\n */\nexport async function addRemote(params: GitHubAddRemoteParams): Promise<void> {\n const { name, url, workDir } = params;\n const cwd = workDir || params.workDir;\n if (!cwd) {\n throw new IntegrationError(\n `addRemote requires workDir`,\n 'VALIDATION_ERROR',\n { params }\n );\n }\n try {\n await execGit(['remote', 'add', name, url], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to add remote ${name}: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { name, error }\n );\n }\n}\n\n/**\n * Set `user.name` and `user.email` for git commits. Scope defaults to\n * per-repo (`--local`) so each workspace can carry the GitHub identity\n * of the user who owns it — global config would clobber the developer's\n * own machine settings.\n */\nexport async function setUserConfig(params: GitHubSetUserConfigParams): Promise<void> {\n const { userName, userEmail, scope = 'local', workDir } = params;\n const scopeFlag = scope === 'global' ? '--global' : '--local';\n if (scope === 'local' && !workDir) {\n throw new IntegrationError(\n `setUserConfig with scope='local' requires workDir`,\n 'VALIDATION_ERROR',\n { params }\n );\n }\n const cwd = workDir ?? process.cwd();\n try {\n await execGit(['config', scopeFlag, 'user.name', userName], cwd);\n await execGit(['config', scopeFlag, 'user.email', userEmail], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to set git user config: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Pull from the remote. Returns a structured outcome so callers can\n * tell \"the workspace advanced\" from \"nothing changed because <X>\"\n * without parsing git's stderr. Best-effort posture: network / conflict\n * / no-upstream all resolve cleanly rather than throwing — the caller\n * decides whether to surface the no-op as user-facing.\n */\nexport async function pull(\n params: GitHubPullParams,\n token: string,\n): Promise<GitHubPullResult> {\n const { branchName, ffOnly = true, workDir } = params;\n const cwd = workDir || params.workDir;\n if (!cwd) {\n return { updated: false, reason: 'no-upstream' };\n }\n\n let credHelper: string | null = null;\n try {\n credHelper = await createTempCredentialHelper(token);\n const args = ['pull'];\n if (ffOnly) args.push('--ff-only');\n args.push('origin', branchName);\n\n const { stdout } = await execGit(args, cwd, {\n GIT_ASKPASS: credHelper,\n GIT_TERMINAL_PROMPT: '0',\n });\n // `git pull` prints \"Already up to date.\" when there's nothing to\n // fetch. Anything else (Updating, Fast-forward, +n -m line) means\n // the working tree actually moved.\n const updated = !/^Already up to date\\.?\\s*$/m.test(stdout.trim());\n return updated ? { updated: true } : { updated: false, reason: 'up-to-date' };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n // Heuristics on git's stderr text — exit codes are too coarse to\n // discriminate the cases.\n if (/no upstream|no such ref|couldn't find remote ref/i.test(message)) {\n return { updated: false, reason: 'no-upstream' };\n }\n if (/conflict|not possible to fast-forward|divergent/i.test(message)) {\n return { updated: false, reason: 'conflict' };\n }\n return { updated: false, reason: 'network' };\n } finally {\n if (credHelper) {\n try { await fs.unlink(credHelper); } catch { /* best-effort */ }\n }\n }\n}\n\n/**\n * Return the current HEAD commit sha (full 40-char). Throws when the\n * workspace has no commits yet (caller decides whether that's an error\n * or an \"init, then commit, then read\" sequencing issue).\n */\nexport async function getHeadSha(workDir: string): Promise<string> {\n try {\n const { stdout } = await execGit(['rev-parse', 'HEAD'], workDir);\n return stdout.trim();\n } catch (error) {\n throw new IntegrationError(\n `Failed to get HEAD sha: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Return the current HEAD commit as a `GitHubCommit` shape. Reuses the\n * canonical type from the REST module (no parallel `LocalCommit`\n * interface). `stats` is absent — that's GitHub-API-only and would\n * require a separate fetch to populate.\n *\n * The format string uses NUL (`%x00`) as a field separator so commit\n * messages containing newlines / pipes can't break parsing.\n */\nexport async function getHeadCommit(workDir: string): Promise<GitHubCommit> {\n try {\n const FORMAT = '%H%x00%an%x00%ae%x00%aI%x00%B';\n const { stdout } = await execGit(\n ['show', '--no-patch', `--format=${FORMAT}`, 'HEAD'],\n workDir,\n );\n const [sha, name, email, date, ...messageParts] = stdout.split('\\x00');\n return {\n sha: sha.trim(),\n message: messageParts.join('\\x00').trimEnd(),\n author: {\n name: name?.trim() ?? '',\n email: email?.trim() ?? '',\n date: date?.trim() ?? '',\n },\n };\n } catch (error) {\n throw new IntegrationError(\n `Failed to read HEAD commit: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Rename the current branch with `git branch -M <newName>`. The `-M`\n * (capital) flag forces the rename even if a branch with that name\n * already exists, which is fine for our use case (aligning a fresh\n * local workspace's branch with the linked repo's default branch).\n */\nexport async function renameCurrentBranch(params: GitHubRenameBranchParams): Promise<void> {\n const { newName, workDir } = params;\n try {\n await execGit(['branch', '-M', newName], workDir);\n } catch (error) {\n throw new IntegrationError(\n `Failed to rename branch to ${newName}: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { newName, error }\n );\n }\n}\n","/**\n * GitHub REST API client\n */\n\nimport { IntegrationError } from '../../types';\nimport type {\n GitHubCreateRepoParams,\n GitHubRepoCreated,\n GitHubCreatePRParams,\n GitHubGetPRCommentsParams,\n GitHubListIssuesParams,\n GitHubGetIssueParams,\n GitHubPullRequest,\n GitHubIssue,\n GitHubComment,\n GitHubRateLimit,\n} from './types';\n\n/**\n * GitHub API client configuration\n */\nexport interface GitHubAPIConfig {\n token: string;\n owner: string;\n repo: string;\n}\n\n/**\n * GitHub API response\n */\ninterface GitHubAPIResponse<T> {\n data: T;\n rateLimit: GitHubRateLimit;\n}\n\n/**\n * Execute a GitHub API request\n */\nasync function githubFetch<T>(\n endpoint: string,\n config: GitHubAPIConfig,\n options: RequestInit = {}\n): Promise<GitHubAPIResponse<T>> {\n const url = `https://api.github.com${endpoint}`;\n\n const headers = {\n 'Authorization': `Bearer ${config.token}`,\n 'Accept': 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n ...options.headers,\n };\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n // Extract rate limit info\n const rateLimit: GitHubRateLimit = {\n remaining: parseInt(response.headers.get('x-ratelimit-remaining') || '0', 10),\n limit: parseInt(response.headers.get('x-ratelimit-limit') || '5000', 10),\n reset: parseInt(response.headers.get('x-ratelimit-reset') || '0', 10),\n };\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: response.statusText }));\n\n // Handle rate limiting\n if (response.status === 429) {\n throw new IntegrationError(\n 'GitHub API rate limit exceeded',\n 'RATE_LIMIT_ERROR',\n { rateLimit, error }\n );\n }\n\n // Handle authentication errors\n if (response.status === 401 || response.status === 403) {\n throw new IntegrationError(\n `GitHub API authentication failed: ${error.message || response.statusText}`,\n 'AUTH_ERROR',\n { status: response.status, error }\n );\n }\n\n throw new IntegrationError(\n `GitHub API request failed: ${error.message || response.statusText}`,\n 'SERVICE_ERROR',\n { status: response.status, error }\n );\n }\n\n const data = await response.json();\n\n return { data, rateLimit };\n } catch (error) {\n if (error instanceof IntegrationError) {\n throw error;\n }\n\n throw new IntegrationError(\n `GitHub API request failed: ${error instanceof Error ? error.message : String(error)}`,\n 'NETWORK_ERROR',\n { error }\n );\n }\n}\n\n/**\n * GAP-104/105: Create a new repository for the authenticated user.\n * The token must have the `repo` scope.\n */\nexport async function createRepo(\n params: GitHubCreateRepoParams,\n token: string,\n): Promise<GitHubRepoCreated> {\n const { name, isPrivate = true, description, autoInit = true } = params;\n\n const response = await fetch('https://api.github.com/user/repos', {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${token}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n body: JSON.stringify({\n name,\n private: isPrivate,\n description: description ?? 'Generated by Almadar Studio',\n auto_init: autoInit,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new IntegrationError(\n `Failed to create GitHub repository \"${name}\": ${response.status} ${err}`,\n 'SERVICE_ERROR',\n { status: response.status },\n );\n }\n\n const repo = await response.json() as {\n clone_url: string;\n owner: { login: string };\n name: string;\n default_branch: string;\n full_name: string;\n };\n\n return {\n repoUrl: repo.clone_url,\n owner: repo.owner.login,\n repo: repo.name,\n defaultBranch: repo.default_branch,\n fullName: repo.full_name,\n };\n}\n\n/**\n * GAP-104/105: List the file tree of a repository using the Git Trees API.\n * Returns a flat list of all files in one request (recursive=1).\n */\nexport async function listRepoTree(\n config: GitHubAPIConfig,\n branch?: string,\n): Promise<Array<{ path: string; type: 'blob' | 'tree'; size?: number }>> {\n const ref = branch ?? 'main';\n const { data } = await githubFetch<{ tree: Array<{ path: string; type: string; size?: number }> }>(\n `/repos/${config.owner}/${config.repo}/git/trees/${ref}?recursive=1`,\n config,\n );\n return data.tree.map(entry => ({\n path: entry.path,\n type: entry.type as 'blob' | 'tree',\n size: entry.size,\n }));\n}\n\n/**\n * GAP-104/105: Read a single file's content from a repository.\n */\nexport async function readRepoFile(\n config: GitHubAPIConfig,\n filePath: string,\n branch?: string,\n): Promise<string | null> {\n const ref = branch ? `?ref=${branch}` : '';\n try {\n const response = await fetch(\n `https://api.github.com/repos/${config.owner}/${config.repo}/contents/${filePath}${ref}`,\n {\n headers: {\n 'Authorization': `Bearer ${config.token}`,\n 'Accept': 'application/vnd.github.raw+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n },\n );\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\n/**\n * Create a pull request\n */\nexport async function createPR(\n params: GitHubCreatePRParams,\n config: GitHubAPIConfig\n): Promise<GitHubPullRequest> {\n const { title, body, baseBranch, headBranch, draft = false } = params;\n\n const endpoint = `/repos/${config.owner}/${config.repo}/pulls`;\n\n const { data } = await githubFetch<GitHubPullRequest>(endpoint, config, {\n method: 'POST',\n body: JSON.stringify({\n title,\n body,\n base: baseBranch,\n head: headBranch,\n draft,\n }),\n });\n\n return data;\n}\n\n/**\n * Get pull request comments\n */\nexport async function getPRComments(\n params: GitHubGetPRCommentsParams,\n config: GitHubAPIConfig\n): Promise<GitHubComment[]> {\n const { prNumber } = params;\n\n const endpoint = `/repos/${config.owner}/${config.repo}/pulls/${prNumber}/comments`;\n\n const { data } = await githubFetch<GitHubComment[]>(endpoint, config);\n\n return data;\n}\n\n/**\n * List repository issues\n */\nexport async function listIssues(\n params: GitHubListIssuesParams,\n config: GitHubAPIConfig\n): Promise<GitHubIssue[]> {\n const { state = 'open', labels = [], limit = 30 } = params;\n\n const queryParams = new URLSearchParams({\n state,\n per_page: Math.min(limit, 100).toString(),\n });\n\n if (labels.length > 0) {\n queryParams.append('labels', labels.join(','));\n }\n\n const endpoint = `/repos/${config.owner}/${config.repo}/issues?${queryParams}`;\n\n const { data } = await githubFetch<GitHubIssue[]>(endpoint, config);\n\n return data;\n}\n\n/**\n * Get issue details\n */\nexport async function getIssue(\n params: GitHubGetIssueParams,\n config: GitHubAPIConfig\n): Promise<{ issue: GitHubIssue; comments: GitHubComment[] }> {\n const { issueNumber } = params;\n\n // Get issue details\n const issueEndpoint = `/repos/${config.owner}/${config.repo}/issues/${issueNumber}`;\n const { data: issue } = await githubFetch<GitHubIssue>(issueEndpoint, config);\n\n // Get issue comments\n const commentsEndpoint = `/repos/${config.owner}/${config.repo}/issues/${issueNumber}/comments`;\n const { data: comments } = await githubFetch<GitHubComment[]>(commentsEndpoint, config);\n\n return { issue, comments };\n}\n\n/**\n * Get current rate limit status\n */\nexport async function getRateLimit(config: GitHubAPIConfig): Promise<GitHubRateLimit> {\n const endpoint = '/rate_limit';\n\n const { data } = await githubFetch<{ rate: GitHubRateLimit }>(endpoint, config);\n\n return data.rate;\n}\n\n// ============================================================================\n// Git History API\n// ============================================================================\n\n/**\n * A commit from the GitHub API with optional stats.\n */\nexport interface GitHubCommit {\n sha: string;\n message: string;\n author: { name: string; email: string; date: string };\n stats?: { additions: number; deletions: number; total: number };\n}\n\n/**\n * List commits for a repository, optionally filtered by file path.\n */\nexport async function listCommits(\n config: GitHubAPIConfig,\n options?: { path?: string; perPage?: number; page?: number },\n): Promise<GitHubCommit[]> {\n const params = new URLSearchParams();\n if (options?.path) params.set('path', options.path);\n if (options?.perPage) params.set('per_page', options.perPage.toString());\n if (options?.page) params.set('page', options.page.toString());\n\n const queryStr = params.toString();\n const endpoint = `/repos/${config.owner}/${config.repo}/commits${queryStr ? `?${queryStr}` : ''}`;\n\n const { data } = await githubFetch<Array<{\n sha: string;\n commit: {\n message: string;\n author: { name: string; email: string; date: string };\n };\n stats?: { additions: number; deletions: number; total: number };\n }>>(endpoint, config);\n\n return data.map((item) => ({\n sha: item.sha,\n message: item.commit.message,\n author: item.commit.author,\n stats: item.stats,\n }));\n}\n\n/**\n * Get the diff for a specific commit as a unified diff string.\n */\nexport async function getCommitDiff(\n config: GitHubAPIConfig,\n sha: string,\n): Promise<string> {\n const url = `https://api.github.com/repos/${config.owner}/${config.repo}/commits/${sha}`;\n\n const response = await fetch(url, {\n headers: {\n Authorization: `Bearer ${config.token}`,\n Accept: 'application/vnd.github.diff',\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n });\n\n if (!response.ok) {\n throw new IntegrationError(\n `GitHub API request failed: ${response.statusText}`,\n 'SERVICE_ERROR',\n { status: response.status },\n );\n }\n\n return response.text();\n}\n\n/**\n * Get a file's content at a specific commit SHA.\n * Returns null if the file doesn't exist at that commit.\n */\nexport async function getFileAtCommit(\n config: GitHubAPIConfig,\n path: string,\n sha: string,\n): Promise<string | null> {\n const endpoint = `/repos/${config.owner}/${config.repo}/contents/${path}?ref=${sha}`;\n\n try {\n const response = await fetch(`https://api.github.com${endpoint}`, {\n headers: {\n Authorization: `Bearer ${config.token}`,\n Accept: 'application/vnd.github.raw+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n });\n\n if (!response.ok) {\n if (response.status === 404) return null;\n throw new Error(`${response.status}: ${response.statusText}`);\n }\n\n return response.text();\n } catch (error) {\n if (error instanceof IntegrationError) throw error;\n throw new IntegrationError(\n `Failed to get file at commit: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { path, sha, error },\n );\n }\n}\n\n/**\n * Parse repository owner and name from URL\n */\nexport function parseRepoUrl(repoUrl: string): { owner: string; repo: string } {\n try {\n const url = new URL(repoUrl);\n const pathParts = url.pathname.split('/').filter(Boolean);\n\n if (pathParts.length < 2) {\n throw new Error('Invalid repository URL format');\n }\n\n const owner = pathParts[0];\n const repo = pathParts[1].replace(/\\.git$/, '');\n\n return { owner, repo };\n } catch (error) {\n throw new IntegrationError(\n `Failed to parse repository URL: ${repoUrl}`,\n 'VALIDATION_ERROR',\n { error }\n );\n }\n}\n","/**\n * GitHub Integration for Almadar\n * Provides git operations and GitHub API access for the agent\n */\n\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport * as GitOps from './github-git';\nimport * as GitHubAPI from './github-api';\nimport type {\n GitHubCloneParams,\n GitHubCreateBranchParams,\n GitHubCommitParams,\n GitHubPushParams,\n GitHubCreatePRParams,\n GitHubGetPRCommentsParams,\n GitHubListIssuesParams,\n GitHubGetIssueParams,\n} from './types';\n\n/**\n * GitHub integration class\n */\nexport class GitHubIntegration extends BaseIntegration {\n private token: string;\n private owner: string;\n private repo: string;\n private workDir: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.token = config.env.GITHUB_TOKEN;\n if (!this.token) {\n throw new Error('GITHUB_TOKEN not configured');\n }\n\n this.owner = config.env.GITHUB_OWNER || '';\n this.repo = config.env.GITHUB_REPO || '';\n this.workDir = config.env.GITHUB_WORK_DIR || process.cwd();\n\n this.logger.info('GitHub integration initialized', {\n owner: this.owner,\n repo: this.repo,\n });\n }\n\n /**\n * Execute a GitHub action\n */\n async execute(\n action: string,\n params: IntegrationParams\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'cloneRepo':\n data = await this.executeWithRetry(() =>\n this.cloneRepo(params as GitHubCloneParams)\n );\n break;\n\n case 'createBranch':\n data = await this.executeWithRetry(() =>\n this.createBranch(params as GitHubCreateBranchParams)\n );\n break;\n\n case 'commit':\n data = await this.executeWithRetry(() =>\n this.commit(params as GitHubCommitParams)\n );\n break;\n\n case 'push':\n data = await this.executeWithRetry(() =>\n this.push(params as GitHubPushParams)\n );\n break;\n\n case 'createPR':\n data = await this.executeWithRetry(() =>\n this.createPR(params as GitHubCreatePRParams)\n );\n break;\n\n case 'getPRComments':\n data = await this.executeWithRetry(() =>\n this.getPRComments(params as GitHubGetPRCommentsParams)\n );\n break;\n\n case 'listIssues':\n data = await this.executeWithRetry(() =>\n this.listIssues(params as GitHubListIssuesParams)\n );\n break;\n\n case 'getIssue':\n data = await this.executeWithRetry(() =>\n this.getIssue(params as GitHubGetIssueParams)\n );\n break;\n\n default:\n throw new Error(`Unknown GitHub action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n /**\n * Clone a repository\n */\n private async cloneRepo(params: GitHubCloneParams): Promise<{ message: string }> {\n this.logger.debug('Cloning repository', { repoUrl: params.repoUrl });\n\n // If owner/repo not set, parse from URL\n if (!this.owner || !this.repo) {\n const parsed = GitHubAPI.parseRepoUrl(params.repoUrl);\n this.owner = parsed.owner;\n this.repo = parsed.repo;\n }\n\n await GitOps.cloneRepo(params, this.token);\n\n return {\n message: `Successfully cloned ${params.repoUrl} to ${params.targetDir}`,\n };\n }\n\n /**\n * Create a branch\n */\n private async createBranch(params: GitHubCreateBranchParams): Promise<{ message: string }> {\n this.logger.debug('Creating branch', { branchName: params.branchName });\n\n await GitOps.createBranch(params, this.workDir);\n\n return {\n message: `Successfully created branch: ${params.branchName}`,\n };\n }\n\n /**\n * Commit changes\n */\n private async commit(params: GitHubCommitParams): Promise<{ message: string }> {\n this.logger.debug('Committing changes', { message: params.message });\n\n await GitOps.commit(params, this.workDir);\n\n return {\n message: `Successfully committed changes: ${params.message}`,\n };\n }\n\n /**\n * Push branch\n */\n private async push(params: GitHubPushParams): Promise<{ message: string }> {\n this.logger.debug('Pushing branch', { branchName: params.branchName });\n\n await GitOps.push(params, this.workDir, this.token);\n\n return {\n message: `Successfully pushed branch: ${params.branchName}`,\n };\n }\n\n /**\n * Create a pull request\n */\n private async createPR(params: GitHubCreatePRParams) {\n this.logger.debug('Creating pull request', { title: params.title });\n\n const apiConfig = this.getAPIConfig();\n const pr = await GitHubAPI.createPR(params, apiConfig);\n\n this.logger.info('Pull request created', { number: pr.number, url: pr.url });\n\n return pr;\n }\n\n /**\n * Get PR comments\n */\n private async getPRComments(params: GitHubGetPRCommentsParams) {\n this.logger.debug('Getting PR comments', { prNumber: params.prNumber });\n\n const apiConfig = this.getAPIConfig();\n const comments = await GitHubAPI.getPRComments(params, apiConfig);\n\n return { comments };\n }\n\n /**\n * List issues\n */\n private async listIssues(params: GitHubListIssuesParams) {\n this.logger.debug('Listing issues', { state: params.state, labels: params.labels?.join(', '), limit: params.limit });\n\n const apiConfig = this.getAPIConfig();\n const issues = await GitHubAPI.listIssues(params, apiConfig);\n\n return { issues };\n }\n\n /**\n * Get issue details\n */\n private async getIssue(params: GitHubGetIssueParams) {\n this.logger.debug('Getting issue', { issueNumber: params.issueNumber });\n\n const apiConfig = this.getAPIConfig();\n const result = await GitHubAPI.getIssue(params, apiConfig);\n\n return result;\n }\n\n /**\n * Get API config for GitHub API calls\n */\n private getAPIConfig(): GitHubAPI.GitHubAPIConfig {\n if (!this.owner || !this.repo) {\n throw new Error(\n 'GitHub owner and repo must be configured. Either set GITHUB_OWNER/GITHUB_REPO or clone a repository first.'\n );\n }\n\n return {\n token: this.token,\n owner: this.owner,\n repo: this.repo,\n };\n }\n}\n\n// Auto-register the integration\nregisterIntegration('github', GitHubIntegration);\n\n// Export types\nexport * from './types';\n\n// Export git CLI operations (clone, push, commit, branch)\nexport {\n cloneRepo,\n createBranch,\n commit,\n push,\n getCurrentBranch,\n hasUncommittedChanges,\n init,\n pull,\n addRemote,\n setUserConfig,\n getHeadSha,\n getHeadCommit,\n renameCurrentBranch,\n} from './github-git';\n\n// Export GitHub REST API functions\nexport {\n createRepo,\n listRepoTree,\n readRepoFile,\n createPR,\n getPRComments,\n listIssues,\n getIssue,\n getRateLimit,\n parseRepoUrl,\n listCommits,\n getCommitDiff,\n getFileAtCommit,\n type GitHubAPIConfig,\n type GitHubCommit,\n} from './github-api';\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport { execSync } from 'child_process';\nimport { writeFileSync, mkdtempSync, rmSync } from 'fs';\nimport { join } from 'path';\nimport { tmpdir } from 'os';\n\n/**\n * CLI integration for Almadar CLI commands.\n *\n * Wraps `@almadar/cli` commands (validate, compile) as integration actions.\n * This runs server-side and executes CLI commands as child processes.\n *\n * Actions:\n * - validate: Validate an orbital schema and return structured results\n */\nexport class CLIIntegration extends BaseIntegration {\n constructor(config: IntegrationConfig) {\n super(config);\n this.logger.info('CLI integration initialized');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'validate':\n data = await this.validate(params);\n break;\n default:\n throw new Error(`Unknown CLI action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async validate(params: IntegrationParams) {\n const { schema } = params as { schema: string };\n\n if (!schema || typeof schema !== 'string') {\n throw new Error('validate requires a \"schema\" parameter (string)');\n }\n\n // Create temp directory for the schema file\n const tempDir = mkdtempSync(join(tmpdir(), 'almadar-validate-'));\n const schemaPath = join(tempDir, 'schema.orb');\n\n try {\n // Write schema content to temp file\n writeFileSync(schemaPath, schema, 'utf-8');\n\n this.logger.debug('Validating schema', { path: schemaPath });\n\n // Run CLI validation\n const output = execSync(\n `npx @almadar/cli validate \"${schemaPath}\" --format=json`,\n {\n encoding: 'utf-8',\n timeout: 30000,\n cwd: tempDir,\n stdio: ['pipe', 'pipe', 'pipe'],\n },\n );\n\n // Parse JSON output\n const result = JSON.parse(output.trim());\n\n return {\n valid: result.valid ?? true,\n errors: result.errors || [],\n warnings: result.warnings || [],\n summary: result.summary || '',\n };\n } catch (error: unknown) {\n // CLI may return non-zero exit code for validation failures\n const execError = error as { stdout?: string; stderr?: string; message?: string };\n if (execError.stdout) {\n try {\n const result = JSON.parse(execError.stdout.trim());\n return {\n valid: false,\n errors: result.errors || [],\n warnings: result.warnings || [],\n summary: result.summary || '',\n };\n } catch {\n // stdout wasn't valid JSON, fall through\n }\n }\n\n // Actual execution failure\n throw new Error(\n `CLI validation failed: ${execError.message || String(error)}`,\n );\n } finally {\n // Cleanup temp directory\n try {\n rmSync(tempDir, { recursive: true, force: true });\n } catch {\n // Best-effort cleanup\n }\n }\n }\n}\n\n// Auto-register\nregisterIntegration('cli', CLIIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/** Shape of a stored entry in the in-memory cache */\ninterface CacheEntry {\n value: unknown;\n expiresAt?: number;\n}\n\n/** Callback type for pub/sub subscribers */\ntype SubscriberCallback = (msg: unknown) => void;\n\n/**\n * Redis / Cache integration with in-memory default backend.\n *\n * When `REDIS_URL` is provided in `config.env`, a warning is logged and the\n * integration falls back to the in-memory store (real Redis client support is\n * not yet implemented). When `REDIS_URL` is absent the in-memory store is\n * used silently — this is the expected development mode.\n */\nexport class RedisIntegration extends BaseIntegration {\n private store: Map<string, CacheEntry> = new Map();\n private locks: Map<string, string> = new Map();\n private channels: Map<string, Set<SubscriberCallback>> = new Map();\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const redisUrl = config.env.REDIS_URL;\n if (redisUrl) {\n this.logger.warn(\n 'REDIS_URL is configured but real Redis client is not yet implemented. ' +\n 'Falling back to in-memory store.',\n { redisUrl },\n );\n }\n\n this.logger.info('Redis integration initialized (in-memory backend)');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'get':\n data = await this.executeWithRetry(() => this.getKey(params));\n break;\n case 'set':\n data = await this.executeWithRetry(() => this.setKey(params));\n break;\n case 'delete':\n data = await this.executeWithRetry(() => this.deleteKey(params));\n break;\n case 'lock':\n data = await this.executeWithRetry(() => this.acquireLock(params));\n break;\n case 'unlock':\n data = await this.executeWithRetry(() => this.releaseLock(params));\n break;\n case 'increment':\n data = await this.executeWithRetry(() => this.incrementKey(params));\n break;\n case 'expire':\n data = await this.executeWithRetry(() => this.expireKey(params));\n break;\n case 'publish':\n data = await this.executeWithRetry(() => this.publishMessage(params));\n break;\n case 'subscribe':\n data = await this.executeWithRetry(() =>\n this.subscribeChannel(params),\n );\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Helpers\n // ---------------------------------------------------------------------------\n\n /** Remove expired entries on access and return whether a key is alive. */\n private isAlive(key: string): boolean {\n const entry = this.store.get(key);\n if (!entry) return false;\n if (entry.expiresAt !== undefined && Date.now() > entry.expiresAt) {\n this.store.delete(key);\n return false;\n }\n return true;\n }\n\n /** Generate a unique lock identifier. */\n private generateLockId(): string {\n return `lock_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n private async getKey(\n params: IntegrationParams,\n ): Promise<{ value: unknown }> {\n const key = params.key as string;\n\n this.logger.debug('Cache GET', { key });\n\n if (!this.isAlive(key)) {\n return { value: null };\n }\n\n const entry = this.store.get(key);\n return { value: entry ? entry.value : null };\n }\n\n private async setKey(\n params: IntegrationParams,\n ): Promise<{ ok: boolean }> {\n const key = params.key as string;\n const value = params.value;\n const ttl = params.ttl as number | undefined;\n\n this.logger.debug('Cache SET', { key, ttl });\n\n const entry: CacheEntry = { value };\n if (ttl !== undefined && ttl > 0) {\n entry.expiresAt = Date.now() + ttl * 1000;\n }\n\n this.store.set(key, entry);\n return { ok: true };\n }\n\n private async deleteKey(\n params: IntegrationParams,\n ): Promise<{ deleted: boolean }> {\n const key = params.key as string;\n\n this.logger.debug('Cache DELETE', { key });\n\n const existed = this.store.has(key);\n this.store.delete(key);\n return { deleted: existed };\n }\n\n private async acquireLock(\n params: IntegrationParams,\n ): Promise<{ acquired: boolean; lockId: string }> {\n const key = params.key as string;\n const ttl = (params.ttl as number | undefined) ?? 30_000;\n\n this.logger.debug('Cache LOCK', { key, ttl });\n\n // Check if the lock already exists and is still alive\n const existingLockId = this.locks.get(key);\n if (existingLockId) {\n // The lock key in the store tracks its expiry\n if (this.isAlive(`__lock:${key}`)) {\n return { acquired: false, lockId: '' };\n }\n // Expired — clean up\n this.locks.delete(key);\n this.store.delete(`__lock:${key}`);\n }\n\n const lockId = this.generateLockId();\n this.locks.set(key, lockId);\n // Store the lock with a TTL (ttl param is in ms, expiresAt is epoch ms)\n this.store.set(`__lock:${key}`, {\n value: lockId,\n expiresAt: Date.now() + ttl,\n });\n\n return { acquired: true, lockId };\n }\n\n private async releaseLock(\n params: IntegrationParams,\n ): Promise<{ released: boolean }> {\n const key = params.key as string;\n const lockId = params.lockId as string;\n\n this.logger.debug('Cache UNLOCK', { key, lockId });\n\n const currentLockId = this.locks.get(key);\n if (currentLockId !== lockId) {\n return { released: false };\n }\n\n this.locks.delete(key);\n this.store.delete(`__lock:${key}`);\n return { released: true };\n }\n\n private async incrementKey(\n params: IntegrationParams,\n ): Promise<{ value: number }> {\n const key = params.key as string;\n const by = (params.by as number | undefined) ?? 1;\n\n this.logger.debug('Cache INCR', { key, by });\n\n let current = 0;\n\n if (this.isAlive(key)) {\n const entry = this.store.get(key);\n if (entry) {\n current = typeof entry.value === 'number' ? entry.value : 0;\n }\n }\n\n const newValue = current + by;\n // Preserve existing TTL if the key already exists\n const existing = this.store.get(key);\n this.store.set(key, {\n value: newValue,\n expiresAt: existing?.expiresAt,\n });\n\n return { value: newValue };\n }\n\n private async expireKey(\n params: IntegrationParams,\n ): Promise<{ set: boolean }> {\n const key = params.key as string;\n const ttl = params.ttl as number;\n\n this.logger.debug('Cache EXPIRE', { key, ttl });\n\n if (!this.isAlive(key)) {\n return { set: false };\n }\n\n const entry = this.store.get(key);\n if (!entry) {\n return { set: false };\n }\n\n entry.expiresAt = Date.now() + ttl * 1000;\n this.store.set(key, entry);\n return { set: true };\n }\n\n private async publishMessage(\n params: IntegrationParams,\n ): Promise<{ receivers: number }> {\n const channel = params.channel as string;\n const message = params.message;\n\n this.logger.debug('Cache PUBLISH', { channel });\n\n const subscribers = this.channels.get(channel);\n if (!subscribers || subscribers.size === 0) {\n return { receivers: 0 };\n }\n\n for (const callback of subscribers) {\n try {\n callback(message);\n } catch (err) {\n this.logger.error('Subscriber callback error', {\n channel,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n return { receivers: subscribers.size };\n }\n\n private async subscribeChannel(\n params: IntegrationParams,\n ): Promise<{ subscribed: boolean }> {\n const channel = params.channel as string;\n\n this.logger.debug('Cache SUBSCRIBE', { channel });\n\n if (!this.channels.has(channel)) {\n this.channels.set(channel, new Set());\n }\n\n // The in-memory subscribe registers the channel but the actual callback\n // would be wired via a higher-level API. For the integration contract we\n // simply confirm the subscription was created.\n return { subscribed: true };\n }\n}\n\n// Auto-register\nregisterIntegration('redis', RedisIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/** Job status values */\ntype JobStatus = 'pending' | 'processing' | 'completed' | 'failed';\n\n/** Internal job representation */\ninterface QueueJob {\n id: string;\n queue: string;\n payload: unknown;\n priority: number;\n status: JobStatus;\n enqueuedAt: number;\n delay: number;\n result?: unknown;\n error?: string;\n}\n\n/**\n * Queue integration with in-memory backend.\n *\n * Provides job queue semantics: enqueue, dequeue, status tracking,\n * completion, failure, cancellation, and size queries.\n */\nexport class QueueIntegration extends BaseIntegration {\n /** Map from queue name to ordered list of job IDs */\n private queues: Map<string, string[]> = new Map();\n\n /** Map from job ID to job data */\n private jobs: Map<string, QueueJob> = new Map();\n\n constructor(config: IntegrationConfig) {\n super(config);\n this.logger.info('Queue integration initialized (in-memory backend)');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'enqueue':\n data = await this.executeWithRetry(() => this.enqueue(params));\n break;\n case 'dequeue':\n data = await this.executeWithRetry(() => this.dequeue(params));\n break;\n case 'status':\n data = await this.executeWithRetry(() => this.status(params));\n break;\n case 'complete':\n data = await this.executeWithRetry(() => this.complete(params));\n break;\n case 'fail':\n data = await this.executeWithRetry(() => this.failJob(params));\n break;\n case 'cancel':\n data = await this.executeWithRetry(() => this.cancel(params));\n break;\n case 'size':\n data = await this.executeWithRetry(() => this.size(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Helpers\n // ---------------------------------------------------------------------------\n\n /** Generate a unique job identifier. */\n private generateJobId(): string {\n return `job_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n }\n\n /** Get or create the queue array for a given queue name. */\n private getQueue(name: string): string[] {\n let queue = this.queues.get(name);\n if (!queue) {\n queue = [];\n this.queues.set(name, queue);\n }\n return queue;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n private async enqueue(\n params: IntegrationParams,\n ): Promise<{ jobId: string; position: number }> {\n const queueName = params.queue as string;\n const payload = params.payload;\n const delay = (params.delay as number | undefined) ?? 0;\n const priority = (params.priority as number | undefined) ?? 0;\n\n this.logger.debug('Queue ENQUEUE', { queue: queueName, delay, priority });\n\n const jobId = this.generateJobId();\n const job: QueueJob = {\n id: jobId,\n queue: queueName,\n payload,\n priority,\n status: 'pending',\n enqueuedAt: Date.now(),\n delay,\n };\n\n this.jobs.set(jobId, job);\n\n const queue = this.getQueue(queueName);\n\n // Insert respecting priority (higher priority = earlier in queue)\n let insertIndex = queue.length;\n for (let i = 0; i < queue.length; i++) {\n const existingJob = this.jobs.get(queue[i]);\n if (existingJob && existingJob.priority < priority) {\n insertIndex = i;\n break;\n }\n }\n queue.splice(insertIndex, 0, jobId);\n\n return { jobId, position: insertIndex };\n }\n\n private async dequeue(\n params: IntegrationParams,\n ): Promise<{ job: { id: string; payload: unknown; enqueuedAt: number; priority: number } | null }> {\n const queueName = params.queue as string;\n\n this.logger.debug('Queue DEQUEUE', { queue: queueName });\n\n const queue = this.getQueue(queueName);\n const now = Date.now();\n\n // Find first pending job whose delay has elapsed\n for (let i = 0; i < queue.length; i++) {\n const job = this.jobs.get(queue[i]);\n if (!job || job.status !== 'pending') continue;\n\n const readyAt = job.enqueuedAt + job.delay;\n if (now < readyAt) continue;\n\n // Mark as processing and remove from queue\n job.status = 'processing';\n queue.splice(i, 1);\n\n return {\n job: {\n id: job.id,\n payload: job.payload,\n enqueuedAt: job.enqueuedAt,\n priority: job.priority,\n },\n };\n }\n\n return { job: null };\n }\n\n private async status(\n params: IntegrationParams,\n ): Promise<{ status: JobStatus; job: { id: string; payload: unknown; enqueuedAt: number; priority: number } | null }> {\n const jobId = params.jobId as string;\n\n this.logger.debug('Queue STATUS', { jobId });\n\n const job = this.jobs.get(jobId);\n if (!job) {\n return { status: 'pending', job: null };\n }\n\n return {\n status: job.status,\n job: {\n id: job.id,\n payload: job.payload,\n enqueuedAt: job.enqueuedAt,\n priority: job.priority,\n },\n };\n }\n\n private async complete(\n params: IntegrationParams,\n ): Promise<{ completed: boolean }> {\n const jobId = params.jobId as string;\n const result = params.result;\n\n this.logger.debug('Queue COMPLETE', { jobId });\n\n const job = this.jobs.get(jobId);\n if (!job || job.status !== 'processing') {\n return { completed: false };\n }\n\n job.status = 'completed';\n job.result = result;\n return { completed: true };\n }\n\n private async failJob(\n params: IntegrationParams,\n ): Promise<{ failed: boolean }> {\n const jobId = params.jobId as string;\n const error = params.error as string | undefined;\n\n this.logger.debug('Queue FAIL', { jobId });\n\n const job = this.jobs.get(jobId);\n if (!job || job.status !== 'processing') {\n return { failed: false };\n }\n\n job.status = 'failed';\n job.error = error;\n return { failed: true };\n }\n\n private async cancel(\n params: IntegrationParams,\n ): Promise<{ cancelled: boolean }> {\n const jobId = params.jobId as string;\n\n this.logger.debug('Queue CANCEL', { jobId });\n\n const job = this.jobs.get(jobId);\n if (!job || job.status !== 'pending') {\n return { cancelled: false };\n }\n\n // Remove from queue\n const queue = this.queues.get(job.queue);\n if (queue) {\n const idx = queue.indexOf(jobId);\n if (idx !== -1) {\n queue.splice(idx, 1);\n }\n }\n\n this.jobs.delete(jobId);\n return { cancelled: true };\n }\n\n private async size(\n params: IntegrationParams,\n ): Promise<{ size: number; pending: number; processing: number }> {\n const queueName = params.queue as string;\n\n this.logger.debug('Queue SIZE', { queue: queueName });\n\n let pending = 0;\n let processing = 0;\n\n for (const job of this.jobs.values()) {\n if (job.queue !== queueName) continue;\n if (job.status === 'pending') pending++;\n if (job.status === 'processing') processing++;\n }\n\n return { size: pending + processing, pending, processing };\n }\n}\n\n// Auto-register\nregisterIntegration('queue', QueueIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/** In-memory span representation */\ninterface Span {\n spanId: string;\n traceId: string;\n name: string;\n startTime: number;\n endTime?: number;\n status?: 'ok' | 'error';\n attributes: IntegrationParams;\n events: Array<{ name: string; timestamp: number; attributes?: IntegrationParams }>;\n}\n\n/** Shape of a stored metric */\ninterface Metric {\n name: string;\n type: 'counter' | 'gauge' | 'histogram';\n value: number;\n values: number[];\n labels: IntegrationParams;\n}\n\n/** Generate a random hex id of the given byte-length. */\nfunction randomHexId(bytes: number): string {\n const arr: string[] = [];\n for (let i = 0; i < bytes; i++) {\n arr.push(Math.floor(Math.random() * 256).toString(16).padStart(2, '0'));\n }\n return arr.join('');\n}\n\n/**\n * OpenTelemetry integration with in-memory backend.\n *\n * Tracks spans and metrics internally for development and testing purposes.\n * No actual OpenTelemetry SDK dependency is required.\n */\nexport class OtelIntegration extends BaseIntegration {\n private spans: Map<string, Span> = new Map();\n private metrics: Map<string, Metric> = new Map();\n\n constructor(config: IntegrationConfig) {\n super(config);\n this.logger.info('OTel integration initialized (in-memory backend)');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'startSpan':\n data = await this.executeWithRetry(() => this.startSpan(params));\n break;\n case 'endSpan':\n data = await this.executeWithRetry(() => this.endSpan(params));\n break;\n case 'addEvent':\n data = await this.executeWithRetry(() => this.addEvent(params));\n break;\n case 'recordMetric':\n data = await this.executeWithRetry(() => this.recordMetric(params));\n break;\n case 'getSpan':\n data = await this.executeWithRetry(() => this.getSpan(params));\n break;\n case 'getMetrics':\n data = await this.executeWithRetry(() => this.getAllMetrics());\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n private async startSpan(\n params: IntegrationParams,\n ): Promise<{ spanId: string; traceId: string }> {\n const name = params.name as string;\n const attributes = (params.attributes as IntegrationParams | undefined) ?? {};\n const spanId = randomHexId(8);\n const traceId = (params.traceId as string | undefined) ?? randomHexId(16);\n\n const span: Span = {\n spanId,\n traceId,\n name,\n startTime: Date.now(),\n attributes,\n events: [],\n };\n\n this.spans.set(spanId, span);\n this.logger.debug('Span started', { spanId, traceId, name });\n\n return { spanId, traceId };\n }\n\n private async endSpan(\n params: IntegrationParams,\n ): Promise<{ ended: boolean }> {\n const spanId = params.spanId as string;\n const status = params.status as 'ok' | 'error' | undefined;\n\n const span = this.spans.get(spanId);\n if (!span) {\n this.logger.warn('endSpan called for unknown span', { spanId });\n return { ended: false };\n }\n\n span.endTime = Date.now();\n if (status) {\n span.status = status;\n }\n\n this.logger.debug('Span ended', { spanId, status, duration: span.endTime - span.startTime });\n return { ended: true };\n }\n\n private async addEvent(\n params: IntegrationParams,\n ): Promise<{ added: boolean }> {\n const spanId = params.spanId as string;\n const name = params.name as string;\n const attributes = params.attributes as IntegrationParams | undefined;\n\n const span = this.spans.get(spanId);\n if (!span) {\n this.logger.warn('addEvent called for unknown span', { spanId });\n return { added: false };\n }\n\n span.events.push({\n name,\n timestamp: Date.now(),\n attributes,\n });\n\n this.logger.debug('Event added to span', { spanId, eventName: name });\n return { added: true };\n }\n\n private async recordMetric(\n params: IntegrationParams,\n ): Promise<{ recorded: boolean }> {\n const name = params.name as string;\n const value = params.value as number;\n const type = (params.type as 'counter' | 'gauge' | 'histogram' | undefined) ?? 'counter';\n const labels = (params.labels as IntegrationParams | undefined) ?? {};\n\n const existing = this.metrics.get(name);\n\n if (existing) {\n switch (type) {\n case 'counter':\n existing.value += value;\n break;\n case 'gauge':\n existing.value = value;\n break;\n case 'histogram':\n existing.values.push(value);\n break;\n }\n existing.labels = labels;\n } else {\n this.metrics.set(name, {\n name,\n type,\n value: type === 'histogram' ? 0 : value,\n values: type === 'histogram' ? [value] : [],\n labels,\n });\n }\n\n this.logger.debug('Metric recorded', { name, value, type });\n return { recorded: true };\n }\n\n private async getSpan(\n params: IntegrationParams,\n ): Promise<Span | null> {\n const spanId = params.spanId as string;\n const span = this.spans.get(spanId);\n return span ?? null;\n }\n\n private async getAllMetrics(): Promise<Record<string, Metric>> {\n const result: Record<string, Metric> = {};\n for (const [key, metric] of this.metrics) {\n result[key] = metric;\n }\n return result;\n }\n}\n\n// Auto-register\nregisterIntegration('otel', OtelIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/** Supported OAuth providers */\ntype OAuthProvider = 'google' | 'github' | 'auth0';\n\n/** Mock provider authorization endpoints */\nconst PROVIDER_AUTH_URLS: Record<OAuthProvider, string> = {\n google: 'https://accounts.google.com/o/oauth2/v2/auth',\n github: 'https://github.com/login/oauth/authorize',\n auth0: 'https://auth.example.com/authorize',\n};\n\n/** Stored token set */\ninterface TokenSet {\n accessToken: string;\n refreshToken: string;\n expiresAt: number;\n}\n\n/** Mock user profile */\ninterface UserInfo {\n sub: string;\n email: string;\n name: string;\n picture: string;\n}\n\n/**\n * OAuth2/OIDC integration with in-memory mock backend.\n *\n * This is a development/mock implementation. No actual OAuth library is used.\n * State tokens, access tokens, and refresh tokens are generated in-memory and\n * tracked via Maps. Useful for testing OAuth flows without external providers.\n */\nexport class OAuthIntegration extends BaseIntegration {\n /** Maps state token -> provider for pending authorization flows */\n private states: Map<string, OAuthProvider> = new Map();\n\n /** Maps access token -> token set */\n private tokens: Map<string, TokenSet> = new Map();\n\n /** Maps refresh token -> access token for refresh lookups */\n private refreshIndex: Map<string, string> = new Map();\n\n /** Maps access token -> mock user session */\n private sessions: Map<string, UserInfo> = new Map();\n\n constructor(config: IntegrationConfig) {\n super(config);\n this.logger.info('OAuth integration initialized (mock backend)');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'authorize':\n data = await this.executeWithRetry(() => this.authorize(params));\n break;\n case 'token':\n data = await this.executeWithRetry(() => this.token(params));\n break;\n case 'refresh':\n data = await this.executeWithRetry(() => this.refresh(params));\n break;\n case 'revoke':\n data = await this.executeWithRetry(() => this.revoke(params));\n break;\n case 'userinfo':\n data = await this.executeWithRetry(() => this.userinfo(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Helpers\n // ---------------------------------------------------------------------------\n\n /** Generate a random hex token of the given byte length. */\n private generateToken(bytes: number = 32): string {\n const chars = 'abcdef0123456789';\n let result = '';\n for (let i = 0; i < bytes * 2; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n }\n\n /** Generate a mock user profile from a provider and access token. */\n private generateMockUser(provider: OAuthProvider, sub: string): UserInfo {\n return {\n sub,\n email: `user-${sub.slice(0, 8)}@${provider}.example.com`,\n name: `Mock User (${provider})`,\n picture: `https://${provider}.example.com/avatar/${sub.slice(0, 8)}.png`,\n };\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n private async authorize(\n params: IntegrationParams,\n ): Promise<{ authUrl: string; state: string }> {\n const provider = params.provider as OAuthProvider;\n const scopes = params.scopes as string[];\n const redirectUri = params.redirectUri as string;\n\n this.logger.debug('OAuth AUTHORIZE', { provider, scopes: scopes.join(', '), redirectUri });\n\n const state = this.generateToken(16);\n this.states.set(state, provider);\n\n const baseUrl = PROVIDER_AUTH_URLS[provider];\n const queryParams = new URLSearchParams({\n response_type: 'code',\n scope: scopes.join(' '),\n redirect_uri: redirectUri,\n state,\n client_id: this.config.env.CLIENT_ID ?? 'mock-client-id',\n });\n\n const authUrl = `${baseUrl}?${queryParams.toString()}`;\n\n return { authUrl, state };\n }\n\n private async token(\n params: IntegrationParams,\n ): Promise<{\n accessToken: string;\n refreshToken: string;\n expiresIn: number;\n tokenType: 'bearer';\n }> {\n const code = params.code as string;\n const state = params.state as string;\n\n this.logger.debug('OAuth TOKEN', { code, state });\n\n const provider = this.states.get(state);\n if (!provider) {\n throw new Error(\n `Invalid or expired state token: ${state}`,\n );\n }\n\n // Consume the state (one-time use)\n this.states.delete(state);\n\n const accessToken = this.generateToken(32);\n const refreshToken = this.generateToken(32);\n const expiresIn = 3600;\n\n const tokenSet: TokenSet = {\n accessToken,\n refreshToken,\n expiresAt: Date.now() + expiresIn * 1000,\n };\n\n this.tokens.set(accessToken, tokenSet);\n this.refreshIndex.set(refreshToken, accessToken);\n\n // Generate and store a mock user session\n const sub = this.generateToken(8);\n this.sessions.set(accessToken, this.generateMockUser(provider, sub));\n\n return { accessToken, refreshToken, expiresIn, tokenType: 'bearer' };\n }\n\n private async refresh(\n params: IntegrationParams,\n ): Promise<{ accessToken: string; expiresIn: number }> {\n const refreshToken = params.refreshToken as string;\n\n this.logger.debug('OAuth REFRESH', { refreshToken: refreshToken.slice(0, 8) + '...' });\n\n const oldAccessToken = this.refreshIndex.get(refreshToken);\n if (!oldAccessToken) {\n throw new Error('Invalid refresh token');\n }\n\n // Carry over user session to the new access token\n const userInfo = this.sessions.get(oldAccessToken);\n\n // Clean up old access token\n this.tokens.delete(oldAccessToken);\n this.sessions.delete(oldAccessToken);\n\n // Issue new access token\n const newAccessToken = this.generateToken(32);\n const expiresIn = 3600;\n\n const tokenSet: TokenSet = {\n accessToken: newAccessToken,\n refreshToken,\n expiresAt: Date.now() + expiresIn * 1000,\n };\n\n this.tokens.set(newAccessToken, tokenSet);\n this.refreshIndex.set(refreshToken, newAccessToken);\n\n if (userInfo) {\n this.sessions.set(newAccessToken, userInfo);\n }\n\n return { accessToken: newAccessToken, expiresIn };\n }\n\n private async revoke(\n params: IntegrationParams,\n ): Promise<{ revoked: boolean }> {\n const token = params.token as string;\n\n this.logger.debug('OAuth REVOKE', { token: token.slice(0, 8) + '...' });\n\n // Check if it is an access token\n const tokenSet = this.tokens.get(token);\n if (tokenSet) {\n this.refreshIndex.delete(tokenSet.refreshToken);\n this.tokens.delete(token);\n this.sessions.delete(token);\n return { revoked: true };\n }\n\n // Check if it is a refresh token\n const accessToken = this.refreshIndex.get(token);\n if (accessToken) {\n this.tokens.delete(accessToken);\n this.sessions.delete(accessToken);\n this.refreshIndex.delete(token);\n return { revoked: true };\n }\n\n return { revoked: false };\n }\n\n private async userinfo(\n params: IntegrationParams,\n ): Promise<UserInfo> {\n const accessToken = params.accessToken as string;\n\n this.logger.debug('OAuth USERINFO', { accessToken: accessToken.slice(0, 8) + '...' });\n\n const tokenSet = this.tokens.get(accessToken);\n if (!tokenSet) {\n throw new Error('Invalid access token');\n }\n\n if (Date.now() > tokenSet.expiresAt) {\n this.tokens.delete(accessToken);\n this.sessions.delete(accessToken);\n throw new Error('Access token expired');\n }\n\n const userInfo = this.sessions.get(accessToken);\n if (!userInfo) {\n throw new Error('No session found for access token');\n }\n\n return userInfo;\n }\n}\n\n// Auto-register\nregisterIntegration('oauth', OAuthIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/** Shape of a stored object in the in-memory store */\ninterface StoredObject {\n content: unknown;\n contentType: string;\n size: number;\n metadata: IntegrationParams;\n lastModified: number;\n etag: string;\n}\n\n/**\n * Storage integration with in-memory backend for development/testing.\n *\n * Provides S3-compatible object storage operations (upload, download, list,\n * delete, getSignedUrl) backed by an in-memory Map. No cloud SDK dependencies\n * are required.\n */\nexport class StorageIntegration extends BaseIntegration {\n private objects: Map<string, StoredObject> = new Map();\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const storageUrl = config.env.STORAGE_URL;\n if (storageUrl) {\n this.logger.warn(\n 'STORAGE_URL is configured but real storage client is not yet implemented. ' +\n 'Falling back to in-memory store.',\n { storageUrl },\n );\n }\n\n this.logger.info('Storage integration initialized (in-memory backend)');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'upload':\n data = await this.executeWithRetry(() => this.upload(params));\n break;\n case 'download':\n data = await this.executeWithRetry(() => this.download(params));\n break;\n case 'list':\n data = await this.executeWithRetry(() => this.list(params));\n break;\n case 'delete':\n data = await this.executeWithRetry(() => this.deleteObject(params));\n break;\n case 'getSignedUrl':\n data = await this.executeWithRetry(() => this.getSignedUrl(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Helpers\n // ---------------------------------------------------------------------------\n\n /** Build a composite key from bucket and object key. */\n private compositeKey(bucket: string, key: string): string {\n return `${bucket}/${key}`;\n }\n\n /** Generate a deterministic etag from content. */\n private generateEtag(content: unknown): string {\n const raw = typeof content === 'string' ? content : JSON.stringify(content);\n // Simple hash — good enough for in-memory dev usage\n let hash = 0;\n for (let i = 0; i < raw.length; i++) {\n const ch = raw.charCodeAt(i);\n hash = ((hash << 5) - hash + ch) | 0;\n }\n return `\"${Math.abs(hash).toString(16).padStart(8, '0')}\"`;\n }\n\n /** Compute the byte size of content. */\n private computeSize(content: unknown): number {\n if (typeof content === 'string') {\n return new TextEncoder().encode(content).byteLength;\n }\n return JSON.stringify(content).length;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n private async upload(\n params: IntegrationParams,\n ): Promise<{ key: string; bucket: string; size: number; etag: string }> {\n const bucket = params.bucket as string;\n const key = params.key as string;\n const content = params.content;\n const contentType = (params.contentType as string | undefined) ?? 'application/octet-stream';\n const metadata = (params.metadata as IntegrationParams | undefined) ?? {};\n\n this.logger.debug('Storage UPLOAD', { bucket, key, contentType });\n\n const size = this.computeSize(content);\n const etag = this.generateEtag(content);\n\n const obj: StoredObject = {\n content,\n contentType,\n size,\n metadata,\n lastModified: Date.now(),\n etag,\n };\n\n this.objects.set(this.compositeKey(bucket, key), obj);\n\n return { key, bucket, size, etag };\n }\n\n private async download(\n params: IntegrationParams,\n ): Promise<{\n content: unknown;\n contentType: string;\n size: number;\n metadata: IntegrationParams;\n }> {\n const bucket = params.bucket as string;\n const key = params.key as string;\n\n this.logger.debug('Storage DOWNLOAD', { bucket, key });\n\n const obj = this.objects.get(this.compositeKey(bucket, key));\n if (!obj) {\n throw new Error(`Object not found: ${bucket}/${key}`);\n }\n\n return {\n content: obj.content,\n contentType: obj.contentType,\n size: obj.size,\n metadata: obj.metadata,\n };\n }\n\n private async list(\n params: IntegrationParams,\n ): Promise<{\n keys: Array<{ key: string; size: number; lastModified: number }>;\n truncated: boolean;\n }> {\n const bucket = params.bucket as string;\n const prefix = (params.prefix as string | undefined) ?? '';\n const maxKeys = (params.maxKeys as number | undefined) ?? 1000;\n\n this.logger.debug('Storage LIST', { bucket, prefix, maxKeys });\n\n const bucketPrefix = `${bucket}/`;\n const fullPrefix = `${bucket}/${prefix}`;\n const results: Array<{ key: string; size: number; lastModified: number }> = [];\n\n for (const [compositeKey, obj] of this.objects) {\n if (!compositeKey.startsWith(fullPrefix)) continue;\n\n // Strip the bucket prefix to get the object key\n const objectKey = compositeKey.slice(bucketPrefix.length);\n results.push({\n key: objectKey,\n size: obj.size,\n lastModified: obj.lastModified,\n });\n }\n\n // Sort by key for deterministic output\n results.sort((a, b) => a.key.localeCompare(b.key));\n\n const truncated = results.length > maxKeys;\n return {\n keys: results.slice(0, maxKeys),\n truncated,\n };\n }\n\n private async deleteObject(\n params: IntegrationParams,\n ): Promise<{ deleted: boolean }> {\n const bucket = params.bucket as string;\n const key = params.key as string;\n\n this.logger.debug('Storage DELETE', { bucket, key });\n\n const existed = this.objects.has(this.compositeKey(bucket, key));\n this.objects.delete(this.compositeKey(bucket, key));\n return { deleted: existed };\n }\n\n private async getSignedUrl(\n params: IntegrationParams,\n ): Promise<{ url: string; expiresAt: number }> {\n const bucket = params.bucket as string;\n const key = params.key as string;\n const expiresIn = (params.expiresIn as number | undefined) ?? 3600;\n const operation = (params.operation as 'get' | 'put' | undefined) ?? 'get';\n\n this.logger.debug('Storage GET_SIGNED_URL', { bucket, key, expiresIn, operation });\n\n const expiresAt = Date.now() + expiresIn * 1000;\n const token = Math.random().toString(36).slice(2, 18);\n const url =\n `https://storage.mock.local/${bucket}/${key}` +\n `?X-Amz-Algorithm=MOCK-HMAC-SHA256` +\n `&X-Amz-Expires=${expiresIn}` +\n `&X-Amz-SignedHeaders=host` +\n `&X-Amz-Signature=${token}` +\n `&operation=${operation}`;\n\n return { url, expiresAt };\n }\n}\n\n// Auto-register\nregisterIntegration('storage', StorageIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/** Represents a container in the in-memory store */\ninterface SimulatedContainer {\n id: string;\n name: string;\n image: string;\n status: 'created' | 'running' | 'paused' | 'exited' | 'dead';\n ports: Array<{ host: number; container: number; protocol: string }>;\n env: Record<string, string>;\n volumes: Array<{ host: string; container: string }>;\n command: string;\n labels: Record<string, string>;\n createdAt: number;\n startedAt: number | null;\n stoppedAt: number | null;\n logs: string[];\n}\n\n/** Represents a built image in the in-memory store */\ninterface SimulatedImage {\n id: string;\n tag: string;\n dockerfile: string;\n size: number;\n createdAt: number;\n}\n\n/**\n * Docker/Container integration with in-memory backend for development/testing.\n *\n * Provides container lifecycle operations (build, run, stop, remove, logs,\n * status, list) backed by an in-memory Map. No Docker SDK or daemon connection\n * is required.\n */\nexport class DockerIntegration extends BaseIntegration {\n private containers: Map<string, SimulatedContainer> = new Map();\n private images: Map<string, SimulatedImage> = new Map();\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const dockerHost = config.env.DOCKER_HOST;\n if (dockerHost) {\n this.logger.warn(\n 'DOCKER_HOST is configured but real Docker client is not yet implemented. ' +\n 'Falling back to in-memory simulation.',\n { dockerHost },\n );\n }\n\n this.logger.info('Docker integration initialized (in-memory simulation)');\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'build':\n data = await this.executeWithRetry(() => this.build(params));\n break;\n case 'run':\n data = await this.executeWithRetry(() => this.run(params));\n break;\n case 'stop':\n data = await this.executeWithRetry(() => this.stop(params));\n break;\n case 'remove':\n data = await this.executeWithRetry(() => this.removeContainer(params));\n break;\n case 'logs':\n data = await this.executeWithRetry(() => this.logs(params));\n break;\n case 'status':\n data = await this.executeWithRetry(() => this.status(params));\n break;\n case 'list':\n data = await this.executeWithRetry(() => this.list(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Helpers\n // ---------------------------------------------------------------------------\n\n /** Generate a random hex container/image ID. */\n private generateId(): string {\n const segments: string[] = [];\n for (let i = 0; i < 16; i++) {\n segments.push(Math.floor(Math.random() * 256).toString(16).padStart(2, '0'));\n }\n return segments.join('');\n }\n\n /** Find a container by ID (prefix match supported). */\n private findContainer(containerId: string): SimulatedContainer | undefined {\n // Exact match first\n const exact = this.containers.get(containerId);\n if (exact) return exact;\n\n // Prefix match (like real Docker)\n for (const [id, container] of this.containers) {\n if (id.startsWith(containerId)) {\n return container;\n }\n }\n\n return undefined;\n }\n\n /** Generate realistic log lines for a container. */\n private generateLogLines(container: SimulatedContainer, count: number): string[] {\n const lines: string[] = [...container.logs];\n const baseTime = container.startedAt ?? container.createdAt;\n\n while (lines.length < count) {\n const ts = new Date(baseTime + lines.length * 1000).toISOString();\n lines.push(`${ts} [info] Container ${container.name} — heartbeat #${lines.length + 1}`);\n }\n\n return lines;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n private async build(\n params: IntegrationParams,\n ): Promise<{ imageId: string; tag: string; size: number; buildTime: number }> {\n const dockerfile = (params.dockerfile as string | undefined) ?? 'Dockerfile';\n const tag = params.tag as string;\n const context = (params.context as string | undefined) ?? '.';\n const buildArgs = (params.buildArgs as Record<string, string> | undefined) ?? {};\n\n this.logger.debug('Docker BUILD', { dockerfile, tag, context, buildArgs });\n\n const imageId = `sha256:${this.generateId()}`;\n const size = 150_000_000 + Math.floor(Math.random() * 350_000_000); // 150–500 MB\n const buildTime = 2000 + Math.floor(Math.random() * 8000); // 2–10s simulated\n\n const image: SimulatedImage = {\n id: imageId,\n tag,\n dockerfile,\n size,\n createdAt: Date.now(),\n };\n\n this.images.set(tag, image);\n\n return { imageId, tag, size, buildTime };\n }\n\n private async run(\n params: IntegrationParams,\n ): Promise<{\n containerId: string;\n name: string;\n status: string;\n ports: Array<{ host: number; container: number; protocol: string }>;\n }> {\n const image = params.image as string;\n const name = (params.name as string | undefined) ?? `container-${this.generateId().slice(0, 12)}`;\n const rawPorts = (params.ports as Array<{ host: number; container: number; protocol?: string }> | undefined) ?? [];\n const env = (params.env as Record<string, string> | undefined) ?? {};\n const rawVolumes = (params.volumes as Array<{ host: string; container: string }> | undefined) ?? [];\n const command = (params.command as string | undefined) ?? '';\n\n this.logger.debug('Docker RUN', { image, name, ports: rawPorts.map(p => `${p.host}:${p.container}`).join(', '), volumes: rawVolumes.map(v => `${v.host}:${v.container}`).join(', '), command });\n\n const containerId = this.generateId();\n\n const ports = rawPorts.map((p) => ({\n host: p.host,\n container: p.container,\n protocol: p.protocol ?? 'tcp',\n }));\n\n const volumes = rawVolumes.map((v) => ({\n host: v.host,\n container: v.container,\n }));\n\n const container: SimulatedContainer = {\n id: containerId,\n name,\n image,\n status: 'running',\n ports,\n env,\n volumes,\n command,\n labels: {},\n createdAt: Date.now(),\n startedAt: Date.now(),\n stoppedAt: null,\n logs: [\n `${new Date().toISOString()} [info] Starting container ${name} from image ${image}`,\n `${new Date().toISOString()} [info] Container ${name} is now running`,\n ],\n };\n\n this.containers.set(containerId, container);\n\n return {\n containerId,\n name,\n status: container.status,\n ports,\n };\n }\n\n private async stop(\n params: IntegrationParams,\n ): Promise<{ containerId: string; status: string; stoppedAt: number }> {\n const containerId = params.containerId as string;\n\n this.logger.debug('Docker STOP', { containerId });\n\n const container = this.findContainer(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n if (container.status !== 'running' && container.status !== 'paused') {\n throw new Error(`Container ${containerId} is not running (current status: ${container.status})`);\n }\n\n container.status = 'exited';\n container.stoppedAt = Date.now();\n container.logs.push(\n `${new Date().toISOString()} [info] Container ${container.name} stopped`,\n );\n\n return {\n containerId: container.id,\n status: container.status,\n stoppedAt: container.stoppedAt,\n };\n }\n\n private async removeContainer(\n params: IntegrationParams,\n ): Promise<{ containerId: string; removed: boolean }> {\n const containerId = params.containerId as string;\n const force = (params.force as boolean | undefined) ?? false;\n\n this.logger.debug('Docker REMOVE', { containerId, force });\n\n const container = this.findContainer(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n if (container.status === 'running' && !force) {\n throw new Error(\n `Container ${containerId} is running. Stop it first or use force=true.`,\n );\n }\n\n this.containers.delete(container.id);\n\n return { containerId: container.id, removed: true };\n }\n\n private async logs(\n params: IntegrationParams,\n ): Promise<{ containerId: string; logs: string[]; lineCount: number }> {\n const containerId = params.containerId as string;\n const tail = (params.tail as number | undefined) ?? 100;\n const since = (params.since as string | undefined) ?? undefined;\n\n this.logger.debug('Docker LOGS', { containerId, tail, since });\n\n const container = this.findContainer(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n let logLines = this.generateLogLines(container, tail);\n\n // Filter by since timestamp if provided\n if (since) {\n const sinceMs = new Date(since).getTime();\n logLines = logLines.filter((line) => {\n const timestampMatch = /^\\d{4}-\\d{2}-\\d{2}T[\\d:.]+Z/.exec(line);\n if (!timestampMatch) return true;\n return new Date(timestampMatch[0]).getTime() >= sinceMs;\n });\n }\n\n // Apply tail limit\n const tailedLines = logLines.slice(-tail);\n\n return {\n containerId: container.id,\n logs: tailedLines,\n lineCount: tailedLines.length,\n };\n }\n\n private async status(\n params: IntegrationParams,\n ): Promise<{\n containerId: string;\n name: string;\n image: string;\n status: string;\n ports: Array<{ host: number; container: number; protocol: string }>;\n createdAt: number;\n startedAt: number | null;\n stoppedAt: number | null;\n }> {\n const containerId = params.containerId as string;\n\n this.logger.debug('Docker STATUS', { containerId });\n\n const container = this.findContainer(containerId);\n if (!container) {\n throw new Error(`Container not found: ${containerId}`);\n }\n\n return {\n containerId: container.id,\n name: container.name,\n image: container.image,\n status: container.status,\n ports: container.ports,\n createdAt: container.createdAt,\n startedAt: container.startedAt,\n stoppedAt: container.stoppedAt,\n };\n }\n\n private async list(\n params: IntegrationParams,\n ): Promise<{\n containers: Array<{\n id: string;\n name: string;\n image: string;\n status: string;\n ports: Array<{ host: number; container: number; protocol: string }>;\n createdAt: number;\n }>;\n total: number;\n }> {\n const showAll = (params.all as boolean | undefined) ?? false;\n const filterByLabel = (params.filterByLabel as string | undefined) ?? undefined;\n\n this.logger.debug('Docker LIST', { all: showAll, filterByLabel });\n\n let entries = Array.from(this.containers.values());\n\n // By default, only show running containers (like `docker ps`)\n if (!showAll) {\n entries = entries.filter((c) => c.status === 'running');\n }\n\n // Filter by label if specified\n if (filterByLabel) {\n const [labelKey, labelValue] = filterByLabel.split('=');\n entries = entries.filter((c) => {\n if (labelValue !== undefined) {\n return c.labels[labelKey] === labelValue;\n }\n return labelKey in c.labels;\n });\n }\n\n // Sort by creation time (newest first)\n entries.sort((a, b) => b.createdAt - a.createdAt);\n\n const containers = entries.map((c) => ({\n id: c.id,\n name: c.name,\n image: c.image,\n status: c.status,\n ports: c.ports,\n createdAt: c.createdAt,\n }));\n\n return { containers, total: containers.length };\n }\n}\n\n// Auto-register\nregisterIntegration('docker', DockerIntegration);\n","/**\n * Read-only SQL enforcement for the database integration.\n *\n * The guard accepts exactly one SELECT statement (optionally CTE-led) and\n * nothing else. Comments are stripped and string/identifier contents are\n * blanked before keyword checks, so denied keywords inside literals (e.g.\n * `WHERE note = 'delete this'`) never false-positive, and comment/quote\n * tricks cannot smuggle a second statement past the check.\n */\n\nexport interface SqlGuardResult {\n ok: boolean;\n reason?: string;\n}\n\n/**\n * Reserved words that mutate or lock wherever they appear inside a SELECT:\n * data-modifying CTE bodies (INSERT/UPDATE/DELETE/MERGE), `SELECT ... INTO`\n * DDL, and `FOR UPDATE`/`FOR SHARE` locking clauses.\n */\nconst DENIED_KEYWORDS = new Set(['INSERT', 'UPDATE', 'DELETE', 'MERGE', 'INTO', 'FOR']);\n\nfunction isWordChar(ch: string): boolean {\n return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || ch === '_' || ch === '$';\n}\n\n/** Skip a single-quoted literal starting at `start` (the opening quote). */\nfunction skipSingleQuoted(sql: string, start: number, eString: boolean): number {\n let i = start + 1;\n while (i < sql.length) {\n if (eString && sql[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (sql[i] === \"'\") {\n if (sql[i + 1] === \"'\") {\n i += 2;\n continue;\n }\n return i + 1;\n }\n i++;\n }\n return sql.length;\n}\n\n/** Skip a double-quoted identifier starting at `start` (the opening quote). */\nfunction skipDoubleQuoted(sql: string, start: number): number {\n let i = start + 1;\n while (i < sql.length) {\n if (sql[i] === '\"') {\n if (sql[i + 1] === '\"') {\n i += 2;\n continue;\n }\n return i + 1;\n }\n i++;\n }\n return sql.length;\n}\n\n/** Match a dollar-quote tag ($$ or $tag$) at `start`; `$1` placeholders are not tags. */\nfunction matchDollarTag(sql: string, start: number): string | undefined {\n let i = start + 1;\n if (sql[i] === '$') return '$$';\n const first = sql[i];\n if (!first || !((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z') || first === '_')) {\n return undefined;\n }\n i++;\n while (i < sql.length && isWordChar(sql[i]) && sql[i] !== '$') i++;\n if (sql[i] !== '$') return undefined;\n return sql.slice(start, i + 1);\n}\n\n/** Strip comments and blank string/identifier contents, keeping structure. */\nfunction sanitizeSql(sql: string): string {\n const out: string[] = [];\n let i = 0;\n\n while (i < sql.length) {\n const ch = sql[i];\n\n if (ch === '-' && sql[i + 1] === '-') {\n while (i < sql.length && sql[i] !== '\\n') i++;\n out.push(' ');\n continue;\n }\n\n if (ch === '/' && sql[i + 1] === '*') {\n // Postgres nests block comments\n let depth = 1;\n i += 2;\n while (i < sql.length && depth > 0) {\n if (sql[i] === '/' && sql[i + 1] === '*') {\n depth++;\n i += 2;\n } else if (sql[i] === '*' && sql[i + 1] === '/') {\n depth--;\n i += 2;\n } else {\n i++;\n }\n }\n out.push(' ');\n continue;\n }\n\n if (ch === \"'\") {\n // E'…' strings honor backslash escapes; standard strings do not\n let j = i - 1;\n while (j >= 0 && (sql[j] === ' ' || sql[j] === '\\t' || sql[j] === '\\n' || sql[j] === '\\r')) j--;\n const prev = j >= 0 ? sql[j] : '';\n const eString = (prev === 'e' || prev === 'E') && (j === 0 || !isWordChar(sql[j - 1]));\n i = skipSingleQuoted(sql, i, eString);\n out.push(\"''\");\n continue;\n }\n\n if (ch === '\"') {\n i = skipDoubleQuoted(sql, i);\n out.push('\"\"');\n continue;\n }\n\n if (ch === '$') {\n const tag = matchDollarTag(sql, i);\n if (tag) {\n const close = sql.indexOf(tag, i + tag.length);\n i = close === -1 ? sql.length : close + tag.length;\n out.push('$$');\n continue;\n }\n }\n\n out.push(ch);\n i++;\n }\n\n return out.join('');\n}\n\n/**\n * Verify `sql` is a single read-only SELECT statement.\n * Returns `{ ok: false, reason }` for anything else.\n */\nexport function assertReadOnlySelect(sql: string): SqlGuardResult {\n const sanitized = sanitizeSql(sql);\n\n const statements = sanitized\n .split(';')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n if (statements.length === 0) {\n return { ok: false, reason: 'Empty statement' };\n }\n if (statements.length > 1) {\n return { ok: false, reason: 'Only a single statement is allowed' };\n }\n\n const words = (statements[0].match(/\\b[A-Za-z_][A-Za-z0-9_]*\\b/g) ?? []).map((w) =>\n w.toUpperCase(),\n );\n const first = words[0];\n if (first !== 'SELECT' && first !== 'WITH') {\n return { ok: false, reason: 'Only SELECT statements are allowed' };\n }\n\n const denied = words.find((w) => DENIED_KEYWORDS.has(w));\n if (denied) {\n return { ok: false, reason: `Keyword not allowed in a read-only query: ${denied}` };\n }\n\n return { ok: true };\n}\n","/**\n * Database Integration for Almadar\n * Read-only SQL queries over external connections (migration fetch seam).\n */\n\nimport { Pool } from 'pg';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationParams } from '../../types';\nimport { IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport { assertReadOnlySelect } from './sql-guard';\nimport type {\n DatabaseDriver,\n DatabaseQueryParams,\n DatabaseQueryParamValue,\n DatabaseQueryResult,\n DatabaseRow,\n} from './types';\n\nconst DEFAULT_STATEMENT_TIMEOUT_MS = 10_000;\n\n/** Postgres SQLSTATE raised when statement_timeout cancels a query. */\nconst PG_QUERY_CANCELED = '57014';\n\nclass PostgresDriver implements DatabaseDriver {\n private pool: Pool;\n\n constructor(connectionString: string, statementTimeoutMs: number) {\n this.pool = new Pool({\n connectionString,\n statement_timeout: statementTimeoutMs,\n query_timeout: statementTimeoutMs,\n });\n }\n\n async query(\n sql: string,\n params: readonly DatabaseQueryParamValue[],\n ): Promise<DatabaseQueryResult> {\n const result = await this.pool.query(sql, [...params]);\n return {\n rows: result.rows as DatabaseRow[],\n rowCount: result.rowCount ?? result.rows.length,\n };\n }\n\n async end(): Promise<void> {\n await this.pool.end();\n }\n}\n\nfunction mapDriverError(error: unknown): IntegrationError {\n if (error instanceof IntegrationError) return error;\n const code = (error as { code?: string }).code;\n if (code === PG_QUERY_CANCELED) {\n return new IntegrationError('Statement timeout exceeded', 'TIMEOUT_ERROR');\n }\n const message = error instanceof Error ? error.message : String(error);\n return new IntegrationError(message, 'SERVICE_ERROR');\n}\n\n/**\n * Generic database integration. One action — `query` — with read-only\n * enforced in the integration itself (single SELECT only, statement\n * timeout). `connectionRef` is an environment variable NAME, never the\n * secret; the connection string is resolved from `process.env` at run time.\n */\nexport class DatabaseIntegration extends BaseIntegration {\n private drivers: Map<string, DatabaseDriver> = new Map();\n private statementTimeoutMs: number;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const fromEnv = config.env.DATABASE_STATEMENT_TIMEOUT_MS;\n if (fromEnv) {\n const parsed = Number(fromEnv);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(`Invalid DATABASE_STATEMENT_TIMEOUT_MS: ${fromEnv}`);\n }\n this.statementTimeoutMs = parsed;\n } else {\n this.statementTimeoutMs = config.timeout ?? DEFAULT_STATEMENT_TIMEOUT_MS;\n }\n\n this.logger.info('Database integration initialized', {\n statementTimeoutMs: this.statementTimeoutMs,\n });\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'query':\n data = await this.executeWithRetry(() => this.runQuery(params as DatabaseQueryParams));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async runQuery(params: DatabaseQueryParams): Promise<DatabaseQueryResult> {\n const guard = assertReadOnlySelect(params.sql);\n if (!guard.ok) {\n throw new IntegrationError(\n `Read-only violation: ${guard.reason ?? 'not a SELECT statement'}`,\n 'VALIDATION_ERROR',\n );\n }\n\n const driver = this.driverFor(params.connectionRef);\n\n this.logger.debug('Database QUERY', { connectionRef: params.connectionRef });\n\n try {\n return await driver.query(params.sql, params.params ?? []);\n } catch (error) {\n throw mapDriverError(error);\n }\n }\n\n /** Resolve (and cache) the driver for a connection reference. */\n private driverFor(connectionRef: string): DatabaseDriver {\n const connectionString = process.env[connectionRef];\n if (!connectionString) {\n throw new IntegrationError(\n `Connection reference \"${connectionRef}\" is not set in the environment`,\n 'AUTH_ERROR',\n );\n }\n\n const cached = this.drivers.get(connectionString);\n if (cached) return cached;\n\n const driver = new PostgresDriver(connectionString, this.statementTimeoutMs);\n this.drivers.set(connectionString, driver);\n return driver;\n }\n}\n\n// Auto-register\nregisterIntegration('database', DatabaseIntegration);\n\n// Export types\nexport * from './types';\nexport { assertReadOnlySelect, type SqlGuardResult } from './sql-guard';\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * Wikimedia (Wikipedia API) integration — redirect-resolved page lookup returning\n * a verified one-line description, a real Commons portrait, and the lead-section\n * extract. The single canonical home for the User-Agent + timeout that kflow's\n * persona services previously duplicated as ad-hoc `fetch` calls.\n */\nconst WIKI_ENDPOINT = 'https://en.wikipedia.org/w/api.php';\nconst DEFAULT_UA = 'Almadar/1.0 (https://almadar.dev)';\nconst DEFAULT_TIMEOUT_MS = 6000;\nconst EXTRACT_CHAR_CAP = 2000;\n\ninterface WikiPage {\n missing?: '' | boolean;\n title?: string;\n description?: string;\n extract?: string;\n thumbnail?: { source?: string };\n}\ninterface WikiQueryResponse {\n query?: { pages?: Record<string, WikiPage> };\n}\n\nexport class WikimediaIntegration extends BaseIntegration {\n private readonly userAgent: string;\n private readonly timeoutMs: number;\n\n constructor(config: IntegrationConfig) {\n super(config);\n this.userAgent = config.env?.WIKIMEDIA_USER_AGENT ?? DEFAULT_UA;\n this.timeoutMs = Number(config.env?.WIKIMEDIA_TIMEOUT_MS ?? DEFAULT_TIMEOUT_MS);\n this.logger.info('Wikimedia integration initialized');\n }\n\n async execute(action: string, params: IntegrationParams): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n try {\n let data: unknown;\n switch (action) {\n case 'getPage':\n data = await this.executeWithRetry(() => this.getPage(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n return { success: true, data, metadata: this.createMetadata(action, Date.now() - startTime) };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n /** Look up a title on Wikipedia: description, portrait, lead extract. Empty fields on miss. */\n private async getPage(params: IntegrationParams): Promise<{ title?: string; description?: string; portraitUrl?: string; extract?: string }> {\n const title = String(params.title ?? '').trim();\n if (!title) return {};\n const url =\n `${WIKI_ENDPOINT}?action=query&format=json&redirects=1` +\n `&prop=pageimages|description|extracts&explaintext=1&exintro=1` +\n `&piprop=thumbnail&pithumbsize=240&titles=${encodeURIComponent(title)}`;\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);\n try {\n const res = await fetch(url, { headers: { 'User-Agent': this.userAgent }, signal: ctrl.signal });\n if (!res.ok) return {};\n const data = (await res.json()) as WikiQueryResponse;\n const pages = data.query?.pages;\n if (!pages) return {};\n const page = Object.values(pages)[0];\n if (!page || page.missing !== undefined) return {};\n const extract = typeof page.extract === 'string' ? page.extract.slice(0, EXTRACT_CHAR_CAP).trim() : undefined;\n return {\n title: page.title,\n description: page.description ?? (typeof page.extract === 'string' ? page.extract.split('.')[0] : undefined),\n portraitUrl: page.thumbnail?.source,\n extract,\n };\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\n// Auto-register\nregisterIntegration('wikimedia', WikimediaIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * Iconify integration — brand-logo / icon resolution via the Iconify API.\n * Exposes the three atomic HTTP calls kflow's concept-icon service previously\n * made as ad-hoc `fetch`: existence check, relevance search, and icon-body\n * fetch (for color-tone classification). Caching + tone classification stay\n * in the caller; this owns only the transport (UA, timeout, retry).\n */\nconst ICONIFY_API = 'https://api.iconify.design';\nconst DEFAULT_UA = 'Almadar/1.0 (https://almadar.dev)';\nconst DEFAULT_TIMEOUT_MS = 6000;\n\ninterface IconCollection { icons?: Record<string, { body: string }>; aliases?: Record<string, { body: string }>; }\ninterface SearchResponse { icons?: string[]; }\n\nexport class IconifyIntegration extends BaseIntegration {\n private readonly userAgent: string;\n private readonly timeoutMs: number;\n\n constructor(config: IntegrationConfig) {\n super(config);\n this.userAgent = config.env?.ICONIFY_USER_AGENT ?? DEFAULT_UA;\n this.timeoutMs = Number(config.env?.ICONIFY_TIMEOUT_MS ?? DEFAULT_TIMEOUT_MS);\n this.logger.info('Iconify integration initialized');\n }\n\n async execute(action: string, params: IntegrationParams): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n try {\n let data: unknown;\n switch (action) {\n case 'svgExists':\n data = await this.executeWithRetry(() => this.svgExists(params));\n break;\n case 'search':\n data = await this.executeWithRetry(() => this.search(params));\n break;\n case 'getIconBody':\n data = await this.executeWithRetry(() => this.getIconBody(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n return { success: true, data, metadata: this.createMetadata(action, Date.now() - startTime) };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async svgExists(params: IntegrationParams): Promise<{ exists: boolean }> {\n const path = String(params.path ?? '');\n if (!path) return { exists: false };\n return { exists: await this.headOk(`${ICONIFY_API}/${path}`) };\n }\n\n private async search(params: IntegrationParams): Promise<{ icons: string[] }> {\n const query = String(params.query ?? '');\n if (!query) return { icons: [] };\n const limit = Number(params.limit ?? 1);\n const data = await this.getJson<SearchResponse>(`${ICONIFY_API}/search?query=${encodeURIComponent(query)}&limit=${limit}`);\n return { icons: data?.icons ?? [] };\n }\n\n private async getIconBody(params: IntegrationParams): Promise<{ body: string | null }> {\n const iconId = String(params.iconId ?? '');\n const [prefix, name] = iconId.split(':');\n if (!prefix || !name) return { body: null };\n const data = await this.getJson<IconCollection>(`${ICONIFY_API}/${prefix}.json?icons=${encodeURIComponent(name)}`);\n return { body: data?.icons?.[name]?.body ?? data?.aliases?.[name]?.body ?? null };\n }\n\n private async headOk(url: string): Promise<boolean> {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);\n try {\n const res = await fetch(url, { method: 'GET', headers: { 'User-Agent': this.userAgent }, signal: ctrl.signal });\n return res.ok;\n } catch {\n return false;\n } finally {\n clearTimeout(timer);\n }\n }\n\n private async getJson<T>(url: string): Promise<T | null> {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);\n try {\n const res = await fetch(url, { headers: { 'User-Agent': this.userAgent }, signal: ctrl.signal });\n if (!res.ok) return null;\n return (await res.json()) as T;\n } catch {\n return null;\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\n// Auto-register\nregisterIntegration('iconify', IconifyIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError, IntegrationParams } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * arXiv integration — the live-search backend for the knowledge-worker's\n * \"emerging\" axis (frontier academic concepts beyond the user's graph). Wraps\n * the public Atom API at export.arxiv.org. Chosen as the placeholder web-search\n * vendor; the action shape matches a generic search so the backend can be\n * swapped without touching the rabit tool surface.\n */\nconst ARXIV_ENDPOINT = 'https://export.arxiv.org/api/query';\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst DEFAULT_MAX_RESULTS = 8;\n\nexport interface ArxivResult {\n id: string;\n title: string;\n summary: string;\n authors: string[];\n published: string;\n url: string;\n}\n\n/** Minimal Atom `<entry>` extractor — arXiv's feed is regular; no XML dep needed. */\nfunction parseAtom(xml: string): ArxivResult[] {\n const entries: ArxivResult[] = [];\n for (const block of xml.split('<entry>').slice(1)) {\n const grab = (tag: string): string => {\n const m = block.match(new RegExp(`<${tag}[^>]*>([\\\\s\\\\S]*?)</${tag}>`, 'i'));\n return m ? m[1].replace(/<[^>]+>/g, '').trim() : '';\n };\n const id = grab('id');\n const title = grab('title').replace(/\\s+/g, ' ');\n const summary = grab('summary').replace(/\\s+/g, ' ');\n const published = grab('published');\n const authors = Array.from(block.matchAll(/<author>\\s*<name>([^<]+)<\\/name>/g)).map(m => m[1].trim());\n const linkMatch = block.match(/<link[^>]*rel=\"alternate\"[^>]*href=\"([^\"]+)\"/i);\n const url = linkMatch ? linkMatch[1] : id;\n if (id || title) entries.push({ id, title, summary, authors, published, url });\n }\n return entries;\n}\n\nexport class ArxivIntegration extends BaseIntegration {\n private readonly timeoutMs: number;\n\n constructor(config: IntegrationConfig) {\n super(config);\n this.timeoutMs = Number(config.env?.ARXIV_TIMEOUT_MS ?? DEFAULT_TIMEOUT_MS);\n this.logger.info('arXiv integration initialized');\n }\n\n async execute(action: string, params: IntegrationParams): Promise<IntegrationResult> {\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n try {\n let data: unknown;\n switch (action) {\n case 'search':\n data = await this.executeWithRetry(() => this.search(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n return { success: true, data, metadata: this.createMetadata(action, Date.now() - startTime) };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async search(params: IntegrationParams): Promise<{ results: ArxivResult[] }> {\n const query = String(params.query ?? '').trim();\n if (!query) return { results: [] };\n const maxResults = Number(params.maxResults ?? DEFAULT_MAX_RESULTS);\n // arXiv search_query: quote the term as an all-fields term.\n const url = `${ARXIV_ENDPOINT}?search_query=${encodeURIComponent(`all:${query}`)}&start=0&max_results=${maxResults}&sortBy=relevance`;\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);\n try {\n const res = await fetch(url, { headers: { 'Accept': 'application/atom+xml' }, signal: ctrl.signal });\n if (!res.ok) return { results: [] };\n const xml = await res.text();\n return { results: parseAtom(xml) };\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\n// Auto-register\nregisterIntegration('arxiv', ArxivIntegration);\n","import { BaseIntegration } from '../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationParams } from '../types';\nimport { IntegrationError } from '../types';\n\n/**\n * Mock integration for testing\n */\nexport class MockIntegration extends BaseIntegration {\n private responses: Map<string, unknown> = new Map();\n private calls: Array<{ action: string; params: IntegrationParams }> =\n [];\n\n constructor(config: IntegrationConfig) {\n super(config);\n }\n\n /**\n * Set mock response for an action\n */\n setResponse(action: string, data: unknown): void {\n this.responses.set(action, data);\n }\n\n /**\n * Get all calls made to this integration\n */\n getCalls(): Array<{ action: string; params: IntegrationParams }> {\n return this.calls;\n }\n\n /**\n * Clear all calls\n */\n clearCalls(): void {\n this.calls = [];\n }\n\n async execute(\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> {\n // Record the call\n this.calls.push({ action, params });\n\n const data = this.responses.get(action);\n\n if (!data) {\n return {\n success: false,\n error: new IntegrationError(\n `No mock response for action: ${action}`,\n 'UNKNOWN_ERROR',\n ),\n metadata: this.createMetadata(action, 0),\n };\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, 0),\n };\n }\n}\n","import { IntegrationFactory } from '../factory';\nimport type { IntegrationResult, IntegrationParams } from '../types';\nimport type {\n IntegrationContracts,\n IntegrationName,\n IntegrationActionName,\n} from '../contracts';\n\n/**\n * Signature of the call-service handler returned by `createCallServiceHandler`\n * and `RuntimeIntegrationManager.getCallServiceHandler`. Exported so that\n * consumers (e.g. orbital-codegen-emitted `clients.ts`) can give the value\n * a public type and avoid TS2742 \"inferred type cannot be named without a\n * reference to <bundler-internal>\" errors when emitting `.d.ts`.\n *\n * Overloaded: when the caller passes a service + action LITERAL pair the\n * compiler narrows to `IntegrationContracts[Service][Action]['result']`.\n * Codegen-emitted call sites pass string literals (`callService('github',\n * 'listIssues', ...)`) so they get the typed result for free and no\n * longer need a `: unknown` annotation or downstream `as <Result>` casts.\n * The wide fallback signature keeps non-literal call sites (e.g. dynamic\n * dispatch via `manager.getCallServiceHandler()`) working.\n */\nexport interface CallServiceHandler {\n <S extends IntegrationName, A extends IntegrationActionName<S>>(\n service: S,\n action: A,\n params: IntegrationContracts[S][A] extends { params: infer P } ? P : IntegrationParams | undefined,\n ): Promise<\n IntegrationContracts[S][A] extends { result: infer R } ? R : unknown\n >;\n (\n service: string,\n action: string,\n params: IntegrationParams | undefined,\n ): Promise<unknown>;\n}\n\n/**\n * Create a callService effect handler for @almadar/runtime.\n *\n * The implementation is the wide form `(string, string, params) =>\n * Promise<unknown>` — at runtime we don't know which action's result\n * shape to return. The handler is returned as `CallServiceHandler`,\n * whose typed overload narrows to `IntegrationContracts[S][A]['result']`\n * at every literal call site (codegen-emitted `callService('github',\n * 'listIssues', ...)` gets typed result for free). The cast is to a\n * specific callable interface — not `unknown` / `any` — so the\n * `no-as-any` / `no-unknown-type` rules are unaffected.\n */\nexport function createCallServiceHandler(factory: IntegrationFactory): CallServiceHandler {\n const handler = async (\n service: string,\n action: string,\n params: IntegrationParams | undefined,\n ): Promise<unknown> => {\n const result = await factory.execute(service, action, params || {});\n\n if (!result.success) {\n throw result.error;\n }\n\n return result.data;\n };\n return handler as CallServiceHandler;\n}\n","import { createRequire } from 'node:module';\nimport { IntegrationFactory } from '../factory';\nimport { MockIntegration } from '../mocks/MockIntegration';\nimport { createCallServiceHandler, type CallServiceHandler } from './effectHandler';\nimport type { IntegrationResult, IntegrationParams } from '../types';\n\n/** Mock data value types generated from response shapes */\ntype MockValue = string | number | boolean | Record<string, never> | never[];\n\n/**\n * Generate mock data from a responseShape definition.\n * Maps type strings to realistic placeholder values.\n */\nfunction generateMockFromShape(shape: Record<string, string>): Record<string, MockValue> {\n const data: Record<string, MockValue> = {};\n for (const [key, type] of Object.entries(shape)) {\n switch (type) {\n case 'string': data[key] = `mock_${key}`; break;\n case 'number': data[key] = 42; break;\n case 'boolean': data[key] = true; break;\n case 'object': data[key] = {}; break;\n case 'string[]': data[key] = []; break;\n default: data[key] = `mock_${key}`;\n }\n }\n return data;\n}\n\n/**\n * Runtime integration manager\n * Auto-configures integrations from environment variables.\n * When USE_MOCK_DATA=true, registers mock integrations for all services\n * using response shapes from services-registry.json.\n */\nexport class RuntimeIntegrationManager {\n private factory: IntegrationFactory;\n\n constructor() {\n this.factory = new IntegrationFactory();\n this.installNotConfiguredFallback();\n }\n\n /**\n * Wrap `factory.execute` so an unknown/unconfigured service echoes its\n * params instead of throwing. This makes the manager safe to install as a\n * default `callService` handler (e.g. the playground sidecar) without every\n * service being configured. REAL execution errors (API failures, bad\n * params, schema violations) still propagate so the circuit's failure\n * events fire — only the two \"not set up\" errors (`Unknown integration`,\n * `Integration not configured`) are caught. Subsumes the broader wrapper\n * that previously lived inside `configureMockMode`.\n */\n private installNotConfiguredFallback(): void {\n const originalExecute = this.factory.execute.bind(this.factory);\n this.factory.execute = async (\n integration: string,\n action: string,\n params: IntegrationParams,\n ): Promise<IntegrationResult> => {\n try {\n return await originalExecute(integration, action, params);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (/Unknown integration|not configured/i.test(msg)) {\n return {\n success: true,\n data: { ...params, _mock: true, _service: integration, _action: action },\n metadata: { integration, action, duration: 0, retries: 0, timestamp: Date.now() },\n };\n }\n throw err;\n }\n };\n }\n\n /**\n * Configure from environment variables.\n * In mock mode (USE_MOCK_DATA=true), all services return realistic mock data.\n */\n configureFromEnv(): void {\n const env = process.env;\n\n if (env.USE_MOCK_DATA === 'true') {\n this.configureMockMode();\n return;\n }\n\n // Stripe\n if (env.STRIPE_SECRET_KEY) {\n this.factory.configure('stripe', {\n env: {\n STRIPE_SECRET_KEY: env.STRIPE_SECRET_KEY,\n },\n });\n }\n\n // YouTube\n if (env.YOUTUBE_API_KEY) {\n this.factory.configure('youtube', {\n env: {\n YOUTUBE_API_KEY: env.YOUTUBE_API_KEY,\n },\n });\n }\n\n // Twilio\n if (env.TWILIO_ACCOUNT_SID && env.TWILIO_AUTH_TOKEN) {\n this.factory.configure('twilio', {\n env: {\n TWILIO_ACCOUNT_SID: env.TWILIO_ACCOUNT_SID,\n TWILIO_AUTH_TOKEN: env.TWILIO_AUTH_TOKEN,\n TWILIO_PHONE_NUMBER: env.TWILIO_PHONE_NUMBER || '',\n },\n });\n }\n\n // Email (SendGrid)\n if (env.SENDGRID_API_KEY) {\n this.factory.configure('email', {\n env: {\n PROVIDER: 'sendgrid',\n SENDGRID_API_KEY: env.SENDGRID_API_KEY,\n FROM_EMAIL: env.FROM_EMAIL || 'noreply@example.com',\n },\n });\n }\n // Email (Resend)\n else if (env.RESEND_API_KEY) {\n this.factory.configure('email', {\n env: {\n PROVIDER: 'resend',\n RESEND_API_KEY: env.RESEND_API_KEY,\n FROM_EMAIL: env.FROM_EMAIL || 'noreply@example.com',\n },\n });\n }\n\n // LLM — configure when any provider key (or an explicit PROVIDER) is\n // present. Pass every available key through and let the integration\n // auto-detect the provider via getAvailableProvider(), so deepseek /\n // openrouter / kimi work without a per-provider branch here. Embeddings\n // (the `embed` action) default to OpenRouter `baai/bge-base-en-v1.5`\n // unless EMBEDDING_* overrides.\n const llmEnv: Record<string, string> = {};\n for (const k of ['ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'DEEPSEEK_API_KEY', 'KIMI_API_KEY', 'OPEN_ROUTER_API_KEY']) {\n if (env[k]) llmEnv[k] = env[k] as string;\n }\n if (env.PROVIDER) llmEnv.PROVIDER = env.PROVIDER;\n for (const k of ['EMBEDDING_PROVIDER', 'EMBEDDING_MODEL', 'EMBEDDING_API_KEY']) {\n if (env[k]) llmEnv[k] = env[k] as string;\n }\n if (Object.keys(llmEnv).length > 0) {\n this.factory.configure('llm', { env: llmEnv });\n }\n\n // ML (model inference via a deployed serving orbital)\n if (env.MASAR_URL && env.MASAR_ML_TRAIT) {\n this.factory.configure('ml', {\n env: {\n MASAR_URL: env.MASAR_URL,\n MASAR_ML_TRAIT: env.MASAR_ML_TRAIT,\n MASAR_ML_TIMEOUT_MS: env.MASAR_ML_TIMEOUT_MS || '',\n },\n });\n }\n\n // DeepAgent\n if (env.DEEPAGENT_API_URL) {\n this.factory.configure('deepagent', {\n env: {\n DEEPAGENT_API_URL: env.DEEPAGENT_API_URL,\n DEEPAGENT_API_KEY: env.DEEPAGENT_API_KEY || '',\n },\n });\n }\n\n // GitHub\n if (env.GITHUB_TOKEN) {\n this.factory.configure('github', {\n env: {\n GITHUB_TOKEN: env.GITHUB_TOKEN,\n GITHUB_OWNER: env.GITHUB_OWNER || '',\n GITHUB_REPO: env.GITHUB_REPO || '',\n GITHUB_WORK_DIR: env.GITHUB_WORK_DIR || '',\n },\n });\n }\n }\n\n /**\n * Configure mock mode: register MockIntegration for all known services\n * with auto-generated responses from the services registry.\n */\n private configureMockMode(): void {\n // Load registry and populate mocks\n const registry = this.loadServicesRegistry();\n\n for (const [serviceName, service] of Object.entries(registry)) {\n const mock = new MockIntegration({ name: serviceName, env: {} });\n\n for (const action of service.actions) {\n if (action.responseShape && Object.keys(action.responseShape).length > 0) {\n mock.setResponse(action.name, generateMockFromShape(action.responseShape));\n } else {\n // No responseShape defined: return generic success\n mock.setResponse(action.name, { success: true, _mock: true, _action: action.name });\n }\n }\n\n this.factory.configure(serviceName, { env: {} });\n this.factory.registerInstance(serviceName, mock);\n }\n\n // Unknown/unconfigured services (e.g. custom-bearer-api) are echoed by\n // the constructor's `installNotConfiguredFallback`; nothing more to do.\n }\n\n /**\n * Load services registry from @almadar/core/patterns.\n * Returns a map of service name to { actions: [...] }.\n */\n private loadServicesRegistry(): Record<string, { actions: Array<{ name: string; responseShape: Record<string, string> }> }> {\n try {\n const esmRequire = createRequire(import.meta.url);\n const registry = esmRequire('@almadar/core/patterns/services-registry.json') as {\n services: Record<string, { actions: Array<{ name: string; responseShape: Record<string, string> }> }>;\n };\n return registry.services;\n } catch {\n // Registry not available (e.g., not installed). Return empty - fallback mock handles everything.\n return {};\n }\n }\n\n /**\n * Get effect handler for runtime. Annotated with `CallServiceHandler` so\n * the inferred type at consumer call sites resolves to a public exported\n * name instead of a tsup-bundler-generated chunk path (which causes\n * TS2742 in `.d.ts` emit).\n */\n getCallServiceHandler(): CallServiceHandler {\n return createCallServiceHandler(this.factory);\n }\n\n /**\n * Get factory (for advanced usage)\n */\n getFactory(): IntegrationFactory {\n return this.factory;\n }\n}\n"]}
|