@codeam/shared 2.61.66 → 2.61.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -351,7 +351,7 @@ declare function isHeadroomWrappable(agentId: string): boolean;
351
351
  * ubiquitous CLI for the tool → `cliEnv`; otherwise → `mcp`. A tool may
352
352
  * declare both.
353
353
  */
354
- type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion' | 'azure_devops' | 'figma' | 'microsoft_teams' | 'google_chat' | 'discord' | 'resend' | 'posthog' | 'datadog' | 'stitch' | 'github_issues' | 'github' | 'gitlab' | 'vercel' | 'trello' | 'clickup' | 'n8n' | 'postman' | 'mixpanel' | 'supabase' | 'confluence';
354
+ type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion' | 'azure_devops' | 'figma' | 'microsoft_teams' | 'google_chat' | 'discord' | 'resend' | 'posthog' | 'datadog' | 'stitch' | 'github_issues' | 'github' | 'gitlab' | 'vercel' | 'trello' | 'clickup' | 'n8n' | 'postman' | 'mixpanel' | 'supabase' | 'confluence' | 'cloudflare';
355
355
  /**
356
356
  * `derived` = no link flow of its own: the credential is BORROWED live from a
357
357
  * connection the user already made elsewhere (see `derivedFrom`). The backend
@@ -380,7 +380,7 @@ type DerivedCredentialSource = 'github';
380
380
  /** Grouping used by category-driven surfaces (Start-from-Work-Item picker,
381
381
  * catalog sections). A future tracker integration joins those features with
382
382
  * ZERO feature code — they resolve sources from the registry by category. */
383
- type IntegrationCategory = 'version_control' | 'tracker' | 'design' | 'comms' | 'docs' | 'observability' | 'deployment' | 'automation' | 'analytics' | 'api_tools' | 'database';
383
+ type IntegrationCategory = 'version_control' | 'tracker' | 'design' | 'comms' | 'docs' | 'observability' | 'infrastructure' | 'automation' | 'analytics' | 'api_tools' | 'database';
384
384
  /**
385
385
  * One user-entered field for an `api_key` integration (no browser OAuth — the
386
386
  * user pastes credentials directly, e.g. a PAT + an org URL). The mobile form
@@ -540,6 +540,11 @@ interface BrokeredIntegrationToken {
540
540
  secretKey?: string;
541
541
  /** Project/workspace id some analytics APIs require (Mixpanel project id). */
542
542
  projectId?: string;
543
+ /** Cloudflare account id — the Cloudflare MCP needs it alongside the OAuth
544
+ * access token (`CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_API_TOKEN`) for
545
+ * account-level operations. Captured at link time from `GET /accounts`.
546
+ * Absent for non-Cloudflare integrations. */
547
+ accountId?: string;
543
548
  }
544
549
 
545
550
  /**
package/dist/index.d.ts CHANGED
@@ -351,7 +351,7 @@ declare function isHeadroomWrappable(agentId: string): boolean;
351
351
  * ubiquitous CLI for the tool → `cliEnv`; otherwise → `mcp`. A tool may
352
352
  * declare both.
353
353
  */
354
- type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion' | 'azure_devops' | 'figma' | 'microsoft_teams' | 'google_chat' | 'discord' | 'resend' | 'posthog' | 'datadog' | 'stitch' | 'github_issues' | 'github' | 'gitlab' | 'vercel' | 'trello' | 'clickup' | 'n8n' | 'postman' | 'mixpanel' | 'supabase' | 'confluence';
354
+ type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion' | 'azure_devops' | 'figma' | 'microsoft_teams' | 'google_chat' | 'discord' | 'resend' | 'posthog' | 'datadog' | 'stitch' | 'github_issues' | 'github' | 'gitlab' | 'vercel' | 'trello' | 'clickup' | 'n8n' | 'postman' | 'mixpanel' | 'supabase' | 'confluence' | 'cloudflare';
355
355
  /**
356
356
  * `derived` = no link flow of its own: the credential is BORROWED live from a
357
357
  * connection the user already made elsewhere (see `derivedFrom`). The backend
@@ -380,7 +380,7 @@ type DerivedCredentialSource = 'github';
380
380
  /** Grouping used by category-driven surfaces (Start-from-Work-Item picker,
381
381
  * catalog sections). A future tracker integration joins those features with
382
382
  * ZERO feature code — they resolve sources from the registry by category. */
