@coffre/db 0.4.5 → 0.5.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 (44) hide show
  1. package/dist/connect.d.ts +1 -1
  2. package/dist/{database-edkMkG02.d.ts → database-C63WjCrC.d.ts} +1 -1
  3. package/dist/dialect.d.ts +7 -1
  4. package/dist/dialect.js +12 -1
  5. package/dist/grants.d.ts +105 -10
  6. package/dist/grants.js +207 -7
  7. package/dist/hyperdrive.d.ts +1 -1
  8. package/dist/index.d.ts +2 -2
  9. package/dist/log.d.ts +392 -2
  10. package/dist/log.js +53 -1
  11. package/dist/migrations/postgres/0002_instance_roles.sql +4 -0
  12. package/dist/migrations/postgres/0003_credential_scopes.sql +4 -0
  13. package/dist/migrations/postgres/meta/0002_snapshot.json +2860 -0
  14. package/dist/migrations/postgres/meta/0003_snapshot.json +2872 -0
  15. package/dist/migrations/postgres/meta/_journal.json +14 -0
  16. package/dist/migrations/sqlite/0002_instance_roles.sql +2 -0
  17. package/dist/migrations/sqlite/0003_credential_scopes.sql +2 -0
  18. package/dist/migrations/sqlite/meta/0002_snapshot.json +2594 -0
  19. package/dist/migrations/sqlite/meta/0003_snapshot.json +2608 -0
  20. package/dist/migrations/sqlite/meta/_journal.json +14 -0
  21. package/dist/portable.d.ts +2 -2
  22. package/dist/{schema-BqCB3XFm.d.ts → schema-a7PkFgea.d.ts} +68 -0
  23. package/dist/schema-sqlite.d.ts +76 -0
  24. package/dist/schema-sqlite.js +4 -0
  25. package/dist/schema-version.d.ts +1 -1
  26. package/dist/schema-version.js +60 -26
  27. package/dist/schema.d.ts +1 -1
  28. package/dist/schema.js +4 -0
  29. package/package.json +2 -2
  30. package/src/dialect.ts +14 -0
  31. package/src/grants.ts +272 -11
  32. package/src/log.ts +66 -2
  33. package/src/migrations/postgres/0002_instance_roles.sql +4 -0
  34. package/src/migrations/postgres/0003_credential_scopes.sql +4 -0
  35. package/src/migrations/postgres/meta/0002_snapshot.json +2860 -0
  36. package/src/migrations/postgres/meta/0003_snapshot.json +2872 -0
  37. package/src/migrations/postgres/meta/_journal.json +14 -0
  38. package/src/migrations/sqlite/0002_instance_roles.sql +2 -0
  39. package/src/migrations/sqlite/0003_credential_scopes.sql +2 -0
  40. package/src/migrations/sqlite/meta/0002_snapshot.json +2594 -0
  41. package/src/migrations/sqlite/meta/0003_snapshot.json +2608 -0
  42. package/src/migrations/sqlite/meta/_journal.json +14 -0
  43. package/src/schema.sqlite.ts +6 -0
  44. package/src/schema.ts +11 -1
@@ -15,6 +15,20 @@
15
15
  "when": 1791242675074,
16
16
  "tag": "0001_mcp_approvals",
17
17
  "breakpoints": true
18
+ },
19
+ {
20
+ "idx": 2,
21
+ "version": "6",
22
+ "when": 1791619334012,
23
+ "tag": "0002_instance_roles",
24
+ "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "6",
29
+ "when": 1791676487593,
30
+ "tag": "0003_credential_scopes",
31
+ "breakpoints": true
18
32
  }
19
33
  ]
20
34
  }
@@ -1,5 +1,5 @@
1
- import { m as schema_d_exports } from "./schema-BqCB3XFm.js";
2
- import { t as Database } from "./database-edkMkG02.js";
1
+ import { m as schema_d_exports } from "./schema-a7PkFgea.js";
2
+ import { t as Database } from "./database-C63WjCrC.js";
3
3
  import { t as schema_sqlite_d_exports } from "./schema-sqlite.js";
