@tangle-network/agent-integrations 0.53.52 → 0.53.54

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 (65) hide show
  1. package/README.md +23 -0
  2. package/data/bundled-adapter-manifests.json +1 -0
  3. package/dist/audit-DMTzJQJU.d.ts +51 -0
  4. package/dist/catalog.d.ts +3 -3
  5. package/dist/catalog.js +2 -12
  6. package/dist/chunk-A4OJ5EQT.js +133156 -0
  7. package/dist/chunk-A4OJ5EQT.js.map +1 -0
  8. package/dist/chunk-ABA4HWIQ.js +58 -0
  9. package/dist/chunk-ABA4HWIQ.js.map +1 -0
  10. package/dist/chunk-DED3J7F6.js +1 -0
  11. package/dist/chunk-ESY2FBBM.js +33 -0
  12. package/dist/chunk-ESY2FBBM.js.map +1 -0
  13. package/dist/chunk-GIK6EXU2.js +121 -0
  14. package/dist/chunk-GIK6EXU2.js.map +1 -0
  15. package/dist/{chunk-TKEVCGAI.js → chunk-MH4IEJCL.js} +8 -1
  16. package/dist/chunk-MH4IEJCL.js.map +1 -0
  17. package/dist/chunk-QVWTBQXP.js +267 -0
  18. package/dist/chunk-QVWTBQXP.js.map +1 -0
  19. package/dist/{chunk-CONRYVPK.js → chunk-QWOX5SIM.js} +6 -33
  20. package/dist/chunk-QWOX5SIM.js.map +1 -0
  21. package/dist/chunk-RSJRICPU.js +394 -0
  22. package/dist/chunk-RSJRICPU.js.map +1 -0
  23. package/dist/chunk-WPQJK4S4.js +400 -0
  24. package/dist/chunk-WPQJK4S4.js.map +1 -0
  25. package/dist/connect/index.d.ts +2 -2
  26. package/dist/connectors/adapters/index.d.ts +2 -2
  27. package/dist/connectors/index.d.ts +10 -22
  28. package/dist/connectors/index.js +12 -10
  29. package/dist/{consumer-BbQWkIzU.d.ts → consumer-CIq2D22y.d.ts} +4 -51
  30. package/dist/consumer.d.ts +5 -4
  31. package/dist/{core-types-A-xIaTzb.d.ts → core-types-DZJQRBya.d.ts} +2 -2
  32. package/dist/coverage-catalog.d.ts +2 -2
  33. package/dist/coverage-catalog.js +1 -1
  34. package/dist/{importers-BMigcDVf.d.ts → importers-Cyk5osDs.d.ts} +1 -1
  35. package/dist/index.d.ts +17 -104
  36. package/dist/index.js +72 -62
  37. package/dist/internal/bundled-manifest-runtime.d.ts +15 -0
  38. package/dist/internal/bundled-manifest-runtime.js +13 -0
  39. package/dist/internal/bundled-manifest-runtime.js.map +1 -0
  40. package/dist/mcp.d.ts +3 -3
  41. package/dist/mcp.js +10 -5
  42. package/dist/mcp.js.map +1 -1
  43. package/dist/middleware/index.d.ts +2 -2
  44. package/dist/registry-core-DqdQjTkh.d.ts +49 -0
  45. package/dist/registry.d.ts +6 -49
  46. package/dist/registry.js +16 -10
  47. package/dist/runtime.d.ts +3 -3
  48. package/dist/runtime.js +3 -12
  49. package/dist/specs.d.ts +2 -2
  50. package/dist/specs.js +4 -6
  51. package/dist/{tangle-id-gFOGXe4Y.d.ts → tangle-id-Oy2z4W3p.d.ts} +1 -1
  52. package/dist/{types-DpKEBiX6.d.ts → types-DIis6QtV.d.ts} +1 -1
  53. package/dist/worker.d.ts +99 -0
  54. package/dist/worker.js +28 -0
  55. package/dist/worker.js.map +1 -0
  56. package/docs/repo-structure.md +29 -6
  57. package/package.json +10 -1
  58. package/dist/chunk-CONRYVPK.js.map +0 -1
  59. package/dist/chunk-CT3J7ZB6.js +0 -4849
  60. package/dist/chunk-CT3J7ZB6.js.map +0 -1
  61. package/dist/chunk-E2QYXDJQ.js +0 -147
  62. package/dist/chunk-E2QYXDJQ.js.map +0 -1
  63. package/dist/chunk-P4FFI752.js +0 -1
  64. package/dist/chunk-TKEVCGAI.js.map +0 -1
  65. /package/dist/{chunk-P4FFI752.js.map → chunk-DED3J7F6.js.map} +0 -0
