@cat-factory/node-server 0.143.0 → 0.144.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/db/tables/identity.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBtB,CAAA;AAGD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcjB,CAAA;AAGD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB1B,CAAA;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBpB,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBvB,CAAA;AAKD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuB5B,CAAA;AAID,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ3B,CAAA;AAMF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO1B,CAAA;AAGF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB9B,CAAA;AAID,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB/B,CAAA"}
@@ -0,0 +1,176 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import { bigint, doublePrecision, index, pgTable, primaryKey, text, uniqueIndex, } from 'drizzle-orm/pg-core';
3
+ // ---------------------------------------------------------------------------
4
+ // The TENANCY & IDENTITY tables, mirroring the Cloudflare D1 tables column-for-column
5
+ // (snake_case field names = column names) exactly as the rest of the Node schema does.
6
+ //
7
+ // One cohesive group — who exists and what they belong to: the board (`workspaces`) and
8
+ // person (`users`) roots every other table keys off, the login identities and account /
9
+ // membership graph layered on them, the two roster-growth paths (`account_invitations`,
10
+ // `password_reset_tokens`), and the per-account rows that configure a tenant
11
+ // (`email_connections`, `account_settings`). Split out of `../schema.ts` so that module
12
+ // stays inside its (shrink-only) size budget; `../schema.ts` re-exports everything here,
13
+ // so every existing `from '../db/schema.js'` import is unaffected and drizzle-kit still
14
+ // sees the tables through that entry point.
15
+ //
16
+ // This is also where the schema's FK targets live: `users.id` and `workspaces.id` are the
17
+ // only two columns anything references. Keeping the referencing credential tables in
18
+ // `../schema.ts` importing FROM here (rather than the reverse) is what keeps the module
19
+ // graph acyclic.
20
+ // ---------------------------------------------------------------------------
21
+ export const workspaces = pgTable('workspaces', {
22
+ id: text('id').primaryKey(),
23
+ name: text('name').notNull(),
24
+ description: text('description'),
25
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
26
+ account_id: text('account_id'),
27
+ owner_user_id: text('owner_user_id'),
28
+ // Workspace RBAC access mode ('account' | 'restricted'); default preserves the legacy
29
+ // "every account member sees it" behaviour so no existing row changes.
30
+ access_mode: text('access_mode').notNull().default('account'),
31
+ },
32
+ // listVisible filters by owner_user_id (legacy) and account_id (membership scope).
33
+ (t) => [
34
+ index('idx_workspaces_owner').on(t.owner_user_id),
35
+ index('idx_workspaces_account').on(t.account_id),
36
+ ]);
37
+ // Canonical user identity (decoupled from GitHub). Everything else keys off users.id.
38
+ export const users = pgTable('users', {
39
+ id: text('id').primaryKey(),
40
+ name: text('name'),
41
+ email: text('email'),
42
+ avatar_url: text('avatar_url'),
43
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
44
+ }, (t) => [
45
+ uniqueIndex('idx_users_email')
46
+ .on(t.email)
47
+ .where(sql `email IS NOT NULL`),
48
+ ]);
49
+ // A linked login identity for a user. (provider, subject) is unique.
50
+ export const userIdentities = pgTable('user_identities', {
51
+ // ON DELETE RESTRICT: a users row can't be removed while a login identity still points
52
+ // at it — the DB-level guard against the dangling-identity orphaning incident.
53
+ user_id: text('user_id')
54
+ .notNull()
55
+ .references(() => users.id, { onDelete: 'restrict' }),
56
+ provider: text('provider').notNull(),
57
+ subject: text('subject').notNull(),
58
+ secret: text('secret'),
59
+ metadata: text('metadata'),
60
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
61
+ }, (t) => [
62
+ primaryKey({ columns: [t.provider, t.subject] }),
63
+ index('idx_user_identities_user').on(t.user_id),
64
+ ]);
65
+ export const accounts = pgTable('accounts', {
66
+ id: text('id').primaryKey(),
67
+ type: text('type').notNull(),
68
+ name: text('name').notNull(),
69
+ github_account_login: text('github_account_login'),
70
+ // The user who owns a personal account (its account-of-one). Null for orgs.
71
+ // ON DELETE RESTRICT: can't drop a user that still owns a personal account.
72
+ owner_user_id: text('owner_user_id').references(() => users.id, { onDelete: 'restrict' }),
73
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
74
+ // The default cloud provider new services in this account inherit.
75
+ default_cloud_provider: text('default_cloud_provider'),
76
+ // The account-tier monthly spend budget (base pricing currency). Null = none.
77
+ spend_monthly_limit: doublePrecision('spend_monthly_limit'),
78
+ },
79
+ // Enforce one personal account per user (a correctness constraint, not just a
80
+ // lookup index) — the partial unique index `findPersonalByUser` relies on.
81
+ (t) => [
82
+ uniqueIndex('idx_accounts_personal')
83
+ .on(t.owner_user_id)
84
+ .where(sql `type = 'personal'`),
85
+ ]);
86
+ export const memberships = pgTable('memberships', {
87
+ account_id: text('account_id').notNull(),
88
+ // ON DELETE RESTRICT: a users row can't be removed while it still holds a membership.
89
+ user_id: text('user_id')
90
+ .notNull()
91
+ .references(() => users.id, { onDelete: 'restrict' }),
92
+ // Combinable roles (admin / developer / product) as a CSV; defaults to developer.
93
+ roles: text('roles').notNull().default('developer'),
94
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
95
+ }, (t) => [
96
+ primaryKey({ columns: [t.account_id, t.user_id] }),
97
+ index('idx_memberships_user').on(t.user_id),
98
+ ]);
99
+ // Workspace membership (workspace RBAC, migration 0052). Scopes a user to a board with a
100
+ // single-valued workspace role; a restricted board reads it as the sole grant, an
101
+ // account-mode board honours it as an upgrade-only overlay.
102
+ export const workspaceMembers = pgTable('workspace_members', {
103
+ // ON DELETE CASCADE: a deleted board takes its roster (the Drizzle FK; the D1 side
104
+ // relies on the workspace-delete cascade list since D1 doesn't enforce FKs).
105
+ workspace_id: text('workspace_id')
106
+ .notNull()
107
+ .references(() => workspaces.id, { onDelete: 'cascade' }),
108
+ // ON DELETE RESTRICT: mirrors memberships.user_id — can't drop a user with a live row.
109
+ user_id: text('user_id')
110
+ .notNull()
111
+ .references(() => users.id, { onDelete: 'restrict' }),
112
+ // Single value: admin | member | viewer (a strict hierarchy, not a CSV set).
113
+ role: text('role').notNull(),
114
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
115
+ // Audit: who granted the row; null for system grants (creator auto-enroll). No FK.
116
+ added_by_user_id: text('added_by_user_id'),
117
+ }, (t) => [
118
+ primaryKey({ columns: [t.workspace_id, t.user_id] }),
119
+ // Drives listWorkspaceIdsForUser + the visibility subquery.
120
+ index('idx_workspace_members_user').on(t.user_id),
121
+ ]);
122
+ // Per-account transactional-email sender (UI-onboarded). The provider API key is
123
+ // sealed at rest (SecretCipher), never plaintext.
124
+ export const emailConnections = pgTable('email_connections', {
125
+ account_id: text('account_id').primaryKey(),
126
+ provider: text('provider').notNull(),
127
+ from_address: text('from_address').notNull(),
128
+ api_key_cipher: text('api_key_cipher').notNull(),
129
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
130
+ updated_at: bigint('updated_at', { mode: 'number' }).notNull(),
131
+ deleted_at: bigint('deleted_at', { mode: 'number' }),
132
+ });
133
+ // Per-account (deployment-wide) settings, moved out of env (mirror of D1 migration 0014's
134
+ // `account_settings`). `config` is non-secret tuning JSON; `secrets_cipher` is ONE sealed
135
+ // blob grouping every integration credential (domain tag 'cat-factory:account-settings');
136
+ // `summary` is non-secret presence JSON. A missing row means all defaults.
137
+ export const accountSettings = pgTable('account_settings', {
138
+ account_id: text('account_id').primaryKey(),
139
+ config: text('config').notNull(),
140
+ secrets_cipher: text('secrets_cipher'),
141
+ summary: text('summary').notNull().default('{}'),
142
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
143
+ updated_at: bigint('updated_at', { mode: 'number' }).notNull(),
144
+ });
145
+ // Email invitations into an org account. Only the token's hash is stored.
146
+ export const accountInvitations = pgTable('account_invitations', {
147
+ id: text('id').primaryKey(),
148
+ account_id: text('account_id').notNull(),
149
+ email: text('email').notNull(),
150
+ roles: text('roles').notNull().default('developer'),
151
+ token_hash: text('token_hash').notNull(),
152
+ invited_by: text('invited_by').notNull(),
153
+ status: text('status').notNull().default('pending'),
154
+ expires_at: bigint('expires_at', { mode: 'number' }).notNull(),
155
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
156
+ }, (t) => [
157
+ index('idx_account_invitations_account').on(t.account_id),
158
+ uniqueIndex('idx_account_invitations_token').on(t.token_hash),
159
+ ]);
160
+ // Password-reset tokens ("forgot my password"). Only the SHA-256 token hash is stored;
161
+ // single-use (status flips to 'used') and expiring. Mirrors the D1 table.
162
+ export const passwordResetTokens = pgTable('password_reset_tokens', {
163
+ id: text('id').primaryKey(),
164
+ user_id: text('user_id').notNull(),
165
+ token_hash: text('token_hash').notNull(),
166
+ status: text('status').notNull().default('pending'),
167
+ expires_at: bigint('expires_at', { mode: 'number' }).notNull(),
168
+ created_at: bigint('created_at', { mode: 'number' }).notNull(),
169
+ }, (t) => [
170
+ uniqueIndex('idx_password_reset_tokens_token').on(t.token_hash),
171
+ index('idx_password_reset_tokens_user').on(t.user_id, t.status),
172
+ // `deleteExpired` sweeps on `expires_at < ?`; index it like every other TTL column
173
+ // (idx_environments_expiry / idx_personal_subs_expiry) so the sweep isn't a full scan.
174
+ index('idx_password_reset_tokens_expiry').on(t.expires_at),
175
+ ]);
176
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/db/tables/identity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/node-server",
3
- "version": "0.143.0",
3
+ "version": "0.144.1",
4
4
  "description": "Node.js runtime facade for the Agent Architecture Board: serves the shared @cat-factory/server Hono app via @hono/node-server, wiring Node implementations of the runtime ports (persistence, gateways, model provisioning).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,24 +33,24 @@