4
4
  import { LibSQLDatabase } from "drizzle-orm/libsql";
5
5
  //#region src/portable.d.ts
@@ -811,6 +811,40 @@ declare const vaultMembers: import("drizzle-orm/pg-core").PgTableWithColumns<{
811
811
  identity: undefined;
812
812
  generated: undefined;
813
813
  }, {}, {}>;
814
+ role: import("drizzle-orm/pg-core").PgColumn<{
815
+ name: "role";
816
+ tableName: "vault_members";
817
+ dataType: "string";
818
+ columnType: "PgText";
819
+ data: string;
820
+ driverParam: string;
821
+ notNull: false;
822
+ hasDefault: false;
823
+ isPrimaryKey: false;
824
+ isAutoincrement: false;
825
+ hasRuntimeDefault: false;
826
+ enumValues: [string, ...string[]];
827
+ baseColumn: never;
828
+ identity: undefined;
829
+ generated: undefined;
830
+ }, {}, {}>;
831
+ scope: import("drizzle-orm/pg-core").PgColumn<{
832
+ name: "scope";
833
+ tableName: "vault_members";
834
+ dataType: "string";
835
+ columnType: "PgText";
836
+ data: string;
837
+ driverParam: string;
838
+ notNull: false;
839
+ hasDefault: false;
840
+ isPrimaryKey: false;
841
+ isAutoincrement: false;
842
+ hasRuntimeDefault: false;
843
+ enumValues: [string, ...string[]];
844
+ baseColumn: never;
845
+ identity: undefined;
846
+ generated: undefined;
847
+ }, {}, {}>;
814
848
  generation: import("drizzle-orm/pg-core").PgColumn<{
815
849
  name: "generation";
816
850
  tableName: "vault_members";
@@ -2106,6 +2140,23 @@ declare const serviceBindings: import("drizzle-orm/pg-core").PgTableWithColumns<
2106
2140
  identity: undefined;
2107
2141
  generated: undefined;
2108
2142
  }, {}, {}>;
