Skip to content

Commit 7087cfe

Browse files
os-zhuangclaude
andauthored
chore!: remove unused HTTP adapters (keep Hono only) + MSW plugin (12.0) (#2391)
The express/fastify/nextjs/nestjs/nuxt/sveltekit adapters and @objectstack/plugin-msw had ZERO internal consumers and were not dogfooded — pure release/maintenance surface + untested-integration liability. Removed; @objectstack/hono (the adapter actually used, via @objectstack/client) is kept. Open edition = Hono adapter only. - Delete 6 adapter packages + plugin-msw (fixed group 73 → 66). - client: drop plugin-msw / msw dev usage (deleted client.msw.test.ts). - Correct HttpDispatcher's misleading `@deprecated → createDispatcherPlugin` note (createDispatcherPlugin is a kernel route plugin, not a drop-in); the class is now used only by the Hono adapter + internal dispatcher-plugin. - Docs: rest/README + hono/README adapter references updated to Hono-only. Resolves the #2380 blast-radius concern (HttpDispatcher consumers collapse to Hono). Verified: full workspace build green (69 tasks); client tests 101. Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 18f9713 commit 7087cfe

94 files changed

Lines changed: 227 additions & 14124 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/config.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
"@objectstack/plugin-email",
4141
"@objectstack/plugin-hono-server",
4242
"@objectstack/mcp",
43-
"@objectstack/plugin-msw",
4443
"@objectstack/plugin-org-scoping",
4544
"@objectstack/plugin-reports",
4645
"@objectstack/plugin-security",
@@ -52,13 +51,7 @@
5251
"@objectstack/connector-mcp",
5352
"@objectstack/connector-rest",
5453
"@objectstack/connector-slack",
55-
"@objectstack/express",
56-
"@objectstack/fastify",
5754
"@objectstack/hono",
58-
"@objectstack/nestjs",
59-
"@objectstack/nextjs",
60-
"@objectstack/nuxt",
61-
"@objectstack/sveltekit",
6255
"@objectstack/service-analytics",
6356
"@objectstack/service-automation",
6457
"@objectstack/service-cache",
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
"@objectstack/client": major
3+
"@objectstack/runtime": patch
4+
---
5+
6+
Remove the unused HTTP framework adapters and the MSW plugin — the open edition ships the **Hono** adapter only.
7+
8+
The `express` / `fastify` / `nextjs` / `nestjs` / `nuxt` / `sveltekit` adapters and
9+
`@objectstack/plugin-msw` had **zero internal consumers** and were not dogfooded —
10+
pure release/maintenance surface (and an untested-integration liability). They are
11+
removed; `@objectstack/hono` (the adapter actually used, via `@objectstack/client`)
12+
is kept.
13+
14+
- Deleted packages: `@objectstack/express`, `@objectstack/fastify`,
15+
`@objectstack/nextjs`, `@objectstack/nestjs`, `@objectstack/nuxt`,
16+
`@objectstack/sveltekit`, `@objectstack/plugin-msw` (fixed group 73 → 66).
17+
- `@objectstack/client`: dropped the `plugin-msw` / `msw` dev usage (MSW test removed).
18+
- `HttpDispatcher` (the dispatch engine) is now used only by the Hono adapter +
19+
the internal dispatcher-plugin, so its misleading `@deprecated → createDispatcherPlugin`
20+
note (createDispatcherPlugin is a kernel plugin, not a drop-in) is corrected.
21+
22+
Anyone needing another framework adapter can build one on the public
23+
`HttpDispatcher` / `createDispatcherPlugin` API or maintain it out-of-tree.

content/docs/references/ai/solution-blueprint.mdx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ batch-draft. This is the safety valve for low-specificity input.
3434
## TypeScript Usage
3535

3636
```typescript
37-
import { BlueprintApp, BlueprintDashboard, BlueprintField, BlueprintNavItem, BlueprintObject, BlueprintSeed, BlueprintView, SolutionBlueprint, SolutionBlueprintStrict } from '@objectstack/spec/ai';
38-
import type { BlueprintApp, BlueprintDashboard, BlueprintField, BlueprintNavItem, BlueprintObject, BlueprintSeed, BlueprintView, SolutionBlueprint, SolutionBlueprintStrict } from '@objectstack/spec/ai';
37+
import { BlueprintApp, BlueprintDashboard, BlueprintField, BlueprintNavItem, BlueprintObject, BlueprintSeed, BlueprintView, BlueprintWidgetCondition, SolutionBlueprint, SolutionBlueprintStrict } from '@objectstack/spec/ai';
38+
import type { BlueprintApp, BlueprintDashboard, BlueprintField, BlueprintNavItem, BlueprintObject, BlueprintSeed, BlueprintView, BlueprintWidgetCondition, SolutionBlueprint, SolutionBlueprintStrict } from '@objectstack/spec/ai';
3939

4040
// Validate data
4141
const result = BlueprintApp.parse(data);
@@ -78,7 +78,7 @@ const result = BlueprintApp.parse(data);
7878
| :--- | :--- | :--- | :--- |
7979
| **name** | `string` || Field machine name (snake_case) |
8080
| **label** | `string` | optional | Human-readable field label |
81-
| **type** | `Enum<'text' \| 'textarea' \| 'email' \| 'url' \| 'phone' \| 'password' \| 'secret' \| 'markdown' \| 'html' \| 'richtext' \| 'number' \| 'currency' \| 'percent' \| 'date' \| 'datetime' \| 'time' \| 'boolean' \| 'toggle' \| 'select' \| 'multiselect' \| 'radio' \| 'checkboxes' \| 'lookup' \| 'master_detail' \| 'tree' \| 'image' \| 'file' \| 'avatar' \| 'video' \| 'audio' \| 'formula' \| 'summary' \| 'autonumber' \| 'composite' \| 'repeater' \| 'record' \| 'location' \| 'address' \| 'code' \| 'json' \| 'color' \| 'rating' \| 'slider' \| 'signature' \| 'qrcode' \| 'progress' \| 'tags' \| 'vector'>` || Field data type |
81+
| **type** | `Enum<'text' \| 'textarea' \| 'email' \| 'url' \| 'phone' \| 'password' \| 'secret' \| 'markdown' \| 'html' \| 'richtext' \| 'number' \| 'currency' \| 'percent' \| 'date' \| 'datetime' \| 'time' \| 'boolean' \| 'toggle' \| 'select' \| 'multiselect' \| 'radio' \| 'checkboxes' \| 'lookup' \| 'master_detail' \| 'tree' \| 'user' \| 'image' \| 'file' \| 'avatar' \| 'video' \| 'audio' \| 'formula' \| 'summary' \| 'autonumber' \| 'composite' \| 'repeater' \| 'record' \| 'location' \| 'address' \| 'code' \| 'json' \| 'color' \| 'rating' \| 'slider' \| 'signature' \| 'qrcode' \| 'progress' \| 'tags' \| 'vector'>` || Field data type |
8282
| **required** | `boolean` | optional | Whether the field is required |
8383
| **reference** | `string` | optional | Target object name for lookup / master_detail relationship fields |
8484
| **options** | `Object[]` | optional | Choices for select / multiselect / radio fields |
@@ -140,6 +140,19 @@ const result = BlueprintApp.parse(data);
140140
| **groupBy** | `string` | optional | REQUIRED for kanban views: the select/status field whose options become the board columns (e.g. "stage", "status"). Without it a kanban renders as a plain list. |
141141

142142

143+
---
144+
145+
## BlueprintWidgetCondition
146+
147+
### Properties
148+
149+
| Property | Type | Required | Description |
150+
| :--- | :--- | :--- | :--- |
151+
| **field** | `string` || Field on the widget object to filter by (e.g. "stock_quantity", "status") |
152+
| **op** | `Enum<'lt' \| 'lte' \| 'gt' \| 'gte' \| 'eq' \| 'ne'>` || Comparison operator |
153+
| **value** | `number \| string \| boolean` || Comparison value (e.g. 10, "open") |
154+
155+
143156
---
144157

145158
## SolutionBlueprint

content/docs/references/api/auth-endpoints.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ const result = AuthEndpoint.parse(data);
6161
| **passkeys** | `boolean` || Passkey/WebAuthn support enabled |
6262
| **magicLink** | `boolean` || Magic link login enabled |
6363
| **organization** | `boolean` || Multi-tenant organization support enabled |
64+
| **ssoEnforced** | `boolean` | optional | SSO-only login enforced: the UI hides the local password form + self-registration (a break-glass "use a password" link remains) |
6465

6566

6667
---

content/docs/references/automation/execution.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ const result = Checkpoint.parse(data);
141141
| Property | Type | Required | Description |
142142
| :--- | :--- | :--- | :--- |
143143
| **nodeId** | `string` || Node ID that was executed |
144-
| **nodeType** | `string` || Node action type (e.g., "decision", "http_request") |
144+
| **nodeType** | `string` || Node action type (e.g., "decision", "http") |
145145
| **nodeLabel** | `string` | optional | Human-readable node label |
146146
| **status** | `Enum<'success' \| 'failure' \| 'skipped'>` || Step execution result |
147147
| **startedAt** | `string` || When the step started |

content/docs/references/automation/flow.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ const result = FlowNode.parse(data);
7474
* `delete_record`
7575
* `get_record`
7676
* `http`
77-
* `http_request`
7877
* `notify`
7978
* `script`
8079
* `screen`

content/docs/references/data/object.mdx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ API Operations Enum
1414
## TypeScript Usage
1515

1616
```typescript
17-
import { ApiMethod, Index, ObjectCapabilities, ObjectExternalBinding, ObjectOwnershipEnum, PartitioningConfig, SoftDeleteConfig, TenancyConfig, VersioningConfig } from '@objectstack/spec/data';
18-
import type { ApiMethod, Index, ObjectCapabilities, ObjectExternalBinding, ObjectOwnershipEnum, PartitioningConfig, SoftDeleteConfig, TenancyConfig, VersioningConfig } from '@objectstack/spec/data';
17+
import { ApiMethod, Index, ObjectAccessConfig, ObjectCapabilities, ObjectExternalBinding, ObjectOwnershipEnum, PartitioningConfig, SoftDeleteConfig, TenancyConfig, VersioningConfig } from '@objectstack/spec/data';
18+
import type { ApiMethod, Index, ObjectAccessConfig, ObjectCapabilities, ObjectExternalBinding, ObjectOwnershipEnum, PartitioningConfig, SoftDeleteConfig, TenancyConfig, VersioningConfig } from '@objectstack/spec/data';
1919

2020
// Validate data
2121
const result = ApiMethod.parse(data);
@@ -58,6 +58,17 @@ const result = ApiMethod.parse(data);
5858
| **partial** | `string` | optional | Partial index condition (SQL WHERE clause for conditional indexes) |
5959

6060

61+
---
62+
63+
## ObjectAccessConfig
64+
65+
### Properties
66+
67+
| Property | Type | Required | Description |
68+
| :--- | :--- | :--- | :--- |
69+
| **default** | `Enum<'public' \| 'private'>` || Default exposure posture: public (covered by wildcard grants) | private (needs explicit grant; exempt from wildcard RLS). |
70+
71+
6172
---
6273

6374
## ObjectCapabilities

content/docs/references/security/index.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ This section contains all protocol schemas for the security layer of ObjectStack
77

88
<Cards>
99
<Card href="/docs/references/security/permission" title="Permission" description="Source: packages/spec/src/security/permission.zod.ts" />
10-
<Card href="/docs/references/security/policy" title="Policy" description="Source: packages/spec/src/security/policy.zod.ts" />
1110
<Card href="/docs/references/security/rls" title="Rls" description="Source: packages/spec/src/security/rls.zod.ts" />
1211
<Card href="/docs/references/security/sharing" title="Sharing" description="Source: packages/spec/src/security/sharing.zod.ts" />
1312
<Card href="/docs/references/security/territory" title="Territory" description="Source: packages/spec/src/security/territory.zod.ts" />

content/docs/references/security/meta.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
"title": "Security Protocol",
33
"pages": [
44
"permission",
5-
"policy",
65
"rls",
76
"sharing",
87
"territory"

content/docs/references/security/policy.mdx

Lines changed: 0 additions & 98 deletions
This file was deleted.

0 commit comments

Comments
 (0)