@cosmoops/connect-sdk 0.7.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/CHANGELOG.md +662 -0
  2. package/README.md +376 -124
  3. package/dist/cjs/cli/doctor.js +3 -3
  4. package/dist/cjs/cli/init.js +3 -3
  5. package/dist/cjs/client/components/access-gate.js +59 -5
  6. package/dist/cjs/client/components/ai-format.js +135 -0
  7. package/dist/cjs/client/components/ai-widgets.js +232 -0
  8. package/dist/cjs/client/components/app-shell.js +80 -45
  9. package/dist/cjs/client/components/apps-grid.js +3 -2
  10. package/dist/cjs/client/components/ask-ai.js +353 -0
  11. package/dist/cjs/client/components/confirm-dialog.js +40 -0
  12. package/dist/cjs/client/components/cursor-pagination.js +22 -0
  13. package/dist/cjs/client/components/filter-tabs.js +24 -0
  14. package/dist/cjs/client/components/grievance-notice.js +30 -0
  15. package/dist/cjs/client/components/link-button.js +17 -10
  16. package/dist/cjs/client/components/logo.js +4 -3
  17. package/dist/cjs/client/components/nav.js +42 -1
  18. package/dist/cjs/client/components/plan-pricing.js +27 -0
  19. package/dist/cjs/client/components/plans.js +1 -1
  20. package/dist/cjs/client/components/platform-gate.js +48 -0
  21. package/dist/cjs/client/components/shell-context.js +149 -0
  22. package/dist/cjs/client/components/side-nav.js +50 -24
  23. package/dist/cjs/client/components/sidebar.js +127 -0
  24. package/dist/cjs/client/components/subscribe-dialog.js +2 -2
  25. package/dist/cjs/client/components/subscription.js +1 -1
  26. package/dist/cjs/client/components/user-menu.js +122 -40
  27. package/dist/cjs/client/components/workspace-switcher.js +100 -0
  28. package/dist/cjs/client/components/workspace-type-gate.js +48 -0
  29. package/dist/cjs/client/index.js +98 -3
  30. package/dist/cjs/client/provider.js +100 -2
  31. package/dist/cjs/client/use-checkout.js +9 -5
  32. package/dist/cjs/errors.js +1 -1
  33. package/dist/cjs/index.js +11 -1
  34. package/dist/cjs/next/index.js +2 -2
  35. package/dist/cjs/server/client.js +25 -2
  36. package/dist/cjs/server/handler.js +237 -16
  37. package/dist/cjs/server/http.js +52 -26
  38. package/dist/cjs/server/resources/acting-as.js +16 -0
  39. package/dist/cjs/server/resources/ai.js +15 -2
  40. package/dist/cjs/server/resources/data.js +374 -0
  41. package/dist/cjs/server/resources/entitlements.js +41 -0
  42. package/dist/cjs/server/resources/identity.js +9 -3
  43. package/dist/cjs/server/resources/kv.js +84 -0
  44. package/dist/cjs/server/resources/platform.js +43 -0
  45. package/dist/cjs/server/resources/sessions.js +1 -1
  46. package/dist/cjs/server/resources/workspaces.js +74 -0
  47. package/dist/cjs/store.js +152 -0
  48. package/dist/cjs/ui/empty-state.js +28 -0
  49. package/dist/cjs/ui/index.js +44 -0
  50. package/dist/cjs/ui/page-header.js +27 -0
  51. package/dist/cjs/ui/page-shell.js +44 -0
  52. package/dist/cjs/ui/section.js +20 -0
  53. package/dist/cjs/ui/setting-row.js +14 -0
  54. package/dist/cjs/ui/status-chip.js +17 -0
  55. package/dist/esm/cli/doctor.js +3 -3
  56. package/dist/esm/cli/init.js +3 -3
  57. package/dist/esm/client/components/access-gate.js +60 -6
  58. package/dist/esm/client/components/ai-format.js +129 -0
  59. package/dist/esm/client/components/ai-widgets.js +223 -0
  60. package/dist/esm/client/components/app-shell.js +85 -50
  61. package/dist/esm/client/components/apps-grid.js +3 -2
  62. package/dist/esm/client/components/ask-ai.js +350 -0
  63. package/dist/esm/client/components/confirm-dialog.js +37 -0
  64. package/dist/esm/client/components/cursor-pagination.js +19 -0
  65. package/dist/esm/client/components/filter-tabs.js +21 -0
  66. package/dist/esm/client/components/grievance-notice.js +27 -0
  67. package/dist/esm/client/components/link-button.js +17 -10
  68. package/dist/esm/client/components/logo.js +4 -3
  69. package/dist/esm/client/components/nav.js +41 -1
  70. package/dist/esm/client/components/plan-pricing.js +25 -0
  71. package/dist/esm/client/components/plans.js +2 -2
  72. package/dist/esm/client/components/platform-gate.js +45 -0
  73. package/dist/esm/client/components/shell-context.js +141 -0
  74. package/dist/esm/client/components/side-nav.js +49 -22
  75. package/dist/esm/client/components/sidebar.js +120 -0
  76. package/dist/esm/client/components/subscribe-dialog.js +3 -3
  77. package/dist/esm/client/components/subscription.js +2 -2
  78. package/dist/esm/client/components/user-menu.js +121 -41
  79. package/dist/esm/client/components/workspace-switcher.js +97 -0
  80. package/dist/esm/client/components/workspace-type-gate.js +45 -0
  81. package/dist/esm/client/index.js +58 -5
  82. package/dist/esm/client/provider.js +94 -2
  83. package/dist/esm/client/use-checkout.js +9 -5
  84. package/dist/esm/errors.js +1 -1
  85. package/dist/esm/index.js +1 -0
  86. package/dist/esm/next/index.js +2 -2
  87. package/dist/esm/server/client.js +25 -2
  88. package/dist/esm/server/handler.js +237 -16
  89. package/dist/esm/server/http.js +52 -26
  90. package/dist/esm/server/resources/acting-as.js +13 -0
  91. package/dist/esm/server/resources/ai.js +15 -2
  92. package/dist/esm/server/resources/data.js +369 -0
  93. package/dist/esm/server/resources/entitlements.js +41 -0
  94. package/dist/esm/server/resources/identity.js +9 -3
  95. package/dist/esm/server/resources/kv.js +80 -0
  96. package/dist/esm/server/resources/platform.js +39 -0
  97. package/dist/esm/server/resources/sessions.js +1 -1
  98. package/dist/esm/server/resources/workspaces.js +70 -0
  99. package/dist/esm/store.js +141 -0
  100. package/dist/esm/ui/empty-state.js +25 -0
  101. package/dist/esm/ui/index.js +34 -0
  102. package/dist/esm/ui/page-header.js +24 -0
  103. package/dist/esm/ui/page-shell.js +41 -0
  104. package/dist/esm/ui/section.js +17 -0
  105. package/dist/esm/ui/setting-row.js +11 -0
  106. package/dist/esm/ui/status-chip.js +14 -0
  107. package/dist/theme.css +87 -0
  108. package/dist/types/client/components/access-gate.d.ts +17 -3
  109. package/dist/types/client/components/ai-format.d.ts +24 -0
  110. package/dist/types/client/components/ai-widgets.d.ts +42 -0
  111. package/dist/types/client/components/app-shell.d.ts +85 -31
  112. package/dist/types/client/components/apps-grid.d.ts +11 -2
  113. package/dist/types/client/components/ask-ai.d.ts +73 -0
  114. package/dist/types/client/components/confirm-dialog.d.ts +34 -0
  115. package/dist/types/client/components/cursor-pagination.d.ts +27 -0
  116. package/dist/types/client/components/filter-tabs.d.ts +26 -0
  117. package/dist/types/client/components/grievance-notice.d.ts +31 -0
  118. package/dist/types/client/components/link-button.d.ts +32 -9
  119. package/dist/types/client/components/logo.d.ts +18 -2
  120. package/dist/types/client/components/nav.d.ts +27 -3
  121. package/dist/types/client/components/plan-pricing.d.ts +10 -0
  122. package/dist/types/client/components/platform-gate.d.ts +53 -0
  123. package/dist/types/client/components/shell-context.d.ts +116 -0
  124. package/dist/types/client/components/side-nav.d.ts +28 -14
  125. package/dist/types/client/components/sidebar.d.ts +95 -0
  126. package/dist/types/client/components/user-menu.d.ts +70 -23
  127. package/dist/types/client/components/workspace-switcher.d.ts +49 -0
  128. package/dist/types/client/components/workspace-type-gate.d.ts +48 -0
  129. package/dist/types/client/index.d.ts +36 -7
  130. package/dist/types/client/provider.d.ts +149 -3
  131. package/dist/types/client/use-checkout.d.ts +8 -4
  132. package/dist/types/errors.d.ts +1 -1
  133. package/dist/types/index.d.ts +2 -0
  134. package/dist/types/next/index.d.ts +1 -1
  135. package/dist/types/server/client.d.ts +25 -2
  136. package/dist/types/server/http.d.ts +14 -3
  137. package/dist/types/server/index.d.ts +4 -0
  138. package/dist/types/server/resources/acting-as.d.ts +11 -0
  139. package/dist/types/server/resources/ai.d.ts +9 -1
  140. package/dist/types/server/resources/data.d.ts +258 -0
  141. package/dist/types/server/resources/entitlements.d.ts +33 -1
  142. package/dist/types/server/resources/kv.d.ts +63 -0
  143. package/dist/types/server/resources/platform.d.ts +32 -0
  144. package/dist/types/server/resources/workspaces.d.ts +55 -0
  145. package/dist/types/store.d.ts +96 -0
  146. package/dist/types/types.d.ts +491 -13
  147. package/dist/types/ui/empty-state.d.ts +34 -0
  148. package/dist/types/ui/index.d.ts +40 -0
  149. package/dist/types/ui/page-header.d.ts +34 -0
  150. package/dist/types/ui/page-shell.d.ts +39 -0
  151. package/dist/types/ui/section.d.ts +26 -0
  152. package/dist/types/ui/setting-row.d.ts +18 -0
  153. package/dist/types/ui/status-chip.d.ts +36 -0
  154. package/package.json +13 -3
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ConnectFeatureGate = exports.useConnectAccessGate = exports.ConnectAccessGate = exports.ConnectReadinessGate = exports.ConnectReadinessBanner = exports.resolveSubscriptionState = exports.ConnectSeatUsage = exports.ConnectTrialBanner = exports.ConnectSubscriptionCard = exports.ConnectNoSubscriptionCard = exports.ConnectSubscriptionGate = exports.ConnectSubscribeDialog = exports.ConnectPlans = exports.ConnectIntegrationsModal = exports.ConnectAppsGrid = exports.gateExemptPaths = exports.isNavItemActive = exports.resolveActivePath = exports.normalizePath = exports.flattenNav = exports.normalizeNav = exports.useActivePath = exports.ConnectSideNav = exports.ConnectAppShell = exports.ConnectAccountSessions = exports.ConnectSignOutButton = exports.ConnectHomeButton = exports.ConnectProfileButton = exports.ConnectInvoicesButton = exports.ConnectManageSubscriptionButton = exports.ConnectUserMenu = exports.ConnectRegisterButton = exports.ConnectLoginButton = exports.ConnectLogo = exports.ConnectMark = exports.isConnectError = exports.ConnectError = exports.normalizePlanFeatures = exports.blockingBlockers = exports.CONNECT_APP_URL = exports.useConnectResource = exports.useConnectIntegrations = exports.useConnectSessions = exports.useConnectAddonUsage = exports.useConnectApps = exports.useConnectPlans = exports.useConnectEntitlements = exports.useConnectUser = exports.useConnect = exports.ConnectProvider = void 0;
5
- exports.resolvePlanGroup = exports.groupPlansByTier = exports.ACTION_LABEL = exports.discountLabel = exports.annualSaving = exports.resolveAction = exports.monthlyOf = exports.formatPrice = exports.buildCheckoutUrl = exports.useConnectCheckout = exports.ConnectPlansPage = exports.ConnectUsageMeter = exports.useConnectFeature = void 0;
4
+ exports.normalizePath = exports.flattenNav = exports.normalizeNav = exports.useActivePath = exports.ConnectSideNav = exports.ConnectSidebarNav = exports.RAIL_EXPANDED = exports.RAIL_COLLAPSED = exports.sidebarRowClass = exports.useConnectShell = exports.ConnectShellProvider = exports.ConnectSidebarRow = exports.ConnectSidebarFooter = exports.ConnectSidebarBody = exports.ConnectSidebarHeader = exports.ConnectSidebar = exports.AppShell = exports.ConnectAccountSessions = exports.ConnectSignOutButton = exports.ConnectHomeButton = exports.ConnectProfileButton = exports.ConnectInvoicesButton = exports.ConnectManageSubscriptionButton = exports.ConnectUserMenu = exports.ConnectProfileModal = exports.ConnectUserButton = exports.ConnectRegisterButton = exports.ConnectLoginButton = exports.ConnectLogo = exports.ConnectMark = exports.ConnectGrievanceNotice = exports.isConnectError = exports.ConnectError = exports.normalizePlanFeatures = exports.blockingBlockers = exports.CONNECT_APP_URL = exports.useConnectResource = exports.useConnectIntegrations = exports.useConnectSessions = exports.useConnectAddonUsage = exports.useConnectCompanyProfile = exports.useConnectApps = exports.useConnectPlans = exports.useConnectEntitlements = exports.useConnectPlatformAccess = exports.useConnectAudience = exports.useConnectWorkspaceType = exports.useConnectUser = exports.useConnect = exports.ConnectProvider = void 0;
5
+ exports.ACTION_LABEL = exports.discountLabel = exports.annualSaving = exports.resolveAction = exports.monthlyOf = exports.formatPrice = exports.buildCheckoutUrl = exports.useConnectCheckout = exports.ConnectFilterTabs = exports.ConnectCursorPagination = exports.ConnectConfirmDialog = exports.ConnectLinkButton = exports.ConnectPlansPage = exports.ConnectUsageMeter = exports.ConnectPlatformGate = exports.ConnectWorkspaceTypeGate = exports.useConnectFeature = exports.ConnectFeatureGate = exports.useConnectAccessGate = exports.ConnectAccessGate = exports.ConnectReadinessGate = exports.ConnectReadinessBanner = exports.resolveSubscriptionState = exports.ConnectSeatUsage = exports.ConnectTrialBanner = exports.ConnectSubscriptionCard = exports.ConnectNoSubscriptionCard = exports.ConnectSubscriptionGate = exports.ConnectSubscribeDialog = exports.ConnectPlans = exports.ConnectIntegrationsModal = exports.AI_TONE_DOT = exports.AI_TONE_CHIP = exports.AI_EMPTY_VALUE = exports.aiStatusTone = exports.isNumericAiFormat = exports.formatAiValue = exports.AiSources = exports.AiSteps = exports.AiDetails = exports.AiTimeline = exports.AiMetrics = exports.AiChart = exports.AiTable = exports.ConnectAskAi = exports.ConnectAppsGrid = exports.filterNavForAudience = exports.gateExemptPaths = exports.isNavItemActive = exports.resolveActivePath = void 0;
6
+ exports.useConnectWorkspaceMembers = exports.useConnectWorkspaces = exports.ConnectWorkspaceSwitcher = exports.resolvePlanGroup = exports.groupPlansByTier = void 0;
6
7
  /**
7
8
  * Browser half of `@cosmoops/connect-sdk` - React components and hooks.
8
9
  *
@@ -19,9 +20,13 @@ var provider_js_1 = require("./provider.js");
19
20
  Object.defineProperty(exports, "ConnectProvider", { enumerable: true, get: function () { return provider_js_1.ConnectProvider; } });
20
21
  Object.defineProperty(exports, "useConnect", { enumerable: true, get: function () { return provider_js_1.useConnect; } });
21
22
  Object.defineProperty(exports, "useConnectUser", { enumerable: true, get: function () { return provider_js_1.useConnectUser; } });
23
+ Object.defineProperty(exports, "useConnectWorkspaceType", { enumerable: true, get: function () { return provider_js_1.useConnectWorkspaceType; } });
24
+ Object.defineProperty(exports, "useConnectAudience", { enumerable: true, get: function () { return provider_js_1.useConnectAudience; } });
25
+ Object.defineProperty(exports, "useConnectPlatformAccess", { enumerable: true, get: function () { return provider_js_1.useConnectPlatformAccess; } });
22
26
  Object.defineProperty(exports, "useConnectEntitlements", { enumerable: true, get: function () { return provider_js_1.useConnectEntitlements; } });
23
27
  Object.defineProperty(exports, "useConnectPlans", { enumerable: true, get: function () { return provider_js_1.useConnectPlans; } });
24
28
  Object.defineProperty(exports, "useConnectApps", { enumerable: true, get: function () { return provider_js_1.useConnectApps; } });
29
+ Object.defineProperty(exports, "useConnectCompanyProfile", { enumerable: true, get: function () { return provider_js_1.useConnectCompanyProfile; } });
25
30
  Object.defineProperty(exports, "useConnectAddonUsage", { enumerable: true, get: function () { return provider_js_1.useConnectAddonUsage; } });
26
31
  Object.defineProperty(exports, "useConnectSessions", { enumerable: true, get: function () { return provider_js_1.useConnectSessions; } });
27
32
  Object.defineProperty(exports, "useConnectIntegrations", { enumerable: true, get: function () { return provider_js_1.useConnectIntegrations; } });
@@ -36,6 +41,8 @@ Object.defineProperty(exports, "normalizePlanFeatures", { enumerable: true, get:
36
41
  var errors_js_1 = require("../errors.js");
37
42
  Object.defineProperty(exports, "ConnectError", { enumerable: true, get: function () { return errors_js_1.ConnectError; } });
38
43
  Object.defineProperty(exports, "isConnectError", { enumerable: true, get: function () { return errors_js_1.isConnectError; } });
44
+ var grievance_notice_js_1 = require("./components/grievance-notice.js");
45
+ Object.defineProperty(exports, "ConnectGrievanceNotice", { enumerable: true, get: function () { return grievance_notice_js_1.ConnectGrievanceNotice; } });
39
46
  var mark_js_1 = require("./mark.js");
40
47
  Object.defineProperty(exports, "ConnectMark", { enumerable: true, get: function () { return mark_js_1.ConnectMark; } });
41
48
  var logo_js_1 = require("./components/logo.js");
@@ -44,6 +51,9 @@ var auth_buttons_js_1 = require("./components/auth-buttons.js");
44
51
  Object.defineProperty(exports, "ConnectLoginButton", { enumerable: true, get: function () { return auth_buttons_js_1.ConnectLoginButton; } });
45
52
  Object.defineProperty(exports, "ConnectRegisterButton", { enumerable: true, get: function () { return auth_buttons_js_1.ConnectRegisterButton; } });
46
53
  var user_menu_js_1 = require("./components/user-menu.js");
54
+ Object.defineProperty(exports, "ConnectUserButton", { enumerable: true, get: function () { return user_menu_js_1.ConnectUserButton; } });
55
+ Object.defineProperty(exports, "ConnectProfileModal", { enumerable: true, get: function () { return user_menu_js_1.ConnectProfileModal; } });
56
+ /** @deprecated Renamed to `ConnectUserButton`. */
47
57
  Object.defineProperty(exports, "ConnectUserMenu", { enumerable: true, get: function () { return user_menu_js_1.ConnectUserMenu; } });
