@coffre/db 0.14.3 → 0.14.5
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/dist/connect.d.ts +1 -1
- package/dist/{database-Ds1Y79h6.d.ts → database-wq1AVRAP.d.ts} +1 -1
- package/dist/dialect.d.ts +1 -1
- package/dist/grants.d.ts +1 -1
- package/dist/hyperdrive.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/log.d.ts +27 -1
- package/dist/log.js +50 -1
- package/dist/migrations/postgres/0020_vault_releases.sql +36 -0
- package/dist/migrations/postgres/0021_prune_vault_releases.sql +19 -0
- package/dist/migrations/postgres/meta/0020_snapshot.json +3334 -0
- package/dist/migrations/postgres/meta/0021_snapshot.json +3334 -0
- package/dist/migrations/postgres/meta/_journal.json +14 -0
- package/dist/migrations/sqlite/0017_vault_releases.sql +26 -0
- package/dist/migrations/sqlite/meta/0017_snapshot.json +3037 -0
- package/dist/migrations/sqlite/meta/_journal.json +7 -0
- package/dist/portable.d.ts +2 -2
- package/dist/{schema-DcVkJhCf.d.ts → schema-BfQEBqFv.d.ts} +73 -2
- package/dist/schema-sqlite.d.ts +75 -1
- package/dist/schema-sqlite.js +21 -1
- package/dist/schema-version.d.ts +1 -1
- package/dist/schema-version.js +21 -0
- package/dist/schema.d.ts +2 -2
- package/dist/schema.js +24 -2
- package/package.json +2 -2
- package/src/log.ts +52 -0
- package/src/migrations/postgres/0020_vault_releases.sql +36 -0
- package/src/migrations/postgres/0021_prune_vault_releases.sql +19 -0
- package/src/migrations/postgres/meta/0020_snapshot.json +3334 -0
- package/src/migrations/postgres/meta/0021_snapshot.json +3334 -0
- package/src/migrations/postgres/meta/_journal.json +14 -0
- package/src/migrations/sqlite/0017_vault_releases.sql +26 -0
- package/src/migrations/sqlite/meta/0017_snapshot.json +3037 -0
- package/src/migrations/sqlite/meta/_journal.json +7 -0
- package/src/schema.sqlite.ts +22 -0
- package/src/schema.ts +25 -0
|
@@ -141,6 +141,20 @@
|
|
|
141
141
|
"when": 1792937576477,
|
|
142
142
|
"tag": "0019_backup_role",
|
|
143
143
|
"breakpoints": true
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"idx": 20,
|
|
147
|
+
"version": "7",
|
|
148
|
+
"when": 1793017780802,
|
|
149
|
+
"tag": "0020_vault_releases",
|
|
150
|
+
"breakpoints": true
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"idx": 21,
|
|
154
|
+
"version": "7",
|
|
155
|
+
"when": 1793035191911,
|
|
156
|
+
"tag": "0021_prune_vault_releases",
|
|
157
|
+
"breakpoints": true
|
|
144
158
|
}
|
|
145
159
|
]
|
|
146
160
|
}
|
|
@@ -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;
|