@cosmoops/connect-sdk 0.9.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.
- package/CHANGELOG.md +497 -0
- package/README.md +111 -41
- package/dist/cjs/cli/doctor.js +3 -3
- package/dist/cjs/cli/init.js +3 -3
- package/dist/cjs/client/components/access-gate.js +20 -1
- package/dist/cjs/client/components/app-shell.js +75 -41
- package/dist/cjs/client/components/apps-grid.js +3 -2
- package/dist/cjs/client/components/ask-ai.js +20 -1
- package/dist/cjs/client/components/confirm-dialog.js +40 -0
- package/dist/cjs/client/components/cursor-pagination.js +22 -0
- package/dist/cjs/client/components/filter-tabs.js +24 -0
- package/dist/cjs/client/components/grievance-notice.js +30 -0
- package/dist/cjs/client/components/link-button.js +17 -10
- package/dist/cjs/client/components/logo.js +4 -3
- package/dist/cjs/client/components/nav.js +41 -0
- package/dist/cjs/client/components/plan-pricing.js +27 -0
- package/dist/cjs/client/components/plans.js +1 -1
- package/dist/cjs/client/components/platform-gate.js +48 -0
- package/dist/cjs/client/components/shell-context.js +149 -0
- package/dist/cjs/client/components/side-nav.js +49 -23
- package/dist/cjs/client/components/sidebar.js +127 -0
- package/dist/cjs/client/components/subscribe-dialog.js +2 -2
- package/dist/cjs/client/components/subscription.js +1 -1
- package/dist/cjs/client/components/user-menu.js +96 -37
- package/dist/cjs/client/components/workspace-switcher.js +100 -0
- package/dist/cjs/client/index.js +69 -2
- package/dist/cjs/client/provider.js +57 -2
- package/dist/cjs/client/use-checkout.js +9 -5
- package/dist/cjs/errors.js +1 -1
- package/dist/cjs/index.js +11 -1
- package/dist/cjs/next/index.js +2 -2
- package/dist/cjs/server/client.js +25 -2
- package/dist/cjs/server/handler.js +196 -18
- package/dist/cjs/server/http.js +6 -2
- package/dist/cjs/server/resources/acting-as.js +16 -0
- package/dist/cjs/server/resources/ai.js +15 -2
- package/dist/cjs/server/resources/data.js +374 -0
- package/dist/cjs/server/resources/identity.js +7 -3
- package/dist/cjs/server/resources/kv.js +84 -0
- package/dist/cjs/server/resources/platform.js +43 -0
- package/dist/cjs/server/resources/sessions.js +1 -1
- package/dist/cjs/server/resources/workspaces.js +74 -0
- package/dist/cjs/store.js +152 -0
- package/dist/cjs/ui/empty-state.js +28 -0
- package/dist/cjs/ui/index.js +44 -0
- package/dist/cjs/ui/page-header.js +27 -0
- package/dist/cjs/ui/page-shell.js +44 -0
- package/dist/cjs/ui/section.js +20 -0
- package/dist/cjs/ui/setting-row.js +14 -0
- package/dist/cjs/ui/status-chip.js +17 -0
- package/dist/esm/cli/doctor.js +3 -3
- package/dist/esm/cli/init.js +3 -3
- package/dist/esm/client/components/access-gate.js +20 -1
- package/dist/esm/client/components/app-shell.js +81 -47
- package/dist/esm/client/components/apps-grid.js +3 -2
- package/dist/esm/client/components/ask-ai.js +20 -1
- package/dist/esm/client/components/confirm-dialog.js +37 -0
- package/dist/esm/client/components/cursor-pagination.js +19 -0
- package/dist/esm/client/components/filter-tabs.js +21 -0
- package/dist/esm/client/components/grievance-notice.js +27 -0
- package/dist/esm/client/components/link-button.js +17 -10
- package/dist/esm/client/components/logo.js +4 -3
- package/dist/esm/client/components/nav.js +40 -0
- package/dist/esm/client/components/plan-pricing.js +25 -0
- package/dist/esm/client/components/plans.js +2 -2
- package/dist/esm/client/components/platform-gate.js +45 -0
- package/dist/esm/client/components/shell-context.js +141 -0
- package/dist/esm/client/components/side-nav.js +48 -21
- package/dist/esm/client/components/sidebar.js +120 -0
- package/dist/esm/client/components/subscribe-dialog.js +3 -3
- package/dist/esm/client/components/subscription.js +2 -2
- package/dist/esm/client/components/user-menu.js +95 -38
- package/dist/esm/client/components/workspace-switcher.js +97 -0
- package/dist/esm/client/index.js +46 -4
- package/dist/esm/client/provider.js +53 -2
- package/dist/esm/client/use-checkout.js +9 -5
- package/dist/esm/errors.js +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/next/index.js +2 -2
- package/dist/esm/server/client.js +25 -2
- package/dist/esm/server/handler.js +196 -18
- package/dist/esm/server/http.js +6 -2
- package/dist/esm/server/resources/acting-as.js +13 -0
- package/dist/esm/server/resources/ai.js +15 -2
- package/dist/esm/server/resources/data.js +369 -0
- package/dist/esm/server/resources/identity.js +7 -3
- package/dist/esm/server/resources/kv.js +80 -0
- package/dist/esm/server/resources/platform.js +39 -0
- package/dist/esm/server/resources/sessions.js +1 -1
- package/dist/esm/server/resources/workspaces.js +70 -0
- package/dist/esm/store.js +141 -0
- package/dist/esm/ui/empty-state.js +25 -0
- package/dist/esm/ui/index.js +34 -0
- package/dist/esm/ui/page-header.js +24 -0
- package/dist/esm/ui/page-shell.js +41 -0
- package/dist/esm/ui/section.js +17 -0
- package/dist/esm/ui/setting-row.js +11 -0
- package/dist/esm/ui/status-chip.js +14 -0
- package/dist/types/client/components/app-shell.d.ts +65 -27
- package/dist/types/client/components/apps-grid.d.ts +11 -2
- package/dist/types/client/components/confirm-dialog.d.ts +34 -0
- package/dist/types/client/components/cursor-pagination.d.ts +27 -0
- package/dist/types/client/components/filter-tabs.d.ts +26 -0
- package/dist/types/client/components/grievance-notice.d.ts +31 -0
- package/dist/types/client/components/link-button.d.ts +32 -9
- package/dist/types/client/components/logo.d.ts +18 -2
- package/dist/types/client/components/nav.d.ts +24 -0
- package/dist/types/client/components/plan-pricing.d.ts +10 -0
- package/dist/types/client/components/platform-gate.d.ts +53 -0
- package/dist/types/client/components/shell-context.d.ts +116 -0
- package/dist/types/client/components/side-nav.d.ts +27 -13
- package/dist/types/client/components/sidebar.d.ts +95 -0
- package/dist/types/client/components/user-menu.d.ts +68 -22
- package/dist/types/client/components/workspace-switcher.d.ts +49 -0
- package/dist/types/client/index.d.ts +27 -5
- package/dist/types/client/provider.d.ts +109 -6
- package/dist/types/client/use-checkout.d.ts +8 -4
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/next/index.d.ts +1 -1
- package/dist/types/server/client.d.ts +25 -2
- package/dist/types/server/http.d.ts +8 -2
- package/dist/types/server/index.d.ts +4 -0
- package/dist/types/server/resources/acting-as.d.ts +11 -0
- package/dist/types/server/resources/ai.d.ts +9 -1
- package/dist/types/server/resources/data.d.ts +258 -0
- package/dist/types/server/resources/kv.d.ts +63 -0
- package/dist/types/server/resources/platform.d.ts +32 -0
- package/dist/types/server/resources/workspaces.d.ts +55 -0
- package/dist/types/store.d.ts +96 -0
- package/dist/types/types.d.ts +319 -15
- package/dist/types/ui/empty-state.d.ts +34 -0
- package/dist/types/ui/index.d.ts +40 -0
- package/dist/types/ui/page-header.d.ts +34 -0
- package/dist/types/ui/page-shell.d.ts +39 -0
- package/dist/types/ui/section.d.ts +26 -0
- package/dist/types/ui/setting-row.d.ts +18 -0
- package/dist/types/ui/status-chip.d.ts +36 -0
- package/package.json +6 -2
package/dist/cjs/client/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
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
|
*
|
|
@@ -21,9 +22,11 @@ Object.defineProperty(exports, "useConnect", { enumerable: true, get: function (
|
|
|
21
22
|
Object.defineProperty(exports, "useConnectUser", { enumerable: true, get: function () { return provider_js_1.useConnectUser; } });
|
|
22
23
|
Object.defineProperty(exports, "useConnectWorkspaceType", { enumerable: true, get: function () { return provider_js_1.useConnectWorkspaceType; } });
|
|
23
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; } });
|
|
24
26
|
Object.defineProperty(exports, "useConnectEntitlements", { enumerable: true, get: function () { return provider_js_1.useConnectEntitlements; } });
|
|
25
27
|
Object.defineProperty(exports, "useConnectPlans", { enumerable: true, get: function () { return provider_js_1.useConnectPlans; } });
|
|
26
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; } });
|
|
27
30
|
Object.defineProperty(exports, "useConnectAddonUsage", { enumerable: true, get: function () { return provider_js_1.useConnectAddonUsage; } });
|
|
28
31
|
Object.defineProperty(exports, "useConnectSessions", { enumerable: true, get: function () { return provider_js_1.useConnectSessions; } });
|
|
29
32
|
Object.defineProperty(exports, "useConnectIntegrations", { enumerable: true, get: function () { return provider_js_1.useConnectIntegrations; } });
|
|
@@ -38,6 +41,8 @@ Object.defineProperty(exports, "normalizePlanFeatures", { enumerable: true, get:
|
|
|
38
41
|
var errors_js_1 = require("../errors.js");
|
|
39
42
|
Object.defineProperty(exports, "ConnectError", { enumerable: true, get: function () { return errors_js_1.ConnectError; } });
|
|
40
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; } });
|
|
41
46
|
var mark_js_1 = require("./mark.js");
|
|
42
47
|
Object.defineProperty(exports, "ConnectMark", { enumerable: true, get: function () { return mark_js_1.ConnectMark; } });
|
|
43
48
|
var logo_js_1 = require("./components/logo.js");
|
|
@@ -46,6 +51,9 @@ var auth_buttons_js_1 = require("./components/auth-buttons.js");
|
|
|
46
51
|
Object.defineProperty(exports, "ConnectLoginButton", { enumerable: true, get: function () { return auth_buttons_js_1.ConnectLoginButton; } });
|
|
47
52
|
Object.defineProperty(exports, "ConnectRegisterButton", { enumerable: true, get: function () { return auth_buttons_js_1.ConnectRegisterButton; } });
|
|
48
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`. */
|
|
49
57
|
Object.defineProperty(exports, "ConnectUserMenu", { enumerable: true, get: function () { return user_menu_js_1.ConnectUserMenu; } });
|
|
50
58
|
Object.defineProperty(exports, "ConnectManageSubscriptionButton", { enumerable: true, get: function () { return user_menu_js_1.ConnectManageSubscriptionButton; } });
|
|
51
59
|
Object.defineProperty(exports, "ConnectInvoicesButton", { enumerable: true, get: function () { return user_menu_js_1.ConnectInvoicesButton; } });
|
|
@@ -60,9 +68,37 @@ Object.defineProperty(exports, "ConnectAccountSessions", { enumerable: true, get
|
|
|
60
68
|
// pieces it composes rather than in a section of its own - an integration
|
|
61
69
|
// reaching for a sidebar wants to find the launcher and the account menu in
|
|
62
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
|
+
*/
|
|
63
78
|
var app_shell_js_1 = require("./components/app-shell.js");
|
|
64
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; } });
|
|
65
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; } });
|
|
66
102
|
Object.defineProperty(exports, "ConnectSideNav", { enumerable: true, get: function () { return side_nav_js_1.ConnectSideNav; } });
|
|
67
103
|
var use_active_path_js_1 = require("./use-active-path.js");
|
|
68
104
|
Object.defineProperty(exports, "useActivePath", { enumerable: true, get: function () { return use_active_path_js_1.useActivePath; } });
|
|
@@ -77,6 +113,7 @@ Object.defineProperty(exports, "normalizePath", { enumerable: true, get: functio
|
|
|
77
113
|
Object.defineProperty(exports, "resolveActivePath", { enumerable: true, get: function () { return nav_js_1.resolveActivePath; } });
|
|
78
114
|
Object.defineProperty(exports, "isNavItemActive", { enumerable: true, get: function () { return nav_js_1.isNavItemActive; } });
|
|
79
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; } });
|
|
80
117
|
var apps_grid_js_1 = require("./components/apps-grid.js");
|
|
81
118
|
Object.defineProperty(exports, "ConnectAppsGrid", { enumerable: true, get: function () { return apps_grid_js_1.ConnectAppsGrid; } });
|
|
82
119
|
// `AppShell askAi` mounts this; exported for an app that wants the panel
|
|
@@ -132,10 +169,35 @@ Object.defineProperty(exports, "ConnectFeatureGate", { enumerable: true, get: fu
|
|
|
132
169
|
Object.defineProperty(exports, "useConnectFeature", { enumerable: true, get: function () { return feature_gate_js_1.useConnectFeature; } });
|
|
133
170
|
var workspace_type_gate_js_1 = require("./components/workspace-type-gate.js");
|
|
134
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; } });
|
|
135
174
|
var usage_meter_js_1 = require("./components/usage-meter.js");
|
|
136
175
|
Object.defineProperty(exports, "ConnectUsageMeter", { enumerable: true, get: function () { return usage_meter_js_1.ConnectUsageMeter; } });
|
|
137
176
|
var plans_page_js_1 = require("./components/plans-page.js");
|
|
138
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; } });
|
|
139
201
|
var use_checkout_js_1 = require("./use-checkout.js");
|
|
140
202
|
Object.defineProperty(exports, "useConnectCheckout", { enumerable: true, get: function () { return use_checkout_js_1.useConnectCheckout; } });
|
|
141
203
|
Object.defineProperty(exports, "buildCheckoutUrl", { enumerable: true, get: function () { return use_checkout_js_1.buildCheckoutUrl; } });
|
|
@@ -153,3 +215,8 @@ Object.defineProperty(exports, "ACTION_LABEL", { enumerable: true, get: function
|
|
|
153
215
|
// answer this, and `groupPlansByTier` is how to read it.
|
|
154
216
|
Object.defineProperty(exports, "groupPlansByTier", { enumerable: true, get: function () { return plan_pricing_js_1.groupPlansByTier; } });
|
|
155
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; } });
|
|
@@ -7,10 +7,14 @@ exports.useConnect = useConnect;
|
|
|
7
7
|
exports.useConnectUser = useConnectUser;
|
|
8
8
|
exports.useConnectWorkspaceType = useConnectWorkspaceType;
|
|
9
9
|
exports.useConnectAudience = useConnectAudience;
|
|
10
|
+
exports.useConnectPlatformAccess = useConnectPlatformAccess;
|
|
10
11
|
exports.useConnectEntitlements = useConnectEntitlements;
|
|
11
12
|
exports.useConnectAddonUsage = useConnectAddonUsage;
|
|
12
13
|
exports.useConnectPlans = useConnectPlans;
|
|
14
|
+
exports.useConnectCompanyProfile = useConnectCompanyProfile;
|
|
13
15
|
exports.useConnectApps = useConnectApps;
|
|
16
|
+
exports.useConnectWorkspaces = useConnectWorkspaces;
|
|
17
|
+
exports.useConnectWorkspaceMembers = useConnectWorkspaceMembers;
|
|
14
18
|
exports.useConnectIntegrations = useConnectIntegrations;
|
|
15
19
|
exports.useConnectSessions = useConnectSessions;
|
|
16
20
|
exports.useConnectResource = useConnectResource;
|
|
@@ -151,7 +155,7 @@ function ConnectProvider({ clientId = "", basePath = "/api/connect", redirectUri
|
|
|
151
155
|
// error, so a Login button still renders rather than the UI hanging on
|
|
152
156
|
// skeletons forever.
|
|
153
157
|
setResult({
|
|
154
|
-
session: { user: null, subscription: null,
|
|
158
|
+
session: { user: null, subscription: null, role: null, permissions: [], staff: false, audience: null },
|
|
155
159
|
error: cause instanceof Error ? cause.message : "Could not reach Connect",
|
|
156
160
|
});
|
|
157
161
|
}
|
|
@@ -200,7 +204,7 @@ function ConnectProvider({ clientId = "", basePath = "/api/connect", redirectUri
|
|
|
200
204
|
credentials: "same-origin",
|
|
201
205
|
}).catch(() => { });
|
|
202
206
|
cache.current.clear();
|
|
203
|
-
setResult({ session: { user: null, subscription: null,
|
|
207
|
+
setResult({ session: { user: null, subscription: null, role: null, permissions: [], staff: false, audience: null }, error: null });
|
|
204
208
|
}, [basePath, fetchImpl]);
|
|
205
209
|
const value = (0, react_1.useMemo)(() => ({
|
|
206
210
|
clientId,
|
|
@@ -267,6 +271,26 @@ function useConnectWorkspaceType() {
|
|
|
267
271
|
function useConnectAudience() {
|
|
268
272
|
return useConnect().session?.audience ?? null;
|
|
269
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
|
+
}
|
|
270
294
|
/** Readiness gates and the live subscription, fetched on first use. */
|
|
271
295
|
function useConnectEntitlements() {
|
|
272
296
|
return useConnectResource("/entitlements");
|
|
@@ -285,10 +309,41 @@ function useConnectAddonUsage() {
|
|
|
285
309
|
function useConnectPlans() {
|
|
286
310
|
return useConnectResource("/plans");
|
|
287
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
|
+
}
|
|
288
325
|
/** The apps this workspace can open. */
|
|
289
326
|
function useConnectApps() {
|
|
290
327
|
return useConnectResource("/apps");
|
|
291
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
|
+
}
|
|
292
347
|
/** Enabled Composio-hosted toolkits and this workspace's connection status for each. */
|
|
293
348
|
function useConnectIntegrations() {
|
|
294
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/(.)
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
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
|
-
: `/
|
|
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());
|
package/dist/cjs/errors.js
CHANGED
|
@@ -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
|
|
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; } });
|
package/dist/cjs/next/index.js
CHANGED
|
@@ -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
|
|
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.
|
|
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
|
|
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.
|
|
145
|
+
exports.SDK_VERSION = "0.14.0";
|