2143
+ scope: import("drizzle-orm/pg-core").PgColumn<{
2144
+ name: "scope";
2145
+ tableName: "service_bindings";
2146
+ dataType: "string";
2147
+ columnType: "PgText";
2148
+ data: string;
2149
+ driverParam: string;
2150
+ notNull: false;
2151
+ hasDefault: false;
2152
+ isPrimaryKey: false;
2153
+ isAutoincrement: false;
2154
+ hasRuntimeDefault: false;
2155
+ enumValues: [string, ...string[]];
2156
+ baseColumn: never;
2157
+ identity: undefined;
2158
+ generated: undefined;
2159
+ }, {}, {}>;
2109
2160
  label: import("drizzle-orm/pg-core").PgColumn<{
2110
2161
  name: "label";
2111
2162
  tableName: "service_bindings";
@@ -3128,6 +3179,23 @@ declare const credentials: import("drizzle-orm/pg-core").PgTableWithColumns<{
3128
3179
  identity: undefined;
3129
3180
  generated: undefined;
3130
3181
  }, {}, {}>;
3182
+ scope: import("drizzle-orm/pg-core").PgColumn<{
3183
+ name: "scope";
3184
+ tableName: "credentials";
3185
+ dataType: "string";
3186
+ columnType: "PgText";
3187
+ data: string;
3188
+ driverParam: string;
3189
+ notNull: false;
3190
+ hasDefault: false;
3191
+ isPrimaryKey: false;
3192
+ isAutoincrement: false;
3193
+ hasRuntimeDefault: false;
3194
+ enumValues: [string, ...string[]];
3195
+ baseColumn: never;
3196
+ identity: undefined;
3197
+ generated: undefined;
3198
+ }, {}, {}>;
3131
3199
  label: import("drizzle-orm/pg-core").PgColumn<{
3132
3200
  name: "label";
3133
3201
  tableName: "credentials";
@@ -840,6 +840,44 @@ export declare const vaultMembers: import("drizzle-orm/sqlite-core").SQLiteTable
840
840
  identity: undefined;
841
841
  generated: undefined;
842
842
  }, {}, {}>;
843
+ role: import("drizzle-orm/sqlite-core").SQLiteColumn<{
844
+ name: "role";
845
+ tableName: "vault_members";
846
+ dataType: "string";
847
+ columnType: "SQLiteText";
848
+ data: string;
849
+ driverParam: string;
850
+ notNull: false;
851
+ hasDefault: false;
852
+ isPrimaryKey: false;
853
+ isAutoincrement: false;
854
+ hasRuntimeDefault: false;
855
+ enumValues: [string, ...string[]];
856
+ baseColumn: never;
857
+ identity: undefined;
858
+ generated: undefined;
859
+ }, {}, {
860
+ length: undefined;
861
+ }>;
862
+ scope: import("drizzle-orm/sqlite-core").SQLiteColumn<{
863
+ name: "scope";
864
+ tableName: "vault_members";
865
+ dataType: "string";
866
+ columnType: "SQLiteText";
867
+ data: string;
868
+ driverParam: string;
869
+ notNull: false;
870
+ hasDefault: false;
871
+ isPrimaryKey: false;
872
+ isAutoincrement: false;
873
+ hasRuntimeDefault: false;
874
+ enumValues: [string, ...string[]];
875
+ baseColumn: never;
876
+ identity: undefined;
877
+ generated: undefined;
878
+ }, {}, {
879
+ length: undefined;
880
+ }>;
843
881
  generation: import("drizzle-orm/sqlite-core").SQLiteColumn<{
844
882
  name: "generation";
845
883
  tableName: "vault_members";
@@ -2193,6 +2231,25 @@ export declare const serviceBindings: import("drizzle-orm/sqlite-core").SQLiteTa
2193
2231
  }, {}, {
2194
2232
  length: undefined;
2195
2233
  }>;
2234
+ scope: import("drizzle-orm/sqlite-core").SQLiteColumn<{
2235
+ name: "scope";
2236
+ tableName: "service_bindings";
2237
+ dataType: "string";
2238
+ columnType: "SQLiteText";
2239
+ data: string;
2240
+ driverParam: string;
2241
+ notNull: false;
2242
+ hasDefault: false;
2243
+ isPrimaryKey: false;
2244
+ isAutoincrement: false;
2245
+ hasRuntimeDefault: false;
2246
+ enumValues: [string, ...string[]];
2247
+ baseColumn: never;
2248
+ identity: undefined;
2249
+ generated: undefined;
2250
+ }, {}, {
2251
+ length: undefined;
2252
+ }>;
2196
2253
  label: import("drizzle-orm/sqlite-core").SQLiteColumn<{
2197
2254
  name: "label";
2198
2255
  tableName: "service_bindings";
@@ -3237,6 +3294,25 @@ export declare const credentials: import("drizzle-orm/sqlite-core").SQLiteTableW
3237
3294
  }, {}, {
3238
3295
  length: number | undefined;
3239
3296
  }>;
3297
+ scope: import("drizzle-orm/sqlite-core").SQLiteColumn<{
3298
+ name: "scope";
3299
+ tableName: "credentials";
3300
+ dataType: "string";
3301
+ columnType: "SQLiteText";
3302
+ data: string;
3303
+ driverParam: string;
3304
+ notNull: false;
3305
+ hasDefault: false;
3306
+ isPrimaryKey: false;
3307
+ isAutoincrement: false;
3308
+ hasRuntimeDefault: false;
3309
+ enumValues: [string, ...string[]];
3310
+ baseColumn: never;
3311
+ identity: undefined;
3312
+ generated: undefined;
3313
+ }, {}, {
3314
+ length: undefined;
3315
+ }>;
3240
3316
  label: import("drizzle-orm/sqlite-core").SQLiteColumn<{
3241
3317
  name: "label";
3242
3318
  tableName: "credentials";
@@ -148,6 +148,8 @@ const vaultMembers = sqliteTable("vault_members", {
148
148
  principal: text().primaryKey(),
149
149
  status: text().notNull(),
150
150
  owner: flag("owner").notNull().default(false),
151
+ role: text(),
152
+ scope: text(),
151
153
  generation: integer().notNull().default(0),
152
154
  createdAt: integer("created_at", { mode: "number" }).notNull(),
153
155
  createdBy: text("created_by").notNull(),
@@ -350,6 +352,7 @@ const serviceBindings = sqliteTable("service_bindings", {
350
352
  issuer: text().notNull(),
351
353
  jwksUri: text("jwks_uri").notNull(),
352
354
  claims: text().notNull(),
355
+ scope: text(),
353
356
  label: text(),
354
357
  createdAt: createdAt(),
355
358
  createdBy: text("created_by").notNull(),
@@ -467,6 +470,7 @@ const credentials = sqliteTable("credentials", {
467
470
  generation: integer().notNull(),
468
471
  principal: text().notNull(),
469
472
  identityId: text("identity_id"),
473
+ scope: text(),
470
474
  label: text(),
471
475
  createdAt: createdAt(),
472
476
  createdBy: text("created_by").notNull(),
@@ -1,4 +1,4 @@
1
- import { i as Queryable } from "./database-edkMkG02.js";
1
+ import { i as Queryable } from "./database-C63WjCrC.js";
2
2
  import { Engine } from "./dialect.js";
3
3
  //#region src/schema-version.d.ts
4
4
  /**
@@ -8,32 +8,66 @@ import { count, sql } from "drizzle-orm";
8
8
  * too.
9
9
  */
10
10
  const KNOWN_MIGRATIONS = {
11
- postgres: [{
12
- "idx": 0,
13
- "version": "7",
14
- "when": 1791237720902,
15
- "tag": "0000_baseline",
16
- "breakpoints": true
17
- }, {
18
- "idx": 1,
19
- "version": "7",
20
- "when": 1791242674488,
21
- "tag": "0001_mcp_approvals",
22
- "breakpoints": true
23
- }].map((entry) => entry.tag),
24
- sqlite: [{
25
- "idx": 0,
26
- "version": "6",
27
- "when": 1791237724735,
28
- "tag": "0000_baseline",
29
- "breakpoints": true
30
- }, {
31
- "idx": 1,
32
- "version": "6",
33
- "when": 1791242675074,
34
- "tag": "0001_mcp_approvals",
35
- "breakpoints": true
36
- }].map((entry) => entry.tag)
11
+ postgres: [
12
+ {
13
+ "idx": 0,
14
+ "version": "7",
15
+ "when": 1791237720902,
16
+ "tag": "0000_baseline",
17
+ "breakpoints": true
18
+ },
19
+ {
20
+ "idx": 1,
21
+ "version": "7",
22
+ "when": 1791242674488,
23
+ "tag": "0001_mcp_approvals",
24
+ "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 2,
28
+ "version": "7",
29
+ "when": 1791619333441,
30
+ "tag": "0002_instance_roles",
31
+ "breakpoints": true
32
+ },
33
+ {
34
+ "idx": 3,
35
+ "version": "7",
36
+ "when": 1791676486914,
37
+ "tag": "0003_credential_scopes",
38
+ "breakpoints": true
39
+ }
40
+ ].map((entry) => entry.tag),
41
+ sqlite: [
42
+ {
43
+ "idx": 0,
44
+ "version": "6",
45
+ "when": 1791237724735,
46
+ "tag": "0000_baseline",
47
+ "breakpoints": true
48
+ },
49
+ {
50
+ "idx": 1,
51
+ "version": "6",
52
+ "when": 1791242675074,
53
+ "tag": "0001_mcp_approvals",
54
+ "breakpoints": true
55
+ },
56
+ {
57
+ "idx": 2,
58
+ "version": "6",
59
+ "when": 1791619334012,
60
+ "tag": "0002_instance_roles",
61
+ "breakpoints": true
62
+ },
63
+ {
64
+ "idx": 3,
65
+ "version": "6",
66
+ "when": 1791676487593,
67
+ "tag": "0003_credential_scopes",
68
+ "breakpoints": true
69
+ }
70
+ ].map((entry) => entry.tag)
37
71
  };
38
72
  /**
39
73
  * Whether the database has applied every migration this version ships:
package/dist/schema.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as secrets, a as deviceAuthorizations, b as vaultGrants, c as environmentsRelations, d as mcpConnections, f as oauthClients, g as secretVersions, h as secretReferences, i as credentials, l as identities, n as auditLog, o as dismissedKeys, p as projects, r as consumedTokens, s as environments, t as auditChainHead, u as mcpApprovals, v as secretsRelations, x as vaultMembers, y as serviceBindings } from "./schema-BqCB3XFm.js";
1
+ import { _ as secrets, a as deviceAuthorizations, b as vaultGrants, c as environmentsRelations, d as mcpConnections, f as oauthClients, g as secretVersions, h as secretReferences, i as credentials, l as identities, n as auditLog, o as dismissedKeys, p as projects, r as consumedTokens, s as environments, t as auditChainHead, u as mcpApprovals, v as secretsRelations, x as vaultMembers, y as serviceBindings } from "./schema-a7PkFgea.js";
2
2
  export { auditChainHead, auditLog, consumedTokens, credentials, deviceAuthorizations, dismissedKeys, environments, environmentsRelations, identities, mcpApprovals, mcpConnections, oauthClients, projects, secretReferences, secretVersions, secrets, secretsRelations, serviceBindings, vaultGrants, vaultMembers };
package/dist/schema.js CHANGED
@@ -169,6 +169,8 @@ const vaultMembers = pgTable("vault_members", {
169
169
  principal: text().primaryKey(),
170
170
  status: text().notNull(),
171
171
  owner: boolean().notNull().default(false),
172
+ role: text(),
173
+ scope: text(),
172
174
  generation: integer().notNull().default(0),
173
175
  createdAt: bigint("created_at", { mode: "number" }).notNull(),
174
176
  createdBy: text("created_by").notNull(),
@@ -398,6 +400,7 @@ const serviceBindings = pgTable("service_bindings", {
398
400
  issuer: text().notNull(),
399
401
  jwksUri: text("jwks_uri").notNull(),
400
402
  claims: text().notNull(),
403
+ scope: text(),
401
404
  label: text(),
402
405
  createdAt: createdAt(),
403
406
  createdBy: text("created_by").notNull(),
@@ -533,6 +536,7 @@ const credentials = pgTable("credentials", {
533
536
  generation: integer().notNull(),
534
537
  principal: text().notNull(),
535
538
  identityId: uuid("identity_id"),
539
+ scope: text(),
536
540
  label: text(),
537
541
  createdAt: createdAt(),
538
542
  createdBy: text("created_by").notNull(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coffre/db",
3
- "version": "0.4.5",
3
+ "version": "0.5.0",
4
4
  "description": "coffre's database: the schema, its migrations and the connections, on Postgres or SQLite.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -79,7 +79,7 @@
79
79
  "drizzle-orm": "0.45.2",
80
80
  "pg": "8.16.3",
81
81
  "pg-connection-string": "2.14.0",
82
- "@coffre/core": "0.4.5"
82
+ "@coffre/core": "0.5.0"
83
83
  },
84
84
  "devDependencies": {
85
85
  "@types/node": "26.1.1",
package/src/dialect.ts CHANGED
@@ -156,6 +156,20 @@ export function clockMillis(db: Queryable): SQL<number> {
156
156
  }
157
157
  }
158
158
 
159
+ /**
160
+ * Whether a timestamp column is still ahead of the database clock as the
161
+ * statement runs: a condition, for a write that must not land once the
162
+ * time it names has passed.
163
+ */
164
+ export function ahead(db: Queryable, column: SQLWrapper): SQL {
165
+ switch (engineOf(db)) {
166
+ case 'postgres':
167
+ return sql`${column} > clock_timestamp()`;
168
+ case 'sqlite':
169
+ return sql`${column} > CAST(unixepoch('subsec') * 1000 AS INTEGER)`;
170
+ }
171
+ }
172
+
159
173
  /**
160
174
  * The migrator's own ledger, read by readiness to tell a database that is
161
175
  * up but not yet migrated from one that is ready. Drizzle keeps it in a