383
- type IntegrationCategory = 'version_control' | 'tracker' | 'design' | 'comms' | 'docs' | 'observability' | 'deployment' | 'automation' | 'analytics' | 'api_tools' | 'database';
383
+ type IntegrationCategory = 'version_control' | 'tracker' | 'design' | 'comms' | 'docs' | 'observability' | 'infrastructure' | 'automation' | 'analytics' | 'api_tools' | 'database';
384
384
  /**
385
385
  * One user-entered field for an `api_key` integration (no browser OAuth — the
386
386
  * user pastes credentials directly, e.g. a PAT + an org URL). The mobile form
@@ -540,6 +540,11 @@ interface BrokeredIntegrationToken {
540
540
  secretKey?: string;
541
541
  /** Project/workspace id some analytics APIs require (Mixpanel project id). */
542
542
  projectId?: string;
543
+ /** Cloudflare account id — the Cloudflare MCP needs it alongside the OAuth
544
+ * access token (`CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_API_TOKEN`) for
545
+ * account-level operations. Captured at link time from `GET /accounts`.
546
+ * Absent for non-Cloudflare integrations. */
547
+ accountId?: string;
543
548
  }
544
549
 
545
550
  /**
package/dist/index.js CHANGED
@@ -1244,7 +1244,7 @@ var INTEGRATION_REGISTRY = {
1244
1244
  id: "vercel",
1245
1245
  name: "Vercel",
1246
1246
  icon: "vercel",
1247
- category: "deployment",
1247
+ category: "infrastructure",
1248
1248
  // DARK — OAuth (PKCE public client). The user authorizes our registered
1249
1249
  // Vercel OAuth app; the access token calls Vercel's OFFICIAL hosted remote
1250
1250
  // MCP (mcp.vercel.com, Streamable HTTP) as a Bearer header — the SAME shim
@@ -1532,6 +1532,92 @@ var INTEGRATION_REGISTRY = {
1532
1532
  staticEnv: { ATLASSIAN_OAUTH_ENABLE: "true" }
1533
1533
  }
1534
1534
  }
1535
+ },
1536
+ cloudflare: {
1537
+ id: "cloudflare",
1538
+ name: "Cloudflare",
1539
+ icon: "cloudflare",
1540
+ category: "infrastructure",
1541
+ // LIVE — Cloudflare self-managed OAuth (dash.cloudflare.com OAuth server,
1542
+ // the same one Wrangler uses). Confidential (Client Secret POST). The agent
1543
+ // inspects/deploys Workers, Pages, DNS, KV, R2 + reads analytics/logs on the
1544
+ // user's account. CLOUDFLARE_OAUTH_CLIENT_ID/SECRET/REDIRECT_URI in Secret
1545
+ // Manager (prod+dev); the backend CloudflareOAuthProvider is config-gated (503).
1546
+ enabled: true,
1547
+ auth: {
1548
+ kind: "oauth_redirect",
1549
+ // Cloudflare OAuth scope IDs == API-token permission-group names (dot
1550
+ // form, e.g. `workers-scripts.write`). ⚠️ MUST exactly match the scopes
1551
+ // configured on the OAuth client (b2b4b87e…). `offline_access` → refresh.
1552
+ scopes: [
1553
+ // Developer Platform (Workers / Pages / KV / R2 / D1 / observability)
1554
+ "d1.read",
1555
+ "page.read",
1556
+ "page.write",
1557
+ "workers-ci.read",
1558
+ "workers-ci.write",
1559
+ "containers.read",
1560
+ "containers.write",
1561
+ "workers-kv-storage.read",
1562
+ "workers-kv-storage.write",
1563
+ "workers-observability.read",
1564
+ "workers-observability-telemetry.write",
1565
+ "workers-observability.write",
1566
+ "r2-catalog.read",
1567
+ "r2-catalog.write",
1568
+ "r2-catalog-sql.read",
1569
+ "workers-r2-bucket-item.read",
1570
+ "workers-r2-bucket-item.write",
1571
+ "workers-r2.read",
1572
+ "workers-r2.write",
1573
+ "workers-routes.read",
1574
+ "workers-routes.write",
1575
+ "workers-scripts.read",
1576
+ "workers-scripts.write",
1577
+ "workers-tail.read",
1578
+ // DNS & Zones
1579
+ "account-dns-settings.read",
1580
+ "account-dns-settings.write",
1581
+ "dns-firewall.read",
1582
+ "dns-firewall.write",
1583
+ "dns.read",
1584
+ "dns-view.read",
1585
+ "dns.write",
1586
+ "registrar-domains.admin",
1587
+ "registrar-sandbox-domains.admin",
1588
+ "zone-dns-settings.read",
1589
+ "zone-dns-settings.write",
1590
+ "zone.read",
1591
+ "zone-settings.read",
1592
+ "zone-settings.write",
1593
+ // Analytics & Logs
1594
+ "account-analytics.read",
1595
+ "analytics.read",
1596
+ "account-logs.read",
1597
+ "logs.read",
1598
+ "radar.read",
1599
+ // Account & Billing
1600
+ "account-api-gateway.read",
1601
+ "account-settings.read",
1602
+ "memberships.read",
1603
+ "notifications.read",
1604
+ "user-details.read",
1605
+ "offline_access"
1606
+ ]
1607
+ },
1608
+ delivery: {
1609
+ mcp: {
1610
+ // Headless stdio Cloudflare MCP (Cloudflare API v4) — BYO token via env,
1611
+ // the OAuth access token works as a Bearer against api.cloudflare.com.
1612
+ // The account id is the discriminator for account-level ops. PINNED.
1613
+ command: "npx",
1614
+ args: ["-y", "@itunified.io/mcp-cloudflare@2026.4.10-1"],
1615
+ envMapping: {
1616
+ CLOUDFLARE_API_TOKEN: "accessToken",
1617
+ CLOUDFLARE_ACCOUNT_ID: "accountId"
1618
+ }
1619
+ }
1620
+ }
1535
1621
  }
1536
1622
  };
1537
1623
  function getEnabledIntegrations() {
@@ -1756,6 +1842,14 @@ var INTEGRATION_BRANDING = {
1756
1842
  brandColor: "#3FCF8E",
1757
1843
  logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Supabase</title><path fill="#FFFFFF" d="M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z"/></svg>'
1758
1844
  },
1845
+ cloudflare: {
1846
+ id: "cloudflare",
1847
+ name: "Cloudflare",
1848
+ vendor: "Cloudflare",
1849
+ tagline: "Workers, Pages, DNS & R2",
1850
+ brandColor: "#F6821F",
1851
+ logoSvg: '<svg role="img" viewBox="0 0 460 271.2" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><title>Cloudflare</title><path fill="#FBAD41" d="M328.6,125.6c-0.8,0-1.5,0.6-1.8,1.4l-4.8,16.7c-2.1,7.2-1.3,13.8,2.2,18.7c3.2,4.5,8.6,7.1,15.1,7.4l26.2,1.6c0.8,0,1.5,0.4,1.9,1c0.4,0.6,0.5,1.5,0.3,2.2c-0.4,1.2-1.6,2.1-2.9,2.2l-27.3,1.6c-14.8,0.7-30.7,12.6-36.3,27.2l-2,5.1c-0.4,1,0.3,2,1.4,2h93.8c1.1,0,2.1-0.7,2.4-1.8c1.6-5.8,2.5-11.9,2.5-18.2c0-37-30.2-67.2-67.3-67.2C330.9,125.5,329.7,125.5,328.6,125.6z"/><path fill="#F6821F" d="M292.8,204.4c2.1-7.2,1.3-13.8-2.2-18.7c-3.2-4.5-8.6-7.1-15.1-7.4l-123.1-1.6c-0.8,0-1.5-0.4-1.9-1s-0.5-1.4-0.3-2.2c0.4-1.2,1.6-2.1,2.9-2.2l124.2-1.6c14.7-0.7,30.7-12.6,36.3-27.2l7.1-18.5c0.3-0.8,0.4-1.6,0.2-2.4c-8-36.2-40.3-63.2-78.9-63.2c-35.6,0-65.8,23-76.6,54.9c-7-5.2-15.9-8-25.5-7.1c-17.1,1.7-30.8,15.4-32.5,32.5c-0.4,4.4-0.1,8.7,0.9,12.7c-27.9,0.8-50.2,23.6-50.2,51.7c0,2.5,0.2,5,0.5,7.5c0.2,1.2,1.2,2.1,2.4,2.1h227.2c1.3,0,2.5-0.9,2.9-2.2L292.8,204.4z"/></svg>'
1852
+ },
1759
1853
  asana: {
1760
1854
  id: "asana",
1761
1855
  name: "Asana",