@@ -47,6 +47,10 @@ var COVERAGE_SPECS = [
47
47
  ["attio", "Attio", "crm", "crm", "tier_1", "crm,sales,startups"],
48
48
  ["affinity", "Affinity", "crm", "crm", "tier_0", "crm,relationships,private-markets", "api_key"],
49
49
  ["dealcloud", "DealCloud", "crm", "crm", "tier_0", "crm,relationships,private-markets,commercial-api", "custom"],
50
+ ["outreach", "Outreach", "crm", "sales", "tier_1", "sales-engagement,sequences,crm"],
51
+ ["salesloft", "Salesloft", "crm", "sales", "tier_1", "sales-engagement,cadences,crm"],
52
+ ["zoominfo", "ZoomInfo", "crm", "sales", "tier_1", "sales-intelligence,enrichment,gtm"],
53
+ ["demandbase", "Demandbase", "crm", "sales", "tier_1", "account-intelligence,abm,gtm"],
50
54
  ["linear", "Linear", "workflow", "project", "tier_0", "project,engineering,tickets"],
51
55
  ["jira", "Jira", "workflow", "project", "tier_0", "project,engineering,tickets,atlassian"],
52
56
  ["github", "GitHub", "workflow", "dev", "tier_0", "code,dev,issues,git"],
@@ -147,7 +151,10 @@ var COVERAGE_SPECS = [
147
151
  ["lever", "Lever", "workflow", "hr", "tier_1", "recruiting,hr"],
148
152
  ["gusto", "Gusto", "workflow", "hr", "tier_1", "payroll,hr"],
149
153
  ["rippling", "Rippling", "workflow", "hr", "tier_1", "hr,it,identity"],
154
+ ["adp", "ADP", "workflow", "hr", "tier_1", "hr,payroll,workforce"],
155
+ ["paychex", "Paychex", "workflow", "hr", "tier_1", "hr,payroll,workforce"],
150
156
  ["docusign", "DocuSign", "docs", "docs", "tier_1", "contracts,signature,legal"],
157
+ ["adobe-sign", "Adobe Acrobat Sign", "docs", "docs", "tier_1", "contracts,signature,legal"],
151
158
  ["pandadoc", "PandaDoc", "docs", "docs", "tier_1", "contracts,signature,sales"],
152
159
  ["hellosign", "Dropbox Sign", "docs", "docs", "tier_2", "contracts,signature"],
153
160
  ["clio", "Clio", "workflow", "project", "tier_1", "legal,practice-management"],
@@ -450,4 +457,4 @@ export {
450
457
  buildIntegrationCoverageConnectors,
451
458
  integrationCoverageChecklistMarkdown
452
459
  };
453
- //# sourceMappingURL=chunk-TKEVCGAI.js.map
460
+ //# sourceMappingURL=chunk-MH4IEJCL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/coverage-catalog.ts"],"sourcesContent":["import type {\n IntegrationConnector,\n IntegrationConnectorAction,\n IntegrationConnectorCategory,\n IntegrationConnectorTrigger,\n IntegrationProviderKind,\n} from './core-types.js'\n\nexport type IntegrationCoveragePriority = 'tier_0' | 'tier_1' | 'tier_2' | 'long_tail'\n\nexport interface IntegrationCoverageSpec {\n id: string\n title: string\n category: IntegrationConnectorCategory\n auth: IntegrationConnector['auth']\n priority: IntegrationCoveragePriority\n providerKinds: IntegrationProviderKind[]\n domains: string[]\n actionPack: IntegrationActionPack\n scopes?: string[]\n}\n\nexport type IntegrationActionPack =\n | 'email'\n | 'calendar'\n | 'chat'\n | 'crm'\n | 'storage'\n | 'docs'\n | 'database'\n | 'project'\n | 'support'\n | 'marketing'\n | 'sales'\n | 'commerce'\n | 'finance'\n | 'hr'\n | 'dev'\n | 'ai'\n | 'analytics'\n | 'workflow'\n | 'webhook'\n | 'meeting'\n | 'telephony'\n\ntype SpecTuple = [\n id: string,\n title: string,\n category: IntegrationConnectorCategory,\n actionPack: IntegrationActionPack,\n priority: IntegrationCoveragePriority,\n domains: string,\n auth?: IntegrationConnector['auth'],\n]\n\nconst DEFAULT_PROVIDER_KINDS: IntegrationProviderKind[] = ['first_party', 'nango', 'pipedream', 'tangle_catalog', 'custom']\n\nconst COVERAGE_SPECS: SpecTuple[] = [\n ['gmail', 'Gmail', 'email', 'email', 'tier_0', 'email,google,workspace,inbox'],\n ['outlook-mail', 'Outlook Mail', 'email', 'email', 'tier_0', 'email,microsoft,office,inbox'],\n ['google-calendar', 'Google Calendar', 'calendar', 'calendar', 'tier_0', 'calendar,google,workspace,scheduling'],\n ['outlook-calendar', 'Outlook Calendar', 'calendar', 'calendar', 'tier_0', 'calendar,microsoft,office,scheduling'],\n ['slack', 'Slack', 'chat', 'chat', 'tier_0', 'chat,collaboration,internal-comms'],\n ['microsoft-teams', 'Microsoft Teams', 'chat', 'chat', 'tier_0', 'chat,microsoft,collaboration'],\n ['google-drive', 'Google Drive', 'storage', 'storage', 'tier_0', 'files,google,workspace,storage'],\n ['onedrive', 'OneDrive', 'storage', 'storage', 'tier_0', 'files,microsoft,office,storage'],\n ['dropbox', 'Dropbox', 'storage', 'storage', 'tier_1', 'files,storage'],\n ['box', 'Box', 'storage', 'storage', 'tier_1', 'files,enterprise,storage'],\n ['google-docs', 'Google Docs', 'docs', 'docs', 'tier_0', 'docs,google,workspace'],\n ['google-sheets', 'Google Sheets', 'database', 'database', 'tier_0', 'sheets,spreadsheet,google,database'],\n ['google-contacts', 'Google Contacts and Directory', 'crm', 'crm', 'tier_0', 'contacts,people,directory,google,workspace'],\n ['google-slides', 'Google Slides', 'docs', 'docs', 'tier_1', 'slides,presentations,google,workspace'],\n ['googlechat', 'Google Chat', 'chat', 'chat', 'tier_1', 'chat,collaboration,google,workspace'],\n ['google-tasks', 'Google Tasks', 'workflow', 'project', 'tier_1', 'tasks,google,workspace'],\n ['microsoft-excel-365', 'Microsoft Excel 365', 'database', 'database', 'tier_0', 'sheets,spreadsheet,microsoft,office,database'],\n ['notion', 'Notion', 'docs', 'docs', 'tier_0', 'docs,wiki,knowledge'],\n ['airtable', 'Airtable', 'database', 'database', 'tier_0', 'database,spreadsheet,ops'],\n ['baserow', 'Baserow', 'database', 'database', 'tier_1', 'database,spreadsheet,ops,open-source', 'api_key'],\n ['coda', 'Coda', 'docs', 'docs', 'tier_1', 'docs,wiki,ops'],\n ['confluence', 'Confluence', 'docs', 'docs', 'tier_1', 'docs,wiki,atlassian'],\n ['sharepoint', 'SharePoint', 'storage', 'storage', 'tier_1', 'files,microsoft,enterprise'],\n ['microsoft-365-people', 'Microsoft 365 People', 'crm', 'crm', 'tier_0', 'contacts,people,microsoft,office'],\n ['microsoft-365-planner', 'Microsoft Planner', 'workflow', 'project', 'tier_1', 'tasks,planning,microsoft,office'],\n ['microsoft-todo', 'Microsoft To Do', 'workflow', 'project', 'tier_1', 'tasks,microsoft,office'],\n ['microsoft-onenote', 'Microsoft OneNote', 'docs', 'docs', 'tier_1', 'notes,docs,microsoft,office'],\n ['microsoft-dynamics-crm', 'Microsoft Dynamics 365 CRM', 'crm', 'crm', 'tier_0', 'crm,sales,microsoft,dynamics'],\n ['microsoft-dynamics-365-business-central', 'Microsoft Dynamics 365 Business Central', 'workflow', 'finance', 'tier_1', 'erp,finance,microsoft,dynamics'],\n ['microsoft-power-bi', 'Microsoft Power BI', 'database', 'analytics', 'tier_1', 'analytics,reporting,microsoft,office'],\n ['microsoft-forms', 'Microsoft Forms', 'workflow', 'marketing', 'tier_1', 'forms,microsoft,office,commercial-api', 'custom'],\n ['microsoft-word', 'Microsoft Word', 'docs', 'docs', 'tier_1', 'docs,microsoft,office,commercial-api', 'custom'],\n ['hubspot', 'HubSpot', 'crm', 'crm', 'tier_0', 'crm,sales,marketing'],\n ['salesforce', 'Salesforce', 'crm', 'crm', 'tier_0', 'crm,sales,enterprise'],\n ['pipedrive', 'Pipedrive', 'crm', 'crm', 'tier_1', 'crm,sales'],\n ['zoho-crm', 'Zoho CRM', 'crm', 'crm', 'tier_1', 'crm,sales'],\n ['zoho-desk', 'Zoho Desk', 'crm', 'support', 'tier_1', 'support,tickets,crm,zoho'],\n ['zoho-bookings', 'Zoho Bookings', 'calendar', 'calendar', 'tier_1', 'appointments,scheduling,calendar,zoho'],\n ['zoho-books', 'Zoho Books', 'workflow', 'finance', 'tier_1', 'accounting,invoices,finance,zoho'],\n ['zoho-invoice', 'Zoho Invoice', 'workflow', 'finance', 'tier_1', 'invoices,billing,finance,zoho'],\n ['zoho-mail', 'Zoho Mail', 'email', 'email', 'tier_1', 'email,inbox,zoho'],\n ['zoho-campaigns', 'Zoho Campaigns', 'workflow', 'marketing', 'tier_1', 'email-marketing,campaigns,zoho'],\n ['close', 'Close', 'crm', 'crm', 'tier_1', 'crm,sales'],\n ['attio', 'Attio', 'crm', 'crm', 'tier_1', 'crm,sales,startups'],\n ['affinity', 'Affinity', 'crm', 'crm', 'tier_0', 'crm,relationships,private-markets', 'api_key'],\n ['dealcloud', 'DealCloud', 'crm', 'crm', 'tier_0', 'crm,relationships,private-markets,commercial-api', 'custom'],\n ['outreach', 'Outreach', 'crm', 'sales', 'tier_1', 'sales-engagement,sequences,crm'],\n ['salesloft', 'Salesloft', 'crm', 'sales', 'tier_1', 'sales-engagement,cadences,crm'],\n ['zoominfo', 'ZoomInfo', 'crm', 'sales', 'tier_1', 'sales-intelligence,enrichment,gtm'],\n ['demandbase', 'Demandbase', 'crm', 'sales', 'tier_1', 'account-intelligence,abm,gtm'],\n ['linear', 'Linear', 'workflow', 'project', 'tier_0', 'project,engineering,tickets'],\n ['jira', 'Jira', 'workflow', 'project', 'tier_0', 'project,engineering,tickets,atlassian'],\n ['github', 'GitHub', 'workflow', 'dev', 'tier_0', 'code,dev,issues,git'],\n ['gitlab', 'GitLab', 'workflow', 'dev', 'tier_1', 'code,dev,issues,git'],\n ['bitbucket', 'Bitbucket', 'workflow', 'dev', 'tier_2', 'code,dev,git,atlassian'],\n ['asana', 'Asana', 'workflow', 'project', 'tier_1', 'project,tasks'],\n ['trello', 'Trello', 'workflow', 'project', 'tier_1', 'project,tasks,atlassian'],\n ['monday', 'monday.com', 'workflow', 'project', 'tier_1', 'project,tasks,ops'],\n ['clickup', 'ClickUp', 'workflow', 'project', 'tier_1', 'project,tasks,ops'],\n ['basecamp', 'Basecamp', 'workflow', 'project', 'tier_2', 'project,tasks'],\n ['zendesk', 'Zendesk', 'crm', 'support', 'tier_0', 'support,tickets,customer-success'],\n ['intercom', 'Intercom', 'crm', 'support', 'tier_0', 'support,chat,customer-success'],\n ['freshdesk', 'Freshdesk', 'crm', 'support', 'tier_1', 'support,tickets'],\n ['helpscout', 'Help Scout', 'crm', 'support', 'tier_1', 'support,tickets'],\n ['front', 'Front', 'email', 'support', 'tier_1', 'support,email,shared-inbox'],\n ['gorgias', 'Gorgias', 'crm', 'support', 'tier_1', 'support,ecommerce'],\n ['stripe', 'Stripe', 'workflow', 'finance', 'tier_0', 'payments,billing,finance'],\n ['chargebee', 'Chargebee', 'workflow', 'finance', 'tier_1', 'subscriptions,billing,revenue', 'api_key'],\n ['paddle', 'Paddle', 'workflow', 'finance', 'tier_1', 'payments,billing,merchant-of-record', 'api_key'],\n ['quickbooks', 'QuickBooks', 'workflow', 'finance', 'tier_0', 'accounting,finance'],\n ['xero', 'Xero', 'workflow', 'finance', 'tier_1', 'accounting,finance'],\n ['netsuite', 'NetSuite', 'workflow', 'finance', 'tier_1', 'erp,finance,enterprise', 'api_key'],\n ['sage', 'Sage', 'workflow', 'finance', 'tier_2', 'accounting,finance'],\n ['sage-intacct', 'Sage Intacct', 'workflow', 'finance', 'tier_1', 'accounting,erp,finance', 'api_key'],\n ['plaid', 'Plaid', 'workflow', 'finance', 'tier_1', 'banking,finance', 'api_key'],\n ['ramp', 'Ramp', 'workflow', 'finance', 'tier_1', 'cards,expenses,finance', 'api_key'],\n ['brex', 'Brex', 'workflow', 'finance', 'tier_1', 'cards,expenses,finance', 'api_key'],\n ['bill-com', 'BILL', 'workflow', 'finance', 'tier_1', 'accounts-payable,bills,payments', 'api_key'],\n ['avalara', 'Avalara AvaTax', 'workflow', 'finance', 'tier_1', 'tax,sales-tax,compliance,finance', 'api_key'],\n ['taxjar', 'TaxJar', 'workflow', 'finance', 'tier_1', 'tax,sales-tax,compliance,finance', 'api_key'],\n ['shopify', 'Shopify', 'workflow', 'commerce', 'tier_0', 'ecommerce,orders,commerce'],\n ['woocommerce', 'WooCommerce', 'workflow', 'commerce', 'tier_1', 'ecommerce,orders,wordpress'],\n ['bigcommerce', 'BigCommerce', 'workflow', 'commerce', 'tier_1', 'ecommerce,orders'],\n ['amazon-seller-central', 'Amazon Seller Central', 'workflow', 'commerce', 'tier_1', 'marketplace,ecommerce'],\n ['ebay', 'eBay', 'workflow', 'commerce', 'tier_2', 'marketplace,ecommerce'],\n ['etsy', 'Etsy', 'workflow', 'commerce', 'tier_2', 'marketplace,ecommerce'],\n ['mailchimp', 'Mailchimp', 'workflow', 'marketing', 'tier_0', 'email-marketing,marketing'],\n ['klaviyo', 'Klaviyo', 'workflow', 'marketing', 'tier_0', 'email-marketing,ecommerce,marketing'],\n ['marketo', 'Marketo', 'workflow', 'marketing', 'tier_1', 'marketing,enterprise'],\n ['braze', 'Braze', 'workflow', 'marketing', 'tier_1', 'marketing,lifecycle'],\n ['customer-io', 'Customer.io', 'workflow', 'marketing', 'tier_1', 'marketing,lifecycle'],\n ['sendgrid', 'SendGrid', 'email', 'email', 'tier_1', 'email,transactional'],\n ['postmark', 'Postmark', 'email', 'email', 'tier_1', 'email,transactional'],\n ['twilio', 'Twilio', 'chat', 'chat', 'tier_0', 'sms,voice,communications'],\n ['clicksend', 'ClickSend', 'chat', 'telephony', 'tier_1', 'sms,voice,communications,contact-lists', 'api_key'],\n ['open-phone', 'OpenPhone', 'chat', 'telephony', 'tier_0', 'sms,voice,telephony,communications', 'api_key'],\n ['ringcentral', 'RingCentral', 'chat', 'telephony', 'tier_0', 'voice,sms,telephony,communications'],\n ['dialpad', 'Dialpad', 'chat', 'telephony', 'tier_0', 'voice,sms,telephony,communications'],\n ['aircall', 'Aircall', 'chat', 'telephony', 'tier_1', 'voice,telephony,communications', 'api_key'],\n ['phony', 'ph0ny', 'chat', 'chat', 'tier_1', 'voice,telephony,communications', 'api_key'],\n ['discord', 'Discord', 'chat', 'chat', 'tier_1', 'chat,community'],\n ['discourse', 'Discourse', 'chat', 'chat', 'tier_1', 'community,forum,support,knowledge', 'api_key'],\n ['telegram', 'Telegram', 'chat', 'chat', 'tier_1', 'chat,community'],\n ['whatsapp-business', 'WhatsApp Business', 'chat', 'chat', 'tier_1', 'chat,meta,customer-comms'],\n ['facebook-pages', 'Facebook Pages', 'workflow', 'marketing', 'tier_1', 'social,meta,marketing'],\n ['instagram-business', 'Instagram Business', 'workflow', 'marketing', 'tier_1', 'social,meta,marketing'],\n ['linkedin', 'LinkedIn', 'workflow', 'sales', 'tier_1', 'social,sales,gtm'],\n ['x-twitter', 'X / Twitter', 'workflow', 'marketing', 'tier_1', 'social,marketing'],\n ['youtube', 'YouTube', 'storage', 'storage', 'tier_1', 'video,content'],\n ['tiktok', 'TikTok', 'workflow', 'marketing', 'tier_2', 'social,video,marketing'],\n ['google-analytics', 'Google Analytics', 'database', 'analytics', 'tier_0', 'analytics,web,marketing'],\n ['mixpanel', 'Mixpanel', 'database', 'analytics', 'tier_1', 'analytics,product'],\n ['amplitude', 'Amplitude', 'database', 'analytics', 'tier_1', 'analytics,product', 'api_key'],\n ['segment', 'Segment', 'database', 'analytics', 'tier_1', 'analytics,cdp'],\n ['snowflake', 'Snowflake', 'database', 'database', 'tier_0', 'warehouse,data'],\n ['bigquery', 'BigQuery', 'database', 'database', 'tier_0', 'warehouse,google,data'],\n ['redshift', 'Redshift', 'database', 'database', 'tier_1', 'warehouse,aws,data', 'custom'],\n ['postgres', 'Postgres', 'database', 'database', 'tier_0', 'database,sql', 'custom'],\n ['mysql', 'MySQL', 'database', 'database', 'tier_1', 'database,sql'],\n ['mongodb', 'MongoDB', 'database', 'database', 'tier_1', 'database,nosql', 'custom'],\n ['supabase', 'Supabase', 'database', 'database', 'tier_1', 'database,postgres'],\n ['firebase', 'Firebase', 'database', 'database', 'tier_1', 'database,google,app'],\n ['redis', 'Redis', 'database', 'database', 'tier_2', 'database,cache', 'custom'],\n ['aws-s3', 'Amazon S3', 'storage', 'storage', 'tier_0', 'files,aws,storage'],\n ['amazon-sns', 'Amazon SNS', 'webhook', 'webhook', 'tier_1', 'events,notifications,aws', 'api_key'],\n ['amazon-sqs', 'Amazon SQS', 'webhook', 'webhook', 'tier_1', 'events,queues,aws', 'api_key'],\n ['aws-lambda', 'AWS Lambda', 'workflow', 'dev', 'tier_1', 'aws,serverless,dev', 'api_key'],\n ['aws-cloudwatch', 'AWS CloudWatch', 'database', 'analytics', 'tier_1', 'aws,logs,observability', 'api_key'],\n ['google-cloud-storage', 'Google Cloud Storage', 'storage', 'storage', 'tier_1', 'files,gcp,storage'],\n ['azure-blob-storage', 'Azure Blob Storage', 'storage', 'storage', 'tier_1', 'files,azure,storage'],\n ['vercel', 'Vercel', 'workflow', 'dev', 'tier_1', 'deployments,dev'],\n ['digital-ocean', 'DigitalOcean', 'workflow', 'dev', 'tier_1', 'cloud,infrastructure,compute,database,storage', 'api_key'],\n ['netlify', 'Netlify', 'workflow', 'dev', 'tier_2', 'deployments,dev'],\n ['cloudflare', 'Cloudflare', 'workflow', 'dev', 'tier_1', 'edge,dev,dns', 'api_key'],\n ['sentry', 'Sentry', 'workflow', 'dev', 'tier_1', 'errors,observability,dev'],\n ['datadog', 'Datadog', 'database', 'analytics', 'tier_1', 'observability,logs,metrics'],\n ['new-relic', 'New Relic', 'database', 'analytics', 'tier_2', 'observability,logs,metrics'],\n ['pagerduty', 'PagerDuty', 'workflow', 'project', 'tier_1', 'incident,on-call'],\n ['opsgenie', 'Opsgenie', 'workflow', 'project', 'tier_2', 'incident,on-call,atlassian'],\n ['okta', 'Okta', 'internal', 'workflow', 'tier_1', 'identity,security', 'api_key'],\n ['auth0', 'Auth0', 'internal', 'workflow', 'tier_1', 'identity,security'],\n ['ping-identity', 'Ping Identity', 'internal', 'workflow', 'tier_1', 'identity,security,provisioning', 'api_key'],\n ['onelogin', 'OneLogin', 'internal', 'workflow', 'tier_1', 'identity,security,provisioning', 'api_key'],\n ['scim', 'SCIM', 'internal', 'workflow', 'tier_1', 'identity,security,provisioning', 'api_key'],\n ['workday', 'Workday', 'workflow', 'hr', 'tier_1', 'hr,finance,enterprise'],\n ['bamboohr', 'BambooHR', 'workflow', 'hr', 'tier_1', 'hr,people'],\n ['greenhouse', 'Greenhouse', 'workflow', 'hr', 'tier_1', 'recruiting,hr'],\n ['lever', 'Lever', 'workflow', 'hr', 'tier_1', 'recruiting,hr'],\n ['gusto', 'Gusto', 'workflow', 'hr', 'tier_1', 'payroll,hr'],\n ['rippling', 'Rippling', 'workflow', 'hr', 'tier_1', 'hr,it,identity'],\n ['adp', 'ADP', 'workflow', 'hr', 'tier_1', 'hr,payroll,workforce'],\n ['paychex', 'Paychex', 'workflow', 'hr', 'tier_1', 'hr,payroll,workforce'],\n ['docusign', 'DocuSign', 'docs', 'docs', 'tier_1', 'contracts,signature,legal'],\n ['adobe-sign', 'Adobe Acrobat Sign', 'docs', 'docs', 'tier_1', 'contracts,signature,legal'],\n ['pandadoc', 'PandaDoc', 'docs', 'docs', 'tier_1', 'contracts,signature,sales'],\n ['hellosign', 'Dropbox Sign', 'docs', 'docs', 'tier_2', 'contracts,signature'],\n ['clio', 'Clio', 'workflow', 'project', 'tier_1', 'legal,practice-management'],\n ['mycase', 'MyCase', 'crm', 'project', 'tier_1', 'legal,practice-management,cases'],\n ['ironclad', 'Ironclad', 'docs', 'docs', 'tier_1', 'legal,contracts'],\n ['lexisnexis', 'LexisNexis', 'docs', 'docs', 'tier_2', 'legal,research'],\n ['calendly', 'Calendly', 'calendar', 'calendar', 'tier_0', 'scheduling,calendar'],\n ['acuity-scheduling', 'Acuity Scheduling', 'calendar', 'calendar', 'tier_1', 'appointments,scheduling,calendar'],\n ['cal-com', 'Cal.com', 'calendar', 'calendar', 'tier_1', 'scheduling,calendar'],\n ['zoom', 'Zoom', 'calendar', 'calendar', 'tier_0', 'meetings,video,calendar'],\n ['granola', 'Granola', 'docs', 'meeting', 'tier_0', 'meetings,notes,transcripts', 'api_key'],\n ['gong', 'Gong', 'docs', 'meeting', 'tier_0', 'meetings,calls,transcripts,sales'],\n ['fathom', 'Fathom', 'docs', 'meeting', 'tier_0', 'meetings,notes,transcripts'],\n ['fireflies-ai', 'Fireflies.ai', 'docs', 'meeting', 'tier_0', 'meetings,notes,transcripts', 'api_key'],\n ['otter', 'Otter.ai', 'docs', 'meeting', 'tier_0', 'meetings,notes,transcripts,commercial-api', 'custom'],\n ['google-meet', 'Google Meet', 'calendar', 'calendar', 'tier_1', 'meetings,google,video'],\n ['microsoft-graph', 'Microsoft Graph', 'internal', 'workflow', 'tier_0', 'microsoft,enterprise,identity'],\n ['openai', 'OpenAI', 'workflow', 'ai', 'tier_0', 'ai,llm'],\n ['anthropic', 'Anthropic', 'workflow', 'ai', 'tier_1', 'ai,llm'],\n ['gemini', 'Google Gemini', 'workflow', 'ai', 'tier_1', 'ai,llm,google'],\n ['huggingface', 'Hugging Face', 'workflow', 'ai', 'tier_1', 'ai,models'],\n ['pinecone', 'Pinecone', 'database', 'database', 'tier_1', 'vector,database,ai'],\n ['weaviate', 'Weaviate', 'database', 'database', 'tier_1', 'vector,database,ai'],\n ['qdrant', 'Qdrant', 'database', 'database', 'tier_1', 'vector,database,ai'],\n ['zapier', 'Zapier', 'workflow', 'workflow', 'tier_1', 'automation,workflow'],\n ['make', 'Make', 'workflow', 'workflow', 'tier_1', 'automation,workflow'],\n ['nango', 'Nango', 'workflow', 'workflow', 'tier_1', 'integration-platform,gateway', 'custom'],\n ['pipedream', 'Pipedream', 'workflow', 'workflow', 'tier_1', 'integration-platform,workflow'],\n ['open-automation-catalog', 'Open Automation Catalog', 'workflow', 'workflow', 'tier_1', 'automation,workflow,open-source'],\n ['actualbudget', 'Actual Budget', 'workflow', 'finance', 'tier_2', 'finance,budgeting,accounting', 'api_key'],\n ['aianswer', 'AI Answer', 'chat', 'ai', 'long_tail', 'ai,answers,chat', 'api_key'],\n ['airparser', 'Airparser', 'docs', 'docs', 'tier_2', 'documents,parsing,extraction', 'api_key'],\n ['anyhook-websocket', 'AnyHook WebSocket', 'webhook', 'webhook', 'long_tail', 'websocket,events,automation', 'api_key'],\n ['apify', 'Apify', 'database', 'workflow', 'tier_2', 'scraping,automation,data', 'api_key'],\n ['ask-handle', 'AskHandle', 'workflow', 'ai', 'long_tail', 'ai,forms,automation', 'api_key'],\n ['bannerbear', 'Bannerbear', 'docs', 'marketing', 'tier_2', 'images,creative,marketing', 'api_key'],\n ['base44', 'Base44', 'workflow', 'dev', 'long_tail', 'apps,automation,dev', 'api_key'],\n ['beehiiv', 'Beehiiv', 'email', 'marketing', 'tier_2', 'newsletter,email,marketing', 'api_key'],\n ['bika', 'Bika.ai', 'docs', 'database', 'long_tail', 'database,workspace,automation', 'api_key'],\n ['buttondown', 'Buttondown', 'email', 'marketing', 'tier_2', 'newsletter,email,marketing', 'api_key'],\n ['camb-ai', 'Camb.AI', 'workflow', 'ai', 'long_tail', 'ai,audio,translation', 'api_key'],\n ['cartloom', 'Cartloom', 'workflow', 'commerce', 'long_tail', 'commerce,checkout,orders', 'api_key'],\n ['chain-aware', 'ChainAware.AI', 'database', 'analytics', 'long_tail', 'blockchain,risk,analytics', 'api_key'],\n ['chaindesk', 'Chaindesk', 'workflow', 'ai', 'long_tail', 'ai,knowledge,chatbot', 'api_key'],\n ['chat-aid', 'Chat Aid', 'workflow', 'ai', 'long_tail', 'ai,chat,knowledge', 'api_key'],\n ['chatsistant', 'Chatsistant', 'chat', 'chat', 'long_tail', 'chat,ai,support', 'api_key'],\n ['claude', 'Anthropic Claude', 'workflow', 'ai', 'tier_1', 'ai,llm,anthropic', 'api_key'],\n ['clearoutphone', 'ClearoutPhone', 'workflow', 'telephony', 'long_tail', 'phone,validation,enrichment', 'api_key'],\n ['clickfunnels', 'ClickFunnels', 'workflow', 'marketing', 'tier_2', 'marketing,funnels,crm', 'api_key'],\n ['cody', 'Cody', 'workflow', 'ai', 'long_tail', 'ai,knowledge,assistant', 'api_key'],\n ['contextual-ai', 'Contextual AI', 'workflow', 'ai', 'tier_2', 'ai,rag,knowledge', 'api_key'],\n ['contiguity', 'Contiguity', 'chat', 'telephony', 'long_tail', 'sms,messaging,communications', 'api_key'],\n ['couchbase', 'Couchbase', 'database', 'database', 'tier_2', 'database,nosql,data', 'api_key'],\n ['dappier', 'Dappier', 'workflow', 'ai', 'long_tail', 'ai,data,search', 'api_key'],\n ['deepgram', 'Deepgram', 'workflow', 'ai', 'tier_2', 'audio,transcription,ai', 'api_key'],\n ['detecting-ai', 'Detecting AI', 'workflow', 'ai', 'long_tail', 'ai,detection,content', 'api_key'],\n ['digital-pilot', 'DigitalPilot', 'database', 'analytics', 'long_tail', 'analytics,marketing,data', 'api_key'],\n ['docsbot', 'DocsBot', 'docs', 'ai', 'long_tail', 'ai,docs,knowledge', 'api_key'],\n ['drip', 'Drip', 'crm', 'marketing', 'tier_2', 'crm,email,marketing', 'api_key'],\n ['echowin', 'Echowin', 'workflow', 'telephony', 'long_tail', 'voice,phone,ai', 'api_key'],\n ['elevenlabs', 'ElevenLabs', 'workflow', 'ai', 'tier_2', 'audio,voice,ai', 'api_key'],\n ['everhour', 'Everhour', 'workflow', 'project', 'tier_2', 'time-tracking,project,work', 'api_key'],\n ['feathery', 'Feathery', 'workflow', 'marketing', 'tier_2', 'forms,marketing,workflow', 'api_key'],\n ['fellow', 'Fellow.ai', 'docs', 'meeting', 'tier_2', 'meetings,notes,collaboration', 'api_key'],\n ['flow-parser', 'FlowParser', 'workflow', 'workflow', 'long_tail', 'parsing,automation,workflow', 'api_key'],\n ['gamma', 'Gamma', 'docs', 'docs', 'tier_2', 'presentations,docs,ai', 'api_key'],\n ['gender-api', 'Gender API', 'database', 'analytics', 'long_tail', 'enrichment,identity,analytics', 'api_key'],\n ['neverbounce', 'NeverBounce', 'crm', 'sales', 'tier_1', 'email,verification,deliverability,enrichment', 'api_key'],\n ['generatebanners', 'GenerateBanners', 'docs', 'marketing', 'long_tail', 'images,banners,marketing', 'api_key'],\n ['giftbit', 'Giftbit', 'workflow', 'commerce', 'long_tail', 'rewards,gift-cards,commerce', 'api_key'],\n ['modelslab', 'ModelsLab', 'workflow', 'ai', 'long_tail', 'images,media,ai', 'api_key'],\n ['webhook', 'Generic Webhook', 'webhook', 'webhook', 'tier_0', 'webhook,http,events', 'none'],\n ['http', 'HTTP / REST / OpenAPI Request', 'workflow', 'webhook', 'tier_0', 'http,api,rest,openapi,webhook', 'none'],\n ['rss', 'RSS', 'webhook', 'webhook', 'tier_1', 'feeds,content', 'none'],\n ['chess-com', 'Chess.com', 'workflow', 'workflow', 'long_tail', 'chess,games,public-data', 'none'],\n ['sftp', 'SFTP', 'storage', 'storage', 'tier_0', 'files,sftp,imports,commercial-api', 'custom'],\n ['csv-files', 'CSV Files', 'database', 'database', 'tier_0', 'files,csv,imports', 'none'],\n ['excel-files', 'Excel Files', 'database', 'database', 'tier_0', 'files,excel,imports', 'none'],\n ['parquet-files', 'Parquet Files', 'database', 'database', 'tier_1', 'files,parquet,imports', 'none'],\n ['duckdb', 'DuckDB', 'database', 'database', 'tier_1', 'database,sql,json,analytics', 'none'],\n ['kafka', 'Apache Kafka', 'webhook', 'webhook', 'tier_1', 'events,streams,kafka', 'custom'],\n ['rabbitmq', 'RabbitMQ', 'webhook', 'webhook', 'tier_1', 'events,queues,rabbitmq', 'custom'],\n ['amazon-eventbridge', 'Amazon EventBridge', 'webhook', 'webhook', 'tier_1', 'events,aws,eventbridge', 'custom'],\n ['google-pubsub', 'Google Pub/Sub', 'webhook', 'webhook', 'tier_1', 'events,google,pubsub', 'custom'],\n ['azure-event-grid', 'Azure Event Grid', 'webhook', 'webhook', 'tier_1', 'events,azure,event-grid', 'custom'],\n ['azure-service-bus', 'Azure Service Bus', 'webhook', 'webhook', 'tier_1', 'events,queues,azure,service-bus', 'custom'],\n ['zapier-transfer', 'Zapier Transfer', 'workflow', 'workflow', 'long_tail', 'automation,migration'],\n ['typeform', 'Typeform', 'workflow', 'marketing', 'tier_1', 'forms,marketing'],\n ['google-forms', 'Google Forms', 'workflow', 'marketing', 'tier_1', 'forms,google'],\n ['jotform', 'Jotform', 'workflow', 'marketing', 'tier_2', 'forms'],\n ['webflow', 'Webflow', 'workflow', 'marketing', 'tier_1', 'cms,website'],\n ['wordpress', 'WordPress', 'workflow', 'marketing', 'tier_1', 'cms,website'],\n ['contentful', 'Contentful', 'docs', 'docs', 'tier_1', 'cms,content'],\n ['sanity', 'Sanity', 'docs', 'docs', 'tier_1', 'cms,content'],\n ['figma', 'Figma', 'docs', 'docs', 'tier_0', 'design,creative'],\n ['canva', 'Canva', 'docs', 'docs', 'tier_1', 'design,creative'],\n ['adobe-creative-cloud', 'Adobe Creative Cloud', 'storage', 'storage', 'tier_1', 'design,creative,files'],\n ['miro', 'Miro', 'docs', 'docs', 'tier_1', 'whiteboard,collaboration'],\n ['figjam', 'FigJam', 'docs', 'docs', 'tier_2', 'whiteboard,design'],\n]\n\nexport function listIntegrationCoverageSpecs(): IntegrationCoverageSpec[] {\n return COVERAGE_SPECS.map(([id, title, category, actionPack, priority, domains, auth = 'oauth2']) => ({\n id,\n title,\n category,\n actionPack,\n priority,\n auth,\n providerKinds: providerKindsFor(auth),\n domains: domains.split(',').map((domain) => domain.trim()).filter(Boolean),\n scopes: scopesFor(id, actionPack),\n }))\n}\n\nexport function buildIntegrationCoverageConnectors(options: {\n providerId?: string\n priorities?: IntegrationCoveragePriority[]\n categories?: IntegrationConnectorCategory[]\n actionPacks?: IntegrationActionPack[]\n} = {}): IntegrationConnector[] {\n const providerId = options.providerId ?? 'coverage'\n return listIntegrationCoverageSpecs()\n .filter((spec) => !options.priorities || options.priorities.includes(spec.priority))\n .filter((spec) => !options.categories || options.categories.includes(spec.category))\n .filter((spec) => !options.actionPacks || options.actionPacks.includes(spec.actionPack))\n .map((spec) => specToConnector(spec, providerId))\n}\n\nexport function integrationCoverageChecklistMarkdown(): string {\n const specs = listIntegrationCoverageSpecs()\n const lines = [\n '# Agent Integrations Coverage Checklist',\n '',\n 'Generated from `listIntegrationCoverageSpecs()`. Catalog presence means the product can plan/request/connect the integration; native adapters and runtime backends execute behind the same provider contract.',\n '',\n '## Summary',\n '',\n `- Total cataloged integrations: ${specs.length}`,\n `- Tier 0: ${specs.filter((spec) => spec.priority === 'tier_0').length}`,\n `- Tier 1: ${specs.filter((spec) => spec.priority === 'tier_1').length}`,\n `- Tier 2: ${specs.filter((spec) => spec.priority === 'tier_2').length}`,\n `- Long tail: ${specs.filter((spec) => spec.priority === 'long_tail').length}`,\n '',\n '## Checklist',\n '',\n ]\n for (const spec of specs) {\n lines.push(`- [ ] ${spec.priority} / ${spec.category} / ${spec.title} (${spec.id}) - ${spec.domains.join(', ')}`)\n }\n return `${lines.join('\\n')}\\n`\n}\n\nfunction specToConnector(spec: IntegrationCoverageSpec, providerId: string): IntegrationConnector {\n const actions = actionPack(spec.actionPack, spec.scopes ?? [])\n return {\n id: spec.id,\n providerId,\n title: spec.title,\n category: spec.category,\n auth: spec.auth,\n scopes: spec.scopes ?? [],\n actions,\n triggers: triggersFor(spec.actionPack, spec.scopes ?? []),\n metadata: {\n source: 'coverage-catalog',\n priority: spec.priority,\n domains: spec.domains,\n providerKinds: spec.providerKinds,\n executable: false,\n },\n }\n}\n\nfunction actionPack(pack: IntegrationActionPack, scopes: string[]): IntegrationConnectorAction[] {\n const readScope = scopes.find((scope) => scope.endsWith('.read')) ?? scopes[0]\n const writeScope = scopes.find((scope) => scope.endsWith('.write')) ?? scopes[1] ?? readScope\n const scope = (value?: string) => value ? [value] : []\n const read = (id: string, title: string, description: string): IntegrationConnectorAction => ({\n id,\n title,\n description,\n risk: 'read',\n requiredScopes: scope(readScope),\n dataClass: dataClassFor(pack),\n inputSchema: objectSchema(),\n })\n const write = (id: string, title: string, description: string): IntegrationConnectorAction => ({\n id,\n title,\n description,\n risk: 'write',\n requiredScopes: scope(writeScope),\n dataClass: dataClassFor(pack),\n approvalRequired: true,\n inputSchema: objectSchema(),\n })\n const destructive = (id: string, title: string, description: string): IntegrationConnectorAction => ({\n id,\n title,\n description,\n risk: 'destructive',\n requiredScopes: scope(writeScope),\n dataClass: dataClassFor(pack),\n approvalRequired: true,\n inputSchema: objectSchema(),\n })\n switch (pack) {\n case 'email': return [read('messages.search', 'Search messages', 'Search messages and threads.'), read('messages.read', 'Read message', 'Read a message by id.'), write('drafts.create', 'Create draft', 'Create an email draft.'), write('messages.send', 'Send message', 'Send or reply to an email message.')]\n case 'calendar': return [read('events.search', 'Search events', 'Search calendar events.'), read('availability.read', 'Read availability', 'Read availability windows.'), write('events.create', 'Create event', 'Create a calendar event.'), write('events.update', 'Update event', 'Update a calendar event.'), destructive('events.cancel', 'Cancel event', 'Cancel a calendar event.')]\n case 'chat': return [read('messages.search', 'Search messages', 'Search channel or direct messages.'), read('channels.list', 'List channels', 'List channels or rooms.'), write('messages.post', 'Send message', 'Send a message to a channel or direct message.'), write('threads.reply', 'Reply in thread', 'Reply to a thread or conversation.')]\n case 'crm': return [read('records.search', 'Search records', 'Search contacts, companies, and deals.'), read('records.read', 'Read record', 'Read a CRM record.'), write('records.upsert', 'Upsert record', 'Create or update a CRM record.'), write('notes.create', 'Create note', 'Add a note or activity.')]\n case 'storage': return [read('files.search', 'Search files', 'Search files and folders.'), read('files.read', 'Read file', 'Read file metadata or content.'), write('files.upload', 'Upload file', 'Upload a file.'), write('files.update', 'Update file', 'Update file metadata or content.')]\n case 'docs': return [read('documents.search', 'Search documents', 'Search documents or pages.'), read('documents.read', 'Read document', 'Read a document.'), write('documents.create', 'Create document', 'Create a document or page.'), write('documents.update', 'Update document', 'Update a document or page.')]\n case 'database': return [read('records.query', 'Query records', 'Query rows, records, or objects.'), read('records.read', 'Read record', 'Read one row, record, or object.'), write('records.upsert', 'Upsert record', 'Create or update a row, record, or object.'), destructive('records.delete', 'Delete record', 'Delete a row, record, or object.')]\n case 'project': return [read('tasks.search', 'Search tasks', 'Search tasks, tickets, or issues.'), read('tasks.read', 'Read task', 'Read a task, ticket, or issue.'), write('tasks.create', 'Create task', 'Create a task, ticket, or issue.'), write('tasks.update', 'Update task', 'Update a task, ticket, or issue.')]\n case 'support': return [read('tickets.search', 'Search tickets', 'Search support tickets or conversations.'), read('customers.read', 'Read customer', 'Read a customer profile.'), write('tickets.reply', 'Reply to ticket', 'Reply to a support ticket.'), write('tickets.update', 'Update ticket', 'Update ticket status, tags, or assignee.')]\n case 'marketing': return [read('contacts.search', 'Search contacts', 'Search marketing contacts or audiences.'), read('campaigns.read', 'Read campaign', 'Read campaign metadata and performance.'), write('contacts.upsert', 'Upsert contact', 'Create or update a contact.'), write('campaigns.create', 'Create campaign', 'Create a campaign draft.')]\n case 'sales': return [read('prospects.search', 'Search prospects', 'Search prospects, leads, or accounts.'), read('activities.read', 'Read activities', 'Read sales activity history.'), write('prospects.upsert', 'Upsert prospect', 'Create or update a prospect.'), write('sequence.enqueue', 'Enroll in sequence', 'Enroll a prospect in a sales sequence.')]\n case 'commerce': return [read('orders.search', 'Search orders', 'Search orders.'), read('customers.read', 'Read customer', 'Read customer and purchase history.'), write('orders.update', 'Update order', 'Update order metadata or fulfillment state.'), write('products.update', 'Update product', 'Update product metadata.')]\n case 'finance': return [read('transactions.search', 'Search transactions', 'Search transactions, invoices, or payments.'), read('accounts.read', 'Read account', 'Read account or customer financial record.'), write('invoices.create', 'Create invoice', 'Create an invoice or payment object.'), write('records.sync', 'Sync record', 'Sync a finance or accounting record.')]\n case 'hr': return [read('people.search', 'Search people', 'Search employees, candidates, or contractors.'), read('people.read', 'Read person', 'Read a person profile.'), write('people.update', 'Update person', 'Update a person profile.'), write('events.create', 'Create HR event', 'Create a recruiting or HR event.')]\n case 'dev': return [read('resources.search', 'Search resources', 'Search issues, repos, deployments, logs, or incidents.'), read('resources.read', 'Read resource', 'Read a developer resource.'), write('resources.create', 'Create resource', 'Create an issue, deployment, incident, or config.'), write('resources.update', 'Update resource', 'Update a developer resource.')]\n case 'ai': return [read('models.list', 'List models', 'List available models or endpoints.'), write('responses.create', 'Create response', 'Create an AI response or job.'), write('embeddings.create', 'Create embeddings', 'Create embeddings or vector jobs.'), read('usage.read', 'Read usage', 'Read usage metadata.')]\n case 'analytics': return [read('reports.query', 'Query reports', 'Query analytics reports.'), read('events.search', 'Search events', 'Search analytics events.'), write('events.track', 'Track event', 'Track an analytics event.'), write('audiences.sync', 'Sync audience', 'Sync an audience or cohort.')]\n case 'workflow': return [read('runs.search', 'Search runs', 'Search workflow runs or jobs.'), read('templates.list', 'List templates', 'List workflow templates.'), write('runs.start', 'Start run', 'Start a workflow run.'), write('webhooks.dispatch', 'Dispatch webhook', 'Dispatch a workflow webhook.')]\n case 'webhook': return [write('requests.send', 'Send request', 'Send an HTTP request or webhook event.'), read('events.search', 'Search events', 'Search received webhook events.'), write('subscriptions.create', 'Create subscription', 'Create a webhook subscription.'), destructive('subscriptions.delete', 'Delete subscription', 'Delete a webhook subscription.')]\n case 'meeting': return [read('meetings.search', 'Search meetings', 'Search meetings and recorded calls.'), read('transcripts.read', 'Read transcript', 'Read a meeting transcript.'), read('summaries.read', 'Read summary', 'Read meeting notes, summaries, and action items.'), write('notes.create', 'Create note', 'Create or attach an approved note to a meeting.')]\n case 'telephony': return [read('calls.search', 'Search calls', 'Search inbound and outbound calls.'), read('recordings.read', 'Read recording', 'Read call recording metadata and transcripts.'), read('messages.search', 'Search messages', 'Search SMS and MMS conversations.'), write('messages.send', 'Send message', 'Send an approved SMS or MMS message.')]\n }\n}\n\nfunction triggersFor(pack: IntegrationActionPack, scopes: string[]): IntegrationConnectorTrigger[] | undefined {\n const readScope = scopes.find((scope) => scope.endsWith('.read')) ?? scopes[0]\n const requiredScopes = readScope ? [readScope] : []\n if (pack === 'email') return [{ id: 'message.received', title: 'Message received', requiredScopes, dataClass: 'private' }]\n if (pack === 'calendar') return [{ id: 'event.changed', title: 'Event changed', requiredScopes, dataClass: 'private' }]\n if (pack === 'chat') return [{ id: 'message.posted', title: 'Message posted', requiredScopes, dataClass: 'private' }]\n if (pack === 'crm') return [\n { id: 'person.changed', title: 'Person changed', requiredScopes, dataClass: 'private' },\n { id: 'company.changed', title: 'Company changed', requiredScopes, dataClass: 'private' },\n { id: 'opportunity.changed', title: 'Opportunity changed', requiredScopes, dataClass: 'private' },\n { id: 'stage.changed', title: 'Stage changed', requiredScopes, dataClass: 'private' },\n { id: 'owner.changed', title: 'Owner changed', requiredScopes, dataClass: 'private' },\n { id: 'record.deleted', title: 'Record deleted', requiredScopes, dataClass: 'private' },\n ]\n if (pack === 'docs') return [\n { id: 'document.changed', title: 'Document changed', requiredScopes, dataClass: 'private' },\n { id: 'document.shared', title: 'Document shared', requiredScopes, dataClass: 'private' },\n ]\n if (pack === 'database') return [{ id: 'record.changed', title: 'Record changed', requiredScopes, dataClass: 'private' }]\n if (pack === 'project') return [\n { id: 'task.changed', title: 'Task changed', requiredScopes, dataClass: 'private' },\n { id: 'task.overdue', title: 'Task overdue', requiredScopes, dataClass: 'private' },\n ]\n if (pack === 'support') return [{ id: 'ticket.changed', title: 'Ticket changed', requiredScopes, dataClass: 'private' }]\n if (pack === 'commerce') return [{ id: 'order.changed', title: 'Order changed', requiredScopes, dataClass: 'sensitive' }]\n if (pack === 'finance') return [{ id: 'transaction.changed', title: 'Transaction changed', requiredScopes, dataClass: 'sensitive' }]\n if (pack === 'workflow' || pack === 'webhook') return [{ id: 'event.received', title: 'Event received', requiredScopes, dataClass: 'internal' }]\n if (pack === 'meeting') return [\n { id: 'meeting.ended', title: 'Meeting ended', requiredScopes, dataClass: 'private' },\n { id: 'transcript.ready', title: 'Transcript ready', requiredScopes, dataClass: 'private' },\n { id: 'summary.ready', title: 'Summary ready', requiredScopes, dataClass: 'private' },\n ]\n if (pack === 'telephony') return [\n { id: 'call.completed', title: 'Call completed', requiredScopes, dataClass: 'private' },\n { id: 'call.missed', title: 'Call missed', requiredScopes, dataClass: 'private' },\n { id: 'recording.ready', title: 'Recording ready', requiredScopes, dataClass: 'private' },\n { id: 'transcript.ready', title: 'Transcript ready', requiredScopes, dataClass: 'private' },\n { id: 'message.received', title: 'Message received', requiredScopes, dataClass: 'private' },\n ]\n return undefined\n}\n\nfunction scopesFor(id: string, pack: IntegrationActionPack): string[] {\n if (pack === 'webhook') return []\n return [`${id}.read`, `${id}.write`]\n}\n\nfunction providerKindsFor(auth: IntegrationConnector['auth']): IntegrationProviderKind[] {\n if (auth === 'none') return ['first_party', 'pipedream', 'tangle_catalog', 'custom']\n return DEFAULT_PROVIDER_KINDS\n}\n\nfunction dataClassFor(pack: IntegrationActionPack): 'public' | 'internal' | 'private' | 'sensitive' {\n if (pack === 'finance' || pack === 'commerce' || pack === 'hr') return 'sensitive'\n if (pack === 'workflow' || pack === 'webhook' || pack === 'dev' || pack === 'analytics') return 'internal'\n return 'private'\n}\n\nfunction objectSchema(): unknown {\n return { type: 'object', additionalProperties: true, properties: {} }\n}\n"],"mappings":"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","names":["actionPack","scope"]}
@@ -0,0 +1,267 @@
1
+ import {
2
+ buildIntegrationToolCatalog
3
+ } from "./chunk-WPQJK4S4.js";
4
+
5
+ // src/runtime.ts
6
+ var InMemoryIntegrationGrantStore = class {
7
+ grants = /* @__PURE__ */ new Map();
8
+ get(grantId) {
9
+ return this.grants.get(grantId);
10
+ }
11
+ put(grant) {
12
+ this.grants.set(grant.id, grant);
13
+ }
14
+ listByManifest(manifestId, grantee) {
15
+ return [...this.grants.values()].filter(
16
+ (grant) => grant.manifestId === manifestId && (!grantee || sameActor(grant.grantee, grantee))
17
+ );
18
+ }
19
+ listByGrantee(grantee) {
20
+ return [...this.grants.values()].filter((grant) => sameActor(grant.grantee, grantee));
21
+ }
22
+ listByIds(grantIds) {
23
+ const wanted = new Set(grantIds);
24
+ return [...this.grants.values()].filter((grant) => wanted.has(grant.id));
25
+ }
26
+ delete(grantId) {
27
+ this.grants.delete(grantId);
28
+ }
29
+ };
30
+ var IntegrationRuntime = class {
31
+ hub;
32
+ grants;
33
+ now;
34
+ constructor(options) {
35
+ this.hub = options.hub;
36
+ this.grants = options.grants ?? new InMemoryIntegrationGrantStore();
37
+ this.now = options.now ?? (() => /* @__PURE__ */ new Date());
38
+ }
39
+ async registry() {
40
+ return this.hub.listRegistry();
41
+ }
42
+ async resolveManifest(manifest, owner) {
43
+ const registry = await this.registry();
44
+ const connections = await this.hub.listConnections(owner);
45
+ const resolutions = manifest.requirements.map(
46
+ (requirement) => resolveRequirement(requirement, owner, registry, connections)
47
+ );
48
+ return {
49
+ manifest,
50
+ owner,
51
+ ready: resolutions.filter((resolution) => resolution.status === "ready"),
52
+ missing: resolutions.filter((resolution) => resolution.status !== "ready" && !resolution.requirement.optional),
53
+ optionalMissing: resolutions.filter((resolution) => resolution.status !== "ready" && resolution.requirement.optional === true)
54
+ };
55
+ }
56
+ async createGrants(input) {
57
+ const resolution = await this.resolveManifest(input.manifest, input.owner);
58
+ if (resolution.missing.length > 0) {
59
+ throw new Error(`Cannot create integration grants; missing requirements: ${resolution.missing.map((r) => r.requirement.id).join(", ")}`);
60
+ }
61
+ const now = this.now().toISOString();
62
+ const grants = resolution.ready.map((ready) => ({
63
+ id: `grant_${input.manifest.id}_${ready.requirement.id}_${ready.connection.id}`,
64
+ manifestId: input.manifest.id,
65
+ requirementId: ready.requirement.id,
66
+ owner: input.owner,
67
+ grantee: input.grantee,
68
+ connectionId: ready.connection.id,
69
+ connectorId: ready.connector.id,
70
+ scopes: requiredScopes(ready.requirement, ready.connector),
71
+ allowedActions: requiredActions(ready.requirement, ready.connector),
72
+ allowedTriggers: requiredTriggers(ready.requirement, ready.connector),
73
+ status: "active",
74
+ createdAt: now,
75
+ updatedAt: now,
76
+ metadata: input.metadata
77
+ }));
78
+ for (const grant of grants) await this.grants.put(grant);
79
+ return grants;
80
+ }
81
+ async buildSandboxBundle(input) {
82
+ const grants = await this.resolveBundleGrants(input);
83
+ if (grants.length === 0) {
84
+ throw new Error("Cannot build integration bundle; no active integration grants matched the request.");
85
+ }
86
+ const registry = await this.registry();
87
+ const bindings = [];
88
+ const connectors = [];
89
+ let expiresAt = "";
90
+ for (const grant of grants) {
91
+ const connection = await this.hub.getConnection(grant.connectionId);
92
+ if (!connection) {
93
+ throw new Error(`Cannot build integration bundle; connection ${grant.connectionId} not found.`);
94
+ }
95
+ if (!sameActor(connection.owner, input.owner)) {
96
+ throw new Error(`Cannot build integration bundle; connection ${connection.id} belongs to a different owner.`);
97
+ }
98
+ if (connection.status !== "active") {
99
+ throw new Error(`Cannot build integration bundle; connection ${connection.id} is ${connection.status}.`);
100
+ }
101
+ const entry = registry.byId.get(grant.connectorId);
102
+ if (!entry) continue;
103
+ const connector = {
104
+ ...entry.connector,
105
+ actions: entry.connector.actions.filter((action) => grant.allowedActions.includes(action.id)),
106
+ triggers: entry.connector.triggers?.filter((trigger) => grant.allowedTriggers.includes(trigger.id)),
107
+ scopes: entry.connector.scopes.filter((scope) => grant.scopes.includes(scope))
108
+ };
109
+ const capability = await this.hub.issueCapability({
110
+ subject: input.subject,
111
+ connectionId: grant.connectionId,
112
+ scopes: grant.scopes,
113
+ allowedActions: grant.allowedActions,
114
+ ttlMs: input.ttlMs,
115
+ metadata: {
116
+ manifestId: grant.manifestId,
117
+ grantId: grant.id,
118
+ requirementId: grant.requirementId
119
+ }
120
+ });
121
+ bindings.push({
122
+ requirementId: grant.requirementId,
123
+ connectorId: grant.connectorId,
124
+ connectionId: grant.connectionId,
125
+ grantId: grant.id,
126
+ scopes: grant.scopes,
127
+ allowedActions: grant.allowedActions,
128
+ allowedTriggers: grant.allowedTriggers,
129
+ capability
130
+ });
131
+ connectors.push(connector);
132
+ expiresAt = capability.capability.expiresAt;
133
+ }
134
+ return {
135
+ manifestId: input.manifestId ?? grants[0]?.manifestId ?? "explicit-grants",
136
+ subject: input.subject,
137
+ capabilities: bindings,
138
+ connectors,
139
+ tools: buildIntegrationToolCatalog(connectors),
140
+ expiresAt
141
+ };
142
+ }
143
+ async resolveBundleGrants(input) {
144
+ if (input.grantIds?.length) {
145
+ const uniqueGrantIds = unique(input.grantIds);
146
+ const grants = this.grants.listByIds ? await this.grants.listByIds(uniqueGrantIds) : await Promise.all(uniqueGrantIds.map((grantId) => this.grants.get(grantId)));
147
+ const found = grants.filter((grant) => Boolean(grant));
148
+ const foundIds = new Set(found.map((grant) => grant.id));
149
+ const missing2 = uniqueGrantIds.filter((grantId) => !foundIds.has(grantId));
150
+ if (missing2.length > 0) {
151
+ throw new Error(`Cannot build integration bundle; unknown grant id(s): ${missing2.join(", ")}`);
152
+ }
153
+ const badOwner = found.find((grant) => !sameActor(grant.owner, input.owner));
154
+ if (badOwner) {
155
+ throw new Error(`Cannot build integration bundle; grant ${badOwner.id} belongs to a different owner.`);
156
+ }
157
+ const badGrantee = input.grantee ? found.find((grant) => !sameActor(grant.grantee, input.grantee)) : void 0;
158
+ if (badGrantee) {
159
+ throw new Error(`Cannot build integration bundle; grant ${badGrantee.id} belongs to a different grantee.`);
160
+ }
161
+ const badManifest = input.manifestId ? found.find((grant) => grant.manifestId !== input.manifestId) : void 0;
162
+ if (badManifest) {
163
+ throw new Error(`Cannot build integration bundle; grant ${badManifest.id} is not for manifest ${input.manifestId}.`);
164
+ }
165
+ const inactive = found.find((grant) => grant.status !== "active");
166
+ if (inactive) {
167
+ throw new Error(`Cannot build integration bundle; grant ${inactive.id} is ${inactive.status}.`);
168
+ }
169
+ return found;
170
+ }
171
+ if (!input.manifestId) {
172
+ throw new Error("Cannot build integration bundle; manifestId or grantIds is required.");
173
+ }
174
+ return (await this.grants.listByManifest(input.manifestId, input.grantee)).filter((grant) => sameActor(grant.owner, input.owner)).filter((grant) => grant.status === "active");
175
+ }
176
+ };
177
+ function createIntegrationRuntime(options) {
178
+ return new IntegrationRuntime(options);
179
+ }
180
+ function resolveRequirement(requirement, owner, registry, connections) {
181
+ const entry = registry.byId.get(requirement.connectorId);
182
+ if (!entry) {
183
+ return missing(requirement, "unknown_connector", `Unknown connector ${requirement.connectorId}.`);
184
+ }
185
+ const connector = entry.connector;
186
+ if (connector.actions.length === 0 && (connector.triggers?.length ?? 0) === 0) {
187
+ return missing(requirement, "not_executable", `${connector.title} is catalog-only and cannot be invoked yet.`, connector, entry);
188
+ }
189
+ const scopes = requiredScopes(requirement, connector);
190
+ const actions = requiredActions(requirement, connector);
191
+ const triggers = requiredTriggers(requirement, connector);
192
+ const connection = connections.find(
193
+ (candidate) => sameActor(candidate.owner, owner) && candidate.status === "active" && (candidate.connectorId === connector.id || entry.aliases.includes(candidate.connectorId)) && scopes.every((scope) => candidate.grantedScopes.includes(scope))
194
+ );
195
+ if (!connection) {
196
+ return {
197
+ requirement,
198
+ status: "missing_connection",
199
+ connector,
200
+ registryEntry: entry,
201
+ missingScopes: scopes,
202
+ missingActions: actions,
203
+ missingTriggers: triggers,
204
+ message: `${connector.title} needs an active user connection with the required scopes.`
205
+ };
206
+ }
207
+ return {
208
+ requirement,
209
+ status: "ready",
210
+ connector,
211
+ registryEntry: entry,
212
+ connection,
213
+ missingScopes: [],
214
+ missingActions: [],
215
+ missingTriggers: [],
216
+ message: `${connector.title} is ready.`
217
+ };
218
+ }
219
+ function missing(requirement, status, message, connector, registryEntry) {
220
+ return {
221
+ requirement,
222
+ status,
223
+ connector,
224
+ registryEntry,
225
+ missingScopes: [],
226
+ missingActions: [],
227
+ missingTriggers: [],
228
+ message
229
+ };
230
+ }
231
+ function requiredActions(requirement, connector) {
232
+ if (requirement.mode === "trigger") return [];
233
+ if (requirement.requiredActions?.length) return unique(requirement.requiredActions);
234
+ const actions = connector.actions.filter((action) => {
235
+ if (requirement.mode === "read") return action.risk === "read";
236
+ if (requirement.mode === "write") return action.risk === "write";
237
+ return false;
238
+ });
239
+ return unique(actions.map((action) => action.id));
240
+ }
241
+ function requiredTriggers(requirement, connector) {
242
+ if (requirement.requiredTriggers?.length) return unique(requirement.requiredTriggers);
243
+ if (requirement.mode !== "trigger") return [];
244
+ return unique((connector.triggers ?? []).map((trigger) => trigger.id));
245
+ }
246
+ function requiredScopes(requirement, connector) {
247
+ if (requirement.requiredScopes?.length) return unique(requirement.requiredScopes);
248
+ const actionIds = new Set(requiredActions(requirement, connector));
249
+ const triggerIds = new Set(requiredTriggers(requirement, connector));
250
+ return unique([
251
+ ...connector.actions.filter((action) => actionIds.has(action.id)).flatMap((action) => action.requiredScopes),
252
+ ...(connector.triggers ?? []).filter((trigger) => triggerIds.has(trigger.id)).flatMap((trigger) => trigger.requiredScopes)
253
+ ]);
254
+ }
255
+ function sameActor(a, b) {
256
+ return a.type === b.type && a.id === b.id;
257
+ }
258
+ function unique(values) {
259
+ return [...new Set(values)];
260
+ }
261
+
262
+ export {
263
+ InMemoryIntegrationGrantStore,
264
+ IntegrationRuntime,
265
+ createIntegrationRuntime
266
+ };
267
+ //# sourceMappingURL=chunk-QVWTBQXP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime.ts"],"sourcesContent":["import {\n buildIntegrationToolCatalog,\n type IntegrationToolDefinition,\n} from './catalog.js'\nimport type {\n IntegrationActor,\n IntegrationConnection,\n IntegrationConnector,\n IssuedIntegrationCapability,\n} from './index.js'\nimport type {\n IntegrationRegistry,\n IntegrationRegistryEntry,\n} from './registry.js'\n\nexport type IntegrationRequirementMode = 'read' | 'write' | 'trigger'\nexport type IntegrationRequirementStatus = 'ready' | 'missing_connection' | 'not_executable' | 'unknown_connector'\n\nexport interface IntegrationRequirement {\n id: string\n connectorId: string\n reason: string\n mode: IntegrationRequirementMode\n requiredActions?: string[]\n requiredTriggers?: string[]\n requiredScopes?: string[]\n optional?: boolean\n}\n\nexport interface IntegrationManifest {\n id: string\n title?: string\n owner?: IntegrationActor\n requirements: IntegrationRequirement[]\n metadata?: Record<string, unknown>\n}\n\nexport interface IntegrationRequirementResolution {\n requirement: IntegrationRequirement\n status: IntegrationRequirementStatus\n connector?: IntegrationConnector\n registryEntry?: IntegrationRegistryEntry\n connection?: IntegrationConnection\n missingScopes: string[]\n missingActions: string[]\n missingTriggers: string[]\n message: string\n}\n\nexport interface IntegrationManifestResolution {\n manifest: IntegrationManifest\n owner: IntegrationActor\n ready: IntegrationRequirementResolution[]\n missing: IntegrationRequirementResolution[]\n optionalMissing: IntegrationRequirementResolution[]\n}\n\nexport interface IntegrationGrant {\n id: string\n manifestId: string\n requirementId: string\n owner: IntegrationActor\n grantee: IntegrationActor\n connectionId: string\n connectorId: string\n scopes: string[]\n allowedActions: string[]\n allowedTriggers: string[]\n status: 'active' | 'revoked'\n createdAt: string\n updatedAt: string\n metadata?: Record<string, unknown>\n}\n\nexport interface IntegrationGrantStore {\n get(grantId: string): Promise<IntegrationGrant | undefined> | IntegrationGrant | undefined\n put(grant: IntegrationGrant): Promise<void> | void\n listByManifest(manifestId: string, grantee?: IntegrationActor): Promise<IntegrationGrant[]> | IntegrationGrant[]\n listByGrantee(grantee: IntegrationActor): Promise<IntegrationGrant[]> | IntegrationGrant[]\n listByIds?(grantIds: string[]): Promise<IntegrationGrant[]> | IntegrationGrant[]\n delete?(grantId: string): Promise<void> | void\n}\n\nexport interface IntegrationCapabilityBinding {\n requirementId: string\n connectorId: string\n connectionId: string\n grantId: string\n scopes: string[]\n allowedActions: string[]\n allowedTriggers: string[]\n capability: IssuedIntegrationCapability\n}\n\nexport interface IntegrationSandboxBundle {\n manifestId: string\n subject: IntegrationActor\n capabilities: IntegrationCapabilityBinding[]\n connectors: IntegrationConnector[]\n tools: IntegrationToolDefinition[]\n expiresAt: string\n}\n\nexport interface IntegrationRuntimeHub {\n listRegistry(): Promise<IntegrationRegistry> | IntegrationRegistry\n listConnections(owner: IntegrationActor): Promise<IntegrationConnection[]> | IntegrationConnection[]\n getConnection(connectionId: string): Promise<IntegrationConnection | undefined> | IntegrationConnection | undefined\n issueCapability(input: {\n subject: IntegrationActor\n connectionId: string\n scopes: string[]\n allowedActions: string[]\n ttlMs: number\n metadata?: Record<string, unknown>\n }): Promise<IssuedIntegrationCapability> | IssuedIntegrationCapability\n}\n\nexport interface IntegrationRuntimeOptions {\n hub: IntegrationRuntimeHub\n grants?: IntegrationGrantStore\n now?: () => Date\n}\n\nexport class InMemoryIntegrationGrantStore implements IntegrationGrantStore {\n private readonly grants = new Map<string, IntegrationGrant>()\n\n get(grantId: string): IntegrationGrant | undefined {\n return this.grants.get(grantId)\n }\n\n put(grant: IntegrationGrant): void {\n this.grants.set(grant.id, grant)\n }\n\n listByManifest(manifestId: string, grantee?: IntegrationActor): IntegrationGrant[] {\n return [...this.grants.values()].filter((grant) =>\n grant.manifestId === manifestId && (!grantee || sameActor(grant.grantee, grantee))\n )\n }\n\n listByGrantee(grantee: IntegrationActor): IntegrationGrant[] {\n return [...this.grants.values()].filter((grant) => sameActor(grant.grantee, grantee))\n }\n\n listByIds(grantIds: string[]): IntegrationGrant[] {\n const wanted = new Set(grantIds)\n return [...this.grants.values()].filter((grant) => wanted.has(grant.id))\n }\n\n delete(grantId: string): void {\n this.grants.delete(grantId)\n }\n}\n\nexport class IntegrationRuntime {\n private readonly hub: IntegrationRuntimeHub\n private readonly grants: IntegrationGrantStore\n private readonly now: () => Date\n\n constructor(options: IntegrationRuntimeOptions) {\n this.hub = options.hub\n this.grants = options.grants ?? new InMemoryIntegrationGrantStore()\n this.now = options.now ?? (() => new Date())\n }\n\n async registry(): Promise<IntegrationRegistry> {\n return this.hub.listRegistry()\n }\n\n async resolveManifest(manifest: IntegrationManifest, owner: IntegrationActor): Promise<IntegrationManifestResolution> {\n const registry = await this.registry()\n const connections = await this.hub.listConnections(owner)\n const resolutions = manifest.requirements.map((requirement) =>\n resolveRequirement(requirement, owner, registry, connections),\n )\n return {\n manifest,\n owner,\n ready: resolutions.filter((resolution) => resolution.status === 'ready'),\n missing: resolutions.filter((resolution) => resolution.status !== 'ready' && !resolution.requirement.optional),\n optionalMissing: resolutions.filter((resolution) => resolution.status !== 'ready' && resolution.requirement.optional === true),\n }\n }\n\n async createGrants(input: {\n manifest: IntegrationManifest\n owner: IntegrationActor\n grantee: IntegrationActor\n metadata?: Record<string, unknown>\n }): Promise<IntegrationGrant[]> {\n const resolution = await this.resolveManifest(input.manifest, input.owner)\n if (resolution.missing.length > 0) {\n throw new Error(`Cannot create integration grants; missing requirements: ${resolution.missing.map((r) => r.requirement.id).join(', ')}`)\n }\n const now = this.now().toISOString()\n const grants = resolution.ready.map((ready): IntegrationGrant => ({\n id: `grant_${input.manifest.id}_${ready.requirement.id}_${ready.connection!.id}`,\n manifestId: input.manifest.id,\n requirementId: ready.requirement.id,\n owner: input.owner,\n grantee: input.grantee,\n connectionId: ready.connection!.id,\n connectorId: ready.connector!.id,\n scopes: requiredScopes(ready.requirement, ready.connector!),\n allowedActions: requiredActions(ready.requirement, ready.connector!),\n allowedTriggers: requiredTriggers(ready.requirement, ready.connector!),\n status: 'active',\n createdAt: now,\n updatedAt: now,\n metadata: input.metadata,\n }))\n for (const grant of grants) await this.grants.put(grant)\n return grants\n }\n\n async buildSandboxBundle(input: {\n manifestId?: string\n grantIds?: string[]\n owner: IntegrationActor\n subject: IntegrationActor\n ttlMs: number\n grantee?: IntegrationActor\n }): Promise<IntegrationSandboxBundle> {\n const grants = await this.resolveBundleGrants(input)\n if (grants.length === 0) {\n throw new Error('Cannot build integration bundle; no active integration grants matched the request.')\n }\n const registry = await this.registry()\n const bindings: IntegrationCapabilityBinding[] = []\n const connectors: IntegrationConnector[] = []\n let expiresAt = ''\n\n for (const grant of grants) {\n const connection = await this.hub.getConnection(grant.connectionId)\n if (!connection) {\n throw new Error(`Cannot build integration bundle; connection ${grant.connectionId} not found.`)\n }\n if (!sameActor(connection.owner, input.owner)) {\n throw new Error(`Cannot build integration bundle; connection ${connection.id} belongs to a different owner.`)\n }\n if (connection.status !== 'active') {\n throw new Error(`Cannot build integration bundle; connection ${connection.id} is ${connection.status}.`)\n }\n const entry = registry.byId.get(grant.connectorId)\n if (!entry) continue\n const connector = {\n ...entry.connector,\n actions: entry.connector.actions.filter((action) => grant.allowedActions.includes(action.id)),\n triggers: entry.connector.triggers?.filter((trigger) => grant.allowedTriggers.includes(trigger.id)),\n scopes: entry.connector.scopes.filter((scope) => grant.scopes.includes(scope)),\n }\n const capability = await this.hub.issueCapability({\n subject: input.subject,\n connectionId: grant.connectionId,\n scopes: grant.scopes,\n allowedActions: grant.allowedActions,\n ttlMs: input.ttlMs,\n metadata: {\n manifestId: grant.manifestId,\n grantId: grant.id,\n requirementId: grant.requirementId,\n },\n })\n bindings.push({\n requirementId: grant.requirementId,\n connectorId: grant.connectorId,\n connectionId: grant.connectionId,\n grantId: grant.id,\n scopes: grant.scopes,\n allowedActions: grant.allowedActions,\n allowedTriggers: grant.allowedTriggers,\n capability,\n })\n connectors.push(connector)\n expiresAt = capability.capability.expiresAt\n }\n\n return {\n manifestId: input.manifestId ?? grants[0]?.manifestId ?? 'explicit-grants',\n subject: input.subject,\n capabilities: bindings,\n connectors,\n tools: buildIntegrationToolCatalog(connectors),\n expiresAt,\n }\n }\n\n private async resolveBundleGrants(input: {\n manifestId?: string\n grantIds?: string[]\n owner: IntegrationActor\n grantee?: IntegrationActor\n }): Promise<IntegrationGrant[]> {\n if (input.grantIds?.length) {\n const uniqueGrantIds = unique(input.grantIds)\n const grants = this.grants.listByIds\n ? await this.grants.listByIds(uniqueGrantIds)\n : await Promise.all(uniqueGrantIds.map((grantId) => this.grants.get(grantId)))\n const found = grants.filter((grant): grant is IntegrationGrant => Boolean(grant))\n const foundIds = new Set(found.map((grant) => grant.id))\n const missing = uniqueGrantIds.filter((grantId) => !foundIds.has(grantId))\n if (missing.length > 0) {\n throw new Error(`Cannot build integration bundle; unknown grant id(s): ${missing.join(', ')}`)\n }\n const badOwner = found.find((grant) => !sameActor(grant.owner, input.owner))\n if (badOwner) {\n throw new Error(`Cannot build integration bundle; grant ${badOwner.id} belongs to a different owner.`)\n }\n const badGrantee = input.grantee\n ? found.find((grant) => !sameActor(grant.grantee, input.grantee!))\n : undefined\n if (badGrantee) {\n throw new Error(`Cannot build integration bundle; grant ${badGrantee.id} belongs to a different grantee.`)\n }\n const badManifest = input.manifestId\n ? found.find((grant) => grant.manifestId !== input.manifestId)\n : undefined\n if (badManifest) {\n throw new Error(`Cannot build integration bundle; grant ${badManifest.id} is not for manifest ${input.manifestId}.`)\n }\n const inactive = found.find((grant) => grant.status !== 'active')\n if (inactive) {\n throw new Error(`Cannot build integration bundle; grant ${inactive.id} is ${inactive.status}.`)\n }\n return found\n }\n if (!input.manifestId) {\n throw new Error('Cannot build integration bundle; manifestId or grantIds is required.')\n }\n return (await this.grants.listByManifest(input.manifestId, input.grantee))\n .filter((grant) => sameActor(grant.owner, input.owner))\n .filter((grant) => grant.status === 'active')\n }\n}\n\nexport function createIntegrationRuntime(options: IntegrationRuntimeOptions): IntegrationRuntime {\n return new IntegrationRuntime(options)\n}\n\nfunction resolveRequirement(\n requirement: IntegrationRequirement,\n owner: IntegrationActor,\n registry: IntegrationRegistry,\n connections: IntegrationConnection[],\n): IntegrationRequirementResolution {\n const entry = registry.byId.get(requirement.connectorId)\n if (!entry) {\n return missing(requirement, 'unknown_connector', `Unknown connector ${requirement.connectorId}.`)\n }\n const connector = entry.connector\n if (connector.actions.length === 0 && (connector.triggers?.length ?? 0) === 0) {\n return missing(requirement, 'not_executable', `${connector.title} is catalog-only and cannot be invoked yet.`, connector, entry)\n }\n const scopes = requiredScopes(requirement, connector)\n const actions = requiredActions(requirement, connector)\n const triggers = requiredTriggers(requirement, connector)\n const connection = connections.find((candidate) =>\n sameActor(candidate.owner, owner)\n && candidate.status === 'active'\n && (candidate.connectorId === connector.id || entry.aliases.includes(candidate.connectorId))\n && scopes.every((scope) => candidate.grantedScopes.includes(scope))\n )\n if (!connection) {\n return {\n requirement,\n status: 'missing_connection',\n connector,\n registryEntry: entry,\n missingScopes: scopes,\n missingActions: actions,\n missingTriggers: triggers,\n message: `${connector.title} needs an active user connection with the required scopes.`,\n }\n }\n return {\n requirement,\n status: 'ready',\n connector,\n registryEntry: entry,\n connection,\n missingScopes: [],\n missingActions: [],\n missingTriggers: [],\n message: `${connector.title} is ready.`,\n }\n}\n\nfunction missing(\n requirement: IntegrationRequirement,\n status: Exclude<IntegrationRequirementStatus, 'ready' | 'missing_connection'>,\n message: string,\n connector?: IntegrationConnector,\n registryEntry?: IntegrationRegistryEntry,\n): IntegrationRequirementResolution {\n return {\n requirement,\n status,\n connector,\n registryEntry,\n missingScopes: [],\n missingActions: [],\n missingTriggers: [],\n message,\n }\n}\n\nfunction requiredActions(requirement: IntegrationRequirement, connector: IntegrationConnector): string[] {\n if (requirement.mode === 'trigger') return []\n if (requirement.requiredActions?.length) return unique(requirement.requiredActions)\n const actions = connector.actions.filter((action) => {\n if (requirement.mode === 'read') return action.risk === 'read'\n if (requirement.mode === 'write') return action.risk === 'write'\n return false\n })\n return unique(actions.map((action) => action.id))\n}\n\nfunction requiredTriggers(requirement: IntegrationRequirement, connector: IntegrationConnector): string[] {\n if (requirement.requiredTriggers?.length) return unique(requirement.requiredTriggers)\n if (requirement.mode !== 'trigger') return []\n return unique((connector.triggers ?? []).map((trigger) => trigger.id))\n}\n\nfunction requiredScopes(requirement: IntegrationRequirement, connector: IntegrationConnector): string[] {\n if (requirement.requiredScopes?.length) return unique(requirement.requiredScopes)\n const actionIds = new Set(requiredActions(requirement, connector))\n const triggerIds = new Set(requiredTriggers(requirement, connector))\n return unique([\n ...connector.actions\n .filter((action) => actionIds.has(action.id))\n .flatMap((action) => action.requiredScopes),\n ...(connector.triggers ?? [])\n .filter((trigger) => triggerIds.has(trigger.id))\n .flatMap((trigger) => trigger.requiredScopes),\n ])\n}\n\nfunction sameActor(a: IntegrationActor, b: IntegrationActor): boolean {\n return a.type === b.type && a.id === b.id\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)]\n}\n"],"mappings":"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","names":["missing"]}
@@ -1,13 +1,16 @@
1
1
  import {
2
2
  buildIntegrationCoverageConnectors,
3
3
  listIntegrationCoverageSpecs
4
- } from "./chunk-TKEVCGAI.js";
4
+ } from "./chunk-MH4IEJCL.js";
5
5
  import {
6
6
  bundledApiKeyHint,
7
7
  bundledAuthMode,
8
8
  bundledOAuth2AuthContract,
9
9
  getBundledAdapterManifest
10
- } from "./chunk-E2QYXDJQ.js";
10
+ } from "./chunk-GIK6EXU2.js";
11
+ import {
12
+ canonicalIntegrationKind
13
+ } from "./chunk-ESY2FBBM.js";
11
14
 
