@codeam/shared 2.61.65 → 2.61.67

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.mjs CHANGED
@@ -1065,11 +1065,12 @@ var INTEGRATION_REGISTRY = {
1065
1065
  name: "Figma",
1066
1066
  icon: "figma",
1067
1067
  category: "design",
1068
- // DARK pending Figma's OAuth-app review approval (submitted 2026-07-16).
1069
- // Figma OAuth apps do NOT exist publicly until review passes (authorize URL
1070
- // errors "OAuth app ... doesn't exist"). Backend provider + secrets are
1071
- // already deployed; flip to true once approved (bead codeagent-m4ix).
1072
- enabled: false,
1068
+ // LIVE. OAuth is the PRIMARY flow (app pending Figma's review until it
1069
+ // passes the authorize URL errors "OAuth app doesn't exist"), so a PAT
1070
+ // fallback (`apiKeyFallback`) ships alongside it and works TODAY: the user
1071
+ // pastes a Figma personal access token. Same OAuth-primary + PAT-secondary
1072
+ // shape as GitHub. Flip of the OAuth review is transparent (bead codeagent-m4ix).
1073
+ enabled: true,
1073
1074
  auth: {
1074
1075
  kind: "oauth_redirect",
1075
1076
  // Granular READ-ONLY scopes (legacy `files:read` is deprecated for
@@ -1083,7 +1084,25 @@ var INTEGRATION_REGISTRY = {
1083
1084
  "file_metadata:read",
1084
1085
  "file_dev_resources:read",
1085
1086
  "library_content:read"
1086
- ]
1087
+ ],
1088
+ // SECONDARY: paste a Figma personal access token instead of OAuth. The
1089
+ // PAT uses the `X-Figma-Token` header, so the delivery env var differs
1090
+ // from OAuth (`FIGMA_API_KEY` vs `FIGMA_OAUTH_TOKEN`) — hence its own
1091
+ // envMapping, used when the credential was linked via PAT.
1092
+ apiKeyFallback: {
1093
+ fields: [
1094
+ {
1095
+ key: "accessToken",
1096
+ label: "Figma personal access token",
1097
+ placeholder: "figd_\u2026",
1098
+ secret: true,
1099
+ help: "Figma \u2192 Settings \u2192 Security \u2192 Personal access tokens (read-only scopes)."
1100
+ }
1101
+ ],
1102
+ envMapping: {
1103
+ FIGMA_API_KEY: "accessToken"
1104
+ }
1105
+ }
1087
1106
  },
