@coffre/db 0.8.2 → 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.
Files changed (65) hide show
  1. package/dist/connect.d.ts +1 -1
  2. package/dist/{database-BEnexh-3.d.ts → database-BFnO2b2P.d.ts} +1 -1
  3. package/dist/dialect.d.ts +1 -1
  4. package/dist/grants.d.ts +2 -2
  5. package/dist/hyperdrive.d.ts +1 -1
  6. package/dist/index.d.ts +2 -2
  7. package/dist/log.d.ts +7 -1
  8. package/dist/log.js +11 -1
  9. package/dist/migrations/postgres/0010_handle_places.sql +2 -0
  10. package/dist/migrations/postgres/0011_plain_values.sql +19 -0
  11. package/dist/migrations/postgres/0012_sensitive_values.sql +18 -0
  12. package/dist/migrations/postgres/0013_contributor_role.sql +5 -0
  13. package/dist/migrations/postgres/0014_custom_roles.sql +4 -0
  14. package/dist/migrations/postgres/meta/0010_snapshot.json +2991 -0
  15. package/dist/migrations/postgres/meta/0011_snapshot.json +2997 -0
  16. package/dist/migrations/postgres/meta/0012_snapshot.json +3004 -0
  17. package/dist/migrations/postgres/meta/0013_snapshot.json +3004 -0
  18. package/dist/migrations/postgres/meta/0014_snapshot.json +3000 -0
  19. package/dist/migrations/postgres/meta/_journal.json +35 -0
  20. package/dist/migrations/sqlite/0010_handle_places.sql +2 -0
  21. package/dist/migrations/sqlite/0011_plain_values.sql +14 -0
  22. package/dist/migrations/sqlite/0012_sensitive_values.sql +15 -0
  23. package/dist/migrations/sqlite/0013_contributor_role.sql +28 -0
  24. package/dist/migrations/sqlite/0014_custom_roles.sql +27 -0
  25. package/dist/migrations/sqlite/meta/0010_snapshot.json +2711 -0
  26. package/dist/migrations/sqlite/meta/0011_snapshot.json +2718 -0
  27. package/dist/migrations/sqlite/meta/0012_snapshot.json +2726 -0
  28. package/dist/migrations/sqlite/meta/0013_snapshot.json +2726 -0
  29. package/dist/migrations/sqlite/meta/0014_snapshot.json +2722 -0
  30. package/dist/migrations/sqlite/meta/_journal.json +35 -0
  31. package/dist/portable.d.ts +2 -2
  32. package/dist/{schema-BZRkBJQZ.d.ts → schema-NBVA9q-s.d.ts} +51 -0
  33. package/dist/schema-sqlite.d.ts +55 -0
  34. package/dist/schema-sqlite.js +5 -6
  35. package/dist/schema-version.d.ts +1 -1
  36. package/dist/schema-version.js +70 -0
  37. package/dist/schema.d.ts +1 -1
  38. package/dist/schema.js +5 -7
  39. package/package.json +2 -2
  40. package/src/grants.ts +3 -2
  41. package/src/log.ts +16 -0
  42. package/src/migrations/postgres/0010_handle_places.sql +2 -0
  43. package/src/migrations/postgres/0011_plain_values.sql +19 -0
  44. package/src/migrations/postgres/0012_sensitive_values.sql +18 -0
  45. package/src/migrations/postgres/0013_contributor_role.sql +5 -0
  46. package/src/migrations/postgres/0014_custom_roles.sql +4 -0
  47. package/src/migrations/postgres/meta/0010_snapshot.json +2991 -0
  48. package/src/migrations/postgres/meta/0011_snapshot.json +2997 -0
  49. package/src/migrations/postgres/meta/0012_snapshot.json +3004 -0
  50. package/src/migrations/postgres/meta/0013_snapshot.json +3004 -0
  51. package/src/migrations/postgres/meta/0014_snapshot.json +3000 -0
  52. package/src/migrations/postgres/meta/_journal.json +35 -0
  53. package/src/migrations/sqlite/0010_handle_places.sql +2 -0
  54. package/src/migrations/sqlite/0011_plain_values.sql +14 -0
  55. package/src/migrations/sqlite/0012_sensitive_values.sql +15 -0
  56. package/src/migrations/sqlite/0013_contributor_role.sql +28 -0
  57. package/src/migrations/sqlite/0014_custom_roles.sql +27 -0
  58. package/src/migrations/sqlite/meta/0010_snapshot.json +2711 -0
  59. package/src/migrations/sqlite/meta/0011_snapshot.json +2718 -0
  60. package/src/migrations/sqlite/meta/0012_snapshot.json +2726 -0
  61. package/src/migrations/sqlite/meta/0013_snapshot.json +2726 -0
  62. package/src/migrations/sqlite/meta/0014_snapshot.json +2722 -0
  63. package/src/migrations/sqlite/meta/_journal.json +35 -0
  64. package/src/schema.sqlite.ts +15 -9
  65. package/src/schema.ts +15 -10
@@ -71,6 +71,41 @@
71
71
  "when": 1792281879553,
72
72
  "tag": "0009_handles",
73
73
  "breakpoints": true
74
+ },
75
+ {
76
+ "idx": 10,
77
+ "version": "7",
78
+ "when": 1792314999425,
79
+ "tag": "0010_handle_places",
80
+ "breakpoints": true
81
+ },
82
+ {
83
+ "idx": 11,
84
+ "version": "7",
85
+ "when": 1792317460399,
86
+ "tag": "0011_plain_values",
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
74
109
  }
75
110
  ]
76
111
  }
@@ -0,0 +1,2 @@
1
+ -- A handle's places (0.9): the environments it was made for, by id and whether as @me, which the proxy's stable URL resolves to. A nullable column the release before neither reads nor writes; the app sets it when it makes a handle, and never after (no UPDATE grant).
2
+ ALTER TABLE `credentials` ADD `places` text;
@@ -0,0 +1,14 @@
1
+ -- Plain values (0.9): a version of a key marked not secret holds its value in the clear too. Nullable, so the release before writes on as it did.
2
+ ALTER TABLE `secret_versions` ADD `plaintext` text;--> statement-breakpoint
3
+ -- A version is still only ever erased, and an erased one holds no value, in the clear or not.
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
+ BEGIN
13
+ SELECT RAISE(ABORT, 'a secret version is only ever erased');
14
+ END;
@@ -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`);