@coffre/db 0.14.2 → 0.14.4

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 (40) hide show
  1. package/dist/connect.d.ts +1 -1
  2. package/dist/{database-Ds1Y79h6.d.ts → database-CFhTnnzM.d.ts} +1 -1
  3. package/dist/dialect.d.ts +4 -3
  4. package/dist/dialect.js +1 -0
  5. package/dist/grants.d.ts +1 -1
  6. package/dist/hyperdrive.d.ts +1 -1
  7. package/dist/index.d.ts +2 -2
  8. package/dist/log.d.ts +1 -1
  9. package/dist/migrate.d.ts +21 -5
  10. package/dist/migrate.js +49 -9
  11. package/dist/migrations/postgres/0019_backup_role.sql +63 -0
  12. package/dist/migrations/postgres/0020_vault_releases.sql +36 -0
  13. package/dist/migrations/postgres/meta/0019_snapshot.json +3295 -0
  14. package/dist/migrations/postgres/meta/0020_snapshot.json +3334 -0
  15. package/dist/migrations/postgres/meta/_journal.json +14 -0
  16. package/dist/migrations/sqlite/0017_vault_releases.sql +26 -0
  17. package/dist/migrations/sqlite/meta/0017_snapshot.json +3037 -0
  18. package/dist/migrations/sqlite/meta/_journal.json +7 -0
  19. package/dist/portable.d.ts +2 -2
  20. package/dist/schema-sqlite.d.ts +75 -1
  21. package/dist/schema-sqlite.js +21 -1
  22. package/dist/schema-version.d.ts +1 -1
  23. package/dist/schema-version.js +21 -0
  24. package/dist/{schema-DcVkJhCf.d.ts → schema-z8GcN_Xu.d.ts} +72 -2
  25. package/dist/schema.d.ts +2 -2
  26. package/dist/schema.js +23 -2
  27. package/package.json +2 -2
  28. package/src/dialect.ts +3 -2
  29. package/src/migrate-main.ts +6 -3
  30. package/src/migrate.ts +49 -10
  31. package/src/migrations/postgres/0019_backup_role.sql +63 -0
  32. package/src/migrations/postgres/0020_vault_releases.sql +36 -0
  33. package/src/migrations/postgres/meta/0019_snapshot.json +3295 -0
  34. package/src/migrations/postgres/meta/0020_snapshot.json +3334 -0
  35. package/src/migrations/postgres/meta/_journal.json +14 -0
  36. package/src/migrations/sqlite/0017_vault_releases.sql +26 -0
  37. package/src/migrations/sqlite/meta/0017_snapshot.json +3037 -0
  38. package/src/migrations/sqlite/meta/_journal.json +7 -0
  39. package/src/schema.sqlite.ts +22 -0
  40. package/src/schema.ts +24 -0
@@ -134,6 +134,20 @@
134
134
  "when": 1792871149580,
135
135
  "tag": "0018_rotate_app_key",
136
136
  "breakpoints": true
137
+ },
138
+ {
139
+ "idx": 19,
140
+ "version": "7",
141
+ "when": 1792937576477,
142
+ "tag": "0019_backup_role",
143
+ "breakpoints": true
144
+ },
145
+ {
146
+ "idx": 20,
147
+ "version": "7",
148
+ "when": 1793017780802,
149
+ "tag": "0020_vault_releases",
150
+ "breakpoints": true
137
151
  }
138
152
  ]
139
153
  }
@@ -0,0 +1,26 @@
1
+ -- Releases (W199): each key the vault released to a principal, and when last, which its bulk limit counts from a row per key, not from every read the principal ever made. A trigger keeps it from each vault `secret.read` allowed, as on Postgres. It only adds.
2
+ CREATE TABLE `vault_releases` (
3
+ `principal` text NOT NULL,
4
+ `key` text NOT NULL,
5
+ `released_at` integer NOT NULL,
6
+ PRIMARY KEY(`principal`, `key`)
7
+ );
8
+ --> statement-breakpoint
9
+ -- Each key the entry names, as the count read them before (vault_releases_keep on Postgres). The SELECT's WHERE keeps
10
+ -- SQLite from reading ON CONFLICT as a join's.
11
+ CREATE TRIGGER `audit_log_releases` AFTER INSERT ON `audit_log`
12
+ WHEN NEW.`author` = 'vault' AND NEW.`action` = 'secret.read' AND NEW.`decision` = 'allow'
13
+ BEGIN
14
+ INSERT INTO `vault_releases` (`principal`, `key`, `released_at`)
15
+ SELECT DISTINCT NEW.`actor`, coalesce(NEW.`secret_id`, CASE WHEN one.type = 'object' AND json_type(one.value, '$.secretId') = 'text' THEN json_extract(one.value, '$.secretId') END, 'entry:' || NEW.`seq`), NEW.`occurred_at`
16
+ FROM (SELECT 1) AS entry
17
+ LEFT JOIN json_each(CASE WHEN NEW.`secret_id` IS NULL AND json_valid(NEW.`metadata`) THEN CASE WHEN json_type(NEW.`metadata`, '$.secrets') = 'array' THEN NEW.`metadata` END END, '$.secrets') AS one
18
+ WHERE true
19
+ ON CONFLICT (`principal`, `key`) DO UPDATE SET `released_at` = max(`released_at`, excluded.`released_at`);
20
+ END;--> statement-breakpoint
21
+ INSERT INTO `vault_releases` (`principal`, `key`, `released_at`)
22
+ SELECT e.`actor`, coalesce(e.`secret_id`, CASE WHEN one.type = 'object' AND json_type(one.value, '$.secretId') = 'text' THEN json_extract(one.value, '$.secretId') END, 'entry:' || e.`seq`), max(e.`occurred_at`)
23
+ FROM `audit_log` e
24
+ LEFT JOIN json_each(CASE WHEN e.`secret_id` IS NULL AND json_valid(e.`metadata`) THEN CASE WHEN json_type(e.`metadata`, '$.secrets') = 'array' THEN e.`metadata` END END, '$.secrets') AS one
25
+ WHERE e.`author` = 'vault' AND e.`action` = 'secret.read' AND e.`decision` = 'allow'
26
+ GROUP BY 1, 2;