1088
1107
  delivery: {
1089
1108
  mcp: {
@@ -1431,6 +1450,92 @@ var INTEGRATION_REGISTRY = {
1431
1450
  staticEnv: { ATLASSIAN_OAUTH_ENABLE: "true" }
1432
1451
  }
1433
1452
  }
1453
+ },
1454
+ cloudflare: {
1455
+ id: "cloudflare",
1456
+ name: "Cloudflare",
1457
+ icon: "cloudflare",
1458
+ category: "deployment",
1459
+ // LIVE — Cloudflare self-managed OAuth (dash.cloudflare.com OAuth server,
1460
+ // the same one Wrangler uses). Confidential (Client Secret POST). The agent
1461
+ // inspects/deploys Workers, Pages, DNS, KV, R2 + reads analytics/logs on the
1462
+ // user's account. CLOUDFLARE_OAUTH_CLIENT_ID/SECRET/REDIRECT_URI in Secret
1463
+ // Manager (prod+dev); the backend CloudflareOAuthProvider is config-gated (503).
1464
+ enabled: true,
1465
+ auth: {
1466
+ kind: "oauth_redirect",
1467
+ // Cloudflare OAuth scope IDs == API-token permission-group names (dot
1468
+ // form, e.g. `workers-scripts.write`). ⚠️ MUST exactly match the scopes
1469
+ // configured on the OAuth client (b2b4b87e…). `offline_access` → refresh.
1470
+ scopes: [
1471
+ // Developer Platform (Workers / Pages / KV / R2 / D1 / observability)
1472
+ "d1.read",
1473
+ "page.read",
1474
+ "page.write",
1475
+ "workers-ci.read",
1476
+ "workers-ci.write",
1477
+ "containers.read",
1478
+ "containers.write",
1479
+ "workers-kv-storage.read",
1480
+ "workers-kv-storage.write",
1481
+ "workers-observability.read",
1482
+ "workers-observability-telemetry.write",
1483
+ "workers-observability.write",
1484
+ "r2-catalog.read",
1485
+ "r2-catalog.write",
1486
+ "r2-catalog-sql.read",
1487
+ "workers-r2-bucket-item.read",
1488
+ "workers-r2-bucket-item.write",
1489
+ "workers-r2.read",
1490
+ "workers-r2.write",
1491
+ "workers-routes.read",
1492
+ "workers-routes.write",
1493
+ "workers-scripts.read",
1494
+ "workers-scripts.write",
1495
+ "workers-tail.read",
1496
+ // DNS & Zones
1497
+ "account-dns-settings.read",
1498
+ "account-dns-settings.write",
1499
+ "dns-firewall.read",
1500
+ "dns-firewall.write",
1501
+ "dns.read",
1502
+ "dns-view.read",
1503
+ "dns.write",
1504
+ "registrar-domains.admin",
1505
+ "registrar-sandbox-domains.admin",
1506
+ "zone-dns-settings.read",
1507
+ "zone-dns-settings.write",
1508
+ "zone.read",
1509
+ "zone-settings.read",
1510
+ "zone-settings.write",
1511
+ // Analytics & Logs
1512
+ "account-analytics.read",
1513
+ "analytics.read",
1514
+ "account-logs.read",
1515
+ "logs.read",
1516
+ "radar.read",
1517
+ // Account & Billing
1518
+ "account-api-gateway.read",
1519
+ "account-settings.read",
1520
+ "memberships.read",
1521
+ "notifications.read",
1522
+ "user-details.read",
1523
+ "offline_access"
1524
+ ]
1525
+ },
1526
+ delivery: {
1527
+ mcp: {
1528
+ // Headless stdio Cloudflare MCP (Cloudflare API v4) — BYO token via env,
1529
+ // the OAuth access token works as a Bearer against api.cloudflare.com.
1530
+ // The account id is the discriminator for account-level ops. PINNED.
1531
+ command: "npx",
1532
+ args: ["-y", "@itunified.io/mcp-cloudflare@2026.4.10-1"],
1533
+ envMapping: {
1534
+ CLOUDFLARE_API_TOKEN: "accessToken",
1535
+ CLOUDFLARE_ACCOUNT_ID: "accountId"
1536
+ }
1537
+ }
1538
+ }
1434
1539
  }
1435
1540
  };
1436
1541
  function getEnabledIntegrations() {
@@ -1655,6 +1760,14 @@ var INTEGRATION_BRANDING = {
1655
1760
  brandColor: "#3FCF8E",
1656
1761
  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>'
1657
1762
  },
1763
+ cloudflare: {
1764
+ id: "cloudflare",
1765
+ name: "Cloudflare",
1766
+ vendor: "Cloudflare",
1767
+ tagline: "Workers, Pages, DNS & R2",
1768
+ brandColor: "#F6821F",
1769
+ 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>'
1770
+ },
1658
1771
  asana: {
1659
1772
  id: "asana",
1660
1773
  name: "Asana",
@@ -1730,7 +1843,6 @@ var INTEGRATION_BRANDING = {
1730
1843
  };
1731
1844
  var UPCOMING_INTEGRATION_IDS = [
1732
1845
  "gmail",
1733
- "figma",
1734
1846
  "asana",
1735
1847
  "stripe",
1736
1848
  "pendo",