12
15
  // src/specs/types.ts
13
16
  function specAuthToConnectorAuth(auth) {
@@ -224,34 +227,6 @@ function getIntegrationFamily(id) {
224
227
  return INTEGRATION_FAMILIES[id];
225
228
  }
226
229
 
227
- // src/integration-kind-aliases.ts
228
- var INTEGRATION_KIND_ALIASES = {
229
- "notion-database": "notion",
230
- "microsoft-onedrive": "onedrive",
231
- "microsoft-sharepoint": "sharepoint",
232
- "microsoft-excel": "microsoft-excel-365",
233
- "aws-s3": "amazon-s3",
234
- "outlook-calendar": "microsoft-calendar",
235
- "microsoft-outlook-calendar": "microsoft-calendar",
236
- "microsoft-outlook": "outlook-mail",
237
- "gmail-mail": "gmail",
238
- "google-pubsub": "gcloud-pubsub",
239
- bigquery: "google-bigquery",
240
- "slack-bolt": "slack",
241
- "help-scout": "helpscout",
242
- "mycase-piece": "mycase",
243
- jira: "jira-cloud",
244
- stripe: "stripe-pack",
245
- twilio: "twilio-sms",
246
- "twilio-voice": "twilio-sms",
247
- "telegram-bot": "telegram",
248
- "x-twitter": "twitter",
249
- scrapegrapghai: "scrapegraphai"
250
- };
251
- function canonicalIntegrationKind(kind) {
252
- return INTEGRATION_KIND_ALIASES[kind] ?? kind;
253
- }
254
-
255
230
  // src/specs/overrides.ts
256
231
  var INTEGRATION_OVERRIDES = {
257
232
  tiktok: {
@@ -1570,8 +1545,6 @@ function validateCredentialSet(spec, values) {
1570
1545
  }
1571
1546
 
1572
1547
  export {
1573
- INTEGRATION_KIND_ALIASES,
1574
- canonicalIntegrationKind,
1575
1548
  INTEGRATION_FAMILIES,
1576
1549
  getIntegrationFamily,
1577
1550
  listIntegrationSpecs,
@@ -1590,4 +1563,4 @@ export {
1590
1563
  validateCredentialFormat,
1591
1564
  validateCredentialSet
1592
1565
  };
1593
- //# sourceMappingURL=chunk-CONRYVPK.js.map
1566
+ //# sourceMappingURL=chunk-QWOX5SIM.js.map