33
33
  "pg-boss": "^12.26.3",
34
34
  "toad-scheduler": "^4.1.0",
35
35
  "ws": "^8.21.1",
36
- "@cat-factory/agents": "0.93.0",
37
- "@cat-factory/caching": "0.11.29",
38
- "@cat-factory/consensus": "0.13.9",
36
+ "@cat-factory/agents": "0.94.0",
37
+ "@cat-factory/caching": "0.11.30",
38
+ "@cat-factory/consensus": "0.13.10",
39
39
  "@cat-factory/contracts": "0.202.0",
40
- "@cat-factory/eks": "0.1.182",
41
- "@cat-factory/gates": "0.8.29",
42
- "@cat-factory/gitlab": "0.14.12",
43
- "@cat-factory/integrations": "0.113.3",
44
- "@cat-factory/kernel": "0.200.0",
45
- "@cat-factory/observability-langfuse": "0.9.26",
46
- "@cat-factory/orchestration": "0.176.0",
47
- "@cat-factory/observability-otel": "0.4.26",
40
+ "@cat-factory/eks": "0.1.184",
41
+ "@cat-factory/gates": "0.8.30",
42
+ "@cat-factory/gitlab": "0.14.13",
43
+ "@cat-factory/integrations": "0.113.5",
44
+ "@cat-factory/kernel": "0.201.0",
45
+ "@cat-factory/observability-langfuse": "0.9.27",
46
+ "@cat-factory/observability-otel": "0.4.27",
47
+ "@cat-factory/orchestration": "0.177.1",
48
48
  "@cat-factory/prompt-fragments": "0.15.25",
49
- "@cat-factory/provider-bedrock": "0.7.334",
50
- "@cat-factory/provider-cloudflare": "0.7.335",
51
- "@cat-factory/provider-s3": "0.2.254",
52
- "@cat-factory/server": "0.185.0",
53
- "@cat-factory/spend": "0.12.130"
49
+ "@cat-factory/provider-bedrock": "0.7.335",
50
+ "@cat-factory/provider-cloudflare": "0.7.336",
51
+ "@cat-factory/provider-s3": "0.2.255",
52
+ "@cat-factory/server": "0.185.2",
53
+ "@cat-factory/spend": "0.12.131"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/node": "^26.1.1",
@@ -59,7 +59,7 @@
59
59
  "drizzle-kit": "1.0.0-rc.4",
60
60
  "typescript": "7.0.2",
61
61
  "vitest": "^4.1.10",
62
- "@cat-factory/conformance": "0.16.9"
62
+ "@cat-factory/conformance": "0.16.11"
63
63
  },
64
64
  "optionalDependencies": {
65
65
  "ioredis": "^5.11.1"