@coffre/db 0.9.0 → 0.10.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.
- package/dist/connect.d.ts +1 -1
- package/dist/{database-hd1hAll-.d.ts → database-BFnO2b2P.d.ts} +1 -1
- package/dist/dialect.d.ts +1 -1
- package/dist/grants.d.ts +2 -2
- package/dist/hyperdrive.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/log.d.ts +7 -1
- package/dist/log.js +11 -1
- package/dist/migrations/postgres/0012_sensitive_values.sql +18 -0
- package/dist/migrations/postgres/0013_contributor_role.sql +5 -0
- package/dist/migrations/postgres/0014_custom_roles.sql +4 -0
- package/dist/migrations/postgres/meta/0012_snapshot.json +3004 -0
- package/dist/migrations/postgres/meta/0013_snapshot.json +3004 -0
- package/dist/migrations/postgres/meta/0014_snapshot.json +3000 -0
- package/dist/migrations/postgres/meta/_journal.json +21 -0
- package/dist/migrations/sqlite/0012_sensitive_values.sql +15 -0
- package/dist/migrations/sqlite/0013_contributor_role.sql +28 -0
- package/dist/migrations/sqlite/0014_custom_roles.sql +27 -0
- package/dist/migrations/sqlite/meta/0012_snapshot.json +2726 -0
- package/dist/migrations/sqlite/meta/0013_snapshot.json +2726 -0
- package/dist/migrations/sqlite/meta/0014_snapshot.json +2722 -0
- package/dist/migrations/sqlite/meta/_journal.json +21 -0
- package/dist/portable.d.ts +2 -2
- package/dist/{schema-CCYKTG-E.d.ts → schema-NBVA9q-s.d.ts} +17 -0
- package/dist/schema-sqlite.d.ts +17 -0
- package/dist/schema-sqlite.js +3 -6
- package/dist/schema-version.d.ts +1 -1
- package/dist/schema-version.js +42 -0
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +3 -7
- package/package.json +2 -2
- package/src/grants.ts +3 -2
- package/src/log.ts +16 -0
- package/src/migrations/postgres/0012_sensitive_values.sql +18 -0
- package/src/migrations/postgres/0013_contributor_role.sql +5 -0
- package/src/migrations/postgres/0014_custom_roles.sql +4 -0
- package/src/migrations/postgres/meta/0012_snapshot.json +3004 -0
- package/src/migrations/postgres/meta/0013_snapshot.json +3004 -0
- package/src/migrations/postgres/meta/0014_snapshot.json +3000 -0
- package/src/migrations/postgres/meta/_journal.json +21 -0
- package/src/migrations/sqlite/0012_sensitive_values.sql +15 -0
- package/src/migrations/sqlite/0013_contributor_role.sql +28 -0
- package/src/migrations/sqlite/0014_custom_roles.sql +27 -0
- package/src/migrations/sqlite/meta/0012_snapshot.json +2726 -0
- package/src/migrations/sqlite/meta/0013_snapshot.json +2726 -0
- package/src/migrations/sqlite/meta/0014_snapshot.json +2722 -0
- package/src/migrations/sqlite/meta/_journal.json +21 -0
- package/src/schema.sqlite.ts +8 -9
- package/src/schema.ts +8 -10
|
@@ -85,6 +85,27 @@
|
|
|
85
85
|
"when": 1792317460399,
|
|
86
86
|
"tag": "0011_plain_values",
|
|
87
87
|
"breakpoints": true
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"idx": 12,
|
|
91
|
+
"version": "7",
|
|
92
|
+
"when": 1792340919452,
|
|
93
|
+
"tag": "0012_sensitive_values",
|
|
94
|
+
"breakpoints": true
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"idx": 13,
|
|
98
|
+
"version": "7",
|
|
99
|
+
"when": 1792343374226,
|
|
100
|
+
"tag": "0013_contributor_role",
|
|
101
|
+
"breakpoints": true
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"idx": 14,
|
|
105
|
+
"version": "7",
|
|
106
|
+
"when": 1792345776262,
|
|
107
|
+
"tag": "0014_custom_roles",
|
|
108
|
+
"breakpoints": true
|
|
88
109
|
}
|
|
89
110
|
]
|
|
90
111
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- Sensitive values (0.10): a version never handed back to a person, which the vault's wrap of its data key binds. Defaults to false, so the release before writes on as it did.
|
|
2
|
+
ALTER TABLE `secret_versions` ADD `sensitive` integer DEFAULT false NOT NULL;--> statement-breakpoint
|
|
3
|
+
-- A version is still only ever erased: its sensitivity with the rest of it.
|
|
4
|
+
DROP TRIGGER `secret_versions_erase_only`;--> statement-breakpoint
|
|
5
|
+
CREATE TRIGGER `secret_versions_erase_only` BEFORE UPDATE ON `secret_versions`
|
|
6
|
+
WHEN length(NEW.`ciphertext`) <> 0 OR length(NEW.`wrapped_dek`) <> 0 OR NEW.`plaintext` IS NOT NULL
|
|
7
|
+
OR NEW.`id` IS NOT OLD.`id` OR NEW.`secret_id` IS NOT OLD.`secret_id` OR NEW.`version` IS NOT OLD.`version`
|
|
8
|
+
OR NEW.`envelope_version` IS NOT OLD.`envelope_version` OR NEW.`iv` IS NOT OLD.`iv` OR NEW.`auth_tag` IS NOT OLD.`auth_tag`
|
|
9
|
+
OR NEW.`kek_provider` IS NOT OLD.`kek_provider` OR NEW.`kek_id` IS NOT OLD.`kek_id` OR NEW.`kek_version` IS NOT OLD.`kek_version`
|
|
10
|
+
OR NEW.`created_at` IS NOT OLD.`created_at` OR NEW.`created_by` IS NOT OLD.`created_by`
|
|
11
|
+
OR NEW.`recipe` IS NOT OLD.`recipe` OR NEW.`pair_id` IS NOT OLD.`pair_id` OR NEW.`pair_half` IS NOT OLD.`pair_half`
|
|
12
|
+
OR NEW.`sensitive` IS NOT OLD.`sensitive`
|
|
13
|
+
BEGIN
|
|
14
|
+
SELECT RAISE(ABORT, 'a secret version is only ever erased');
|
|
15
|
+
END;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-- The Contributor role (0.10): use and write, never read. The role checks widen to it, which the release before never grants.
|
|
2
|
+
PRAGMA foreign_keys=OFF;--> statement-breakpoint
|
|
3
|
+
CREATE TABLE `__new_vault_grants` (
|
|
4
|
+
`principal` text NOT NULL,
|
|
5
|
+
`project_id` text,
|
|
6
|
+
`environment_id` text,
|
|
7
|
+
`environment_slug` text,
|
|
8
|
+
`role` text NOT NULL,
|
|
9
|
+
`expires_at` integer,
|
|
10
|
+
`granted_at` integer NOT NULL,
|
|
11
|
+
`granted_by` text NOT NULL,
|
|
12
|
+
FOREIGN KEY (`principal`) REFERENCES `vault_members`(`principal`) ON UPDATE no action ON DELETE restrict,
|
|
13
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
14
|
+
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
15
|
+
CONSTRAINT "vault_grants_one_place" CHECK((("__new_vault_grants"."project_id" IS NULL) <> ("__new_vault_grants"."environment_id" IS NULL) AND "__new_vault_grants"."environment_slug" IS NULL) OR ("__new_vault_grants"."project_id" IS NULL AND "__new_vault_grants"."environment_id" IS NULL)),
|
|
16
|
+
CONSTRAINT "vault_grants_environment_slug_check" CHECK("__new_vault_grants"."environment_slug" IS NULL OR (length("__new_vault_grants"."environment_slug") BETWEEN 1 AND 63 AND "__new_vault_grants"."environment_slug" GLOB '[a-z0-9]*' AND "__new_vault_grants"."environment_slug" NOT GLOB '*[^a-z0-9-]*')),
|
|
17
|
+
CONSTRAINT "vault_grants_role_check" CHECK("__new_vault_grants"."role" IN ('viewer', 'contributor', 'developer', 'maintainer', 'access-manager', 'auditor', 'owner')),
|
|
18
|
+
CONSTRAINT "vault_grants_environment_role_check" CHECK(("__new_vault_grants"."environment_id" IS NULL AND "__new_vault_grants"."environment_slug" IS NULL) OR "__new_vault_grants"."role" IN ('viewer', 'contributor', 'developer', 'auditor'))
|
|
19
|
+
);
|
|
20
|
+
--> statement-breakpoint
|
|
21
|
+
INSERT INTO `__new_vault_grants`("principal", "project_id", "environment_id", "environment_slug", "role", "expires_at", "granted_at", "granted_by") SELECT "principal", "project_id", "environment_id", "environment_slug", "role", "expires_at", "granted_at", "granted_by" FROM `vault_grants`;--> statement-breakpoint
|
|
22
|
+
DROP TABLE `vault_grants`;--> statement-breakpoint
|
|
23
|
+
ALTER TABLE `__new_vault_grants` RENAME TO `vault_grants`;--> statement-breakpoint
|
|
24
|
+
PRAGMA foreign_keys=ON;--> statement-breakpoint
|
|
25
|
+
CREATE UNIQUE INDEX `vault_grants_on_every_project` ON `vault_grants` (`principal`) WHERE "vault_grants"."project_id" IS NULL AND "vault_grants"."environment_id" IS NULL AND "vault_grants"."environment_slug" IS NULL;--> statement-breakpoint
|
|
26
|
+
CREATE UNIQUE INDEX `vault_grants_on_project` ON `vault_grants` (`principal`,`project_id`);--> statement-breakpoint
|
|
27
|
+
CREATE UNIQUE INDEX `vault_grants_on_environment` ON `vault_grants` (`principal`,`environment_id`);--> statement-breakpoint
|
|
28
|
+
CREATE UNIQUE INDEX `vault_grants_on_environment_slug` ON `vault_grants` (`principal`,`environment_slug`);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-- Roles an Owner makes (0.10): a grant names a role by its id, which the vault's policy defines; which of them an environment may be granted, the vault decides. The checks widen: the release before grants only the roles it ships.
|
|
2
|
+
PRAGMA foreign_keys=OFF;--> statement-breakpoint
|
|
3
|
+
CREATE TABLE `__new_vault_grants` (
|
|
4
|
+
`principal` text NOT NULL,
|
|
5
|
+
`project_id` text,
|
|
6
|
+
`environment_id` text,
|
|
7
|
+
`environment_slug` text,
|
|
8
|
+
`role` text NOT NULL,
|
|
9
|
+
`expires_at` integer,
|
|
10
|
+
`granted_at` integer NOT NULL,
|
|
11
|
+
`granted_by` text NOT NULL,
|
|
12
|
+
FOREIGN KEY (`principal`) REFERENCES `vault_members`(`principal`) ON UPDATE no action ON DELETE restrict,
|
|
13
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
14
|
+
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
15
|
+
CONSTRAINT "vault_grants_one_place" CHECK((("__new_vault_grants"."project_id" IS NULL) <> ("__new_vault_grants"."environment_id" IS NULL) AND "__new_vault_grants"."environment_slug" IS NULL) OR ("__new_vault_grants"."project_id" IS NULL AND "__new_vault_grants"."environment_id" IS NULL)),
|
|
16
|
+
CONSTRAINT "vault_grants_environment_slug_check" CHECK("__new_vault_grants"."environment_slug" IS NULL OR (length("__new_vault_grants"."environment_slug") BETWEEN 1 AND 63 AND "__new_vault_grants"."environment_slug" GLOB '[a-z0-9]*' AND "__new_vault_grants"."environment_slug" NOT GLOB '*[^a-z0-9-]*')),
|
|
17
|
+
CONSTRAINT "vault_grants_role_check" CHECK(length("__new_vault_grants"."role") BETWEEN 2 AND 32 AND "__new_vault_grants"."role" GLOB '[a-z]*' AND "__new_vault_grants"."role" NOT GLOB '*[^a-z0-9-]*')
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
INSERT INTO `__new_vault_grants`("principal", "project_id", "environment_id", "environment_slug", "role", "expires_at", "granted_at", "granted_by") SELECT "principal", "project_id", "environment_id", "environment_slug", "role", "expires_at", "granted_at", "granted_by" FROM `vault_grants`;--> statement-breakpoint
|
|
21
|
+
DROP TABLE `vault_grants`;--> statement-breakpoint
|
|
22
|
+
ALTER TABLE `__new_vault_grants` RENAME TO `vault_grants`;--> statement-breakpoint
|
|
23
|
+
PRAGMA foreign_keys=ON;--> statement-breakpoint
|
|
24
|
+
CREATE UNIQUE INDEX `vault_grants_on_every_project` ON `vault_grants` (`principal`) WHERE "vault_grants"."project_id" IS NULL AND "vault_grants"."environment_id" IS NULL AND "vault_grants"."environment_slug" IS NULL;--> statement-breakpoint
|
|
25
|
+
CREATE UNIQUE INDEX `vault_grants_on_project` ON `vault_grants` (`principal`,`project_id`);--> statement-breakpoint
|
|
26
|
+
CREATE UNIQUE INDEX `vault_grants_on_environment` ON `vault_grants` (`principal`,`environment_id`);--> statement-breakpoint
|
|
27
|
+
CREATE UNIQUE INDEX `vault_grants_on_environment_slug` ON `vault_grants` (`principal`,`environment_slug`);
|