@bubblelab/shared-schemas 0.1.12 → 0.1.13

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.
Files changed (113) hide show
  1. package/dist/index.d.ts +10076 -29
  2. package/dist/index.js +3328 -30
  3. package/dist/index.js.map +1 -1
  4. package/package.json +3 -2
  5. package/dist/agent-memory.d.ts +0 -21
  6. package/dist/agent-memory.d.ts.map +0 -1
  7. package/dist/agent-memory.js +0 -11
  8. package/dist/agent-memory.js.map +0 -1
  9. package/dist/ai-models.d.ts +0 -4
  10. package/dist/ai-models.d.ts.map +0 -1
  11. package/dist/ai-models.js +0 -31
  12. package/dist/ai-models.js.map +0 -1
  13. package/dist/api-schema.d.ts +0 -38
  14. package/dist/api-schema.d.ts.map +0 -1
  15. package/dist/api-schema.js +0 -26
  16. package/dist/api-schema.js.map +0 -1
  17. package/dist/bubble-definition-schema.d.ts +0 -840
  18. package/dist/bubble-definition-schema.d.ts.map +0 -1
  19. package/dist/bubble-definition-schema.js +0 -299
  20. package/dist/bubble-definition-schema.js.map +0 -1
  21. package/dist/bubbleflow-execution-schema.d.ts +0 -1297
  22. package/dist/bubbleflow-execution-schema.d.ts.map +0 -1
  23. package/dist/bubbleflow-execution-schema.js +0 -360
  24. package/dist/bubbleflow-execution-schema.js.map +0 -1
  25. package/dist/bubbleflow-generation-prompts.d.ts +0 -8
  26. package/dist/bubbleflow-generation-prompts.d.ts.map +0 -1
  27. package/dist/bubbleflow-generation-prompts.js +0 -17
  28. package/dist/bubbleflow-generation-prompts.js.map +0 -1
  29. package/dist/bubbleflow-schema.d.ts +0 -2071
  30. package/dist/bubbleflow-schema.d.ts.map +0 -1
  31. package/dist/bubbleflow-schema.js +0 -336
  32. package/dist/bubbleflow-schema.js.map +0 -1
  33. package/dist/coffee.d.ts +0 -2201
  34. package/dist/coffee.d.ts.map +0 -1
  35. package/dist/coffee.js +0 -257
  36. package/dist/coffee.js.map +0 -1
  37. package/dist/credential-schema.d.ts +0 -574
  38. package/dist/credential-schema.d.ts.map +0 -1
  39. package/dist/credential-schema.js +0 -829
  40. package/dist/credential-schema.js.map +0 -1
  41. package/dist/cron-utils.d.ts +0 -47
  42. package/dist/cron-utils.d.ts.map +0 -1
  43. package/dist/cron-utils.js +0 -228
  44. package/dist/cron-utils.js.map +0 -1
  45. package/dist/database-definition-schema.d.ts +0 -97
  46. package/dist/database-definition-schema.d.ts.map +0 -1
  47. package/dist/database-definition-schema.js +0 -36
  48. package/dist/database-definition-schema.js.map +0 -1
  49. package/dist/error-enhancer.d.ts +0 -6
  50. package/dist/error-enhancer.d.ts.map +0 -1
  51. package/dist/error-enhancer.js +0 -88
  52. package/dist/error-enhancer.js.map +0 -1
  53. package/dist/generate-bubbleflow-schema.d.ts +0 -1525
  54. package/dist/generate-bubbleflow-schema.d.ts.map +0 -1
  55. package/dist/generate-bubbleflow-schema.js +0 -304
  56. package/dist/generate-bubbleflow-schema.js.map +0 -1
  57. package/dist/hash-utils.d.ts +0 -26
  58. package/dist/hash-utils.d.ts.map +0 -1
  59. package/dist/hash-utils.js +0 -37
  60. package/dist/hash-utils.js.map +0 -1
  61. package/dist/index.d.ts.map +0 -1
  62. package/dist/milk-tea.d.ts +0 -106
  63. package/dist/milk-tea.d.ts.map +0 -1
  64. package/dist/milk-tea.js +0 -71
  65. package/dist/milk-tea.js.map +0 -1
  66. package/dist/mock-data-generator.d.ts +0 -51
  67. package/dist/mock-data-generator.d.ts.map +0 -1
  68. package/dist/mock-data-generator.js +0 -335
  69. package/dist/mock-data-generator.js.map +0 -1
  70. package/dist/oauth-schema.d.ts +0 -61
  71. package/dist/oauth-schema.d.ts.map +0 -1
  72. package/dist/oauth-schema.js +0 -75
  73. package/dist/oauth-schema.js.map +0 -1
  74. package/dist/param-utils.d.ts +0 -10
  75. package/dist/param-utils.d.ts.map +0 -1
  76. package/dist/param-utils.js +0 -13
  77. package/dist/param-utils.js.map +0 -1
  78. package/dist/pearl.d.ts +0 -346
  79. package/dist/pearl.d.ts.map +0 -1
  80. package/dist/pearl.js +0 -90
  81. package/dist/pearl.js.map +0 -1
  82. package/dist/rice.d.ts +0 -100
  83. package/dist/rice.d.ts.map +0 -1
  84. package/dist/rice.js +0 -65
  85. package/dist/rice.js.map +0 -1
  86. package/dist/storage-utils.d.ts +0 -19
  87. package/dist/storage-utils.d.ts.map +0 -1
  88. package/dist/storage-utils.js +0 -54
  89. package/dist/storage-utils.js.map +0 -1
  90. package/dist/streaming-events.d.ts +0 -140
  91. package/dist/streaming-events.d.ts.map +0 -1
  92. package/dist/streaming-events.js +0 -5
  93. package/dist/streaming-events.js.map +0 -1
  94. package/dist/subscription-status-schema.d.ts +0 -250
  95. package/dist/subscription-status-schema.d.ts.map +0 -1
  96. package/dist/subscription-status-schema.js +0 -144
  97. package/dist/subscription-status-schema.js.map +0 -1
  98. package/dist/trigger.d.ts +0 -113
  99. package/dist/trigger.d.ts.map +0 -1
  100. package/dist/trigger.js +0 -12
  101. package/dist/trigger.js.map +0 -1
  102. package/dist/types.d.ts +0 -31
  103. package/dist/types.d.ts.map +0 -1
  104. package/dist/types.js +0 -47
  105. package/dist/types.js.map +0 -1
  106. package/dist/waitlist-schema.d.ts +0 -30
  107. package/dist/waitlist-schema.d.ts.map +0 -1
  108. package/dist/waitlist-schema.js +0 -39
  109. package/dist/waitlist-schema.js.map +0 -1
  110. package/dist/webhook-schema.d.ts +0 -95
  111. package/dist/webhook-schema.d.ts.map +0 -1
  112. package/dist/webhook-schema.js +0 -50
  113. package/dist/webhook-schema.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,6CAA6C;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"sources":["../src/api-schema.ts","../src/database-definition-schema.ts","../src/types.ts","../src/credential-schema.ts","../src/bubble-definition-schema.ts","../src/mock-data-generator.ts","../src/oauth-schema.ts","../src/waitlist-schema.ts","../src/bubbleflow-schema.ts","../src/bubbleflow-execution-schema.ts","../src/generate-bubbleflow-schema.ts","../src/coffee.ts","../src/webhook-schema.ts","../src/subscription-status-schema.ts","../src/milk-tea.ts","../src/ai-models.ts","../src/agent-memory.ts","../src/pearl.ts","../src/rice.ts","../src/bubbleflow-generation-prompts.ts","../src/cron-utils.ts","../src/trigger.ts","../src/storage-utils.ts","../src/param-utils.ts","../src/error-enhancer.ts","../src/hash-utils.ts"],"sourcesContent":["import { z } from '@hono/zod-openapi';\n\nexport const errorResponseSchema = z\n .object({\n error: z.string().openapi({\n description: 'Error message',\n example: 'Validation failed',\n }),\n details: z.string().optional().openapi({\n description: 'Additional error details',\n example: 'Invalid field: name is required',\n }),\n })\n .openapi('ErrorResponse');\n\nexport type ErrorResponse = z.infer<typeof errorResponseSchema>;\n\nexport interface HealthCheckResponse {\n message: string;\n timestamp: string;\n}\n\nexport const slackUrlVerificationSchema = z.object({\n token: z.string(),\n challenge: z.string(),\n type: z.literal('url_verification'),\n});\n\nexport const slackUrlVerificationResponseSchema = z\n .object({\n challenge: z\n .string()\n .openapi({ description: 'Slack URL verification challenge' }),\n })\n .openapi('SlackUrlVerificationResponse');\n\nexport type SlackUrlVerificationResponse = z.infer<\n typeof slackUrlVerificationResponseSchema\n>;\n","/**\n * Database Definition Schema\n *\n * This schema is designed to store database table definitions and metadata\n */\n\nimport { z } from '@hono/zod-openapi';\n\n// Database connection types for frontend display\nexport interface DatabaseConnection {\n id: string;\n name: string;\n type: 'postgresql' | 'mysql' | 'mongodb' | 'bigquery' | 'sqlite';\n host: string;\n port: number;\n database: string;\n username?: string;\n status: 'connected' | 'disconnected' | 'error';\n createdAt: string;\n lastUsed: string;\n description?: string;\n}\n\nexport type DatabaseStatus = 'connected' | 'disconnected' | 'error';\nexport type DatabaseType =\n | 'postgresql'\n | 'mysql'\n | 'mongodb'\n | 'bigquery'\n | 'sqlite';\n\n// Database schema types for table structure display\nexport interface DatabaseColumn {\n name: string;\n type: string;\n isNullable: boolean;\n defaultValue?: string;\n constraints?: string[];\n}\n\nexport interface DatabaseTable {\n name: string;\n schema: string;\n columns: DatabaseColumn[];\n rowCount?: number;\n size?: string;\n}\n\nexport interface DatabaseSchema {\n tables: DatabaseTable[];\n totalTables: number;\n totalSize?: string;\n}\n\n// Schema for database metadata that can be stored in credentials\nexport const databaseMetadataSchema = z.object({\n // Core database definition - mapping of table names to column definitions\n // Format: { [tableName]: { [columnName]: columnType } }\n tables: z.record(\n z.string(), // table name\n z.record(\n z.string(), // column name\n z.string() // notes about it\n )\n ),\n // Table-level notes - mapping of table names to notes about the entire table\n tableNotes: z.record(z.string(), z.string()).optional(),\n // Optional metadata\n databaseName: z.string().optional(),\n databaseType: z\n .enum(['postgresql', 'mysql', 'sqlite', 'mssql', 'oracle'])\n .optional(),\n // Rules and constraints - simplified to match frontend\n rules: z\n .array(\n z.object({\n id: z.string(),\n text: z.string(),\n enabled: z.boolean(),\n createdAt: z.string(), // ISO string\n updatedAt: z.string(), // ISO string\n })\n )\n .optional(),\n // Additional context\n notes: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\nexport type DatabaseMetadata = z.infer<typeof databaseMetadataSchema>;\n","// Define CredentialType enum here to avoid circular dependencies\n\nexport enum CredentialType {\n // AI Credentials\n OPENAI_CRED = 'OPENAI_CRED',\n GOOGLE_GEMINI_CRED = 'GOOGLE_GEMINI_CRED',\n ANTHROPIC_CRED = 'ANTHROPIC_CRED',\n OPENROUTER_CRED = 'OPENROUTER_CRED',\n // Search Credentials\n FIRECRAWL_API_KEY = 'FIRECRAWL_API_KEY',\n // Database Credentials\n DATABASE_CRED = 'DATABASE_CRED',\n // Communication Credentials\n SLACK_CRED = 'SLACK_CRED',\n TELEGRAM_BOT_TOKEN = 'TELEGRAM_BOT_TOKEN',\n // Email Credentials\n RESEND_CRED = 'RESEND_CRED',\n // Storage Credentials\n CLOUDFLARE_R2_ACCESS_KEY = 'CLOUDFLARE_R2_ACCESS_KEY',\n CLOUDFLARE_R2_SECRET_KEY = 'CLOUDFLARE_R2_SECRET_KEY',\n CLOUDFLARE_R2_ACCOUNT_ID = 'CLOUDFLARE_R2_ACCOUNT_ID',\n // Scraping Credentials\n APIFY_CRED = 'APIFY_CRED',\n\n // Voice Credentials\n ELEVENLABS_API_KEY = 'ELEVENLABS_API_KEY',\n\n // OAuth Credentials\n GOOGLE_DRIVE_CRED = 'GOOGLE_DRIVE_CRED',\n GMAIL_CRED = 'GMAIL_CRED',\n GOOGLE_SHEETS_CRED = 'GOOGLE_SHEETS_CRED',\n GOOGLE_CALENDAR_CRED = 'GOOGLE_CALENDAR_CRED',\n FUB_CRED = 'FUB_CRED',\n NOTION_OAUTH_TOKEN = 'NOTION_OAUTH_TOKEN',\n\n // Development Platform Credentials\n GITHUB_TOKEN = 'GITHUB_TOKEN',\n\n // Browser Automation Credentials\n AGI_API_KEY = 'AGI_API_KEY',\n\n // Database/Storage Credentials\n AIRTABLE_CRED = 'AIRTABLE_CRED',\n\n // InsForge Credentials\n INSFORGE_BASE_URL = 'INSFORGE_BASE_URL',\n INSFORGE_API_KEY = 'INSFORGE_API_KEY',\n\n // Custom Authentication Credentials\n CUSTOM_AUTH_KEY = 'CUSTOM_AUTH_KEY',\n\n // Browser Session Credentials (BrowserBase-powered)\n AMAZON_CRED = 'AMAZON_CRED',\n}\n\n// Define all bubble names as a union type for type safety\nexport type BubbleName =\n | 'hello-world'\n | 'ai-agent'\n | 'postgresql'\n | 'slack'\n | 'resend'\n | 'http'\n | 'slack-formatter-agent'\n | 'database-analyzer'\n | 'slack-notifier'\n | 'get-bubble-details-tool'\n | 'list-bubbles-tool'\n | 'sql-query-tool'\n | 'chart-js-tool'\n | 'web-search-tool'\n | 'web-scrape-tool'\n | 'web-crawl-tool'\n | 'web-extract-tool'\n | 'research-agent-tool'\n | 'reddit-scrape-tool'\n | 'slack-data-assistant'\n | 'bubbleflow-code-generator'\n | 'bubbleflow-generator'\n | 'pdf-form-operations'\n | 'pdf-ocr-workflow'\n | 'generate-document-workflow'\n | 'parse-document-workflow'\n | 'bubbleflow-validation-tool'\n | 'code-edit-tool'\n | 'storage'\n | 'google-drive'\n | 'gmail'\n | 'google-sheets'\n | 'google-calendar'\n | 'apify'\n | 'instagram-tool'\n | 'linkedin-tool'\n | 'tiktok-tool'\n | 'twitter-tool'\n | 'google-maps-tool'\n | 'youtube-tool'\n | 'github'\n | 'eleven-labs'\n | 'followupboss'\n | 'agi-inc'\n | 'telegram'\n | 'airtable'\n | 'notion'\n | 'firecrawl'\n | 'insforge-db'\n | 'browserbase'\n | 'amazon-shopping-tool';\n","import { BubbleName, CredentialType } from './types.js';\nimport { z } from '@hono/zod-openapi';\nimport { databaseMetadataSchema } from './database-definition-schema.js';\n\n/**\n * Configuration for a credential type displayed in the UI\n */\nexport interface CredentialConfig {\n label: string;\n description: string;\n placeholder: string;\n namePlaceholder: string;\n credentialConfigurations: Record<string, unknown>;\n}\n\n/**\n * Configuration for all credential types - used by Credentials page and AI agents\n */\nexport const CREDENTIAL_TYPE_CONFIG: Record<CredentialType, CredentialConfig> =\n {\n [CredentialType.OPENAI_CRED]: {\n label: 'OpenAI',\n description: 'API key for OpenAI services (GPT models, embeddings, etc.)',\n placeholder: 'sk-...',\n namePlaceholder: 'My OpenAI API Key',\n credentialConfigurations: {},\n },\n [CredentialType.GOOGLE_GEMINI_CRED]: {\n label: 'Google Gemini',\n description: 'API key for Google Gemini AI models',\n placeholder: 'AIza...',\n namePlaceholder: 'My Google Gemini Key',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.ANTHROPIC_CRED]: {\n label: 'Anthropic',\n description: 'API key for Anthropic Claude models',\n placeholder: 'sk-ant-...',\n namePlaceholder: 'My Anthropic API Key',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.DATABASE_CRED]: {\n label: 'Database (PostgreSQL)',\n description: 'Database connection string for PostgreSQL',\n placeholder: 'postgresql://user:pass@host:port/dbname',\n namePlaceholder: 'My PostgreSQL Database',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.FIRECRAWL_API_KEY]: {\n label: 'Firecrawl',\n description: 'API key for Firecrawl web scraping and search services',\n placeholder: 'fc-...',\n namePlaceholder: 'My Firecrawl API Key',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.SLACK_CRED]: {\n label: 'Slack',\n description:\n 'Slack Bot token (xoxb-) or User token (xoxp-) from api.slack.com/apps. Configure scopes in OAuth & Permissions.',\n placeholder: 'xoxb-... or xoxp-...',\n namePlaceholder: 'My Slack Token',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.RESEND_CRED]: {\n label: 'Resend',\n description: 'Your Resend API key for email services',\n placeholder: 're_...',\n namePlaceholder: 'My Resend API Key',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.OPENROUTER_CRED]: {\n label: 'OpenRouter',\n description: 'API key for OpenRouter services',\n placeholder: 'sk-or-...',\n namePlaceholder: 'My OpenRouter API Key',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.CLOUDFLARE_R2_ACCESS_KEY]: {\n label: 'Cloudflare R2 Access Key',\n description: 'Access key for Cloudflare R2 storage',\n placeholder: 'Enter your access key',\n namePlaceholder: 'My R2 Access Key',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.CLOUDFLARE_R2_SECRET_KEY]: {\n label: 'Cloudflare R2 Secret Key',\n description: 'Secret key for Cloudflare R2 storage',\n placeholder: 'Enter your secret key',\n namePlaceholder: 'My R2 Secret Key',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.CLOUDFLARE_R2_ACCOUNT_ID]: {\n label: 'Cloudflare R2 Account ID',\n description: 'Account ID for Cloudflare R2 storage',\n placeholder: 'Enter your account ID',\n namePlaceholder: 'My R2 Account ID',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.APIFY_CRED]: {\n label: 'Apify',\n description: 'API token for Apify platform (web scraping, automation)',\n placeholder: 'apify_api_...',\n namePlaceholder: 'My Apify API Token',\n credentialConfigurations: {},\n },\n [CredentialType.GOOGLE_DRIVE_CRED]: {\n label: 'Google Drive',\n description: 'OAuth connection to Google Drive for file access',\n placeholder: '', // Not used for OAuth\n namePlaceholder: 'My Google Drive Connection',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.GMAIL_CRED]: {\n label: 'Gmail',\n description: 'OAuth connection to Gmail for email management',\n placeholder: '', // Not used for OAuth\n namePlaceholder: 'My Gmail Connection',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.GOOGLE_SHEETS_CRED]: {\n label: 'Google Sheets',\n description:\n 'OAuth connection to Google Sheets for spreadsheet management',\n placeholder: '', // Not used for OAuth\n namePlaceholder: 'My Google Sheets Connection',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.GOOGLE_CALENDAR_CRED]: {\n label: 'Google Calendar',\n description:\n 'OAuth connection to Google Calendar for events and schedules',\n placeholder: '', // Not used for OAuth\n namePlaceholder: 'My Google Calendar Connection',\n credentialConfigurations: {\n ignoreSSL: false,\n },\n },\n [CredentialType.FUB_CRED]: {\n label: 'Follow Up Boss',\n description:\n 'OAuth connection to Follow Up Boss CRM for contacts, tasks, and deals',\n placeholder: '', // Not used for OAuth\n namePlaceholder: 'My Follow Up Boss Connection',\n credentialConfigurations: {},\n },\n [CredentialType.NOTION_OAUTH_TOKEN]: {\n label: 'Notion',\n description:\n 'OAuth connection to your Notion workspace (pages, databases, search)',\n placeholder: '', // Not used for OAuth\n namePlaceholder: 'My Notion Connection',\n credentialConfigurations: {},\n },\n [CredentialType.GITHUB_TOKEN]: {\n label: 'GitHub',\n description:\n 'Personal Access Token for GitHub API (read repos, PRs, issues)',\n placeholder: 'github_pat...',\n namePlaceholder: 'My GitHub Token',\n credentialConfigurations: {},\n },\n [CredentialType.ELEVENLABS_API_KEY]: {\n label: 'Eleven Labs API Key',\n description: 'Your API key from Eleven Labs',\n placeholder: 'agent_...',\n namePlaceholder: 'My Eleven Labs Key',\n credentialConfigurations: {},\n },\n [CredentialType.AGI_API_KEY]: {\n label: 'AGI Inc API Key',\n description: 'Your API key from AGI Inc',\n placeholder: 'api_...',\n namePlaceholder: 'My AGI Inc Key',\n credentialConfigurations: {},\n },\n [CredentialType.TELEGRAM_BOT_TOKEN]: {\n label: 'Telegram Bot Token',\n description: 'Your Telegram bot token',\n placeholder: 'bot_...',\n namePlaceholder: 'My Telegram Bot Token',\n credentialConfigurations: {},\n },\n [CredentialType.AIRTABLE_CRED]: {\n label: 'Airtable',\n description:\n 'Personal Access Token for Airtable API (manage bases, tables, records)',\n placeholder: 'pat...',\n namePlaceholder: 'My Airtable Token',\n credentialConfigurations: {},\n },\n [CredentialType.INSFORGE_BASE_URL]: {\n label: 'InsForge Base URL',\n description:\n 'Base URL for your InsForge backend (e.g., https://your-app.region.insforge.app)',\n placeholder: 'https://your-app.region.insforge.app',\n namePlaceholder: 'My InsForge Backend URL',\n credentialConfigurations: {},\n },\n [CredentialType.INSFORGE_API_KEY]: {\n label: 'InsForge API Key',\n description: 'API key for your InsForge backend',\n placeholder: 'ik_...',\n namePlaceholder: 'My InsForge API Key',\n credentialConfigurations: {},\n },\n [CredentialType.CUSTOM_AUTH_KEY]: {\n label: 'Custom Authentication Key',\n description:\n 'Custom API key or authentication token for HTTP requests (Bearer, Basic, X-API-Key, etc.)',\n placeholder: 'Enter your API key or token...',\n namePlaceholder: 'My Custom Auth Key',\n credentialConfigurations: {},\n },\n [CredentialType.AMAZON_CRED]: {\n label: 'Amazon',\n description:\n 'Browser session authentication for Amazon shopping (cart, orders, purchases). Authenticate by logging into your Amazon account in a secure browser session.',\n placeholder: '', // Not used for browser session auth\n namePlaceholder: 'My Amazon Account',\n credentialConfigurations: {},\n },\n } as const satisfies Record<CredentialType, CredentialConfig>;\n\n/**\n * Generate a human-readable summary of available credentials for AI agents\n */\nexport function generateCredentialsSummary(): string {\n const lines: string[] = ['Available credentials that users can configure:'];\n\n for (const [credType, config] of Object.entries(CREDENTIAL_TYPE_CONFIG)) {\n lines.push(`- ${config.label} (${credType}): ${config.description}`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Maps credential types to their environment variable names (for backend only!!!!)\n */\nexport const CREDENTIAL_ENV_MAP: Record<CredentialType, string> = {\n [CredentialType.OPENAI_CRED]: 'OPENAI_API_KEY',\n [CredentialType.GOOGLE_GEMINI_CRED]: 'GOOGLE_API_KEY',\n [CredentialType.ANTHROPIC_CRED]: 'ANTHROPIC_API_KEY',\n [CredentialType.FIRECRAWL_API_KEY]: 'FIRE_CRAWL_API_KEY',\n [CredentialType.DATABASE_CRED]: 'BUBBLE_CONNECTING_STRING_URL',\n [CredentialType.SLACK_CRED]: 'SLACK_TOKEN',\n [CredentialType.TELEGRAM_BOT_TOKEN]: 'TELEGRAM_BOT_TOKEN',\n [CredentialType.RESEND_CRED]: 'RESEND_API_KEY',\n [CredentialType.OPENROUTER_CRED]: 'OPENROUTER_API_KEY',\n [CredentialType.CLOUDFLARE_R2_ACCESS_KEY]: 'CLOUDFLARE_R2_ACCESS_KEY',\n [CredentialType.CLOUDFLARE_R2_SECRET_KEY]: 'CLOUDFLARE_R2_SECRET_KEY',\n [CredentialType.CLOUDFLARE_R2_ACCOUNT_ID]: 'CLOUDFLARE_R2_ACCOUNT_ID',\n [CredentialType.APIFY_CRED]: 'APIFY_API_TOKEN',\n [CredentialType.ELEVENLABS_API_KEY]: 'ELEVENLABS_API_KEY',\n [CredentialType.GOOGLE_DRIVE_CRED]: '',\n [CredentialType.GMAIL_CRED]: '',\n [CredentialType.GOOGLE_SHEETS_CRED]: '',\n [CredentialType.GOOGLE_CALENDAR_CRED]: '',\n [CredentialType.FUB_CRED]: '',\n [CredentialType.GITHUB_TOKEN]: 'GITHUB_TOKEN',\n [CredentialType.AGI_API_KEY]: 'AGI_API_KEY',\n [CredentialType.AIRTABLE_CRED]: 'AIRTABLE_API_KEY',\n [CredentialType.NOTION_OAUTH_TOKEN]: '',\n [CredentialType.INSFORGE_BASE_URL]: 'INSFORGE_BASE_URL',\n [CredentialType.INSFORGE_API_KEY]: 'INSFORGE_API_KEY',\n [CredentialType.CUSTOM_AUTH_KEY]: '', // User-provided, no env var\n [CredentialType.AMAZON_CRED]: '', // Browser session credential, no env var\n};\n\n/** Used by bubblelab studio */\nexport const SYSTEM_CREDENTIALS = new Set<CredentialType>([\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.FIRECRAWL_API_KEY,\n CredentialType.OPENAI_CRED,\n CredentialType.ANTHROPIC_CRED,\n CredentialType.RESEND_CRED,\n CredentialType.OPENROUTER_CRED,\n // Cloudflare R2 Storage credentials\n CredentialType.CLOUDFLARE_R2_ACCESS_KEY,\n CredentialType.CLOUDFLARE_R2_SECRET_KEY,\n CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,\n // Scraping credentials\n CredentialType.APIFY_CRED,\n]);\n\n/**\n * Credentials that are optional (not required) for their associated bubbles.\n * These will not show as \"missing\" in the UI when not selected.\n */\nexport const OPTIONAL_CREDENTIALS = new Set<CredentialType>([\n CredentialType.CUSTOM_AUTH_KEY,\n]);\n\n/**\n * OAuth provider names - type-safe provider identifiers\n */\nexport type OAuthProvider = 'google' | 'followupboss' | 'notion';\n\n/**\n * Scope description mapping - maps OAuth scope URLs to human-readable descriptions\n */\nexport interface ScopeDescription {\n scope: string; // OAuth scope URL\n description: string; // Human-readable description of what this scope allows\n defaultEnabled: boolean; // Whether this scope should be enabled by default\n}\n\n/**\n * OAuth credential type configuration for a specific service under a provider\n */\nexport interface OAuthCredentialConfig {\n displayName: string; // User-facing name\n defaultScopes: string[]; // OAuth scopes for this credential type\n description: string; // Description of what this credential provides access to\n scopeDescriptions?: ScopeDescription[]; // Optional: descriptions for each scope\n}\n\n/**\n * OAuth provider configuration shared between frontend and backend\n */\nexport interface OAuthProviderConfig {\n name: OAuthProvider; // Type-safe provider identifier\n displayName: string; // User-facing provider name: 'Google'\n credentialTypes: Partial<Record<CredentialType, OAuthCredentialConfig>>; // Supported credential types\n authorizationParams?: Record<string, string>; // Provider-wide OAuth parameters\n}\n\n/**\n * OAuth provider configurations - single source of truth for OAuth providers\n * Contains all information needed by frontend and backend\n */\nexport const OAUTH_PROVIDERS: Record<OAuthProvider, OAuthProviderConfig> = {\n google: {\n name: 'google',\n displayName: 'Google',\n credentialTypes: {\n [CredentialType.GOOGLE_DRIVE_CRED]: {\n displayName: 'Google Drive',\n defaultScopes: [\n 'https://www.googleapis.com/auth/drive.file',\n 'https://www.googleapis.com/auth/documents',\n 'https://www.googleapis.com/auth/spreadsheets',\n 'https://www.googleapis.com/auth/drive',\n ],\n description: 'Access Google Drive files and folders',\n scopeDescriptions: [\n {\n scope: 'https://www.googleapis.com/auth/drive.file',\n description:\n 'View and manage Google Drive files and folders that you have created with Bubble Lab',\n defaultEnabled: true,\n },\n {\n scope: 'https://www.googleapis.com/auth/documents',\n description: 'View and manage your Google Docs documents',\n defaultEnabled: true,\n },\n {\n scope: 'https://www.googleapis.com/auth/spreadsheets',\n description: 'View and manage your Google Sheets spreadsheets',\n defaultEnabled: true,\n },\n {\n scope: 'https://www.googleapis.com/auth/drive',\n description:\n 'View and manage all ofyour Google Drive files and folders (will see a warning about an \"untrusted app\" during authentication. Choose only if you need extra permissions)',\n defaultEnabled: false,\n },\n ],\n },\n [CredentialType.GMAIL_CRED]: {\n displayName: 'Gmail',\n defaultScopes: [\n 'https://www.googleapis.com/auth/gmail.send',\n 'https://www.googleapis.com/auth/gmail.modify',\n ],\n description: 'Access Gmail for sending emails',\n scopeDescriptions: [\n {\n scope: 'https://www.googleapis.com/auth/gmail.send',\n description: 'Send email on your behalf',\n defaultEnabled: true,\n },\n {\n scope: 'https://www.googleapis.com/auth/gmail.modify',\n description:\n 'View and manage all of your Gmail emails and labels (might see a warning about an \"untrusted app\" during authentication. Choose only if you need extra permissions)',\n defaultEnabled: false,\n },\n ],\n },\n [CredentialType.GOOGLE_SHEETS_CRED]: {\n displayName: 'Google Sheets',\n defaultScopes: ['https://www.googleapis.com/auth/spreadsheets'],\n description:\n 'Access Google Sheets for reading and writing spreadsheet data',\n scopeDescriptions: [\n {\n scope: 'https://www.googleapis.com/auth/spreadsheets',\n description: 'View and manage your Google Sheets spreadsheets',\n defaultEnabled: true,\n },\n ],\n },\n [CredentialType.GOOGLE_CALENDAR_CRED]: {\n displayName: 'Google Calendar',\n defaultScopes: ['https://www.googleapis.com/auth/calendar'],\n description: 'Access Google Calendar for reading and managing events',\n scopeDescriptions: [\n {\n scope: 'https://www.googleapis.com/auth/calendar',\n description: 'View and manage events on all your calendars',\n defaultEnabled: true,\n },\n ],\n },\n },\n authorizationParams: {\n access_type: 'offline', // Required for refresh tokens\n prompt: 'consent', // Force consent screen to ensure refresh token is issued\n },\n },\n followupboss: {\n name: 'followupboss',\n displayName: 'Follow Up Boss',\n credentialTypes: {\n [CredentialType.FUB_CRED]: {\n displayName: 'Follow Up Boss',\n defaultScopes: [], // FUB doesn't use granular scopes\n description:\n 'Access Follow Up Boss CRM for managing contacts, tasks, deals, and more',\n },\n },\n authorizationParams: {\n response_type: 'auth_code', // FUB uses 'auth_code' instead of standard 'code'\n prompt: 'login', // FUB supports 'login' to force re-authentication\n },\n },\n notion: {\n name: 'notion',\n displayName: 'Notion',\n credentialTypes: {\n [CredentialType.NOTION_OAUTH_TOKEN]: {\n displayName: 'Notion Workspace',\n defaultScopes: [], // Notion scopes are managed in the integration capabilities\n description:\n 'Authorize access to your Notion workspace for searching and reading pages/databases',\n },\n },\n },\n};\n\n/**\n * Get the OAuth provider for a specific credential type\n * Safely maps credential types to their OAuth providers\n */\nexport function getOAuthProvider(\n credentialType: CredentialType\n): OAuthProvider | null {\n for (const [providerName, config] of Object.entries(OAUTH_PROVIDERS)) {\n if (config.credentialTypes[credentialType]) {\n return providerName as OAuthProvider;\n }\n }\n return null;\n}\n\n/**\n * Check if a credential type is OAuth-based\n */\nexport function isOAuthCredential(credentialType: CredentialType): boolean {\n return getOAuthProvider(credentialType) !== null;\n}\n\n/**\n * Get scope descriptions for a specific credential type\n * Returns an array of scope descriptions that will be requested during OAuth\n */\nexport function getScopeDescriptions(\n credentialType: CredentialType\n): ScopeDescription[] {\n const provider = getOAuthProvider(credentialType);\n if (!provider) {\n return [];\n }\n\n const providerConfig = OAUTH_PROVIDERS[provider];\n const credentialConfig = providerConfig?.credentialTypes[credentialType];\n\n if (!credentialConfig?.scopeDescriptions) {\n // Fallback: create descriptions from scope URLs if not explicitly defined\n return (\n credentialConfig?.defaultScopes.map((scope) => ({\n scope,\n description: `Access: ${scope}`,\n defaultEnabled: true, // Default to enabled if in defaultScopes\n })) || []\n );\n }\n\n return credentialConfig.scopeDescriptions;\n}\n\n/**\n * Browser session provider name - for BrowserBase-powered authentication\n */\nexport type BrowserSessionProvider = 'browserbase';\n\n/**\n * Browser session credential type configuration\n */\nexport interface BrowserSessionCredentialConfig {\n displayName: string;\n description: string;\n targetUrl: string; // URL to navigate to for authentication\n cookieDomain: string; // Domain filter for captured cookies\n}\n\n/**\n * Browser session provider configuration\n */\nexport interface BrowserSessionProviderConfig {\n name: BrowserSessionProvider;\n displayName: string;\n credentialTypes: Partial<\n Record<CredentialType, BrowserSessionCredentialConfig>\n >;\n}\n\n/**\n * Browser session provider configurations - for credentials that use BrowserBase\n * browser sessions instead of OAuth or API keys\n */\nexport const BROWSER_SESSION_PROVIDERS: Record<\n BrowserSessionProvider,\n BrowserSessionProviderConfig\n> = {\n browserbase: {\n name: 'browserbase',\n displayName: 'BrowserBase',\n credentialTypes: {\n [CredentialType.AMAZON_CRED]: {\n displayName: 'Amazon Account',\n description:\n 'Log into Amazon to enable cart, order, and purchase automation',\n targetUrl: 'https://www.amazon.com',\n cookieDomain: 'amazon',\n },\n },\n },\n};\n\n/**\n * Get the browser session provider for a specific credential type\n */\nexport function getBrowserSessionProvider(\n credentialType: CredentialType\n): BrowserSessionProvider | null {\n for (const [providerName, config] of Object.entries(\n BROWSER_SESSION_PROVIDERS\n )) {\n if (config.credentialTypes[credentialType]) {\n return providerName as BrowserSessionProvider;\n }\n }\n return null;\n}\n\n/**\n * Check if a credential type uses browser session authentication (BrowserBase)\n */\nexport function isBrowserSessionCredential(\n credentialType: CredentialType\n): boolean {\n return getBrowserSessionProvider(credentialType) !== null;\n}\n\n/**\n * Maps bubble names to their accepted credential types\n */\nexport type CredentialOptions = Partial<Record<CredentialType, string>>;\n\n/**\n * Collection of credential options for all bubbles\n */\nexport const BUBBLE_CREDENTIAL_OPTIONS: Record<BubbleName, CredentialType[]> = {\n 'ai-agent': [\n CredentialType.OPENAI_CRED,\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.ANTHROPIC_CRED,\n CredentialType.FIRECRAWL_API_KEY,\n CredentialType.OPENROUTER_CRED,\n ],\n postgresql: [CredentialType.DATABASE_CRED],\n slack: [CredentialType.SLACK_CRED],\n telegram: [CredentialType.TELEGRAM_BOT_TOKEN],\n resend: [CredentialType.RESEND_CRED],\n 'database-analyzer': [CredentialType.DATABASE_CRED],\n 'slack-notifier': [\n CredentialType.SLACK_CRED,\n CredentialType.OPENAI_CRED,\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.ANTHROPIC_CRED,\n ],\n 'slack-formatter-agent': [\n CredentialType.OPENAI_CRED,\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.ANTHROPIC_CRED,\n ],\n 'slack-data-assistant': [\n CredentialType.DATABASE_CRED,\n CredentialType.SLACK_CRED,\n CredentialType.OPENAI_CRED,\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.ANTHROPIC_CRED,\n ],\n 'hello-world': [],\n http: [CredentialType.CUSTOM_AUTH_KEY],\n 'get-bubble-details-tool': [],\n 'list-bubbles-tool': [],\n 'sql-query-tool': [CredentialType.DATABASE_CRED],\n 'chart-js-tool': [],\n 'bubbleflow-validation-tool': [],\n 'code-edit-tool': [CredentialType.OPENROUTER_CRED],\n 'web-search-tool': [CredentialType.FIRECRAWL_API_KEY],\n 'web-scrape-tool': [CredentialType.FIRECRAWL_API_KEY],\n 'web-crawl-tool': [\n CredentialType.FIRECRAWL_API_KEY,\n CredentialType.GOOGLE_GEMINI_CRED,\n ],\n 'web-extract-tool': [CredentialType.FIRECRAWL_API_KEY],\n 'research-agent-tool': [\n CredentialType.FIRECRAWL_API_KEY,\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.APIFY_CRED,\n ],\n 'reddit-scrape-tool': [],\n 'bubbleflow-code-generator': [],\n 'bubbleflow-generator': [\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.OPENROUTER_CRED,\n ],\n 'pdf-form-operations': [\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.OPENAI_CRED,\n CredentialType.ANTHROPIC_CRED,\n CredentialType.OPENROUTER_CRED,\n ],\n 'pdf-ocr-workflow': [\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.OPENAI_CRED,\n CredentialType.ANTHROPIC_CRED,\n CredentialType.OPENROUTER_CRED,\n ],\n 'generate-document-workflow': [\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.OPENAI_CRED,\n CredentialType.ANTHROPIC_CRED,\n CredentialType.OPENROUTER_CRED,\n ],\n 'parse-document-workflow': [\n CredentialType.GOOGLE_GEMINI_CRED,\n CredentialType.OPENAI_CRED,\n CredentialType.ANTHROPIC_CRED,\n CredentialType.OPENROUTER_CRED,\n CredentialType.CLOUDFLARE_R2_ACCESS_KEY,\n CredentialType.CLOUDFLARE_R2_SECRET_KEY,\n CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,\n ],\n storage: [\n CredentialType.CLOUDFLARE_R2_ACCESS_KEY,\n CredentialType.CLOUDFLARE_R2_SECRET_KEY,\n CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,\n ],\n 'google-drive': [CredentialType.GOOGLE_DRIVE_CRED],\n gmail: [CredentialType.GMAIL_CRED],\n 'google-sheets': [CredentialType.GOOGLE_SHEETS_CRED],\n 'google-calendar': [CredentialType.GOOGLE_CALENDAR_CRED],\n apify: [CredentialType.APIFY_CRED],\n 'instagram-tool': [CredentialType.APIFY_CRED],\n 'linkedin-tool': [CredentialType.APIFY_CRED],\n 'tiktok-tool': [CredentialType.APIFY_CRED],\n 'twitter-tool': [CredentialType.APIFY_CRED],\n 'google-maps-tool': [CredentialType.APIFY_CRED],\n 'youtube-tool': [CredentialType.APIFY_CRED],\n github: [CredentialType.GITHUB_TOKEN],\n 'eleven-labs': [CredentialType.ELEVENLABS_API_KEY],\n followupboss: [CredentialType.FUB_CRED],\n 'agi-inc': [CredentialType.AGI_API_KEY],\n airtable: [CredentialType.AIRTABLE_CRED],\n notion: [CredentialType.NOTION_OAUTH_TOKEN],\n firecrawl: [CredentialType.FIRECRAWL_API_KEY],\n 'insforge-db': [\n CredentialType.INSFORGE_BASE_URL,\n CredentialType.INSFORGE_API_KEY,\n ],\n browserbase: [\n CredentialType.AMAZON_CRED,\n CredentialType.CLOUDFLARE_R2_ACCESS_KEY,\n CredentialType.CLOUDFLARE_R2_SECRET_KEY,\n CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,\n ],\n 'amazon-shopping-tool': [\n CredentialType.AMAZON_CRED,\n CredentialType.CLOUDFLARE_R2_ACCESS_KEY,\n CredentialType.CLOUDFLARE_R2_SECRET_KEY,\n CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,\n ],\n};\n\n// POST /credentials - Create credential schema\nexport const createCredentialSchema = z\n .object({\n credentialType: z.nativeEnum(CredentialType).openapi({\n description: 'Type of credential to store',\n example: CredentialType.OPENAI_CRED,\n }),\n value: z.string().min(1).openapi({\n description: 'The credential value (will be encrypted)',\n example: 'sk-1234567890abcdef',\n }),\n name: z.string().optional().openapi({\n description: 'Optional user-friendly name for the credential',\n example: 'My OpenAI Key',\n }),\n skipValidation: z.boolean().optional().openapi({\n description:\n 'Skip credential validation before storing (for testing/admin use)',\n example: false,\n }),\n credentialConfigurations: z\n .record(z.string(), z.unknown())\n .optional()\n .openapi({\n description:\n 'Optional configurations for credential validation (e.g., ignoreSSL for PostgreSQL)',\n example: { ignoreSSL: true },\n }),\n metadata: databaseMetadataSchema.optional().openapi({\n description:\n 'Optional metadata for the credential (e.g., database schema for DATABASE_CRED)',\n example: {\n tables: {\n users: {\n id: 'integer',\n email: 'character varying',\n created_at: 'timestamp with time zone',\n },\n },\n rules: [\n {\n id: 'rule-1',\n text: 'No direct DELETE on users table',\n enabled: true,\n createdAt: '2024-01-01T00:00:00Z',\n updatedAt: '2024-01-01T00:00:00Z',\n },\n ],\n },\n }),\n })\n .openapi('CreateCredentialRequest');\n\n// PUT /credentials/:id - Update credential schema\nexport const updateCredentialSchema = z\n .object({\n value: z.string().optional().openapi({\n description:\n 'The credential value (will be encrypted). Leave empty to keep current value.',\n example: 'sk-1234567890abcdef',\n }),\n name: z.string().optional().openapi({\n description: 'Optional user-friendly name for the credential',\n example: 'My OpenAI Key',\n }),\n skipValidation: z.boolean().optional().openapi({\n description:\n 'Skip credential validation before storing (for testing/admin use)',\n example: false,\n }),\n credentialConfigurations: z\n .record(z.string(), z.unknown())\n .optional()\n .openapi({\n description:\n 'Optional configurations for credential validation (e.g., ignoreSSL for PostgreSQL)',\n example: { ignoreSSL: true },\n }),\n metadata: databaseMetadataSchema.optional().openapi({\n description:\n 'Optional metadata for the credential (e.g., database schema for DATABASE_CRED)',\n example: {\n tables: {\n users: {\n id: 'integer',\n email: 'character varying',\n created_at: 'timestamp with time zone',\n },\n },\n },\n }),\n })\n .openapi('UpdateCredentialRequest');\n// GET /credentials - List credentials response\nexport const credentialResponseSchema = z\n .object({\n id: z.number().openapi({ description: 'Credential ID' }),\n credentialType: z.string().openapi({ description: 'Type of credential' }),\n name: z.string().optional().openapi({ description: 'Credential name' }),\n metadata: databaseMetadataSchema\n .optional()\n .openapi({ description: 'Credential metadata' }),\n createdAt: z.string().openapi({ description: 'Creation timestamp' }),\n\n // OAuth-specific fields\n isOauth: z\n .boolean()\n .optional()\n .openapi({ description: 'Whether this is an OAuth credential' }),\n oauthProvider: z\n .string()\n .optional()\n .openapi({ description: 'OAuth provider name' }),\n oauthExpiresAt: z\n .string()\n .optional()\n .openapi({ description: 'OAuth token expiration timestamp' }),\n oauthScopes: z\n .array(z.string())\n .optional()\n .openapi({ description: 'OAuth scopes granted' }),\n oauthStatus: z\n .enum(['active', 'expired', 'needs_refresh'])\n .optional()\n .openapi({ description: 'OAuth token status' }),\n\n // Browser session-specific fields\n isBrowserSession: z\n .boolean()\n .optional()\n .openapi({ description: 'Whether this is a browser session credential' }),\n browserbaseSessionData: z\n .object({\n capturedAt: z.string(),\n cookieCount: z.number(),\n domain: z.string(),\n })\n .optional()\n .openapi({ description: 'Browser session metadata' }),\n })\n .openapi('CredentialResponse');\n\n// POST /credentials - Create credential response\nexport const createCredentialResponseSchema = z\n .object({\n id: z.number().openapi({ description: 'Credential ID' }),\n message: z.string().openapi({ description: 'Success message' }),\n })\n .openapi('CreateCredentialResponse');\n\n// PUT /credentials/:id - Update credential response\nexport const updateCredentialResponseSchema = z\n .object({\n id: z.number().openapi({ description: 'Credential ID' }),\n message: z.string().openapi({ description: 'Success message' }),\n })\n .openapi('UpdateCredentialResponse');\n\n// General success message response (used by DELETE /credentials/:id, DELETE /bubble-flow/:id, PUT /bubble-flow/:id)\nexport const successMessageResponseSchema = z\n .object({\n message: z.string().openapi({ description: 'Success message' }),\n })\n .openapi('SuccessMessageResponse');\n\n// BrowserBase session schemas\nexport const browserbaseSessionCreateRequestSchema = z\n .object({\n credentialType: z.nativeEnum(CredentialType).openapi({\n description: 'Type of credential requiring browser authentication',\n example: CredentialType.AMAZON_CRED,\n }),\n name: z.string().optional().openapi({\n description: 'User-friendly name for the credential',\n example: 'My Amazon Account',\n }),\n })\n .openapi('BrowserbaseSessionCreateRequest');\n\nexport const browserbaseSessionCreateResponseSchema = z\n .object({\n sessionId: z.string().openapi({\n description: 'BrowserBase session ID',\n }),\n debugUrl: z.string().openapi({\n description: 'URL to open for manual browser interaction',\n }),\n contextId: z.string().openapi({\n description: 'BrowserBase context ID for session persistence',\n }),\n state: z.string().openapi({\n description: 'State token for CSRF protection',\n }),\n })\n .openapi('BrowserbaseSessionCreateResponse');\n\nexport const browserbaseSessionCompleteRequestSchema = z\n .object({\n sessionId: z.string().openapi({\n description: 'BrowserBase session ID to complete',\n }),\n state: z.string().openapi({\n description: 'State token for verification',\n }),\n name: z.string().optional().openapi({\n description: 'User-friendly name for the credential',\n }),\n })\n .openapi('BrowserbaseSessionCompleteRequest');\n\nexport const browserbaseSessionCompleteResponseSchema = z\n .object({\n id: z.number().openapi({\n description: 'Created credential ID',\n }),\n message: z.string().openapi({\n description: 'Success message',\n }),\n })\n .openapi('BrowserbaseSessionCompleteResponse');\n\nexport const browserbaseSessionReopenRequestSchema = z\n .object({\n credentialId: z.number().openapi({\n description: 'ID of the credential to reopen session for',\n }),\n })\n .openapi('BrowserbaseSessionReopenRequest');\n\nexport const browserbaseSessionReopenResponseSchema = z\n .object({\n sessionId: z.string().openapi({\n description: 'BrowserBase session ID',\n }),\n debugUrl: z.string().openapi({\n description: 'URL to open for manual browser interaction',\n }),\n })\n .openapi('BrowserbaseSessionReopenResponse');\n\nexport type CreateCredentialRequest = z.infer<typeof createCredentialSchema>;\nexport type UpdateCredentialRequest = z.infer<typeof updateCredentialSchema>;\nexport type CredentialResponse = z.infer<typeof credentialResponseSchema>;\nexport type CreateCredentialResponse = z.infer<\n typeof createCredentialResponseSchema\n>;\nexport type UpdateCredentialResponse = z.infer<\n typeof updateCredentialResponseSchema\n>;\nexport type BrowserbaseSessionCreateRequest = z.infer<\n typeof browserbaseSessionCreateRequestSchema\n>;\nexport type BrowserbaseSessionCreateResponse = z.infer<\n typeof browserbaseSessionCreateResponseSchema\n>;\nexport type BrowserbaseSessionCompleteRequest = z.infer<\n typeof browserbaseSessionCompleteRequestSchema\n>;\nexport type BrowserbaseSessionCompleteResponse = z.infer<\n typeof browserbaseSessionCompleteResponseSchema\n>;\nexport type BrowserbaseSessionReopenRequest = z.infer<\n typeof browserbaseSessionReopenRequestSchema\n>;\nexport type BrowserbaseSessionReopenResponse = z.infer<\n typeof browserbaseSessionReopenResponseSchema\n>;\n","import { z } from 'zod';\nimport { CredentialType, BubbleName } from './types';\n\n// Bubble parameter type enum\nexport enum BubbleParameterType {\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n OBJECT = 'object',\n ARRAY = 'array',\n ENV = 'env',\n VARIABLE = 'variable',\n EXPRESSION = 'expression',\n UNKNOWN = 'unknown',\n}\n\n// Credential configuration mappings - defines what configurations are available for each credential type\nexport const CREDENTIAL_CONFIGURATION_MAP: Record<\n CredentialType,\n Record<string, BubbleParameterType>\n> = {\n [CredentialType.DATABASE_CRED]: {\n ignoreSSL: BubbleParameterType.BOOLEAN,\n },\n [CredentialType.TELEGRAM_BOT_TOKEN]: {},\n [CredentialType.AGI_API_KEY]: {},\n [CredentialType.FUB_CRED]: {},\n [CredentialType.OPENAI_CRED]: {},\n [CredentialType.GOOGLE_GEMINI_CRED]: {},\n [CredentialType.ANTHROPIC_CRED]: {},\n [CredentialType.FIRECRAWL_API_KEY]: {},\n [CredentialType.SLACK_CRED]: {},\n [CredentialType.RESEND_CRED]: {},\n [CredentialType.OPENROUTER_CRED]: {},\n [CredentialType.CLOUDFLARE_R2_ACCESS_KEY]: {},\n [CredentialType.CLOUDFLARE_R2_SECRET_KEY]: {},\n [CredentialType.CLOUDFLARE_R2_ACCOUNT_ID]: {},\n [CredentialType.APIFY_CRED]: {},\n [CredentialType.ELEVENLABS_API_KEY]: {},\n [CredentialType.GOOGLE_DRIVE_CRED]: {},\n [CredentialType.GMAIL_CRED]: {},\n [CredentialType.GOOGLE_SHEETS_CRED]: {},\n [CredentialType.GOOGLE_CALENDAR_CRED]: {},\n [CredentialType.GITHUB_TOKEN]: {},\n [CredentialType.AIRTABLE_CRED]: {},\n [CredentialType.NOTION_OAUTH_TOKEN]: {},\n [CredentialType.INSFORGE_BASE_URL]: {},\n [CredentialType.INSFORGE_API_KEY]: {},\n [CredentialType.CUSTOM_AUTH_KEY]: {},\n [CredentialType.AMAZON_CRED]: {},\n};\n\n// Fixed list of bubble names that need context injection\nexport const BUBBLE_NAMES_WITH_CONTEXT_INJECTION = [\n 'database-analyzer',\n 'slack-data-assistant',\n];\n\n// Zod schemas for validation and type inference\nexport const BubbleParameterTypeSchema = z.nativeEnum(BubbleParameterType);\n\nexport const BubbleParameterSchema = z.object({\n location: z.optional(\n z.object({\n startLine: z.number(),\n startCol: z.number(),\n endLine: z.number(),\n endCol: z.number(),\n })\n ),\n variableId: z\n .number()\n .optional()\n .describe('The variable id of the parameter'),\n name: z.string().describe('The name of the parameter'),\n value: z\n .union([\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.unknown()),\n z.array(z.unknown()),\n ])\n .describe('The value of the parameter'),\n type: BubbleParameterTypeSchema,\n /**\n * Source of the parameter - indicates whether it came from an object literal property\n * or represents the entire first argument. Used to determine if spread pattern should be applied.\n * Ex.\n * const abc = '1234567890';\n * new GoogleDriveBubble({\n * fileId: abc,\n * })\n * source: 'object-property',\n *\n * new GoogleDriveBubble({\n * url: 'https://www.google.com',\n * ...args,\n * })\n * source: 'spread',\n *\n * source = 'first-arg'\n * new GoogleDriveBubble(args)\n */\n source: z\n .enum(['object-property', 'first-arg', 'spread'])\n .optional()\n .describe(\n 'Source of the parameter - indicates if it came from an object literal property, represents the entire first argument, or came from a spread operator'\n ),\n});\n\n// Bubble parameter from backend parser (derived from Zod schema - single source of truth)\nexport type BubbleParameter = z.infer<typeof BubbleParameterSchema>;\n\n// Parsed bubble from backend parser (matches backend ParsedBubble interface)\nexport interface ParsedBubble {\n variableName: string;\n bubbleName: BubbleName; // This comes from the registry (e.g., 'postgresql', 'slack')\n className: string; // This is the actual class name (e.g., 'PostgreSQLBubble', 'SlackBubble')\n parameters: BubbleParameter[];\n hasAwait: boolean; // Whether the original expression was awaited\n hasActionCall: boolean; // Whether the original expression called .action()\n dependencies?: BubbleName[];\n dependencyGraph?: DependencyGraphNode;\n}\n// Nested dependency graph node for a bubble\nexport interface DependencyGraphNode {\n name: BubbleName;\n /** Optional variable name for this node instance, when available */\n variableName?: string;\n nodeType: BubbleNodeType;\n /**\n * Unique hierarchical ID path for the node within a flow.\n * Constructed as parentUniqueId + \".\" + bubbleName + \"#\" + ordinal.\n * Root nodes can omit or use empty string for the parent portion.\n */\n uniqueId?: string;\n /**\n * Variable id assigned by the parser/scope manager if available.\n * Root bubble nodes will carry their declaration variable id; synthetic/child nodes\n * inferred from dependencies may be assigned a negative synthetic id.\n */\n variableId?: number;\n dependencies: DependencyGraphNode[];\n /**\n * Custom tool functions parsed as FunctionCallWorkflowNode.\n * Used when an ai-agent has customTools with func properties containing bubble instantiations.\n */\n functionCallChildren?: FunctionCallWorkflowNode[];\n}\n\n// Detailed dependency specification for factory metadata\nexport interface BubbleDependencySpec {\n name: BubbleName;\n // If this dependency is an ai-agent, include its tool dependencies\n tools?: BubbleName[];\n}\n\nexport type BubbleNodeType = 'service' | 'tool' | 'workflow' | 'unknown';\n\nexport const BubbleNodeTypeSchema = z.enum([\n 'service',\n 'tool',\n 'workflow',\n 'unknown',\n]);\n\nexport const DependencyGraphNodeSchema: z.ZodType<DependencyGraphNode> = z.lazy(\n () =>\n z.object({\n name: z.string() as z.ZodType<BubbleName>,\n variableName: z.string().optional(),\n nodeType: BubbleNodeTypeSchema,\n uniqueId: z.string().optional(),\n variableId: z.number().optional(),\n dependencies: z.array(DependencyGraphNodeSchema),\n // Use lazy reference since FunctionCallWorkflowNodeSchema is defined later\n functionCallChildren: z\n .lazy(() => z.array(FunctionCallWorkflowNodeSchema))\n .optional(),\n })\n);\n\nexport const ParsedBubbleSchema = z.object({\n variableName: z.string(),\n bubbleName: z.string() as z.ZodType<BubbleName>,\n className: z.string(),\n parameters: z.array(BubbleParameterSchema),\n hasAwait: z.boolean(),\n hasActionCall: z.boolean(),\n dependencies: z.array(z.string() as z.ZodType<BubbleName>).optional(),\n dependencyGraph: DependencyGraphNodeSchema.optional(),\n});\n\nexport const BubbleDependencySpecSchema = z.object({\n name: z.string() as z.ZodType<BubbleName>,\n tools: z.array(z.string() as z.ZodType<BubbleName>).optional(),\n});\n\nexport const ParsedBubbleWithInfoSchema = z.object({\n variableName: z.string(),\n bubbleName: z.string() as z.ZodType<BubbleName>,\n className: z.string(),\n parameters: z.array(BubbleParameterSchema),\n hasAwait: z.boolean(),\n hasActionCall: z.boolean(),\n dependencies: z.array(z.string() as z.ZodType<BubbleName>).optional(),\n dependencyGraph: DependencyGraphNodeSchema.optional(),\n variableId: z.number(),\n nodeType: BubbleNodeTypeSchema,\n location: z.object({\n startLine: z.number(),\n startCol: z.number(),\n endLine: z.number(),\n endCol: z.number(),\n }),\n description: z.string().optional(),\n invocationCallSiteKey: z.string().optional(),\n clonedFromVariableId: z.number().optional(),\n isInsideCustomTool: z.boolean().optional(),\n containingCustomToolId: z.string().optional(),\n});\n\nexport type ParsedBubbleWithInfo = z.infer<typeof ParsedBubbleWithInfoSchema>;\n// Inferred types from Zod schemas\nexport type BubbleParameterTypeInferred = z.infer<\n typeof BubbleParameterTypeSchema\n>;\n// Keep for backwards compatibility - now just an alias\nexport type BubbleParameterInferred = BubbleParameter;\nexport type BubbleNodeTypeInferred = z.infer<typeof BubbleNodeTypeSchema>;\nexport type DependencyGraphNodeInferred = z.infer<\n typeof DependencyGraphNodeSchema\n>;\nexport type ParsedBubbleInferred = z.infer<typeof ParsedBubbleSchema>;\nexport type BubbleDependencySpecInferred = z.infer<\n typeof BubbleDependencySpecSchema\n>;\nexport type ParsedBubbleWithInfoInferred = z.infer<\n typeof ParsedBubbleWithInfoSchema\n>;\n\n// Workflow node types for hierarchical workflow representation\nexport type WorkflowNodeType =\n | 'bubble'\n | 'if'\n | 'for'\n | 'while'\n | 'try_catch'\n | 'variable_declaration'\n | 'return'\n | 'function_call'\n | 'code_block'\n | 'parallel_execution'\n | 'transformation_function';\n\nexport interface BubbleWorkflowNode {\n type: 'bubble';\n variableId: number; // Reference to bubble in ParsedWorkflow.bubbles map\n}\n\nexport interface ControlFlowWorkflowNode {\n type: 'if' | 'for' | 'while';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n condition?: string; // For if/for/while conditions\n children: WorkflowNode[];\n elseBranch?: WorkflowNode[]; // For if statements\n thenTerminates?: boolean; // True if then branch contains return/throw\n elseTerminates?: boolean; // True if else branch contains return/throw\n}\n\nexport interface TryCatchWorkflowNode {\n type: 'try_catch';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n children: WorkflowNode[]; // Try block\n catchBlock?: WorkflowNode[]; // Catch block\n}\n\nexport interface CodeBlockWorkflowNode {\n type: 'code_block';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n code: string; // The actual code snippet\n children: WorkflowNode[]; // Nested bubbles/control flow within this block\n}\n\nexport interface VariableDeclarationBlockNode {\n type: 'variable_declaration';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n code: string; // The variable declarations code\n variables: Array<{\n name: string;\n type: 'const' | 'let' | 'var';\n hasInitializer: boolean;\n }>;\n children: WorkflowNode[];\n}\n\nexport interface ReturnWorkflowNode {\n type: 'return';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n code: string; // The return statement code\n value?: string; // Extracted return value expression (optional, for easier access)\n children: WorkflowNode[]; // Rare, but return could contain nested structures\n}\n\nexport interface FunctionCallWorkflowNode {\n type: 'function_call';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n functionName: string; // e.g., \"processData\"\n isMethodCall: boolean; // true for this.method(), false for helper()\n description?: string; // Method description from code comments\n arguments?: string; // The arguments as code string\n code: string; // Full call expression code\n variableId: number; // Unique variable ID for tracking execution (added for logging consistency)\n variableDeclaration?: {\n // If this function call is part of a variable declaration\n variableName: string;\n variableType: 'const' | 'let' | 'var';\n };\n methodDefinition?: {\n // If method definition found in class\n location: {\n startLine: number;\n endLine: number;\n };\n isAsync: boolean;\n parameters: string[]; // Parameter names\n };\n children: WorkflowNode[]; // If method definition found, expand its body here\n}\n\nexport interface ParallelExecutionWorkflowNode {\n type: 'parallel_execution';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n code: string; // Full Promise.all() code\n variableDeclaration?: {\n // If this parallel execution is part of a variable declaration\n variableNames: string[]; // Array destructuring names\n variableType: 'const' | 'let' | 'var';\n };\n children: WorkflowNode[]; // Parallel tasks (function calls inside Promise.all)\n}\n\nexport interface TransformationFunctionWorkflowNode {\n type: 'transformation_function';\n location: {\n startLine: number;\n startCol: number;\n endLine: number;\n endCol: number;\n };\n code: string; // Entire function call code\n functionName: string; // e.g., \"validateInput\"\n isMethodCall: boolean; // true for this.method(), false for helper()\n description?: string; // Method description from code comments\n arguments?: string; // The arguments as code string\n variableId: number; // Unique variable ID for tracking execution\n variableDeclaration?: {\n // If this function call is part of a variable declaration\n variableName: string;\n variableType: 'const' | 'let' | 'var';\n };\n methodDefinition?: {\n // If method definition found in class\n location: {\n startLine: number;\n endLine: number;\n };\n isAsync: boolean;\n parameters: string[]; // Parameter names\n };\n}\n\nexport type WorkflowNode =\n | BubbleWorkflowNode\n | ControlFlowWorkflowNode\n | TryCatchWorkflowNode\n | CodeBlockWorkflowNode\n | VariableDeclarationBlockNode\n | ReturnWorkflowNode\n | FunctionCallWorkflowNode\n | ParallelExecutionWorkflowNode\n | TransformationFunctionWorkflowNode;\n\nexport interface ParsedWorkflow {\n root: WorkflowNode[];\n bubbles: Record<number, ParsedBubbleWithInfo>; // Keep for backward compatibility\n}\n\n// Zod schemas for workflow nodes\nexport const WorkflowNodeTypeSchema = z.enum([\n 'bubble',\n 'if',\n 'for',\n 'while',\n 'try_catch',\n 'variable_declaration',\n 'return',\n 'function_call',\n 'code_block',\n 'parallel_execution',\n 'transformation_function',\n]);\n\nexport const LocationSchema = z.object({\n startLine: z.number(),\n startCol: z.number(),\n endLine: z.number(),\n endCol: z.number(),\n});\n\nexport const BubbleWorkflowNodeSchema: z.ZodType<BubbleWorkflowNode> = z.object(\n {\n type: z.literal('bubble'),\n variableId: z.number(),\n }\n);\n\nexport const ControlFlowWorkflowNodeSchema: z.ZodType<ControlFlowWorkflowNode> =\n z.lazy(() =>\n z.object({\n type: z.enum(['if', 'for', 'while']),\n location: LocationSchema,\n condition: z.string().optional(),\n children: z.array(WorkflowNodeSchema),\n elseBranch: z.array(WorkflowNodeSchema).optional(),\n thenTerminates: z.boolean().optional(),\n elseTerminates: z.boolean().optional(),\n })\n );\n\nexport const TryCatchWorkflowNodeSchema: z.ZodType<TryCatchWorkflowNode> =\n z.lazy(() =>\n z.object({\n type: z.literal('try_catch'),\n location: LocationSchema,\n children: z.array(WorkflowNodeSchema),\n catchBlock: z.array(WorkflowNodeSchema).optional(),\n })\n );\n\nexport const CodeBlockWorkflowNodeSchema: z.ZodType<CodeBlockWorkflowNode> =\n z.lazy(() =>\n z.object({\n type: z.literal('code_block'),\n location: LocationSchema,\n code: z.string(),\n children: z.array(WorkflowNodeSchema),\n })\n );\n\nexport const VariableDeclarationBlockNodeSchema: z.ZodType<VariableDeclarationBlockNode> =\n z.lazy(() =>\n z.object({\n type: z.literal('variable_declaration'),\n location: LocationSchema,\n code: z.string(),\n variables: z.array(\n z.object({\n name: z.string(),\n type: z.enum(['const', 'let', 'var']),\n hasInitializer: z.boolean(),\n })\n ),\n children: z.array(WorkflowNodeSchema),\n })\n );\n\nexport const ReturnWorkflowNodeSchema: z.ZodType<ReturnWorkflowNode> = z.lazy(\n () =>\n z.object({\n type: z.literal('return'),\n location: LocationSchema,\n code: z.string(),\n value: z.string().optional(),\n children: z.array(WorkflowNodeSchema),\n })\n);\n\nexport const FunctionCallWorkflowNodeSchema: z.ZodType<FunctionCallWorkflowNode> =\n z.lazy(() =>\n z.object({\n type: z.literal('function_call'),\n location: LocationSchema,\n functionName: z.string(),\n isMethodCall: z.boolean(),\n description: z.string().optional(),\n arguments: z.string().optional(),\n code: z.string(),\n variableId: z.number(),\n variableDeclaration: z\n .object({\n variableName: z.string(),\n variableType: z.enum(['const', 'let', 'var']),\n })\n .optional(),\n methodDefinition: z\n .object({\n location: z.object({\n startLine: z.number(),\n endLine: z.number(),\n }),\n isAsync: z.boolean(),\n parameters: z.array(z.string()),\n })\n .optional(),\n children: z.array(WorkflowNodeSchema),\n })\n );\n\nexport const ParallelExecutionWorkflowNodeSchema: z.ZodType<ParallelExecutionWorkflowNode> =\n z.lazy(() =>\n z.object({\n type: z.literal('parallel_execution'),\n location: LocationSchema,\n code: z.string(),\n variableDeclaration: z\n .object({\n variableNames: z.array(z.string()),\n variableType: z.enum(['const', 'let', 'var']),\n })\n .optional(),\n children: z.array(WorkflowNodeSchema),\n })\n );\n\nexport const TransformationFunctionWorkflowNodeSchema: z.ZodType<TransformationFunctionWorkflowNode> =\n z.object({\n type: z.literal('transformation_function'),\n location: LocationSchema,\n code: z.string(),\n functionName: z.string(),\n isMethodCall: z.boolean(),\n description: z.string().optional(),\n arguments: z.string().optional(),\n variableId: z.number(),\n variableDeclaration: z\n .object({\n variableName: z.string(),\n variableType: z.enum(['const', 'let', 'var']),\n })\n .optional(),\n methodDefinition: z\n .object({\n location: z.object({\n startLine: z.number(),\n endLine: z.number(),\n }),\n isAsync: z.boolean(),\n parameters: z.array(z.string()),\n })\n .optional(),\n });\n\nexport const WorkflowNodeSchema: z.ZodType<WorkflowNode> = z.lazy(() =>\n z.union([\n BubbleWorkflowNodeSchema,\n ControlFlowWorkflowNodeSchema,\n TryCatchWorkflowNodeSchema,\n CodeBlockWorkflowNodeSchema,\n VariableDeclarationBlockNodeSchema,\n ReturnWorkflowNodeSchema,\n FunctionCallWorkflowNodeSchema,\n ParallelExecutionWorkflowNodeSchema,\n TransformationFunctionWorkflowNodeSchema,\n ])\n);\n\nexport const ParsedWorkflowSchema = z.object({\n root: z.array(WorkflowNodeSchema),\n bubbles: z.record(z.number(), ParsedBubbleWithInfoSchema),\n});\n","import { z } from 'zod';\n\n/**\n * Generate a UUID v4 compatible with both Node.js and browser environments\n */\nfunction generateUUID(): string {\n // Use crypto.randomUUID if available (modern browsers and Node.js 14.17+)\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n\n // Fallback for older environments\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// Base interface that all bubble operation results must extend, at individual bubble level\nexport interface BubbleOperationResult {\n success: boolean;\n error: string;\n}\n\n// Final bubble execution result\nexport interface BubbleResult<T> extends BubbleOperationResult {\n data: T;\n executionId: string;\n timestamp: Date;\n}\n\n/**\n * Utility class for generating mock data from Zod schemas\n * Useful for testing, development, and creating sample data\n */\nexport class MockDataGenerator {\n /**\n * Generate a complete mock BubbleResult from a result schema\n */\n static generateMockResult<TResult extends BubbleOperationResult>(\n resultSchema: z.ZodObject<z.ZodRawShape>\n ): BubbleResult<TResult> {\n const mockData = this.generateMockFromSchema(resultSchema);\n\n return {\n success: true,\n data: mockData as TResult,\n executionId: generateUUID(),\n error: '',\n timestamp: new Date(),\n };\n }\n\n /**\n * Generate mock data from JSON Schema\n * Converts JSON Schema to mock data with realistic values\n */\n static generateMockFromJsonSchema(\n jsonSchema: Record<string, unknown>\n ): Record<string, unknown> {\n const mockData: Record<string, unknown> = {};\n\n if (!jsonSchema || typeof jsonSchema !== 'object') {\n return mockData;\n }\n\n // Handle object type with properties\n if (jsonSchema.type === 'object' && jsonSchema.properties) {\n const properties = jsonSchema.properties as Record<string, unknown>;\n\n for (const [key, propertySchema] of Object.entries(properties)) {\n if (propertySchema && typeof propertySchema === 'object') {\n const value = this.generateMockValueFromJsonSchema(\n propertySchema as Record<string, unknown>\n );\n if (value !== undefined) {\n mockData[key] = value;\n }\n }\n }\n }\n\n return mockData;\n }\n\n /**\n * Generate a mock value for a specific JSON Schema property\n */\n static generateMockValueFromJsonSchema(\n schema: Record<string, unknown>\n ): unknown {\n const type = schema.type as string;\n\n switch (type) {\n case 'string': {\n if (schema.enum && Array.isArray(schema.enum)) {\n return schema.enum[Math.floor(Math.random() * schema.enum.length)];\n }\n if (schema.format === 'email') {\n return 'test@example.com';\n }\n if (schema.format === 'date-time') {\n return new Date().toISOString();\n }\n if (schema.format === 'uuid') {\n return generateUUID();\n }\n const minLength =\n typeof schema.minLength === 'number' ? schema.minLength : 1;\n const maxLength =\n typeof schema.maxLength === 'number' ? schema.maxLength : 10;\n const length =\n Math.floor(Math.random() * (maxLength - minLength + 1)) + minLength;\n return (\n 'sample_' +\n Math.random()\n .toString(36)\n .substring(2, 2 + length)\n );\n }\n\n case 'number':\n case 'integer': {\n const min = typeof schema.minimum === 'number' ? schema.minimum : 0;\n const max = typeof schema.maximum === 'number' ? schema.maximum : 100;\n const value = Math.random() * (max - min) + min;\n return type === 'integer'\n ? Math.floor(value)\n : Math.round(value * 100) / 100;\n }\n\n case 'boolean': {\n return Math.random() > 0.5;\n }\n\n case 'array': {\n const items = schema.items as Record<string, unknown>;\n if (items) {\n const minItems =\n typeof schema.minItems === 'number' ? schema.minItems : 1;\n const maxItems =\n typeof schema.maxItems === 'number' ? schema.maxItems : 3;\n const length =\n Math.floor(Math.random() * (maxItems - minItems + 1)) + minItems;\n\n return Array.from({ length }, () =>\n this.generateMockValueFromJsonSchema(items)\n );\n }\n return [];\n }\n\n case 'object': {\n return this.generateMockFromJsonSchema(schema);\n }\n\n default: {\n return null;\n }\n }\n }\n\n /**\n * Generate mock data object from a Zod schema\n * Recursively handles nested objects, arrays, and primitive types\n */\n static generateMockFromSchema(\n schema: z.ZodObject<z.ZodRawShape>\n ): Record<string, unknown> {\n const mockData: Record<string, unknown> = {};\n\n if (!schema || typeof schema !== 'object' || !('shape' in schema)) {\n return mockData;\n }\n\n const shape = schema.shape;\n\n for (const [key, zodType] of Object.entries(shape)) {\n if (key === 'success' || key === 'error') {\n // Skip these as they're handled by the wrapper\n continue;\n }\n\n if (zodType && typeof zodType === 'object' && '_def' in zodType) {\n const value = this.generateMockValue(zodType as z.ZodTypeAny);\n if (value !== undefined) {\n mockData[key] = value;\n }\n }\n }\n\n return mockData;\n }\n\n /**\n * Generate a mock value for a specific Zod type\n */\n static generateMockValue(zodType: z.ZodTypeAny): unknown {\n const def = zodType._def;\n\n switch (def.typeName) {\n case 'ZodString': {\n return this.generateMockString(def);\n }\n\n case 'ZodNumber': {\n return this.generateMockNumber(def);\n }\n\n case 'ZodBoolean': {\n return Math.random() > 0.5;\n }\n\n case 'ZodDate': {\n return new Date();\n }\n\n case 'ZodArray': {\n const elementType = def.type;\n if (elementType) {\n const arrayLength = Math.floor(Math.random() * 3) + 1; // 1-3 elements\n return Array.from({ length: arrayLength }, () =>\n this.generateMockValue(elementType)\n );\n }\n return [];\n }\n\n case 'ZodObject': {\n if ('shape' in zodType) {\n const nestedMock: Record<string, unknown> = {};\n const shape = (zodType as z.ZodObject<z.ZodRawShape>).shape;\n\n for (const [key, value] of Object.entries(shape)) {\n if (value && typeof value === 'object' && '_def' in value) {\n const nestedValue = this.generateMockValue(value as z.ZodTypeAny);\n if (nestedValue !== undefined) {\n nestedMock[key] = nestedValue;\n }\n }\n }\n\n return nestedMock;\n }\n return {};\n }\n\n case 'ZodOptional': {\n // 70% chance to include optional fields\n if (Math.random() > 0.3) {\n return this.generateMockValue(def.innerType);\n }\n return undefined;\n }\n\n case 'ZodDefault': {\n // 50% chance to use default, 50% to generate mock value\n if (Math.random() > 0.5) {\n return def.defaultValue();\n }\n return this.generateMockValue(def.innerType);\n }\n\n case 'ZodEnum': {\n const values = def.values as readonly unknown[];\n return values[Math.floor(Math.random() * values.length)];\n }\n\n case 'ZodLiteral': {\n return def.value;\n }\n\n case 'ZodUnion': {\n const options = def.options as z.ZodTypeAny[];\n const randomOption =\n options[Math.floor(Math.random() * options.length)];\n return this.generateMockValue(randomOption);\n }\n\n case 'ZodDiscriminatedUnion': {\n const discriminatedOptions = def.options as z.ZodTypeAny[];\n const randomDiscriminatedOption =\n discriminatedOptions[\n Math.floor(Math.random() * discriminatedOptions.length)\n ];\n return this.generateMockValue(randomDiscriminatedOption);\n }\n\n case 'ZodRecord': {\n const recordMock: Record<string, unknown> = {};\n const numKeys = Math.floor(Math.random() * 3) + 1; // 1-3 keys\n\n for (let i = 0; i < numKeys; i++) {\n const key = `key${i + 1}`;\n const value = this.generateMockValue(def.valueType);\n if (value !== undefined) {\n recordMock[key] = value;\n }\n }\n\n return recordMock;\n }\n\n case 'ZodNullable': {\n // 80% chance to have value, 20% chance to be null\n if (Math.random() > 0.2) {\n return this.generateMockValue(def.innerType);\n }\n return null;\n }\n\n default: {\n // For unknown types, return a generic value\n console.warn(`Unknown Zod type for mock generation: ${def.typeName}`);\n return `mock_${def.typeName}`;\n }\n }\n }\n\n /**\n * Generate mock string values with format-specific handling\n */\n private static generateMockString(def: Record<string, unknown>): string {\n if (def.checks) {\n for (const check of def.checks as Array<Record<string, unknown>>) {\n switch (check.kind) {\n case 'email': {\n return 'test@example.com';\n }\n case 'url': {\n return 'https://example.com';\n }\n case 'uuid': {\n return generateUUID();\n }\n case 'regex': {\n // For regex patterns, try to generate simple matching strings\n const pattern = check.regex as RegExp;\n if (pattern.source.includes('\\\\d+')) {\n return '12345';\n }\n if (pattern.source.includes('[a-z]')) {\n return 'abcde';\n }\n return 'mock_regex_match';\n }\n case 'min': {\n return 'a'.repeat(check.value as number);\n }\n case 'max': {\n return 'mock'.substring(0, check.value as number);\n }\n }\n }\n }\n return 'mock string';\n }\n\n /**\n * Generate mock number values respecting constraints\n */\n private static generateMockNumber(def: Record<string, unknown>): number {\n let min = 0;\n let max = 100;\n let isInt = false;\n\n if (def.checks) {\n for (const check of def.checks as Array<Record<string, unknown>>) {\n switch (check.kind) {\n case 'min': {\n min = check.value as number;\n break;\n }\n case 'max': {\n max = check.value as number;\n break;\n }\n case 'int': {\n isInt = true;\n break;\n }\n }\n }\n }\n\n const value = Math.random() * (max - min) + min;\n return isInt ? Math.floor(value) : Math.round(value * 100) / 100;\n }\n\n /**\n * Generate mock data with custom seed for reproducible results\n */\n static generateMockWithSeed<TResult extends BubbleOperationResult>(\n resultSchema: z.ZodObject<z.ZodRawShape>,\n seed: number\n ): BubbleResult<TResult> {\n // Simple seeded random number generator\n let currentSeed = seed;\n const seededRandom = () => {\n currentSeed = (currentSeed * 9301 + 49297) % 233280;\n return currentSeed / 233280;\n };\n\n // Temporarily override Math.random\n const originalRandom = Math.random;\n Math.random = seededRandom;\n\n try {\n const mockData = this.generateMockFromSchema(resultSchema);\n\n // Generate executionId using crypto (not affected by seeded random)\n // to ensure execution IDs are always unique even with the same seed\n const executionId = generateUUID();\n\n return {\n success: true,\n data: mockData as TResult,\n executionId,\n error: '',\n timestamp: new Date(),\n };\n } finally {\n // Restore original Math.random\n Math.random = originalRandom;\n }\n }\n}\n","// ========================= OAuth Schemas =========================\nimport { z } from '@hono/zod-openapi';\nimport { CredentialType } from './types';\n\n// OAuth initiation request schema\nexport const oauthInitiateRequestSchema = z\n .object({\n credentialType: z.nativeEnum(CredentialType).openapi({\n description: 'The type of credential to create',\n example: CredentialType.GOOGLE_DRIVE_CRED,\n }),\n name: z.string().optional().openapi({\n description: 'Optional name for the credential',\n example: 'My Google Drive',\n }),\n scopes: z\n .array(z.string())\n .optional()\n .openapi({\n description:\n 'Optional OAuth scopes to request (defaults based on credential type)',\n example: ['https://www.googleapis.com/auth/drive.readonly'],\n }),\n })\n .openapi('OAuthInitiateRequest');\n\n// OAuth initiation response schema\nexport const oauthInitiateResponseSchema = z\n .object({\n authUrl: z.string().url().openapi({\n description: 'OAuth authorization URL to redirect user to',\n example: 'https://accounts.google.com/oauth2/auth?client_id=...',\n }),\n state: z.string().openapi({\n description: 'CSRF protection state parameter',\n example: 'abc123-def456-ghi789',\n }),\n })\n .openapi('OAuthInitiateResponse');\n\n// OAuth callback request schema (for POST callback with credential details)\nexport const oauthCallbackRequestSchema = z\n .object({\n code: z.string().openapi({\n description: 'OAuth authorization code from provider',\n example: 'abc123def456',\n }),\n state: z.string().openapi({\n description: 'CSRF protection state parameter',\n example: 'abc123-def456-ghi789',\n }),\n name: z.string().openapi({\n description: 'Name for the credential',\n example: 'My Google Drive',\n }),\n description: z.string().optional().openapi({\n description: 'Optional description for the credential',\n }),\n })\n .openapi('OAuthCallbackRequest');\n\n// OAuth token refresh response schema\nexport const oauthTokenRefreshResponseSchema = z\n .object({\n message: z.string().openapi({\n description: 'Success message',\n example: 'Token refreshed successfully',\n }),\n })\n .openapi('OAuthTokenRefreshResponse');\n\n// OAuth revoke response schema\nexport const oauthRevokeResponseSchema = z\n .object({\n message: z.string().openapi({\n description: 'Success message',\n example: 'Credential revoked successfully',\n }),\n })\n .openapi('OAuthRevokeResponse');\n\n// Export OAuth TypeScript types\nexport type OAuthInitiateRequest = z.infer<typeof oauthInitiateRequestSchema>;\nexport type OAuthInitiateResponse = z.infer<typeof oauthInitiateResponseSchema>;\nexport type OAuthCallbackRequest = z.infer<typeof oauthCallbackRequestSchema>;\nexport type OAuthTokenRefreshResponse = z.infer<\n typeof oauthTokenRefreshResponseSchema\n>;\nexport type OAuthRevokeResponse = z.infer<typeof oauthRevokeResponseSchema>;\n","import { z } from '@hono/zod-openapi';\n// ============================================================================\n// JOIN WAITLIST SCHEMAS\n// ============================================================================\n\n// POST /join-waitlist - Join waitlist request schema\nexport const joinWaitlistSchema = z\n .object({\n name: z.string().min(1, 'Name is required').openapi({\n description: 'Full name of the user',\n example: 'John Doe',\n }),\n email: z.string().email('Valid email is required').openapi({\n description: 'Email address of the user',\n example: 'john.doe@example.com',\n }),\n database: z.string().min(1, 'Database selection is required').openapi({\n description: 'Database type the user wants to use',\n example: 'postgres',\n }),\n otherDatabase: z.string().optional().openapi({\n description: 'Other database type if \"other\" was selected',\n example: 'Redis',\n }),\n })\n .openapi('JoinWaitlistRequest');\n\n// POST /join-waitlist - Join waitlist response schema\nexport const joinWaitlistResponseSchema = z\n .object({\n success: z.boolean().openapi({\n description: 'Whether the request was successful',\n example: true,\n }),\n message: z.string().openapi({\n description: 'Success message',\n example:\n 'Successfully joined the waitlist! Check your email for next steps.',\n }),\n })\n .openapi('JoinWaitlistResponse');\n\n// Export TypeScript types\nexport type JoinWaitlistRequest = z.infer<typeof joinWaitlistSchema>;\nexport type JoinWaitlistResponse = z.infer<typeof joinWaitlistResponseSchema>;\n","import { z } from '@hono/zod-openapi';\nimport {\n ParsedBubbleWithInfoSchema,\n ParsedBubbleSchema,\n BubbleParameterType,\n ParsedWorkflowSchema,\n} from './bubble-definition-schema.js';\nimport { CredentialType } from './types.js';\nimport type { BubbleName } from './types.js';\n// POST /bubble-flow - Create new BubbleFlow schema (with code)\nexport const createBubbleFlowSchema = z\n .object({\n name: z.string().min(1).max(100).openapi({\n description: 'Name of the BubbleFlow',\n example: 'My First BubbleFlow',\n }),\n description: z.string().optional().openapi({\n description: 'Optional description of what this BubbleFlow does',\n example: 'A flow that processes webhook data',\n }),\n prompt: z.string().optional().openapi({\n description: 'Optional prompt used to generate the flow',\n example:\n 'Create a flow that processes webhook data and sends notifications',\n }),\n code: z.string().min(1).openapi({\n description: 'TypeScript code that defines the BubbleFlow class',\n example: 'export class MyFlow extends BubbleFlow { ... }',\n }),\n eventType: z.string().min(1).openapi({\n description: 'Event type this BubbleFlow responds to',\n example: 'webhook/http',\n }),\n webhookPath: z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-zA-Z0-9-_]+$/)\n .optional()\n .openapi({\n description: 'Custom webhook path (auto-generated if not provided)',\n example: 'my-webhook',\n }),\n webhookActive: z.boolean().default(false).optional().openapi({\n description: 'Whether the webhook should be active immediately',\n example: true,\n }),\n bubbleParameters: z\n .record(z.string(), ParsedBubbleWithInfoSchema)\n .optional()\n .openapi({\n description:\n 'Optional pre-parsed bubble parameters with descriptions (from AI generation). If provided, will be used instead of re-parsing the code.',\n }),\n })\n .openapi('CreateBubbleFlowRequest');\n\n// POST /bubble-flow - Create empty BubbleFlow schema (for async generation)\nexport const createEmptyBubbleFlowSchema = z\n .object({\n name: z.string().min(1).max(100).openapi({\n description: 'Name of the BubbleFlow',\n example: 'My First BubbleFlow',\n }),\n description: z.string().optional().openapi({\n description: 'Optional description of what this BubbleFlow does',\n example: 'A flow that processes webhook data',\n }),\n prompt: z.string().openapi({\n description: 'Prompt used to generate the flow code asynchronously',\n example:\n 'Create a flow that processes webhook data and sends notifications',\n }),\n eventType: z.string().min(1).openapi({\n description: 'Event type this BubbleFlow responds to',\n example: 'webhook/http',\n }),\n webhookPath: z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-zA-Z0-9-_]+$/)\n .optional()\n .openapi({\n description: 'Custom webhook path (auto-generated if not provided)',\n example: 'my-webhook',\n }),\n webhookActive: z.boolean().default(false).optional().openapi({\n description: 'Whether the webhook should be active immediately',\n example: true,\n }),\n })\n .openapi('CreateEmptyBubbleFlowRequest');\n\n// POST /:id/execute - Execute BubbleFlow schema\nexport const executeBubbleFlowSchema = z\n .record(z.string(), z.unknown())\n .openapi('ExecuteBubbleFlowRequest');\n\n// PUT /bubble-flow/:id - Update BubbleFlow parameters schema\nexport const updateBubbleFlowParametersSchema = z\n .object({\n bubbleParameters: z.record(\n z.string(),\n z.union([ParsedBubbleWithInfoSchema, ParsedBubbleSchema])\n ),\n })\n .openapi('UpdateBubbleFlowParametersRequest');\n\n// PATCH /bubble-flow/:id/name - Update BubbleFlow name schema\nexport const updateBubbleFlowNameSchema = z\n .object({\n name: z.string().min(1).max(100).openapi({\n description: 'New name for the BubbleFlow',\n example: 'My Updated Flow',\n }),\n })\n .openapi('UpdateBubbleFlowNameRequest');\n\n// ============================================================================\n// RESPONSE SCHEMAS (Output Types)\n// ============================================================================\n\n// POST /bubble-flow - Create BubbleFlow response (with code)\nexport const createBubbleFlowResponseSchema = z\n .object({\n id: z.number().openapi({\n description: 'ID of the created BubbleFlow',\n example: 123,\n }),\n message: z.string().openapi({\n description: 'Success message',\n example: 'BubbleFlow created successfully',\n }),\n inputSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .openapi({\n description: 'Input schema',\n example: {\n name: 'string',\n age: 'number',\n },\n }),\n bubbleParameters: z.record(z.string(), ParsedBubbleWithInfoSchema).openapi({\n description: 'Parsed bubble parameters from the BubbleFlow code',\n }),\n workflow: ParsedWorkflowSchema.optional().openapi({\n description: 'Hierarchical workflow structure with control flow',\n }),\n requiredCredentials: z\n .record(z.string(), z.array(z.nativeEnum(CredentialType)))\n .optional()\n .openapi({\n description:\n 'Mapping of bubble names to their required credential types',\n example: {\n 'database-connection': [CredentialType.DATABASE_CRED],\n 'slack-notification': [CredentialType.SLACK_CRED],\n 'ai-analysis': [CredentialType.GOOGLE_GEMINI_CRED],\n },\n }),\n eventType: z.string().min(1).openapi({\n description: 'Event type this BubbleFlow responds to',\n example: 'webhook/http',\n }),\n webhook: z\n .object({\n id: z.number().openapi({ description: 'Webhook ID', example: 456 }),\n url: z.string().openapi({\n description: 'Full webhook URL',\n example: 'http://localhost:3001/webhook/user123/my-webhook',\n }),\n path: z.string().openapi({\n description: 'Webhook path',\n example: 'my-webhook',\n }),\n active: z.boolean().openapi({\n description: 'Whether webhook is active',\n example: true,\n }),\n })\n .optional()\n .openapi({\n description: 'Webhook information (if webhook was created)',\n }),\n })\n .openapi('CreateBubbleFlowResponse');\n\n// POST /bubble-flow - Create empty BubbleFlow response (for async generation)\nexport const createEmptyBubbleFlowResponseSchema = z\n .object({\n id: z.number().openapi({\n description:\n 'ID of the created BubbleFlow (code will be generated asynchronously)',\n example: 123,\n }),\n message: z.string().openapi({\n description: 'Success message',\n example:\n 'BubbleFlow created successfully. Code generation in progress...',\n }),\n webhook: z\n .object({\n id: z.number().openapi({ description: 'Webhook ID', example: 456 }),\n url: z.string().openapi({\n description: 'Full webhook URL',\n example: 'http://localhost:3001/webhook/user123/my-webhook',\n }),\n path: z.string().openapi({\n description: 'Webhook path',\n example: 'my-webhook',\n }),\n active: z.boolean().openapi({\n description: 'Whether webhook is active',\n example: false,\n }),\n })\n .optional()\n .openapi({\n description: 'Webhook information (if webhook was created)',\n }),\n })\n .openapi('CreateEmptyBubbleFlowResponse');\n\n// GET /bubble-flow/:id - Get BubbleFlow details response\nexport const bubbleFlowDetailsResponseSchema = z\n .object({\n id: z.number().openapi({ description: 'BubbleFlow ID' }),\n name: z.string().openapi({ description: 'BubbleFlow name' }),\n description: z.string().optional().openapi({ description: 'Description' }),\n prompt: z\n .string()\n .optional()\n .openapi({ description: 'Original prompt used to generate the flow' }),\n eventType: z.string().openapi({ description: 'Event type' }),\n code: z.string().openapi({ description: 'TypeScript source code' }),\n generationError: z\n .string()\n .nullable()\n .optional()\n .openapi({ description: 'Error message if code generation failed' }),\n inputSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .openapi({ description: 'Input schema' }),\n cron: z\n .string()\n .nullable()\n .optional()\n .openapi({ description: 'Cron expression' }),\n cronActive: z\n .boolean()\n .optional()\n .openapi({ description: 'Whether cron scheduling is active' }),\n defaultInputs: z\n .record(z.string(), z.unknown())\n .optional()\n .openapi({ description: 'Default inputs for cron scheduling' }),\n isActive: z\n .boolean()\n .openapi({ description: 'Whether the BubbleFlow is active' }),\n requiredCredentials: z\n .record(z.string(), z.array(z.nativeEnum(CredentialType)))\n .openapi({ description: 'Required credentials by bubble' }),\n displayedBubbleParameters: z\n .record(\n z.string(),\n z.object({\n variableName: z.string(),\n bubbleName: z.string(),\n className: z.string(),\n parameters: z.array(\n z.object({\n name: z.string(),\n value: z.unknown(),\n type: z.nativeEnum(BubbleParameterType),\n })\n ),\n hasAwait: z.boolean(),\n hasActionCall: z.boolean(),\n })\n )\n .optional()\n .openapi({\n description: 'Displayed bubble parameters for visualization',\n }),\n bubbleParameters: z.record(z.string(), ParsedBubbleWithInfoSchema).openapi({\n description: 'Bubble parameters',\n }),\n workflow: ParsedWorkflowSchema.optional().openapi({\n description: 'Hierarchical workflow structure with control flow',\n }),\n metadata: z.record(z.string(), z.unknown()).optional().openapi({\n description:\n 'Flow metadata including conversation messages from generation',\n }),\n createdAt: z.string().openapi({ description: 'Creation timestamp' }),\n updatedAt: z.string().openapi({ description: 'Update timestamp' }),\n webhook_url: z\n .string()\n .openapi({ description: 'Webhook URL for this bubble flow' }),\n })\n .openapi('BubbleFlowDetailsResponse');\n\n// Individual BubbleFlow list item schema\nexport const bubbleFlowListItemSchema = z.object({\n id: z.number().openapi({ description: 'BubbleFlow ID' }),\n name: z.string().openapi({ description: 'BubbleFlow name' }),\n description: z.string().optional().openapi({ description: 'Description' }),\n eventType: z.string().openapi({ description: 'Event type' }),\n isActive: z\n .boolean()\n .openapi({ description: 'Whether the BubbleFlow is active' }),\n cronActive: z\n .boolean()\n .openapi({ description: 'Whether cron scheduling is active' }),\n cronSchedule: z.string().optional().openapi({ description: 'Cron schedule' }),\n webhookExecutionCount: z\n .number()\n .openapi({ description: 'Webhook execution count' }),\n webhookFailureCount: z\n .number()\n .openapi({ description: 'Webhook failure count' }),\n executionCount: z\n .number()\n .openapi({ description: 'Total number of executions in history' }),\n bubbles: z\n .array(\n z.object({\n bubbleName: z\n .string()\n .openapi({ description: 'Bubble name' }) as z.ZodType<BubbleName>,\n className: z.string().openapi({ description: 'Bubble class name' }),\n })\n )\n .optional()\n .openapi({ description: 'List of bubbles used in this flow' }),\n createdAt: z.string().openapi({ description: 'Creation timestamp' }),\n updatedAt: z.string().openapi({ description: 'Update timestamp' }),\n});\n\n// GET /bubble-flow - List BubbleFlows response with user info\nexport const bubbleFlowListResponseSchema = z.object({\n bubbleFlows: z.array(bubbleFlowListItemSchema).default([]),\n userMonthlyUsage: z\n .object({\n count: z.number().openapi({ description: 'Current monthly usage count' }),\n })\n .openapi({ description: 'User monthly usage information' }),\n});\n// POST /bubble-flow/:id/activate - Activate workflow\nexport const activateBubbleFlowResponseSchema = z\n .object({\n success: z.boolean().openapi({\n description: 'Whether the activation was successful',\n example: true,\n }),\n webhookUrl: z.string().openapi({\n description: 'Webhook URL for the activated workflow',\n example: 'https://api.nodex.dev/webhook/user123/workflow-123',\n }),\n message: z.string().openapi({\n description: 'Success message',\n example: 'Workflow activated successfully! Your Slack bot is now ready.',\n }),\n })\n .openapi('ActivateBubbleFlowResponse');\n\nexport type ActivateBubbleFlowResponse = z.infer<\n typeof activateBubbleFlowResponseSchema\n>;\n// Keep interface for backwards compatibility\nexport type CreateBubbleFlowResponse = z.infer<\n typeof createBubbleFlowResponseSchema\n>;\nexport type CreateBubbleFlowRequest = z.infer<typeof createBubbleFlowSchema>;\nexport type CreateEmptyBubbleFlowRequest = z.infer<\n typeof createEmptyBubbleFlowSchema\n>;\nexport type CreateEmptyBubbleFlowResponse = z.infer<\n typeof createEmptyBubbleFlowResponseSchema\n>;\nexport type ExecuteBubbleFlowRequest = z.infer<typeof executeBubbleFlowSchema>;\n\nexport type UpdateBubbleFlowParametersRequest = z.infer<\n typeof updateBubbleFlowParametersSchema\n>;\nexport type UpdateBubbleFlowParametersResponse = z.infer<\n typeof updateBubbleFlowParametersSchema\n>;\nexport type UpdateBubbleFlowNameRequest = z.infer<\n typeof updateBubbleFlowNameSchema\n>;\nexport type BubbleFlowDetailsResponse = z.infer<\n typeof bubbleFlowDetailsResponseSchema\n>;\n// Response types (derived from response schemas)\nexport type BubbleFlowListResponse = z.infer<\n typeof bubbleFlowListResponseSchema\n>;\nexport type BubbleFlowListItem = z.infer<typeof bubbleFlowListItemSchema>;\n","import { z } from '@hono/zod-openapi';\nimport {\n ParsedBubbleWithInfoSchema,\n ParsedWorkflowSchema,\n} from './bubble-definition-schema';\nimport { CredentialType } from './types';\n\nexport const ServiceUsageSchema = z\n .object({\n service: z.nativeEnum(CredentialType).openapi({\n description: 'Service identifier',\n example: CredentialType.OPENAI_CRED,\n }),\n subService: z.string().optional().openapi({\n description: 'Sub-service identifier',\n example: 'gpt-4',\n }),\n unit: z.string().openapi({\n description: 'Unit type for this service',\n example: 'per_1m_tokens',\n }),\n usage: z.number().openapi({\n description: 'Units used this month',\n example: 2250000,\n }),\n unitCost: z.number().openapi({\n description: 'Bubble Lab price per unit (with multiplier applied)',\n example: 2.1,\n }),\n totalCost: z.number().openapi({\n description: 'Total cost for this service (usage * unitCost)',\n example: 4.725,\n }),\n })\n .openapi('ServiceUsage');\n\nexport type ServiceUsage = z.infer<typeof ServiceUsageSchema>;\n\nexport const ExecutionSummarySchema = z\n .object({\n result: z.any().optional().openapi({\n description: 'Execution result',\n example: 'Execution completed successfully',\n }),\n totalDuration: z.number().openapi({\n description: 'Total execution duration in milliseconds',\n example: 1500,\n }),\n lineExecutionCount: z.number().optional().openapi({\n description: 'Number of lines executed',\n example: 25,\n }),\n bubbleExecutionCount: z.number().optional().openapi({\n description: 'Number of bubbles executed',\n example: 5,\n }),\n errorCount: z.number().optional().openapi({\n description: 'Number of errors encountered',\n example: 0,\n }),\n totalCost: z\n .number()\n .openapi({ description: 'Total cost of the execution' }),\n warningCount: z.number().optional().openapi({\n description: 'Number of warnings encountered',\n example: 1,\n }),\n errors: z\n .array(\n z.object({\n message: z.string().openapi({\n description: 'Error message',\n example: 'Failed to execute bubble',\n }),\n timestamp: z.number().openapi({\n description: 'Error timestamp (Unix timestamp)',\n example: 1703123457000,\n }),\n bubbleName: z.string().optional().openapi({\n description: 'Name of the bubble that caused the error',\n example: 'AIAgentBubble',\n }),\n variableId: z.number().optional().openapi({\n description: 'Variable ID associated with the error',\n example: 1,\n }),\n lineNumber: z.number().optional().openapi({\n description: 'Line number where the error occurred',\n example: 15,\n }),\n additionalData: z.any().optional().openapi({\n description: 'Additional error details',\n }),\n })\n )\n .optional()\n .openapi({\n description: 'Array of errors encountered during execution',\n }),\n warnings: z\n .array(\n z.object({\n message: z.string().openapi({\n description: 'Warning message',\n example: 'Deprecated API usage detected',\n }),\n timestamp: z.number().openapi({\n description: 'Warning timestamp (Unix timestamp)',\n example: 1703123457000,\n }),\n bubbleName: z.string().optional().openapi({\n description: 'Name of the bubble that caused the warning',\n example: 'HttpBubble',\n }),\n variableId: z.number().optional().openapi({\n description: 'Variable ID associated with the warning',\n example: 2,\n }),\n lineNumber: z.number().optional().openapi({\n description: 'Line number where the warning occurred',\n example: 20,\n }),\n additionalData: z.any().optional().openapi({\n description: 'Additional warning details',\n }),\n })\n )\n .optional()\n .openapi({\n description: 'Array of warnings encountered during execution',\n }),\n averageLineExecutionTime: z.number().optional().openapi({\n description: 'Average execution time per line in milliseconds',\n example: 60,\n }),\n slowestLines: z\n .array(\n z.object({\n lineNumber: z.number().openapi({\n description: 'Line number',\n example: 15,\n }),\n duration: z.number().openapi({\n description: 'Execution duration in milliseconds',\n example: 250,\n }),\n message: z.string().openapi({\n description: 'Description of what was executed on this line',\n example: 'API call to external service',\n }),\n })\n )\n .optional()\n .openapi({\n description: 'Array of the slowest executing lines',\n }),\n memoryPeakUsage: z.any().optional().openapi({\n description:\n 'Peak memory usage during execution (NodeJS.MemoryUsage type)',\n }), // NodeJS.MemoryUsage type\n startTime: z.number().optional().openapi({\n description: 'Execution start timestamp (Unix timestamp)',\n example: 1703123456789,\n }),\n endTime: z.number().optional().openapi({\n description: 'Execution end timestamp (Unix timestamp)',\n example: 1703123458289,\n }),\n serviceUsage: z.array(ServiceUsageSchema).optional().openapi({\n description: 'Token usage during execution',\n }),\n serviceUsageByService: z\n .record(z.string(), ServiceUsageSchema)\n .optional()\n .openapi({\n description: 'Service usage breakdown by service',\n }),\n })\n .openapi('ExecutionSummary');\n\nexport type ExecutionSummary = z.infer<typeof ExecutionSummarySchema>;\n\n// BubbleFlow execution history item schema\nexport const bubbleFlowExecutionSchema = z.object({\n id: z.number().openapi({ description: 'Execution ID' }),\n status: z\n .enum(['running', 'success', 'error'])\n .openapi({ description: 'Execution status' }),\n payload: z\n .record(z.string(), z.any())\n .openapi({ description: 'Execution payload' }),\n result: z.any().optional().openapi({ description: 'Execution result data' }),\n error: z\n .string()\n .optional()\n .openapi({ description: 'Error message if failed' }),\n startedAt: z.string().openapi({ description: 'Execution start timestamp' }),\n webhook_url: z.string().openapi({ description: 'Webhook URL' }),\n completedAt: z\n .string()\n .optional()\n .openapi({ description: 'Execution completion timestamp' }),\n code: z.string().optional().openapi({\n description:\n 'The code that was executed (snapshot of the code at execution time)',\n }),\n});\n\n// GET /bubble-flow/:id/executions - List BubbleFlow executions response\nexport const listBubbleFlowExecutionsResponseSchema = z\n .array(bubbleFlowExecutionSchema)\n .openapi('ListBubbleFlowExecutionsResponse');\n\nexport type ListBubbleFlowExecutionsResponse = z.infer<\n typeof listBubbleFlowExecutionsResponseSchema\n>;\n\n// GET /bubble-flow/:id/executions/:executionId - Single execution with logs\nexport const bubbleFlowExecutionDetailSchema = bubbleFlowExecutionSchema.extend(\n {\n executionLogs: z\n .array(z.any())\n .optional()\n .openapi({\n description: 'Array of streaming log events from the execution',\n }),\n }\n);\n\nexport type BubbleFlowExecutionDetail = z.infer<\n typeof bubbleFlowExecutionDetailSchema\n>;\n\nexport const executeBubbleFlowResponseSchema = z\n .object({\n executionId: z.number().openapi({\n description: 'ID of the execution record',\n example: 789,\n }),\n success: z.boolean().openapi({\n description: 'Whether the execution was successful',\n example: true,\n }),\n data: z\n .any()\n .optional()\n .openapi({\n description: 'Data returned by the BubbleFlow (if successful)',\n example: { result: 'processed successfully', count: 42 },\n }),\n summary: ExecutionSummarySchema.optional().openapi({\n description: 'Execution summary',\n }),\n error: z.string().optional().openapi({\n description: 'Error message (if execution failed)',\n example: 'Validation error in BubbleFlow',\n }),\n })\n .openapi('ExecuteBubbleFlowResponse');\n\nexport type ExecuteBubbleFlowResponse = z.infer<\n typeof executeBubbleFlowResponseSchema\n>;\n\n// ExecutionResult interface for internal use (matches the API response)\nexport type ExecutionResult = ExecuteBubbleFlowResponse;\n\n// Validation schemas\nexport const validateBubbleFlowCodeSchema = z.object({\n code: z.string().min(1).openapi({\n description: 'TypeScript BubbleFlow code to validate',\n example:\n 'export class TestFlow extends BubbleFlow<\"webhook/http\"> { async handle() { return {}; } }',\n }),\n options: z\n .object({\n includeDetails: z.boolean().default(true).openapi({\n description: 'Include detailed bubble analysis',\n }),\n strictMode: z.boolean().default(true).openapi({\n description: 'Enable strict TypeScript validation',\n }),\n syncInputsWithFlow: z.boolean().default(false).openapi({\n description: 'Whether to sync input values with the flow',\n }),\n })\n .optional()\n .openapi({\n description: 'Validation options',\n }),\n flowId: z.number().positive().optional().openapi({\n description:\n 'Optional BubbleFlow ID to update with validation results if user owns the flow',\n example: 123,\n }),\n credentials: z\n .record(z.string(), z.record(z.string(), z.number()))\n .optional()\n .openapi({\n description:\n 'Optional credentials mapping: bubble name -> credential type -> credential ID',\n example: {\n 'slack-sender': {\n SLACK_CRED: 123,\n },\n 'ai-agent': {\n OPENAI_CRED: 456,\n },\n },\n }),\n defaultInputs: z\n .record(z.unknown())\n .optional()\n .openapi({\n description: 'User-filled input values for cron execution',\n example: {\n message: 'Hello World',\n channel: '#general',\n },\n }),\n activateCron: z.boolean().optional().openapi({\n description: 'Whether to activate/deactivate cron scheduling',\n example: true,\n }),\n});\n\nexport const validateBubbleFlowCodeResponseSchema = z.object({\n eventType: z.string().min(1).openapi({\n description: 'Event type this BubbleFlow responds to',\n example: 'webhook/http',\n }),\n webhookPath: z.string().min(1).openapi({\n description: 'Custom webhook path (auto-generated if not provided)',\n example: 'my-webhook',\n }),\n valid: z.boolean().openapi({\n description: 'Whether the code is valid',\n }),\n errors: z.array(z.string()).optional().openapi({\n description: 'List of validation errors if any',\n }),\n bubbleCount: z.number().optional().openapi({\n description: 'Number of bubbles found in the code',\n }),\n inputSchema: z.record(z.string(), z.unknown()).openapi({\n description: 'Input schema',\n example: {\n name: 'string',\n age: 'number',\n },\n }),\n bubbles: z.record(z.string(), ParsedBubbleWithInfoSchema).optional().openapi({\n description: 'Record mapping bubble IDs to their detailed information',\n }),\n workflow: ParsedWorkflowSchema.optional().openapi({\n description: 'Hierarchical workflow structure with control flow',\n }),\n requiredCredentials: z\n .record(z.string(), z.array(z.string()))\n .optional()\n .openapi({\n description: 'Required credentials for the bubbles in the code',\n }),\n metadata: z\n .object({\n validatedAt: z.string().openapi({\n description: 'Timestamp when validation was performed',\n }),\n codeLength: z.number().openapi({\n description: 'Length of the code in characters',\n }),\n strictMode: z.boolean().openapi({\n description: 'Whether strict mode was used',\n }),\n flowUpdated: z.boolean().optional().openapi({\n description:\n 'Whether the BubbleFlow was updated with validation results',\n }),\n })\n .openapi({\n description: 'Validation metadata',\n }),\n cron: z.string().nullable().optional().openapi({\n description: 'Cron expression extracted from code',\n example: '0 0 * * *',\n }),\n cronActive: z.boolean().optional().openapi({\n description: 'Whether cron scheduling is currently active',\n example: false,\n }),\n defaultInputs: z\n .record(z.unknown())\n .optional()\n .openapi({\n description: 'User-filled input values for cron execution',\n example: {\n message: 'Hello World',\n channel: '#general',\n },\n }),\n success: z.boolean(),\n error: z.string(),\n});\nexport type ValidateBubbleFlowResponse = z.infer<\n typeof validateBubbleFlowCodeResponseSchema\n>;\nexport type BubbleFlowExecution = z.infer<typeof bubbleFlowExecutionSchema>;\n","import { ParsedBubbleWithInfoSchema } from './bubble-definition-schema';\nimport { z } from '@hono/zod-openapi';\nimport { BubbleParameterType } from './bubble-definition-schema';\nimport { CredentialType } from './types';\nimport { ServiceUsageSchema } from './bubbleflow-execution-schema';\nimport { CoffeeMessageSchema } from './coffee';\n\n// BubbleFlow generation schemas\nexport const generateBubbleFlowCodeSchema = z.object({\n prompt: z.string().min(1).openapi({\n description: 'Natural language description of the desired BubbleFlow',\n example:\n 'Create a flow that queries my database and sends results to Slack',\n }),\n flowId: z.number().optional().openapi({\n description:\n 'Optional flow ID to update with generated code (for async generation)',\n example: 123,\n }),\n // Coffee agent unified messages (for planning phase)\n messages: z.array(CoffeeMessageSchema).optional().openapi({\n description:\n 'Full conversation history including clarification Q&A, context results, plan approvals',\n }),\n // Plan context (passed to Boba for enriched code generation)\n planContext: z.string().optional().openapi({\n description:\n 'Plan context from Coffee agent (passed to Boba for enriched generation)',\n example: 'Plan: 1. Fetch data from API 2. Process with AI 3. Send to Slack',\n }),\n});\n\nexport const generateBubbleFlowCodeResponseSchema = z.object({\n generatedCode: z.string().openapi({\n description: 'The generated BubbleFlow TypeScript code',\n }),\n isValid: z.boolean().openapi({\n description: 'Whether the generated code is valid',\n }),\n success: z.boolean(),\n error: z.string(),\n bubbleParameters: z.record(z.string(), ParsedBubbleWithInfoSchema).openapi({\n description: 'Parsed bubble parameters from the generated code',\n }),\n requiredCredentials: z.record(z.string(), z.array(z.string())).openapi({\n description: 'Required credentials for the bubbles in the generated code',\n }),\n});\n\n/**\n * Schema for the result of BubbleFlow generation\n * Used by the BubbleFlowGeneratorWorkflow\n */\nexport const GenerationResultSchema = z.object({\n generatedCode: z\n .string()\n .describe('The generated BubbleFlow TypeScript code'),\n isValid: z.boolean().describe('Whether the generated code is valid'),\n success: z.boolean(),\n error: z.string(),\n flowId: z.number().optional().openapi({\n description: 'ID of the generated BubbleFlow',\n example: 123,\n }),\n toolCalls: z\n .array(z.unknown())\n .describe('The tool calls made by the AI agent'),\n summary: z\n .string()\n .default('')\n .describe('High-level instructions for using the validated flow'),\n inputsSchema: z\n .string()\n .default('')\n .describe('JSON Schema (string) representing the inputs of the flow'),\n serviceUsage: z.array(ServiceUsageSchema).optional().openapi({\n description:\n 'Service usage statistics for the generation (array of services used)',\n }),\n bubbleCount: z.number().optional().openapi({\n description: 'Number of bubbles used in the generated flow',\n }),\n codeLength: z.number().optional().openapi({\n description: 'Length of the generated code in characters',\n }),\n bubbleParameters: z\n .record(z.union([z.string(), z.number()]), ParsedBubbleWithInfoSchema)\n .optional()\n .openapi({\n description:\n 'Parsed bubble parameters with descriptions from AI generation',\n }),\n});\n// POST /bubbleflow-template/data-analyst - Generate template from description\nexport const generateBubbleFlowTemplateSchema = z\n .object({\n name: z.string().min(1).max(100).openapi({\n description: 'Name for the workflow',\n example: 'Sam Dix Data Scientist Bot',\n }),\n description: z.string().min(10).max(500).openapi({\n description: 'Description of what the workflow should do',\n example:\n 'A Slack bot that helps analyze user engagement data and provides insights',\n }),\n roles: z.string().min(10).max(1000).openapi({\n description:\n \"Detailed description of the bot's roles and responsibilities\",\n example:\n 'Be prepared to answer any question on user engagement and come up with proactive insights...',\n }),\n useCase: z.literal('slack-data-scientist').openapi({\n description: 'The specific use case template to generate',\n example: 'slack-data-scientist',\n }),\n // Optional configuration parameters\n verbosity: z.enum(['1', '2', '3', '4', '5']).optional().openapi({\n description: 'Response verbosity level (1=concise, 5=comprehensive)',\n example: '3',\n }),\n technicality: z.enum(['1', '2', '3', '4', '5']).optional().openapi({\n description: 'Technical complexity level (1=plain English, 5=expert)',\n example: '2',\n }),\n includeQuery: z.boolean().optional().openapi({\n description: 'Include the SQL query in the response',\n example: true,\n }),\n includeExplanation: z.boolean().optional().openapi({\n description: 'Include query explanation in the response',\n example: true,\n }),\n maxQueries: z.number().optional().openapi({\n description: 'Maximum number of queries to run',\n example: 10,\n }),\n })\n .openapi('GenerateBubbleFlowTemplateRequest');\n\n// POST /bubbleflow-template/document-generation - Generate document processing template\nexport const generateDocumentGenerationTemplateSchema = z\n .object({\n name: z.string().min(1).max(100).openapi({\n description: 'Name for the document processing workflow',\n example: 'Expense Report Generator',\n }),\n description: z\n .string()\n .max(500)\n .default('Document processing workflow')\n .openapi({\n description:\n 'Description of what the document processing workflow should do (optional)',\n example:\n 'Process receipts and invoices to generate structured expense reports',\n }),\n outputDescription: z.string().min(1).max(1000).openapi({\n description:\n 'Detailed description of the desired output format and data extraction',\n example:\n 'Extract expense tracking data with vendor name, transaction date, amount, category, and description',\n }),\n // Optional configuration parameters\n outputFormat: z.enum(['html', 'csv', 'json']).optional().openapi({\n description: 'Default output format for generated documents',\n example: 'html',\n }),\n conversionOptions: z\n .object({\n preserveStructure: z.boolean().optional().openapi({\n description: 'Preserve document structure during parsing',\n example: true,\n }),\n includeVisualDescriptions: z.boolean().optional().openapi({\n description: 'Include descriptions of visual elements',\n example: true,\n }),\n extractNumericalData: z.boolean().optional().openapi({\n description: 'Extract and process numerical data',\n example: true,\n }),\n combinePages: z.boolean().optional().openapi({\n description: 'Combine multiple pages into single output',\n example: true,\n }),\n })\n .optional(),\n imageOptions: z\n .object({\n format: z.enum(['png', 'jpg', 'jpeg']).optional().openapi({\n description: 'Image format for document conversion',\n example: 'png',\n }),\n quality: z.number().min(0.1).max(1.0).optional().openapi({\n description: 'Image quality (0.1 to 1.0)',\n example: 0.9,\n }),\n dpi: z.number().min(72).max(300).optional().openapi({\n description: 'Image DPI for conversion',\n example: 200,\n }),\n })\n .optional(),\n aiOptions: z\n .object({\n model: z.string().optional().openapi({\n description: 'AI model to use for processing',\n example: 'google/gemini-2.5-flash',\n }),\n temperature: z.number().min(0).max(2).optional().openapi({\n description: 'AI model temperature (0 to 2)',\n example: 0.2,\n }),\n maxTokens: z.number().min(1000).max(200000).optional().openapi({\n description: 'Maximum tokens for AI processing',\n example: 90000,\n }),\n jsonMode: z.boolean().optional().openapi({\n description: 'Enable JSON mode for structured output',\n example: false,\n }),\n })\n .optional(),\n metadata: z\n .record(z.string(), z.unknown())\n .optional()\n .openapi({\n description:\n 'Additional metadata for the workflow (e.g., outputDescription)',\n example: { outputDescription: 'Extract expense data from receipts' },\n }),\n })\n .openapi('GenerateDocumentGenerationTemplateRequest');\n\n// Response for template generation (extends the regular create response)\nexport const bubbleFlowTemplateResponseSchema = z\n .object({\n id: z.number().openapi({\n description: 'ID of the created BubbleFlow template',\n example: 123,\n }),\n name: z.string().openapi({\n description: 'Name of the BubbleFlow',\n example: 'Sam Dix Data Scientist Bot',\n }),\n description: z.string().openapi({\n description: 'Description of the BubbleFlow',\n example: 'A Slack bot that helps analyze user engagement data',\n }),\n eventType: z.string().openapi({\n description: 'Event type this BubbleFlow responds to',\n example: 'slack/bot_mentioned',\n }),\n displayedBubbleParameters: z.record(\n z.string(),\n z.object({\n variableName: z.string(),\n bubbleName: z.string(),\n className: z.string(),\n parameters: z.array(\n z.object({\n name: z.string(),\n value: z.unknown(),\n type: z.nativeEnum(BubbleParameterType),\n })\n ),\n hasAwait: z.boolean(),\n hasActionCall: z.boolean(),\n })\n ),\n bubbleParameters: z\n .record(\n z.string(),\n z.object({\n variableName: z.string(),\n bubbleName: z.string(),\n className: z.string(),\n parameters: z.array(\n z.object({\n name: z.string(),\n value: z.unknown(),\n type: z.nativeEnum(BubbleParameterType),\n })\n ),\n hasAwait: z.boolean(),\n hasActionCall: z.boolean(),\n })\n )\n .openapi({\n description: 'Parsed bubble parameters from the BubbleFlow code',\n }),\n requiredCredentials: z\n .record(z.string(), z.array(z.nativeEnum(CredentialType)))\n .optional()\n .openapi({\n description:\n 'Mapping of bubble names to their required credential types',\n example: {\n 'database-connection': [CredentialType.DATABASE_CRED],\n 'slack-notification': [CredentialType.SLACK_CRED],\n 'ai-analysis': [CredentialType.GOOGLE_GEMINI_CRED],\n },\n }),\n createdAt: z.string().openapi({\n description: 'ISO timestamp when the template was created',\n example: '2025-01-15T10:30:00.000Z',\n }),\n updatedAt: z.string().openapi({\n description: 'ISO timestamp when the template was last updated',\n example: '2025-01-15T10:30:00.000Z',\n }),\n\n webhook: z\n .object({\n id: z.number().openapi({ description: 'Webhook ID', example: 456 }),\n url: z.string().openapi({\n description: 'Full webhook URL',\n example: 'http://localhost:3001/webhook/user123/my-webhook',\n }),\n path: z.string().openapi({\n description: 'Webhook path',\n example: 'my-webhook',\n }),\n active: z.boolean().openapi({\n description: 'Whether webhook is active',\n example: true,\n }),\n })\n .optional()\n .openapi({\n description: 'Webhook information (if webhook was created)',\n }),\n })\n .openapi('BubbleFlowTemplateResponse');\nexport type GenerateBubbleFlowCodeResponse = z.infer<\n typeof generateBubbleFlowCodeResponseSchema\n>;\nexport type GenerateBubbleFlowTemplateRequest = z.infer<\n typeof generateBubbleFlowTemplateSchema\n>;\nexport type GenerateDocumentGenerationTemplateRequest = z.infer<\n typeof generateDocumentGenerationTemplateSchema\n>;\nexport type BubbleFlowTemplateResponse = z.infer<\n typeof bubbleFlowTemplateResponseSchema\n>;\nexport type GenerationResult = z.infer<typeof GenerationResultSchema>;\n","import { z } from 'zod';\nimport { CredentialType } from './types.js';\n\n// ============================================================================\n// Coffee Agent - Planning Phase for BubbleFlow Generation\n// ============================================================================\n// Coffee runs BEFORE Boba to gather clarification and generate an\n// implementation plan. This helps reduce ambiguity in user requests.\n\n// Constants\nexport const COFFEE_MAX_ITERATIONS = 30;\nexport const COFFEE_MAX_QUESTIONS = 5;\nexport const COFFEE_DEFAULT_MODEL = 'google/gemini-3-pro-preview' as const;\n\n// ============================================================================\n// Clarification Schemas\n// ============================================================================\n\n/** A single choice option for a clarification question */\nexport const ClarificationChoiceSchema = z.object({\n id: z.string().describe('Unique identifier for this choice'),\n label: z.string().describe('Short display label for the choice'),\n description: z\n .string()\n .optional()\n .describe('Optional longer description explaining the choice'),\n});\n\n/** A clarification question with multiple choices */\nexport const ClarificationQuestionSchema = z.object({\n id: z.string().describe('Unique identifier for this question'),\n question: z.string().describe('The question text to display to the user'),\n choices: z\n .array(ClarificationChoiceSchema)\n .min(2)\n .describe('Available choices for the user (minimum 2 options)'),\n context: z\n .string()\n .optional()\n .describe('Optional context explaining why this question is being asked'),\n allowMultiple: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'If true, user can select multiple choices. Default is false (single selection)'\n ),\n});\n\n/** Event sent to frontend containing clarification questions */\nexport const CoffeeClarificationEventSchema = z.object({\n questions: z\n .array(ClarificationQuestionSchema)\n .min(1)\n .max(COFFEE_MAX_QUESTIONS)\n .describe(`List of clarification questions (1-${COFFEE_MAX_QUESTIONS})`),\n});\n\n// ============================================================================\n// Context Gathering Schemas\n// ============================================================================\n\n/**\n * Event sent when Coffee requests external context via running a BubbleFlow.\n * This pauses the planning process until the user provides credentials and approves execution.\n */\nexport const CoffeeRequestExternalContextEventSchema = z.object({\n flowId: z.string().describe('Unique ID for this context request'),\n flowCode: z\n .string()\n .describe('Validated BubbleFlow TypeScript code to execute'),\n requiredCredentials: z\n .array(z.nativeEnum(CredentialType))\n .describe('List of credential types needed to run this flow'),\n description: z\n .string()\n .describe('User-friendly description of what this flow will do'),\n});\n\n/**\n * Answer sent back to Coffee after user provides credentials and flow executes.\n * This is used to resume the planning process with enriched context.\n */\nexport const CoffeeContextAnswerSchema = z.object({\n flowId: z.string().describe('ID of the context request being answered'),\n status: z\n .enum(['success', 'rejected', 'error'])\n .describe(\n 'Status: success (got context), rejected (user skipped), error (execution failed)'\n ),\n result: z\n .unknown()\n .optional()\n .describe('The result data from running the context-gathering flow'),\n error: z.string().optional().describe('Error message if status is error'),\n originalRequest: CoffeeRequestExternalContextEventSchema.optional().describe(\n 'The original context request that triggered this answer'\n ),\n});\n\n/**\n * Context request info that the agent generates when it wants to run a flow.\n */\nexport const CoffeeContextRequestInfoSchema = z.object({\n purpose: z.string().describe('Why this context is needed'),\n flowDescription: z\n .string()\n .describe('User-facing description of what the flow will do'),\n});\n\n/** Legacy context gathering status (used in streaming events) */\nexport const CoffeeContextEventSchema = z.object({\n status: z.enum(['gathering', 'complete']),\n miniFlowDescription: z.string().optional(),\n result: z.string().optional(),\n});\n\n// ============================================================================\n// Plan Schemas\n// ============================================================================\n\n/** A single step in the implementation plan */\nexport const PlanStepSchema = z.object({\n title: z.string().describe('Short title for this step'),\n description: z\n .string()\n .describe('Detailed description of what this step does'),\n bubblesUsed: z\n .array(z.string())\n .optional()\n .describe('Names of bubbles used in this step'),\n});\n\n/** The complete implementation plan generated by Coffee */\nexport const CoffeePlanEventSchema = z.object({\n summary: z.string().describe('Brief overview of the workflow'),\n steps: z.array(PlanStepSchema).describe('Step-by-step implementation plan'),\n estimatedBubbles: z\n .array(z.string())\n .describe('All bubbles that will be used in the workflow'),\n});\n\n// ============================================================================\n// Unified Message Types for Coffee Chat\n// ============================================================================\n// These message types allow Coffee interactions to be stored as persistent\n// messages in the chat history, rather than ephemeral state.\n\n/** Base message structure shared by all message types */\nconst BaseMessageSchema = z.object({\n id: z.string().describe('Unique message identifier'),\n timestamp: z.string().describe('ISO timestamp of message creation'),\n});\n\n/** Regular user text message */\nexport const UserMessageSchema = BaseMessageSchema.extend({\n type: z.literal('user'),\n content: z.string().describe('User message text'),\n});\n\n/** Regular assistant text message */\nexport const AssistantMessageSchema = BaseMessageSchema.extend({\n type: z.literal('assistant'),\n content: z.string().describe('Assistant response text'),\n code: z.string().optional().describe('Generated code if applicable'),\n resultType: z\n .enum(['code', 'question', 'answer', 'reject'])\n .optional()\n .describe('Type of assistant response'),\n bubbleParameters: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Bubble parameters for code responses'),\n});\n\n/** Coffee asking clarification questions */\nexport const ClarificationRequestMessageSchema = BaseMessageSchema.extend({\n type: z.literal('clarification_request'),\n questions: z\n .array(ClarificationQuestionSchema)\n .describe('Questions being asked'),\n});\n\n/** User's answers to clarification questions */\nexport const ClarificationResponseMessageSchema = BaseMessageSchema.extend({\n type: z.literal('clarification_response'),\n answers: z\n .record(z.string(), z.array(z.string()))\n .describe('questionId -> choiceIds'),\n originalQuestions: z\n .array(ClarificationQuestionSchema)\n .optional()\n .describe('The questions that were answered (for display purposes)'),\n});\n\n/** Coffee requesting external context */\nexport const ContextRequestMessageSchema = BaseMessageSchema.extend({\n type: z.literal('context_request'),\n request: CoffeeRequestExternalContextEventSchema.describe(\n 'Context gathering request details'\n ),\n});\n\n/** User's response to context request */\nexport const ContextResponseMessageSchema = BaseMessageSchema.extend({\n type: z.literal('context_response'),\n answer: CoffeeContextAnswerSchema.describe(\n 'User response to context request'\n ),\n credentialTypes: z\n .array(z.string())\n .optional()\n .describe('Credential types used (for display, not actual secrets)'),\n});\n\n/** Coffee's generated plan */\nexport const PlanMessageSchema = BaseMessageSchema.extend({\n type: z.literal('plan'),\n plan: CoffeePlanEventSchema.describe('Generated implementation plan'),\n});\n\n/** User's plan approval with optional comment */\nexport const PlanApprovalMessageSchema = BaseMessageSchema.extend({\n type: z.literal('plan_approval'),\n approved: z.boolean().describe('Whether the plan was approved'),\n comment: z.string().optional().describe('Optional user comment on the plan'),\n});\n\n/** System message (for retries, errors, etc.) */\nexport const SystemMessageSchema = BaseMessageSchema.extend({\n type: z.literal('system'),\n content: z.string().describe('System message content'),\n});\n\n/** Tool result message - persists successful tool call results */\nexport const ToolResultMessageSchema = BaseMessageSchema.extend({\n type: z.literal('tool_result'),\n toolName: z.string().describe('Name of the tool that was called'),\n toolCallId: z.string().describe('Unique ID for this tool call'),\n input: z.unknown().describe('Input parameters passed to the tool'),\n output: z.unknown().describe('Output/result from the tool'),\n duration: z.number().describe('Duration of the tool call in milliseconds'),\n success: z.boolean().describe('Whether the tool call succeeded'),\n});\n\n/** Union of all Coffee message types */\nexport const CoffeeMessageSchema = z.discriminatedUnion('type', [\n UserMessageSchema,\n AssistantMessageSchema,\n ClarificationRequestMessageSchema,\n ClarificationResponseMessageSchema,\n ContextRequestMessageSchema,\n ContextResponseMessageSchema,\n PlanMessageSchema,\n PlanApprovalMessageSchema,\n SystemMessageSchema,\n ToolResultMessageSchema,\n]);\n\n// ============================================================================\n// Request/Response Schemas\n// ============================================================================\n\n/** Request to the Generate BubbleFlow */\nexport const CoffeeRequestSchema = z.object({\n prompt: z.string().min(1).describe('The user prompt describing the workflow'),\n flowId: z\n .number()\n .optional()\n .describe('Optional flow ID if updating existing flow'),\n messages: z\n .array(CoffeeMessageSchema)\n .optional()\n .describe(\n 'Full conversation history including clarification Q&A, context results, plan approvals'\n ),\n});\n\n/** Response from the Coffee agent */\nexport const CoffeeResponseSchema = z.object({\n type: z\n .enum(['clarification', 'plan', 'context_request', 'error'])\n .describe('Response type'),\n clarification: CoffeeClarificationEventSchema.optional(),\n plan: CoffeePlanEventSchema.optional(),\n contextRequest: CoffeeRequestExternalContextEventSchema.optional(),\n error: z.string().optional(),\n success: z.boolean().describe('Whether the operation completed successfully'),\n});\n\n/** Internal output format from the Coffee AI agent */\nexport const CoffeeAgentOutputSchema = z.object({\n action: z\n .enum(['askClarification', 'generatePlan', 'requestContext'])\n .describe('The action the agent wants to take'),\n questions: z.array(ClarificationQuestionSchema).optional(),\n plan: CoffeePlanEventSchema.optional(),\n contextRequest: CoffeeContextRequestInfoSchema.optional(),\n});\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type ClarificationChoice = z.infer<typeof ClarificationChoiceSchema>;\nexport type ClarificationQuestion = z.infer<typeof ClarificationQuestionSchema>;\nexport type CoffeeClarificationEvent = z.infer<\n typeof CoffeeClarificationEventSchema\n>;\nexport type CoffeeRequestExternalContextEvent = z.infer<\n typeof CoffeeRequestExternalContextEventSchema\n>;\nexport type CoffeeContextAnswer = z.infer<typeof CoffeeContextAnswerSchema>;\nexport type CoffeeContextEvent = z.infer<typeof CoffeeContextEventSchema>;\nexport type CoffeeContextRequestInfo = z.infer<\n typeof CoffeeContextRequestInfoSchema\n>;\nexport type PlanStep = z.infer<typeof PlanStepSchema>;\nexport type CoffeePlanEvent = z.infer<typeof CoffeePlanEventSchema>;\nexport type CoffeeRequest = z.infer<typeof CoffeeRequestSchema>;\nexport type CoffeeResponse = z.infer<typeof CoffeeResponseSchema>;\nexport type CoffeeAgentOutput = z.infer<typeof CoffeeAgentOutputSchema>;\n\n// Unified message types\nexport type UserMessage = z.infer<typeof UserMessageSchema>;\nexport type AssistantMessage = z.infer<typeof AssistantMessageSchema>;\nexport type ClarificationRequestMessage = z.infer<\n typeof ClarificationRequestMessageSchema\n>;\nexport type ClarificationResponseMessage = z.infer<\n typeof ClarificationResponseMessageSchema\n>;\nexport type ContextRequestMessage = z.infer<typeof ContextRequestMessageSchema>;\nexport type ContextResponseMessage = z.infer<\n typeof ContextResponseMessageSchema\n>;\nexport type PlanMessage = z.infer<typeof PlanMessageSchema>;\nexport type PlanApprovalMessage = z.infer<typeof PlanApprovalMessageSchema>;\nexport type SystemMessage = z.infer<typeof SystemMessageSchema>;\nexport type ToolResultMessage = z.infer<typeof ToolResultMessageSchema>;\nexport type CoffeeMessage = z.infer<typeof CoffeeMessageSchema>;\n","import { z } from '@hono/zod-openapi';\n// Webhook execution response (used internally)\nexport const webhookExecutionResponseSchema = z\n .object({\n executionId: z.number().openapi({ description: 'Execution ID' }),\n success: z.boolean().openapi({ description: 'Execution success' }),\n data: z.unknown().optional().openapi({ description: 'Result data' }),\n error: z.string().optional().openapi({ description: 'Error message' }),\n webhook: z\n .object({\n userId: z.string().openapi({ description: 'User ID' }),\n path: z.string().openapi({ description: 'Webhook path' }),\n triggeredAt: z.string().openapi({ description: 'Trigger timestamp' }),\n method: z.string().openapi({ description: 'HTTP method' }),\n })\n .openapi({ description: 'Webhook info' }),\n })\n .openapi('WebhookExecutionResponse');\n\n// POST /webhook/{userId}/{path} - Webhook response\nexport const webhookResponseSchema = z\n .object({\n // Slack verification fields\n challenge: z\n .string()\n .optional()\n .openapi({ description: 'Slack URL verification challenge' }),\n // Execution fields\n executionId: z.number().optional().openapi({ description: 'Execution ID' }),\n success: z\n .boolean()\n .optional()\n .openapi({ description: 'Execution success' }),\n data: z\n .record(z.string(), z.unknown())\n .or(z.undefined())\n .optional()\n .openapi({ description: 'Result data' }),\n error: z.string().optional().openapi({ description: 'Error message' }),\n webhook: z\n .object({\n userId: z.string().openapi({ description: 'User ID' }),\n path: z.string().openapi({ description: 'Webhook path' }),\n triggeredAt: z.string().openapi({ description: 'Trigger timestamp' }),\n method: z.string().openapi({ description: 'HTTP method' }),\n })\n .optional()\n .openapi({ description: 'Webhook info' }),\n })\n .openapi('WebhookResponse');\nexport type WebhookResponse = z.infer<typeof webhookResponseSchema>;\nexport type WebhookExecutionResponse = z.infer<\n typeof webhookExecutionResponseSchema\n>;\n","import { z } from '@hono/zod-openapi';\nimport { ServiceUsageSchema } from './bubbleflow-execution-schema';\n\n// Hackathon offer schema for promotional code redemptions\nexport const hackathonOfferSchema = z\n .object({\n isActive: z.boolean().openapi({\n description: 'Whether a hackathon offer is currently active',\n example: true,\n }),\n expiresAt: z.string().openapi({\n description: 'ISO date when the hackathon offer expires',\n example: '2025-01-15T14:30:00.000Z',\n }),\n redeemedAt: z.string().openapi({\n description: 'ISO date when the code was redeemed',\n example: '2025-01-14T14:30:00.000Z',\n }),\n })\n .openapi('HackathonOffer');\n\nexport type HackathonOffer = z.infer<typeof hackathonOfferSchema>;\n\n// Special offer schema for private metadata overrides (exclusive members)\nexport const specialOfferSchema = z\n .object({\n isActive: z.boolean().openapi({\n description: 'Whether a special offer is currently active',\n example: true,\n }),\n plan: z.string().openapi({\n description: 'The plan granted by the special offer',\n example: 'unlimited',\n }),\n expiresAt: z.string().nullable().openapi({\n description:\n 'ISO date when the special offer expires (null = never expires)',\n example: '2025-06-15T14:30:00.000Z',\n }),\n })\n .openapi('SpecialOffer');\n\nexport type SpecialOffer = z.infer<typeof specialOfferSchema>;\n\n// Coupon redemption request schema\nexport const redeemCouponRequestSchema = z\n .object({\n code: z.string().min(1).openapi({\n description: 'The coupon code to redeem',\n example: 'HACKATHON2025',\n }),\n })\n .openapi('RedeemCouponRequest');\n\nexport type RedeemCouponRequest = z.infer<typeof redeemCouponRequestSchema>;\n\n// Coupon redemption response schema\nexport const redeemCouponResponseSchema = z\n .object({\n success: z.boolean().openapi({\n description: 'Whether the redemption was successful',\n example: true,\n }),\n message: z.string().openapi({\n description: 'Human-readable message about the redemption result',\n example: 'Coupon redeemed successfully! You now have Pro access.',\n }),\n expiresAt: z.string().optional().openapi({\n description: 'When the offer expires (if successful)',\n example: '2025-01-15T14:30:00.000Z',\n }),\n })\n .openapi('RedeemCouponResponse');\n\nexport type RedeemCouponResponse = z.infer<typeof redeemCouponResponseSchema>;\n\nexport const subscriptionStatusResponseSchema = z\n .object({\n userId: z.string().openapi({\n description: 'User ID from Clerk',\n example: 'user_30Gbwrzto1VZvAHcGUm5NLQhpkp',\n }),\n plan: z.string().openapi({\n description: 'Current subscription plan',\n example: 'pro_plus',\n }),\n planDisplayName: z.string().openapi({\n description: 'Human-readable plan name',\n example: 'Pro Plus',\n }),\n features: z.array(z.string()).openapi({\n description: 'List of features available to the user',\n example: ['unlimited_usage', 'priority_support'],\n }),\n usage: z.object({\n executionCount: z.number().openapi({\n description: 'Current monthly execution count',\n example: 100,\n }),\n executionLimit: z.number().openapi({\n description: 'Current monthly execution limit',\n example: 42,\n }),\n creditLimit: z.number().openapi({\n description: 'Monthly credit limit',\n example: 100,\n }),\n activeFlowLimit: z.number().openapi({\n description: 'Current monthly active flow limit',\n example: 2,\n }),\n estimatedMonthlyCost: z.number().openapi({\n description: 'Projected monthly cost based on current usage trend',\n example: 14.19,\n }),\n resetDate: z.string().openapi({\n description: 'ISO date when usage resets',\n example: '2025-02-01T00:00:00.000Z',\n }),\n tokenUsage: z\n .array(\n z.object({\n modelName: z.string().openapi({\n description: 'Model name',\n example: 'gpt-4',\n }),\n inputTokens: z.number().openapi({\n description: 'Input tokens used this month',\n example: 1500,\n }),\n outputTokens: z.number().openapi({\n description: 'Output tokens used this month',\n example: 750,\n }),\n totalTokens: z.number().openapi({\n description: 'Total tokens used this month',\n example: 2250,\n }),\n })\n )\n .openapi({\n description: 'Token usage breakdown by model for current month',\n }),\n serviceUsage: z.array(ServiceUsageSchema).openapi({\n description: 'Service usage and cost breakdown for current month',\n }),\n }),\n isActive: z.boolean().openapi({\n description: 'Whether the subscription is active',\n example: true,\n }),\n hackathonOffer: hackathonOfferSchema.optional().openapi({\n description: 'Active hackathon promotional offer information',\n }),\n specialOffer: specialOfferSchema.optional().openapi({\n description:\n 'Special offer from private metadata (takes precedence over hackathon offer)',\n }),\n })\n .openapi('SubscriptionStatusResponse');\n\nexport type SubscriptionStatusResponse = z.infer<\n typeof subscriptionStatusResponseSchema\n>;\n","import { z } from 'zod';\nimport { AvailableModels } from './ai-models.js';\nimport { ConversationMessageSchema } from './agent-memory.js';\n/**\n * Conversation message schema for milk tea multi-turn conversations\n */\n\n/**\n * Request schema for Milk Tea agent\n * Milk Tea helps users configure bubble parameters through conversation\n */\nexport const MilkTeaRequestSchema = z.object({\n userRequest: z\n .string()\n .min(1, 'User request is required')\n .describe('The user request or question about configuring the bubble'),\n\n bubbleName: z\n .string()\n .min(1, 'Bubble name is required')\n .describe('The name of the bubble to configure (e.g., \"email-tool\")'),\n\n bubbleSchema: z\n .record(z.unknown())\n .describe(\n 'The full schema/interface definition of the bubble including parameters and types'\n ),\n\n currentCode: z\n .string()\n .optional()\n .describe('The current workflow code context for validation'),\n\n availableCredentials: z\n .array(z.string())\n .default([])\n .describe('List of credential types available to the user'),\n\n userName: z.string().describe('Name of the user making the request'),\n\n insertLocation: z\n .string()\n .optional()\n .describe('Location in code where the snippet should be inserted'),\n\n conversationHistory: z\n .array(ConversationMessageSchema)\n .optional()\n .default([])\n .describe(\n 'Previous conversation messages for multi-turn interactions (frontend manages state)'\n ),\n\n model: AvailableModels.default('google/gemini-2.5-pro').describe(\n 'AI model to use for Milk Tea agent'\n ),\n});\n\n/**\n * Response schema for Milk Tea agent\n */\nexport const MilkTeaResponseSchema = z.object({\n type: z\n .enum(['code', 'question', 'reject'])\n .describe(\n 'Type of response: code (generated snippet), question (needs clarification), reject (infeasible request)'\n ),\n\n message: z\n .string()\n .describe(\n 'Human-readable message: explanation for code, question text, or rejection reason'\n ),\n\n snippet: z\n .string()\n .optional()\n .describe(\n 'Generated TypeScript code snippet (only present when type is \"code\")'\n ),\n\n success: z.boolean().describe('Whether the operation completed successfully'),\n\n error: z\n .string()\n .optional()\n .describe('Error message if the operation failed'),\n});\n\n/**\n * Internal agent response format (JSON mode output from AI)\n */\nexport const MilkTeaAgentOutputSchema = z.object({\n type: z.enum(['code', 'question', 'reject']),\n message: z.string(),\n snippet: z.string().optional(),\n});\n\n// Export inferred TypeScript types\nexport type MilkTeaRequest = z.infer<typeof MilkTeaRequestSchema>;\nexport type MilkTeaResponse = z.infer<typeof MilkTeaResponseSchema>;\nexport type MilkTeaAgentOutput = z.infer<typeof MilkTeaAgentOutputSchema>;\n","import { z } from 'zod';\n\n// Define available models with provider/name combinations\nexport const AvailableModels = z.enum([\n // OpenAI models\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5.1',\n 'openai/gpt-5.2',\n // Google Gemini models\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-flash-lite',\n 'google/gemini-2.5-flash-image-preview',\n 'google/gemini-3-pro-preview',\n 'google/gemini-3-pro-image-preview',\n 'google/gemini-3-flash-preview',\n // Anthropic models\n 'anthropic/claude-sonnet-4-5',\n 'anthropic/claude-opus-4-5',\n 'anthropic/claude-haiku-4-5',\n // OpenRouter models\n 'openrouter/x-ai/grok-code-fast-1',\n 'openrouter/z-ai/glm-4.6',\n 'openrouter/anthropic/claude-sonnet-4.5',\n 'openrouter/google/gemini-3-pro-preview',\n 'openrouter/morph/morph-v3-large',\n 'openrouter/x-ai/grok-4.1-fast',\n 'openrouter/openai/gpt-oss-120b',\n 'openrouter/deepseek/deepseek-chat-v3.1',\n]);\n\nexport type AvailableModel = z.infer<typeof AvailableModels>;\n","import type { BubbleName } from './types.js';\nimport { z } from 'zod';\nexport const TOOL_CALL_TO_DISCARD: BubbleName[] = ['get-bubble-details-tool'];\n\nexport const ConversationMessageSchema = z.object({\n role: z\n .enum(['user', 'assistant', 'tool'])\n .describe('The role of the message sender'),\n content: z.string().describe('The message content'),\n toolCallId: z.string().optional().describe('Tool call ID for tool messages'),\n name: z.string().optional().describe('Tool name for tool messages'),\n});\nexport type ConversationMessage = z.infer<typeof ConversationMessageSchema>;\n","import { z } from 'zod';\nimport { AvailableModels, type AvailableModel } from './ai-models.js';\nimport { ParsedBubbleWithInfoSchema } from './bubble-definition-schema.js';\nimport { CredentialType } from './types.js';\nimport { ConversationMessageSchema } from './agent-memory.js';\n// Default model for Pearl AI agent\nexport const PEARL_DEFAULT_MODEL: AvailableModel =\n 'openrouter/anthropic/claude-sonnet-4.5';\n/**\n * Request schema for Pearl agent\n * Pearl helps users build complete workflows without requiring specific bubbles\n */\nexport const PearlRequestSchema = z.object({\n userRequest: z\n .string()\n .min(1, 'User request is required')\n .describe('The user request or question about building a workflow'),\n\n currentCode: z\n .string()\n .optional()\n .describe('The current workflow code for context and modification'),\n\n userName: z.string().describe('Name of the user making the request'),\n availableVariables: z\n .array(z.any())\n .describe('List of available variables in the current code'),\n conversationHistory: z\n .array(ConversationMessageSchema)\n .optional()\n .default([])\n .describe(\n 'Previous conversation messages for multi-turn interactions (frontend manages state)'\n ),\n\n model: AvailableModels.default(PEARL_DEFAULT_MODEL).describe(\n 'AI model to use for Pearl agent'\n ),\n\n additionalContext: z\n .string()\n .optional()\n .describe(\n 'Additional context information like timezone, user preferences, etc.'\n ),\n\n uploadedFiles: z\n .array(\n z.object({\n name: z.string().describe('File name'),\n content: z\n .string()\n .describe(\n 'File content: base64 for images, plain text for text files'\n ),\n fileType: z\n .enum(['image', 'text'])\n .describe('Type of file: image (base64) or text (plain text)'),\n })\n )\n .optional()\n .default([])\n .describe(\n 'Files uploaded by the user: images as base64, text files as plain text'\n ),\n});\n\n/**\n * Response schema for Pearl agent\n */\nexport const PearlResponseSchema = z.object({\n type: z\n .enum(['code', 'question', 'answer', 'reject'])\n .describe(\n 'Type of response: code (generated workflow), question (needs clarification), answer (provides information/guidance), reject (infeasible request)'\n ),\n\n message: z\n .string()\n .describe(\n 'Human-readable message: explanation for code, question text, or rejection reason'\n ),\n\n snippet: z\n .string()\n .optional()\n .describe(\n 'Generated TypeScript code for complete workflow (only present when type is \"code\")'\n ),\n\n bubbleParameters: z\n .record(z.number(), ParsedBubbleWithInfoSchema)\n .optional()\n .describe(\n 'Parsed bubble parameters from the generated workflow (only present when type is \"code\")'\n ),\n\n inputSchema: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Input schema for the generated workflow (only present when type is \"code\")'\n ),\n\n requiredCredentials: z\n .record(z.string(), z.array(z.nativeEnum(CredentialType)))\n .optional()\n .describe(\n 'Required credentials for the bubbles in the workflow (only present when type is \"code\")'\n ),\n\n success: z.boolean().describe('Whether the operation completed successfully'),\n\n error: z\n .string()\n .optional()\n .describe('Error message if the operation failed'),\n});\n\n/**\n * Internal agent response format (JSON mode output from AI)\n */\nexport const PearlAgentOutputSchema = z.object({\n type: z.enum(['code', 'question', 'answer', 'reject', 'text']),\n message: z.string(),\n snippet: z.string().optional(),\n});\n\n// Export inferred TypeScript types\nexport type PearlRequest = z.infer<typeof PearlRequestSchema>;\nexport type PearlResponse = z.infer<typeof PearlResponseSchema>;\nexport type PearlAgentOutput = z.infer<typeof PearlAgentOutputSchema>;\n// Note: ConversationMessage type is exported from milk-tea.ts to avoid duplication\n","import { z } from 'zod';\nimport { AvailableModels, type AvailableModel } from './ai-models.js';\nimport { RECOMMENDED_MODELS } from './bubbleflow-generation-prompts.js';\n\n// Default model for Rice evaluation agent\nexport const RICE_DEFAULT_MODEL: AvailableModel = RECOMMENDED_MODELS.FAST;\n\n/**\n * Issue type categories for Rice evaluation\n * - setup: Configuration/credential issues (user can fix in settings, not workflow code)\n * - workflow: Logic/code issues in the workflow itself (fixable with Pearl)\n * - input: Issues with input data (user needs to provide different input)\n * - null: No issues (working=true)\n */\nexport const RiceIssueTypeSchema = z\n .enum(['setup', 'workflow', 'input'])\n .nullable();\n\nexport type RiceIssueType = z.infer<typeof RiceIssueTypeSchema>;\n\n/**\n * Evaluation result schema from Rice agent\n * This represents the AI's assessment of workflow execution quality\n */\nexport const RiceEvaluationResultSchema = z.object({\n working: z\n .boolean()\n .describe(\n 'Whether the workflow is functioning correctly (true if no errors and expected behavior)'\n ),\n\n issueType: RiceIssueTypeSchema.describe(\n 'Category of issue: \"setup\" (config/credentials), \"workflow\" (code logic), \"input\" (bad input data), or null if working'\n ),\n\n summary: z\n .string()\n .describe(\n 'Brief summary of the execution. If working: what happened and any external changes made. If not working: description of the issue.'\n ),\n\n rating: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe(\n 'Quality rating 1-10: 1-3=severe issues, 4-6=partial functionality, 7-8=working with minor issues, 9-10=excellent'\n ),\n});\n\n/**\n * Request schema for Rice evaluation agent\n * Rice evaluates workflow execution quality based on logs and code\n */\nexport const RiceRequestSchema = z.object({\n executionLogs: z\n .array(z.unknown())\n .describe('StreamingLogEvent[] from execution'),\n\n workflowCode: z\n .string()\n .describe('The original workflow code that was executed'),\n\n executionId: z.number().describe('ID of the execution being evaluated'),\n\n bubbleFlowId: z.number().describe('ID of the BubbleFlow being evaluated'),\n\n model: AvailableModels.optional()\n .default(RICE_DEFAULT_MODEL)\n .describe('AI model to use for Rice evaluation'),\n});\n\n/**\n * Response schema for Rice evaluation agent\n */\nexport const RiceResponseSchema = z.object({\n success: z\n .boolean()\n .describe('Whether the evaluation completed successfully'),\n\n evaluation: RiceEvaluationResultSchema.optional().describe(\n 'Evaluation result (only present if success=true)'\n ),\n\n error: z\n .string()\n .optional()\n .describe('Error message if the evaluation failed'),\n});\n\n// Export inferred TypeScript types\nexport type RiceEvaluationResult = z.infer<typeof RiceEvaluationResultSchema>;\n\n// Use z.input for RiceRequest to make optional fields with defaults truly optional for callers\n// z.infer would include the model field (since default is applied during parsing)\n// z.input represents what callers need to provide (before transforms/defaults are applied)\nexport type RiceRequest = z.input<typeof RiceRequestSchema>;\n\nexport type RiceResponse = z.infer<typeof RiceResponseSchema>;\n","/**\n * Recommended AI models for BubbleFlow code generation\n * This file is kept in shared-schemas for backwards compatibility\n * The full prompts have been moved to apps/bubblelab-api/src/config/bubbleflow-generation-prompts.ts\n */\n\nimport { AvailableModel } from './ai-models.js';\n\n// Model constants for AI agent instructions\nexport const RECOMMENDED_MODELS = {\n BEST: 'google/gemini-3-pro-preview',\n BEST_ALT: 'openai/gpt-5.2',\n PRO: 'google/gemini-3-flash-preview',\n PRO_ALT: 'anthropic/claude-sonnet-4-5',\n FAST: 'google/gemini-3-flash-preview',\n FAST_ALT: 'anthropic/claude-haiku-4-5',\n LITE: 'google/gemini-2.5-flash-lite',\n IMAGE: 'google/gemini-3-pro-image-preview',\n} as Record<string, AvailableModel>;\n","/**\n * Utility functions for parsing and working with cron expressions\n * Supports standard 5-field cron format: minute hour day month day-of-week\n */\n\nexport interface CronExpression {\n minute: string;\n hour: string;\n dayOfMonth: string;\n month: string;\n dayOfWeek: string;\n original: string;\n}\n\nexport interface CronScheduleInfo {\n expression: CronExpression;\n description: string;\n nextRun?: Date;\n isValid: boolean;\n error?: string;\n}\n\n/**\n * Parse a cron expression string into its components\n * @param cronString - Cron expression (e.g., \"0 0 * * *\")\n * @returns Parsed cron expression object\n */\nexport function parseCronExpression(cronString: string): CronExpression {\n const parts = cronString.trim().split(/\\s+/);\n\n if (parts.length !== 5) {\n throw new Error(\n `Invalid cron expression: expected 5 fields, got ${parts.length}`\n );\n }\n\n const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;\n\n return {\n minute,\n hour,\n dayOfMonth,\n month,\n dayOfWeek,\n original: cronString,\n };\n}\n\n/**\n * Validate a cron expression\n * @param cronString - Cron expression to validate\n * @returns Object with validation result\n */\nexport function validateCronExpression(cronString: string): {\n valid: boolean;\n error?: string;\n} {\n try {\n const expr = parseCronExpression(cronString);\n\n // Validate each field\n const validations = [\n validateCronField(expr.minute, 0, 59, 'minute'),\n validateCronField(expr.hour, 0, 23, 'hour'),\n validateCronField(expr.dayOfMonth, 1, 31, 'day of month'),\n validateCronField(expr.month, 1, 12, 'month'),\n validateCronField(expr.dayOfWeek, 0, 6, 'day of week'),\n ];\n\n for (const validation of validations) {\n if (!validation.valid) {\n return validation;\n }\n }\n\n return { valid: true };\n } catch (error) {\n return {\n valid: false,\n error: error instanceof Error ? error.message : 'Invalid cron expression',\n };\n }\n}\n\n/**\n * Validate a single cron field\n */\nfunction validateCronField(\n field: string,\n min: number,\n max: number,\n fieldName: string\n): { valid: boolean; error?: string } {\n // Wildcard\n if (field === '*') return { valid: true };\n\n // Step values (*/n)\n if (field.startsWith('*/')) {\n const step = parseInt(field.substring(2), 10);\n if (isNaN(step) || step <= 0) {\n return {\n valid: false,\n error: `Invalid step value in ${fieldName}: ${field}`,\n };\n }\n return { valid: true };\n }\n\n // Ranges (n-m)\n if (field.includes('-')) {\n const [start, end] = field.split('-').map((v) => parseInt(v, 10));\n if (isNaN(start) || isNaN(end) || start < min || end > max || start > end) {\n return {\n valid: false,\n error: `Invalid range in ${fieldName}: ${field} (must be ${min}-${max})`,\n };\n }\n return { valid: true };\n }\n\n // Lists (n,m,o)\n if (field.includes(',')) {\n const values = field.split(',').map((v) => parseInt(v.trim(), 10));\n for (const val of values) {\n if (isNaN(val) || val < min || val > max) {\n return {\n valid: false,\n error: `Invalid value in ${fieldName} list: ${val} (must be ${min}-${max})`,\n };\n }\n }\n return { valid: true };\n }\n\n // Single value\n const value = parseInt(field, 10);\n if (isNaN(value) || value < min || value > max) {\n return {\n valid: false,\n error: `Invalid ${fieldName}: ${field} (must be ${min}-${max})`,\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Generate a human-readable description of a cron expression\n * @param cronString - Cron expression to describe\n * @returns Human-readable description\n */\nexport function describeCronExpression(cronString: string): string {\n try {\n const expr = parseCronExpression(cronString);\n\n // Common patterns\n if (cronString === '* * * * *') return 'Every minute';\n if (cronString === '0 * * * *') return 'Every hour';\n if (cronString === '0 0 * * *') return 'Daily at midnight';\n if (cronString === '0 0 * * 0') return 'Weekly on Sunday at midnight';\n if (cronString === '0 0 1 * *') return 'Monthly on the 1st at midnight';\n if (cronString === '0 0 1 1 *') return 'Yearly on January 1st at midnight';\n\n // Step patterns\n if (expr.minute.startsWith('*/')) {\n const step = expr.minute.substring(2);\n return `Every ${step} minute${step === '1' ? '' : 's'}`;\n }\n if (expr.hour.startsWith('*/') && expr.minute === '0') {\n const step = expr.hour.substring(2);\n return `Every ${step} hour${step === '1' ? '' : 's'}`;\n }\n\n // Weekday patterns\n if (expr.dayOfWeek === '1-5' && expr.hour === '9' && expr.minute === '0') {\n return 'Every weekday at 9:00 AM';\n }\n\n // Build description from parts\n let description = 'At ';\n\n // Time\n if (expr.minute !== '*' && expr.hour !== '*') {\n const hour = parseInt(expr.hour, 10);\n const minute = parseInt(expr.minute, 10);\n const ampm = hour >= 12 ? 'PM' : 'AM';\n const hour12 = hour % 12 || 12;\n description += `${hour12}:${minute.toString().padStart(2, '0')} ${ampm}`;\n } else if (expr.minute !== '*') {\n description += `minute ${expr.minute}`;\n } else if (expr.hour !== '*') {\n description += `hour ${expr.hour}`;\n }\n\n // Day\n if (expr.dayOfMonth !== '*') {\n description += ` on day ${expr.dayOfMonth}`;\n }\n if (expr.dayOfWeek !== '*') {\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n if (expr.dayOfWeek.includes('-')) {\n const [start, end] = expr.dayOfWeek\n .split('-')\n .map((v) => parseInt(v, 10));\n description += ` on ${days[start]} through ${days[end]}`;\n } else {\n const day = parseInt(expr.dayOfWeek, 10);\n description += ` on ${days[day]}`;\n }\n }\n\n // Month\n if (expr.month !== '*') {\n const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n const month = parseInt(expr.month, 10);\n description += ` in ${months[month - 1]}`;\n }\n\n return description;\n } catch (error) {\n return 'Invalid cron expression';\n }\n}\n\n/**\n * Get schedule information for a cron expression\n * @param cronString - Cron expression\n * @returns Schedule information including description and validation status\n */\nexport function getCronScheduleInfo(cronString: string): CronScheduleInfo {\n const validation = validateCronExpression(cronString);\n\n if (!validation.valid) {\n return {\n expression: parseCronExpression(\n cronString.split(/\\s+/).length === 5 ? cronString : '0 0 * * *'\n ),\n description: 'Invalid cron expression',\n isValid: false,\n error: validation.error,\n };\n }\n\n return {\n expression: parseCronExpression(cronString),\n description: describeCronExpression(cronString),\n isValid: true,\n };\n}\n","export interface BubbleTriggerEventRegistry {\n 'slack/bot_mentioned': SlackMentionEvent;\n 'schedule/cron': CronEvent;\n 'webhook/http': WebhookEvent;\n}\n\n// Runtime object that mirrors the interface keys\n// This allows us to validate event types at runtime\nexport const BUBBLE_TRIGGER_EVENTS = {\n 'slack/bot_mentioned': true,\n 'schedule/cron': true,\n 'webhook/http': true,\n} as const satisfies Record<keyof BubbleTriggerEventRegistry, true>;\n\n// Helper function to check if an event type is valid\nexport function isValidBubbleTriggerEvent(\n eventType: string\n): eventType is keyof BubbleTriggerEventRegistry {\n return eventType in BUBBLE_TRIGGER_EVENTS;\n}\n\nexport interface BubbleTriggerEvent {\n type: keyof BubbleTriggerEventRegistry;\n timestamp: string;\n executionId: string;\n path: string;\n [key: string]: unknown;\n}\n\n/**\n * Cron event payload structure\n *\n * The 'cron' field contains the cron expression in standard 5-part cron format:\n *\n * ┌───────────── minute (0 - 59)\n * │ ┌───────────── hour (0 - 23)\n * │ │ ┌───────────── day of month (1 - 31)\n * │ │ │ ┌───────────── month (1 - 12)\n * │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday)\n * │ │ │ │ │\n * * * * * *\n *\n * @example\n * ```typescript\n * // Daily at midnight\n * { cron: '0 0 * * *' }\n *\n * // Every weekday at 9am\n * { cron: '0 9 * * 1-5' }\n *\n * // Every 15 minutes\n * { cron: '*\\/15 * * * *' }\n *\n * // First day of every month at midnight\n * { cron: '0 0 1 * *' }\n * ```\n */\nexport interface CronEvent extends BubbleTriggerEvent {\n /** The cron expression defining when this event triggers */\n cron: string;\n body?: Record<string, unknown>;\n}\n\nexport interface WebhookEvent extends BubbleTriggerEvent {\n body?: Record<string, unknown>;\n}\n\nexport interface BubbleTrigger {\n type: keyof BubbleTriggerEventRegistry;\n cronSchedule?: string;\n name?: string;\n description?: string;\n timeout?: number;\n retries?: number;\n}\n\n// Slack Event Wrapper (outer payload)\nexport interface SlackEventWrapper {\n token: string;\n team_id: string;\n api_app_id: string;\n event: SlackAppMentionEvent | SlackMessageEvent;\n type: 'event_callback';\n authorizations: Array<{\n enterprise_id?: string;\n team_id: string;\n user_id: string;\n is_bot: boolean;\n }>;\n event_context: string;\n event_id: string;\n event_time: number;\n}\n\n// App Mention Event (inner event data)\nexport interface SlackAppMentionEvent {\n type: 'app_mention';\n user: string;\n text: string;\n ts: string;\n channel: string;\n event_ts: string;\n thread_ts?: string;\n}\n\n// Slack Message Event (inner event data)\nexport interface SlackMessageEvent {\n type: 'message';\n user: string;\n text: string;\n ts: string;\n channel: string;\n event_ts: string;\n channel_type: 'channel' | 'group' | 'im' | 'mpim';\n subtype?: string;\n}\n\n// BubbleTrigger-specific event types that wrap Slack events\nexport interface SlackMentionEvent extends BubbleTriggerEvent {\n slack_event: SlackEventWrapper;\n channel: string;\n user: string;\n text: string;\n thread_ts?: string;\n}\n\nexport interface SlackMessageReceivedEvent extends BubbleTriggerEvent {\n slack_event: SlackEventWrapper;\n channel: string;\n user: string;\n text: string;\n channel_type: 'channel' | 'group' | 'im' | 'mpim';\n subtype?: string;\n}\n","export type StorableValue = {\n truncated: boolean;\n preview: string | unknown;\n sizeBytes: number;\n};\n\n/**\n * Prepare an object for storage with a size cap. If the JSON stringified\n * representation exceeds maxBytes, return a preview marker with metadata.\n * Also logs a warning when truncation happens.\n *\n * Returns a consistent object structure when truncated to ensure compatibility\n * with database schemas expecting JSON objects (jsonb/text with mode: 'json').\n */\nexport function prepareForStorage(\n value: unknown,\n options?: { maxBytes?: number; previewBytes?: number }\n): StorableValue {\n const maxBytes = options?.maxBytes ?? 1024 * 1024; // 1MB\n const previewBytes = options?.previewBytes ?? 4096; // 4KB\n\n try {\n const json = JSON.stringify(value);\n // Compute byte length in a way that works in both browser and Node\n const sizeBytes =\n typeof TextEncoder !== 'undefined'\n ? new TextEncoder().encode(json).length\n : ((globalThis as any).Buffer?.byteLength?.(json, 'utf8') ??\n json.length);\n if (sizeBytes > maxBytes) {\n // eslint-disable-next-line no-console\n console.warn(\n `[prepareForStorage] Size ${sizeBytes} > ${maxBytes}. Storing preview only.`\n );\n // Use Buffer.slice to ensure we slice at byte boundaries, not character boundaries\n // This prevents splitting multi-byte UTF-8 characters\n const previewBuffer =\n json.slice(0, previewBytes) + '....truncated due to size limit';\n return {\n truncated: true,\n preview: previewBuffer,\n sizeBytes,\n };\n }\n return {\n truncated: false,\n preview: value,\n sizeBytes: 0,\n };\n } catch (_err) {\n // eslint-disable-next-line no-console\n console.warn(\n '[prepareForStorage] Failed to serialize value for size check. Storing preview only.'\n );\n return {\n truncated: true,\n preview: '',\n sizeBytes: 0,\n };\n }\n}\n\nexport function cleanUpObjectForDisplayAndStorage(\n obj: unknown,\n maxBytes: number = 1024 * 1024\n): unknown {\n const storageResult = prepareForStorage(obj, { maxBytes });\n if (storageResult.truncated) {\n return storageResult.preview;\n }\n return obj;\n}\n","/**\n * Utility functions for parameter handling\n */\n\n/**\n * Sanitizes parameters by removing credential-related fields\n * @param params - The parameters object to sanitize\n * @returns A new object with credentials removed\n */\nexport function sanitizeParams(\n params: Record<string, unknown>\n): Record<string, unknown> {\n // Remove credentials from params\n return Object.fromEntries(\n Object.entries(params).filter(([key]) => !key.startsWith('credentials'))\n );\n}\n","import { BUBBLE_TRIGGER_EVENTS } from './trigger.js';\n\n/**\n * Enhances TypeScript error messages with helpful hints about available options\n * for BubbleTriggerEventRegistry, BubbleError, and LogMetadata\n */\nexport function enhanceErrorMessage(errorMessage: string): string {\n let enhanced = errorMessage;\n\n // Pattern 1: BubbleTriggerEventRegistry errors\n // Matches: \"Type 'X' does not satisfy the constraint 'keyof BubbleTriggerEventRegistry'\"\n const triggerRegistryPattern =\n /does not satisfy the constraint 'keyof BubbleTriggerEventRegistry'/;\n if (triggerRegistryPattern.test(enhanced)) {\n const availableKeys = Object.keys(BUBBLE_TRIGGER_EVENTS);\n const hint = `\\nAvailable trigger event types: ${availableKeys.map((k) => `'${k}'`).join(', ')}`;\n enhanced = enhanced + hint;\n }\n\n // Pattern 2: Generic \"keyof BubbleTriggerEventRegistry\" constraint errors\n // Matches: \"Type 'X' does not satisfy the constraint 'keyof BubbleTriggerEventRegistry'\"\n const keyofTriggerPattern =\n /Type '([^']+)' does not satisfy the constraint 'keyof BubbleTriggerEventRegistry'/;\n if (\n keyofTriggerPattern.test(enhanced) &&\n !enhanced.includes('Available trigger event types')\n ) {\n const availableKeys = Object.keys(BUBBLE_TRIGGER_EVENTS);\n const hint = `\\nAvailable trigger event types: ${availableKeys.map((k) => `'${k}'`).join(', ')}`;\n enhanced = enhanced + hint;\n }\n\n // Pattern 3: BubbleError type errors\n // Matches whenever \"BubbleError\" appears in the error message\n const bubbleErrorPattern = /BubbleError/;\n if (bubbleErrorPattern.test(enhanced)) {\n const hint =\n `\\nBubbleLogger.error() method signature:\\n` +\n `- this.logger?.error(message: string, error?: BubbleError, metadata?: Partial<LogMetadata>)\\n` +\n `\\nIMPORTANT: The second parameter must be a BubbleError instance, NOT a string!\\n` +\n `\\n❌ INCORRECT: this.logger?.error(\"msg1\", \"msg2\")\\n` +\n `❌ INCORRECT: this.logger?.error(msg1, msg2) // where msg2 is a string\\n` +\n `\\n✅ CORRECT: this.logger?.error(\"Error message\")\\n` +\n `✅ CORRECT: this.logger?.error(\"Error message\", bubbleError)\\n` +\n `✅ CORRECT: this.logger?.error(\"Error message\", bubbleError, { variableId: 1 })\\n` +\n `\\nBubbleError minimal interface:\\n` +\n `- message: string (from Error)\\n` +\n `- variableId?: number\\n` +\n `- bubbleName?: string\\n` +\n `\\nCreating a BubbleError:\\n` +\n `- new BubbleError(\"Error message\", { variableId?: number, bubbleName?: string })\\n` +\n `- new BubbleValidationError(\"Validation failed\", { variableId?: number, bubbleName?: string, validationErrors?: string[] })\\n` +\n `- new BubbleExecutionError(\"Execution failed\", { variableId?: number, bubbleName?: string, executionPhase?: 'instantiation' | 'execution' | 'validation' })\\n` +\n `\\nLogMetadata minimal interface (for metadata parameter):\\n` +\n `- variableId?: number\\n` +\n `- bubbleName?: string\\n` +\n `- lineNumber?: number\\n` +\n `- additionalData?: Record<string, unknown>\\n` +\n `\\nExample usage:\\n` +\n `- this.logger?.error(\"Bubble execution failed\", new BubbleError(\"Details\", { variableId: 1, bubbleName: \"MyBubble\" }))\\n` +\n `- this.logger?.error(\"Error occurred\", undefined, { variableId: 1, additionalData: { custom: \"data\" } })`;\n enhanced = enhanced + hint;\n }\n\n // Pattern 4: LogMetadata property errors\n // Matches: \"'X' does not exist in type 'LogMetadata'\" or \"'X' does not exist in type 'Partial<LogMetadata>'\"\n // We only allow additional data to be part of AI agent's context for simplicity\n const logMetadataPropertyPattern =\n /'(\\w+)' does not exist in type '(?:Partial<)?LogMetadata(?:>)?'/;\n const logMetadataMatch = enhanced.match(logMetadataPropertyPattern);\n if (logMetadataMatch) {\n const [, propertyName] = logMetadataMatch;\n const hint =\n `\\nLogMetadata does not support '${propertyName}'. Available properties:\\n` +\n `- additionalData?: Record<string, unknown>`;\n enhanced = enhanced + hint;\n }\n\n // Pattern 5: LogMetadata type assignment errors\n // Matches whenever \"LogMetadata\" appears in the error message\n const logMetadataTypePattern = /LogMetadata/;\n if (\n logMetadataTypePattern.test(enhanced) &&\n !enhanced.includes('Available properties:')\n ) {\n const hint =\n `\\nLogMetadata interface properties:\\n` +\n `- additionalData?: Record<string, unknown> (optional)\\n` +\n `\\nTo add custom data, use the additionalData property.`;\n enhanced = enhanced + hint;\n }\n\n // Pattern 6: Module has no exported member errors\n // Matches: \"Module 'X' has no exported member 'Y'\"\n const noExportedMemberPattern =\n /Module '([^']+)' has no exported member '(\\w+)'/;\n const noExportedMemberMatch = enhanced.match(noExportedMemberPattern);\n if (noExportedMemberMatch) {\n const [, moduleName, memberName] = noExportedMemberMatch;\n const hint =\n `\\n'${memberName}' is not exported from '${moduleName}'. ` +\n `Please remove it from your import statement or check the module's exports for the correct name.`;\n enhanced = enhanced + hint;\n }\n\n return enhanced;\n}\n","/**\n * Shared hashing utilities for generating deterministic variable IDs\n */\n\n/**\n * Generate a deterministic non-negative integer ID from a string input.\n * Uses FNV-1a hash algorithm for better distribution and fewer collisions.\n *\n * This is used to generate variableIds that remain consistent across:\n * - Bubble parsing (BubbleParser)\n * - Logger injection (LoggerInjector)\n *\n * @param input - String to hash (e.g., method name, uniqueId)\n * @returns A 6-digit integer in the range [100000, 999999]\n */\nexport function hashToVariableId(input: string): number {\n let hash = 2166136261; // FNV-1a 32-bit offset basis\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = (hash * 16777619) >>> 0; // unsigned 32-bit\n }\n // Map to 6-digit range to avoid colliding with small AST ids while readable\n const mapped = 100000 + (hash % 900000);\n return mapped;\n}\n\n/**\n * Build a call site key from method name and invocation order.\n * Using the ordinal position of the invocation within the method keeps the key\n * stable even if lines shift after instrumentation.\n *\n * @param methodName - Name of the instance method being called\n * @param invocationIndex - 1-based invocation index within that method\n * @returns A string key in the format \"methodName#invocationIndex\"\n */\nexport function buildCallSiteKey(\n methodName: string,\n invocationIndex: number\n): string {\n return `${methodName}#${invocationIndex}`;\n}\n"],"mappings":"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","names":["z","CredentialType","z","z","z","BubbleParameterType","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z"]}