48
58
  Object.defineProperty(exports, "ConnectManageSubscriptionButton", { enumerable: true, get: function () { return user_menu_js_1.ConnectManageSubscriptionButton; } });
49
59
  Object.defineProperty(exports, "ConnectInvoicesButton", { enumerable: true, get: function () { return user_menu_js_1.ConnectInvoicesButton; } });
@@ -58,9 +68,37 @@ Object.defineProperty(exports, "ConnectAccountSessions", { enumerable: true, get
58
68
  // pieces it composes rather than in a section of its own - an integration
59
69
  // reaching for a sidebar wants to find the launcher and the account menu in
60
70
  // the same breath, since the shell already mounts both.
71
+ /*
72
+ * `AppShell`, deliberately without the `Connect` prefix every other export
73
+ * here carries. That exception was decided in 0.8.0 and is kept: a host whose
74
+ * own layout component is also called `AppShell` aliases it on import
75
+ * (`import { AppShell as ConnectAppShell }`), which is the documented answer
76
+ * and what both reference integrations do.
77
+ */
61
78
  var app_shell_js_1 = require("./components/app-shell.js");
62
- Object.defineProperty(exports, "ConnectAppShell", { enumerable: true, get: function () { return app_shell_js_1.ConnectAppShell; } });
79
+ Object.defineProperty(exports, "AppShell", { enumerable: true, get: function () { return app_shell_js_1.AppShell; } });
80
+ /*
81
+ * The rail, in pieces. `AppShell` composes exactly these and nothing
82
+ * else, which is the point of exporting them: an application whose chrome the
83
+ * prop API cannot express rebuilds the same rail from the same parts rather
84
+ * than forking it, and gets the collapse animation, the 32px glyph centre and
85
+ * the mobile drawer for free. They coordinate through `ConnectShellProvider`,
86
+ * so a part dropped in anywhere under one still knows the rail's state.
87
+ */
88
+ var sidebar_js_1 = require("./components/sidebar.js");
89
+ Object.defineProperty(exports, "ConnectSidebar", { enumerable: true, get: function () { return sidebar_js_1.ConnectSidebar; } });
90
+ Object.defineProperty(exports, "ConnectSidebarHeader", { enumerable: true, get: function () { return sidebar_js_1.ConnectSidebarHeader; } });
91
+ Object.defineProperty(exports, "ConnectSidebarBody", { enumerable: true, get: function () { return sidebar_js_1.ConnectSidebarBody; } });
92
+ Object.defineProperty(exports, "ConnectSidebarFooter", { enumerable: true, get: function () { return sidebar_js_1.ConnectSidebarFooter; } });
93
+ Object.defineProperty(exports, "ConnectSidebarRow", { enumerable: true, get: function () { return sidebar_js_1.ConnectSidebarRow; } });
94
+ var shell_context_js_1 = require("./components/shell-context.js");
95
+ Object.defineProperty(exports, "ConnectShellProvider", { enumerable: true, get: function () { return shell_context_js_1.ConnectShellProvider; } });
96
+ Object.defineProperty(exports, "useConnectShell", { enumerable: true, get: function () { return shell_context_js_1.useConnectShell; } });
97
+ Object.defineProperty(exports, "sidebarRowClass", { enumerable: true, get: function () { return shell_context_js_1.sidebarRowClass; } });
98
+ Object.defineProperty(exports, "RAIL_COLLAPSED", { enumerable: true, get: function () { return shell_context_js_1.RAIL_COLLAPSED; } });
99
+ Object.defineProperty(exports, "RAIL_EXPANDED", { enumerable: true, get: function () { return shell_context_js_1.RAIL_EXPANDED; } });
63
100
  var side_nav_js_1 = require("./components/side-nav.js");
101
+ Object.defineProperty(exports, "ConnectSidebarNav", { enumerable: true, get: function () { return side_nav_js_1.ConnectSidebarNav; } });
64
102
  Object.defineProperty(exports, "ConnectSideNav", { enumerable: true, get: function () { return side_nav_js_1.ConnectSideNav; } });
65
103
  var use_active_path_js_1 = require("./use-active-path.js");
66
104
  Object.defineProperty(exports, "useActivePath", { enumerable: true, get: function () { return use_active_path_js_1.useActivePath; } });
@@ -75,8 +113,33 @@ Object.defineProperty(exports, "normalizePath", { enumerable: true, get: functio
75
113
  Object.defineProperty(exports, "resolveActivePath", { enumerable: true, get: function () { return nav_js_1.resolveActivePath; } });
76
114
  Object.defineProperty(exports, "isNavItemActive", { enumerable: true, get: function () { return nav_js_1.isNavItemActive; } });
77
115
  Object.defineProperty(exports, "gateExemptPaths", { enumerable: true, get: function () { return nav_js_1.gateExemptPaths; } });
116
+ Object.defineProperty(exports, "filterNavForAudience", { enumerable: true, get: function () { return nav_js_1.filterNavForAudience; } });
78
117
  var apps_grid_js_1 = require("./components/apps-grid.js");
79
118
  Object.defineProperty(exports, "ConnectAppsGrid", { enumerable: true, get: function () { return apps_grid_js_1.ConnectAppsGrid; } });
119
+ // `AppShell askAi` mounts this; exported for an app that wants the panel
120
+ // without the frame, or wants it somewhere other than the shell's flex row
121
+ // (at which point it overlays rather than pushes - see its doc comment).
122
+ var ask_ai_js_1 = require("./components/ask-ai.js");
123
+ Object.defineProperty(exports, "ConnectAskAi", { enumerable: true, get: function () { return ask_ai_js_1.ConnectAskAi; } });
124
+ // The seven widgets an Ask AI answer can draw, and the formatter they share -
125
+ // exported so a partner rendering Connect's chat somewhere else entirely (a
126
+ // support console, an embedded assistant) gets the same table, chart and metric
127
+ // tiles rather than reimplementing them from the wire types.
128
+ var ai_widgets_js_1 = require("./components/ai-widgets.js");
129
+ Object.defineProperty(exports, "AiTable", { enumerable: true, get: function () { return ai_widgets_js_1.AiTable; } });
130
+ Object.defineProperty(exports, "AiChart", { enumerable: true, get: function () { return ai_widgets_js_1.AiChart; } });
131
+ Object.defineProperty(exports, "AiMetrics", { enumerable: true, get: function () { return ai_widgets_js_1.AiMetrics; } });
132
+ Object.defineProperty(exports, "AiTimeline", { enumerable: true, get: function () { return ai_widgets_js_1.AiTimeline; } });
133
+ Object.defineProperty(exports, "AiDetails", { enumerable: true, get: function () { return ai_widgets_js_1.AiDetails; } });
134
+ Object.defineProperty(exports, "AiSteps", { enumerable: true, get: function () { return ai_widgets_js_1.AiSteps; } });
135
+ Object.defineProperty(exports, "AiSources", { enumerable: true, get: function () { return ai_widgets_js_1.AiSources; } });
136
+ var ai_format_js_1 = require("./components/ai-format.js");
137
+ Object.defineProperty(exports, "formatAiValue", { enumerable: true, get: function () { return ai_format_js_1.formatAiValue; } });
138
+ Object.defineProperty(exports, "isNumericAiFormat", { enumerable: true, get: function () { return ai_format_js_1.isNumericAiFormat; } });
139
+ Object.defineProperty(exports, "aiStatusTone", { enumerable: true, get: function () { return ai_format_js_1.aiStatusTone; } });
140
+ Object.defineProperty(exports, "AI_EMPTY_VALUE", { enumerable: true, get: function () { return ai_format_js_1.AI_EMPTY_VALUE; } });
141
+ Object.defineProperty(exports, "AI_TONE_CHIP", { enumerable: true, get: function () { return ai_format_js_1.AI_TONE_CHIP; } });
142
+ Object.defineProperty(exports, "AI_TONE_DOT", { enumerable: true, get: function () { return ai_format_js_1.AI_TONE_DOT; } });
80
143
  var integrations_modal_js_1 = require("./components/integrations-modal.js");
81
144
  Object.defineProperty(exports, "ConnectIntegrationsModal", { enumerable: true, get: function () { return integrations_modal_js_1.ConnectIntegrationsModal; } });
82
145
  var plans_js_1 = require("./components/plans.js");
@@ -104,10 +167,37 @@ Object.defineProperty(exports, "useConnectAccessGate", { enumerable: true, get:
104
167
  var feature_gate_js_1 = require("./components/feature-gate.js");
105
168
  Object.defineProperty(exports, "ConnectFeatureGate", { enumerable: true, get: function () { return feature_gate_js_1.ConnectFeatureGate; } });
106
169
  Object.defineProperty(exports, "useConnectFeature", { enumerable: true, get: function () { return feature_gate_js_1.useConnectFeature; } });
170
+ var workspace_type_gate_js_1 = require("./components/workspace-type-gate.js");
171
+ Object.defineProperty(exports, "ConnectWorkspaceTypeGate", { enumerable: true, get: function () { return workspace_type_gate_js_1.ConnectWorkspaceTypeGate; } });
172
+ var platform_gate_js_1 = require("./components/platform-gate.js");
173
+ Object.defineProperty(exports, "ConnectPlatformGate", { enumerable: true, get: function () { return platform_gate_js_1.ConnectPlatformGate; } });
107
174
  var usage_meter_js_1 = require("./components/usage-meter.js");
108
175
  Object.defineProperty(exports, "ConnectUsageMeter", { enumerable: true, get: function () { return usage_meter_js_1.ConnectUsageMeter; } });
109
176
  var plans_page_js_1 = require("./components/plans-page.js");
110
177
  Object.defineProperty(exports, "ConnectPlansPage", { enumerable: true, get: function () { return plans_page_js_1.ConnectPlansPage; } });
178
+ /*
179
+ * The interactive half of the page-composition layer. Their presentational
180
+ * counterparts - `ConnectPageShell`, `ConnectSection`, `ConnectEmptyState`,
181
+ * `ConnectStatusChip`, `ConnectSettingRow` - live in
182
+ * `@cosmoops/connect-sdk/ui`, which is deliberately not a `"use client"`
183
+ * module so a page shell does not become a client boundary. These three hold
184
+ * state, so they belong here.
185
+ */
186
+ /*
187
+ * Built and compiled into `dist/` since 0.8 and reachable from no entry point
188
+ * until now - the same oversight `ConnectAccountSessions` had. It is the only
189
+ * supported way to render a link that looks like a button: HeroUI v3's
190
+ * `Button` has no `as` prop, so `<Button as={Link}>` neither type checks nor
191
+ * works.
192
+ */
193
+ var link_button_js_1 = require("./components/link-button.js");
194
+ Object.defineProperty(exports, "ConnectLinkButton", { enumerable: true, get: function () { return link_button_js_1.ConnectLinkButton; } });
195
+ var confirm_dialog_js_1 = require("./components/confirm-dialog.js");
196
+ Object.defineProperty(exports, "ConnectConfirmDialog", { enumerable: true, get: function () { return confirm_dialog_js_1.ConnectConfirmDialog; } });
197
+ var cursor_pagination_js_1 = require("./components/cursor-pagination.js");
198
+ Object.defineProperty(exports, "ConnectCursorPagination", { enumerable: true, get: function () { return cursor_pagination_js_1.ConnectCursorPagination; } });
199
+ var filter_tabs_js_1 = require("./components/filter-tabs.js");
200
+ Object.defineProperty(exports, "ConnectFilterTabs", { enumerable: true, get: function () { return filter_tabs_js_1.ConnectFilterTabs; } });
111
201
  var use_checkout_js_1 = require("./use-checkout.js");
112
202
  Object.defineProperty(exports, "useConnectCheckout", { enumerable: true, get: function () { return use_checkout_js_1.useConnectCheckout; } });
113
203
  Object.defineProperty(exports, "buildCheckoutUrl", { enumerable: true, get: function () { return use_checkout_js_1.buildCheckoutUrl; } });
@@ -125,3 +215,8 @@ Object.defineProperty(exports, "ACTION_LABEL", { enumerable: true, get: function
125
215
  // answer this, and `groupPlansByTier` is how to read it.
126
216
  Object.defineProperty(exports, "groupPlansByTier", { enumerable: true, get: function () { return plan_pricing_js_1.groupPlansByTier; } });
127
217
  Object.defineProperty(exports, "resolvePlanGroup", { enumerable: true, get: function () { return plan_pricing_js_1.resolvePlanGroup; } });
218
+ var workspace_switcher_js_1 = require("./components/workspace-switcher.js");
219
+ Object.defineProperty(exports, "ConnectWorkspaceSwitcher", { enumerable: true, get: function () { return workspace_switcher_js_1.ConnectWorkspaceSwitcher; } });
220
+ var provider_js_2 = require("./provider.js");
221
+ Object.defineProperty(exports, "useConnectWorkspaces", { enumerable: true, get: function () { return provider_js_2.useConnectWorkspaces; } });
222
+ Object.defineProperty(exports, "useConnectWorkspaceMembers", { enumerable: true, get: function () { return provider_js_2.useConnectWorkspaceMembers; } });
@@ -5,10 +5,16 @@ exports.CONNECT_APP_URL = void 0;
5
5
  exports.ConnectProvider = ConnectProvider;
6
6
  exports.useConnect = useConnect;
7
7
  exports.useConnectUser = useConnectUser;
8
+ exports.useConnectWorkspaceType = useConnectWorkspaceType;
9
+ exports.useConnectAudience = useConnectAudience;
10
+ exports.useConnectPlatformAccess = useConnectPlatformAccess;
8
11
  exports.useConnectEntitlements = useConnectEntitlements;
9
12
  exports.useConnectAddonUsage = useConnectAddonUsage;
10
13
  exports.useConnectPlans = useConnectPlans;
14
+ exports.useConnectCompanyProfile = useConnectCompanyProfile;
11
15
  exports.useConnectApps = useConnectApps;
16
+ exports.useConnectWorkspaces = useConnectWorkspaces;
17
+ exports.useConnectWorkspaceMembers = useConnectWorkspaceMembers;
12
18
  exports.useConnectIntegrations = useConnectIntegrations;
13
19
  exports.useConnectSessions = useConnectSessions;
14
20
  exports.useConnectResource = useConnectResource;
@@ -124,6 +130,20 @@ function ConnectProvider({ clientId = "", basePath = "/api/connect", redirectUri
124
130
  const invalidateResource = (0, react_1.useCallback)((path) => {
125
131
  cache.current.delete(`${basePath}${path}`);
126
132
  }, [basePath]);
133
+ const streamResource = (0, react_1.useCallback)(async (path, body, options) => {
134
+ const response = await (fetchImpl ?? globalThis.fetch)(`${basePath}${path}`, {
135
+ method: "POST",
136
+ credentials: "same-origin",
137
+ headers: { accept: "text/event-stream", "content-type": "application/json" },
138
+ body: JSON.stringify(body),
139
+ signal: options?.signal,
140
+ });
141
+ if (!response.ok) {
142
+ const envelope = await response.json().catch(() => null);
143
+ throw new Error(envelope?.error?.message ?? `Connect bridge returned ${response.status}`);
144
+ }
145
+ return response;
146
+ }, [basePath, fetchImpl]);
127
147
  const refresh = (0, react_1.useCallback)(async () => {
128
148
  cache.current.clear();
129
149
  try {
@@ -135,7 +155,7 @@ function ConnectProvider({ clientId = "", basePath = "/api/connect", redirectUri
135
155
  // error, so a Login button still renders rather than the UI hanging on
136
156
  // skeletons forever.
137
157
  setResult({
138
- session: { user: null, subscription: null, applicationRole: null },
158
+ session: { user: null, subscription: null, role: null, permissions: [], staff: false, audience: null },
139
159
  error: cause instanceof Error ? cause.message : "Could not reach Connect",
140
160
  });
141
161
  }
@@ -184,7 +204,7 @@ function ConnectProvider({ clientId = "", basePath = "/api/connect", redirectUri
184
204
  credentials: "same-origin",
185
205
  }).catch(() => { });
186
206
  cache.current.clear();
187
- setResult({ session: { user: null, subscription: null, applicationRole: null }, error: null });
207
+ setResult({ session: { user: null, subscription: null, role: null, permissions: [], staff: false, audience: null }, error: null });
188
208
  }, [basePath, fetchImpl]);
189
209
  const value = (0, react_1.useMemo)(() => ({
190
210
  clientId,
@@ -198,6 +218,7 @@ function ConnectProvider({ clientId = "", basePath = "/api/connect", redirectUri
198
218
  fetchResource,
199
219
  mutateResource,
200
220
  invalidateResource,
221
+ streamResource,
201
222
  }), [
202
223
  clientId,
203
224
  appUrl,
@@ -210,6 +231,7 @@ function ConnectProvider({ clientId = "", basePath = "/api/connect", redirectUri
210
231
  fetchResource,
211
232
  mutateResource,
212
233
  invalidateResource,
234
+ streamResource,
213
235
  ]);
214
236
  return (0, jsx_runtime_1.jsx)(ConnectContext.Provider, { value: value, children: children });
215
237
  }
@@ -224,6 +246,51 @@ function useConnect() {
224
246
  function useConnectUser() {
225
247
  return useConnect().session?.user ?? null;
226
248
  }
249
+ /**
250
+ * Whether the signed-in workspace is a one-seat personal account or a team -
251
+ * `null` while the session is loading or signed out.
252
+ *
253
+ * Branch on this to stop rendering team UI at a solo account: a members
254
+ * table, an invite button and a seat meter are all dead controls on an
255
+ * `"individual"` workspace, which has exactly one seat and cannot gain
256
+ * another. `<ConnectWorkspaceTypeGate>` is the declarative form.
257
+ */
258
+ function useConnectWorkspaceType() {
259
+ return useConnect().session?.user?.workspaceType ?? null;
260
+ }
261
+ /**
262
+ * Whether this account is the kind your application is sold to - `null` while
263
+ * the session is loading or signed out.
264
+ *
265
+ * `audience.matches === false` is a hard block, not a hint: readiness reports
266
+ * `audience_mismatch` and subscribing is refused. `<ConnectAccessGate>`
267
+ * already blocks the shell on it, so reach for this only when you need the
268
+ * verdict somewhere the gate does not run - a marketing page, say, or a
269
+ * sign-up CTA you would rather not show to an account that cannot complete it.
270
+ */
271
+ function useConnectAudience() {
272
+ return useConnect().session?.audience ?? null;
273
+ }
274
+ /**
275
+ * Whether this session is one of Connect's own operators - see
276
+ * `SessionAccess.staff`.
277
+ *
278
+ * `isStaff` is the branch you want; `roles` narrows further when your operator
279
+ * console has tiers of its own (a `developer` seeing a read-only view of what
280
+ * a `platform_admin` can edit, say).
281
+ *
282
+ * **A rendering decision, not an access decision.** The browser can call this
283
+ * whatever it likes. Everything an operator console exposes must be re-checked
284
+ * server-side against `staff` from
285
+ * `client.identity.getUser(sessionToken)` - see `<ConnectPlatformGate>`, which
286
+ * says the same thing at more length.
287
+ */
288
+ function useConnectPlatformAccess() {
289
+ const { session, isLoading } = useConnect();
290
+ const staff = session?.staff === true;
291
+ const role = session?.role ?? null;
292
+ return { isStaff: staff, roles: staff && role ? [role] : [], isLoading };
293
+ }
227
294
  /** Readiness gates and the live subscription, fetched on first use. */
228
295
  function useConnectEntitlements() {
229
296
  return useConnectResource("/entitlements");
@@ -242,10 +309,41 @@ function useConnectAddonUsage() {
242
309
  function useConnectPlans() {
243
310
  return useConnectResource("/plans");
244
311
  }
312
+ /**
313
+ * The platform's legal identity and DPDP grievance channel.
314
+ *
315
+ * The one read here that does not depend on a session, so it resolves the
316
+ * same for a signed-out visitor - which is deliberate, because the moment a
317
+ * grievance channel most needs to be readable is on a public privacy page.
318
+ *
319
+ * Read it rather than copying it into your own configuration; see
320
+ * `CompanyProfile`. `<ConnectGrievanceNotice>` renders it for you.
321
+ */
322
+ function useConnectCompanyProfile() {
323
+ return useConnectResource("/company-profile");
324
+ }
245
325
  /** The apps this workspace can open. */
246
326
  function useConnectApps() {
247
327
  return useConnectResource("/apps");
248
328
  }
329
+ /**
330
+ * The workspaces this user belongs to - what `<ConnectWorkspaceSwitcher>`
331
+ * renders.
332
+ *
333
+ * Empty or single-entry results are normal, not errors: most accounts have one
334
+ * workspace, and the switcher decides for itself whether that is worth
335
+ * drawing.
336
+ */
337
+ function useConnectWorkspaces() {
338
+ return useConnectResource("/workspaces");
339
+ }
340
+ /**
341
+ * The team of the workspace this session is on, with each member's permissions
342
+ * already resolved for this application.
343
+ */
344
+ function useConnectWorkspaceMembers() {
345
+ return useConnectResource("/workspaces/members");
346
+ }
249
347
  /** Enabled Composio-hosted toolkits and this workspace's connection status for each. */
250
348
  function useConnectIntegrations() {
251
349
  return useConnectResource("/integrations");
@@ -157,15 +157,19 @@ function buildCancelUrl({ appUrl, subscriptionId }) {
157
157
  * The Connect URL that completes a subscribe or a plan change.
158
158
  *
159
159
  * Both land on a modal Connect renders over the relevant page (an intercepted
160
- * parallel route - `app/@modal/(.)applications/...` and
161
- * `app/@modal/(.)billing/...`), so the customer arrives already looking at the
162
- * confirmation for the plan they picked here, not at a catalogue they have to
163
- * find it in again.
160
+ * parallel route - `app/@modal/(.)apps/...` and `app/@modal/(.)billing/...`),
161
+ * so the customer arrives already looking at the confirmation for the plan
162
+ * they picked here, not at a catalogue they have to find it in again.
163
+ *
164
+ * The subscribe path is `/apps/...`, not `/applications/...`: the portal
165
+ * route customers see is `/apps`, and `/applications` is a Console-only
166
+ * prefix that has never served this page. Building the other one is what
167
+ * sent every first-time subscriber from a partner's pricing page to a 404.
164
168
  */
165
169
  function buildCheckoutUrl({ appUrl, applicationId, planId, subscriptionId, coupon, }) {
166
170
  const path = subscriptionId
167
171
  ? `/billing/subscriptions/${encodeURIComponent(subscriptionId)}/change-plan/${encodeURIComponent(planId)}`
168
- : `/applications/${encodeURIComponent(applicationId)}/subscribe/${encodeURIComponent(planId)}`;
172
+ : `/apps/${encodeURIComponent(applicationId)}/subscribe/${encodeURIComponent(planId)}`;
169
173
  const url = new URL(path, appUrl);
170
174
  if (coupon?.trim())
171
175
  url.searchParams.set("coupon", coupon.trim());
@@ -59,7 +59,7 @@ class ConnectError extends Error {
59
59
  * guessing keys. These two are the exception: reaching them required
60
60
  * presenting a key whose hash matched, so you already hold it, and what you
61
61
  * need to know is that no retry and no scope change will fix this - the key
62
- * has to be reissued from the application's Integration tab.
62
+ * has to be reissued from the application's Connect client section.
63
63
  *
64
64
  * Worth alerting on. It is the one failure that will not resolve itself and
65
65
  * takes down every call your integration makes.
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizePlanFeatures = exports.blockingBlockers = exports.isConnectError = exports.ConnectError = void 0;
3
+ exports.unchangedSince = exports.storeIndexSignature = exports.storeIndexFor = exports.serverTimestamp = exports.increment = exports.documentExists = exports.deleteField = exports.arrayUnion = exports.arrayRemove = exports.normalizePlanFeatures = exports.blockingBlockers = exports.isConnectError = exports.ConnectError = void 0;
4
4
  /**
5
5
  * `@cosmoops/connect-sdk` - the official client for the CosmoOps Connect
6
6
  * **application-partner API** (`/api/v1/application/*`).
@@ -20,3 +20,13 @@ Object.defineProperty(exports, "isConnectError", { enumerable: true, get: functi
20
20
  var helpers_js_1 = require("./helpers.js");
21
21
  Object.defineProperty(exports, "blockingBlockers", { enumerable: true, get: function () { return helpers_js_1.blockingBlockers; } });
22
22
  Object.defineProperty(exports, "normalizePlanFeatures", { enumerable: true, get: function () { return helpers_js_1.normalizePlanFeatures; } });
23
+ var store_js_1 = require("./store.js");
24
+ Object.defineProperty(exports, "arrayRemove", { enumerable: true, get: function () { return store_js_1.arrayRemove; } });
25
+ Object.defineProperty(exports, "arrayUnion", { enumerable: true, get: function () { return store_js_1.arrayUnion; } });
26
+ Object.defineProperty(exports, "deleteField", { enumerable: true, get: function () { return store_js_1.deleteField; } });
27
+ Object.defineProperty(exports, "documentExists", { enumerable: true, get: function () { return store_js_1.documentExists; } });
28
+ Object.defineProperty(exports, "increment", { enumerable: true, get: function () { return store_js_1.increment; } });
29
+ Object.defineProperty(exports, "serverTimestamp", { enumerable: true, get: function () { return store_js_1.serverTimestamp; } });
30
+ Object.defineProperty(exports, "storeIndexFor", { enumerable: true, get: function () { return store_js_1.storeIndexFor; } });
31
+ Object.defineProperty(exports, "storeIndexSignature", { enumerable: true, get: function () { return store_js_1.storeIndexSignature; } });
32
+ Object.defineProperty(exports, "unchangedSince", { enumerable: true, get: function () { return store_js_1.unchangedSince; } });
@@ -82,7 +82,7 @@ const handler_js_1 = require("../server/handler.js");
82
82
  * | `CONNECT_SESSION_COOKIE` | no | session cookie name |
83
83
  *
84
84
  * Register `{your origin}/api/connect/callback` as a redirect URI in the
85
- * application's Integration tab. That is the only step this cannot do for you.
85
+ * application's Connect client section. That is the only step this cannot do for you.
86
86
  *
87
87
  * No `next.config.ts` changes needed either, including `transpilePackages`:
88
88
  * `dist/` is already ES2022 with `"use client"` hoisted to the top of every
@@ -317,7 +317,7 @@ async function getConnectSession(request, options = {}) {
317
317
  * A thin wrapper, not a framework of its own - reach for `getConnectSession`
318
318
  * plus your own check when "not signed in" isn't "redirect to sign-in"
319
319
  * (an API route returning 401, say). Role and entitlement checks stay
320
- * outside this function on purpose: `session.applicationRole.granted` and
320
+ * outside this function on purpose: `session.permissions` and
321
321
  * `connect.entitlements.*` are one line each on top of the session this
322
322
  * already gives you, and where that line redirects (a plans page, a
323
323
  * "forbidden" screen) is a decision only your app can make - see
@@ -4,6 +4,9 @@ exports.SDK_VERSION = exports.ConnectClient = exports.DEFAULT_BASE_URL = void 0;
4
4
  const access_js_1 = require("./resources/access.js");
5
5
  const apps_js_1 = require("./resources/apps.js");
6
6
  const ai_js_1 = require("./resources/ai.js");
7
+ const data_js_1 = require("./resources/data.js");
8
+ const workspaces_js_1 = require("./resources/workspaces.js");
9
+ const kv_js_1 = require("./resources/kv.js");
7
10
  const billing_js_1 = require("./resources/billing.js");
8
11
  const drive_js_1 = require("./resources/drive.js");
9
12
  const entitlements_js_1 = require("./resources/entitlements.js");
@@ -13,6 +16,7 @@ const logs_js_1 = require("./resources/logs.js");
13
16
  const analytics_js_1 = require("./resources/analytics.js");
14
17
  const otp_js_1 = require("./resources/otp.js");
15
18
  const sessions_js_1 = require("./resources/sessions.js");
19
+ const platform_js_1 = require("./resources/platform.js");
16
20
  exports.DEFAULT_BASE_URL = "https://connect.cosmoops.com";
17
21
  const APPLICATION_API_PREFIX = "/api/v1/application";
18
22
  /**
@@ -77,6 +81,10 @@ class ConnectClient {
77
81
  drive;
78
82
  /** RAG chat and structured extraction. */
79
83
  ai;
84
+ /** Your application's own document store - see `DataResource`. */
85
+ data;
86
+ /** Your application's key/value store - see `KvResource`. */
87
+ kv;
80
88
  /** WhatsApp/SMS phone verification. */
81
89
  otp;
82
90
  /** Feature events into the Console's audit log, filterable to your application. */
@@ -87,10 +95,20 @@ class ConnectClient {
87
95
  sessions;
88
96
  /** Composio-hosted third-party connections (Google Calendar, Slack, ...) a workspace has connected. */
89
97
  integrations;
98
+ /** Which workspaces the signed-in user belongs to, switching between them, and the team - see `WorkspacesResource`. */
99
+ workspaces;
100
+ /** The platform's own legal identity and DPDP grievance channel - see `PlatformResource`. */
101
+ platform;
102
+ /**
103
+ * Relays one `/data/*` or `/kv/*` request verbatim - `createConnectHandler`'s
104
+ * store route and nothing else. See `storePassthrough`.
105
+ * @internal
106
+ */
107
+ storeRelay;
90
108
  constructor(options) {
91
109
  assertNotBrowser();
92
110
  if (!options.apiKey) {
93
- throw new TypeError("ConnectClient requires `apiKey` - the plaintext shown once in the Integration tab.");
111
+ throw new TypeError("ConnectClient requires `apiKey` - the plaintext shown once in the Connect client section.");
94
112
  }
95
113
  const appBaseUrl = (options.baseUrl ?? exports.DEFAULT_BASE_URL).replace(/\/+$/, "");
96
114
  const transport = {
@@ -110,13 +128,18 @@ class ConnectClient {
110
128
  this.billing = new billing_js_1.BillingResource(transport);
111
129
  this.drive = new drive_js_1.DriveResource(transport);
112
130
  this.ai = new ai_js_1.AiResource(transport);
131
+ this.data = new data_js_1.DataResource(transport);
132
+ this.kv = new kv_js_1.KvResource(transport);
113
133
  this.otp = new otp_js_1.OtpResource(transport);
114
134
  this.logs = new logs_js_1.LogsResource(transport);
115
135
  this.analytics = new analytics_js_1.AnalyticsResource(transport);
116
136
  this.sessions = new sessions_js_1.SessionsResource(transport, options.clientId ?? null);
117
137
  this.integrations = new integrations_js_1.IntegrationsResource(transport);
138
+ this.workspaces = new workspaces_js_1.WorkspacesResource(transport);
139
+ this.platform = new platform_js_1.PlatformResource(transport);
140
+ this.storeRelay = (spec) => (0, data_js_1.storePassthrough)(transport, spec);
118
141
  }
119
142
  }
120
143
  exports.ConnectClient = ConnectClient;
121
144
  /** Kept in step with `package.json` by `sdk.test.ts`. */
122
- exports.SDK_VERSION = "0.7.0";
145
+ exports.SDK_VERSION = "0.14.0";