@shipfox/api-secrets 2.0.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 (288) hide show
  1. package/.turbo/turbo-build.log +2 -0
  2. package/.turbo/turbo-type$colon$emit.log +1 -0
  3. package/.turbo/turbo-type.log +1 -0
  4. package/CHANGELOG.md +116 -0
  5. package/LICENSE +21 -0
  6. package/README.md +207 -0
  7. package/dist/config.d.ts +8 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +38 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/core/crypto.d.ts +25 -0
  12. package/dist/core/crypto.d.ts.map +1 -0
  13. package/dist/core/crypto.js +85 -0
  14. package/dist/core/crypto.js.map +1 -0
  15. package/dist/core/dek-manager.d.ts +16 -0
  16. package/dist/core/dek-manager.d.ts.map +1 -0
  17. package/dist/core/dek-manager.js +85 -0
  18. package/dist/core/dek-manager.js.map +1 -0
  19. package/dist/core/errors.d.ts +53 -0
  20. package/dist/core/errors.d.ts.map +1 -0
  21. package/dist/core/errors.js +86 -0
  22. package/dist/core/errors.js.map +1 -0
  23. package/dist/core/fingerprint.d.ts +2 -0
  24. package/dist/core/fingerprint.d.ts.map +1 -0
  25. package/dist/core/fingerprint.js +9 -0
  26. package/dist/core/fingerprint.js.map +1 -0
  27. package/dist/core/index.d.ts +30 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +97 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/key-provider.d.ts +17 -0
  32. package/dist/core/key-provider.d.ts.map +1 -0
  33. package/dist/core/key-provider.js +45 -0
  34. package/dist/core/key-provider.js.map +1 -0
  35. package/dist/core/local-secret-store.d.ts +19 -0
  36. package/dist/core/local-secret-store.d.ts.map +1 -0
  37. package/dist/core/local-secret-store.js +40 -0
  38. package/dist/core/local-secret-store.js.map +1 -0
  39. package/dist/core/management.d.ts +37 -0
  40. package/dist/core/management.d.ts.map +1 -0
  41. package/dist/core/management.js +403 -0
  42. package/dist/core/management.js.map +1 -0
  43. package/dist/core/rotate-kek.d.ts +10 -0
  44. package/dist/core/rotate-kek.d.ts.map +1 -0
  45. package/dist/core/rotate-kek.js +94 -0
  46. package/dist/core/rotate-kek.js.map +1 -0
  47. package/dist/core/secret-store.d.ts +33 -0
  48. package/dist/core/secret-store.d.ts.map +1 -0
  49. package/dist/core/secret-store.js +209 -0
  50. package/dist/core/secret-store.js.map +1 -0
  51. package/dist/core/store-resolver.d.ts +18 -0
  52. package/dist/core/store-resolver.d.ts.map +1 -0
  53. package/dist/core/store-resolver.js +10 -0
  54. package/dist/core/store-resolver.js.map +1 -0
  55. package/dist/core/store-validation.d.ts +11 -0
  56. package/dist/core/store-validation.d.ts.map +1 -0
  57. package/dist/core/store-validation.js +30 -0
  58. package/dist/core/store-validation.js.map +1 -0
  59. package/dist/core/value-cipher.d.ts +10 -0
  60. package/dist/core/value-cipher.d.ts.map +1 -0
  61. package/dist/core/value-cipher.js +22 -0
  62. package/dist/core/value-cipher.js.map +1 -0
  63. package/dist/core/variable-store.d.ts +24 -0
  64. package/dist/core/variable-store.d.ts.map +1 -0
  65. package/dist/core/variable-store.js +194 -0
  66. package/dist/core/variable-store.js.map +1 -0
  67. package/dist/db/cap.d.ts +8 -0
  68. package/dist/db/cap.d.ts.map +1 -0
  69. package/dist/db/cap.js +39 -0
  70. package/dist/db/cap.js.map +1 -0
  71. package/dist/db/data-keys.d.ts +24 -0
  72. package/dist/db/data-keys.d.ts.map +1 -0
  73. package/dist/db/data-keys.js +61 -0
  74. package/dist/db/data-keys.js.map +1 -0
  75. package/dist/db/db.d.ts +1254 -0
  76. package/dist/db/db.d.ts.map +1 -0
  77. package/dist/db/db.js +24 -0
  78. package/dist/db/db.js.map +1 -0
  79. package/dist/db/index.d.ts +13 -0
  80. package/dist/db/index.d.ts.map +1 -0
  81. package/dist/db/index.js +15 -0
  82. package/dist/db/index.js.map +1 -0
  83. package/dist/db/management.d.ts +50 -0
  84. package/dist/db/management.d.ts.map +1 -0
  85. package/dist/db/management.js +127 -0
  86. package/dist/db/management.js.map +1 -0
  87. package/dist/db/schema/common.d.ts +3 -0
  88. package/dist/db/schema/common.d.ts.map +1 -0
  89. package/dist/db/schema/common.js +8 -0
  90. package/dist/db/schema/common.js.map +1 -0
  91. package/dist/db/schema/data-keys.d.ts +103 -0
  92. package/dist/db/schema/data-keys.d.ts.map +1 -0
  93. package/dist/db/schema/data-keys.js +24 -0
  94. package/dist/db/schema/data-keys.js.map +1 -0
  95. package/dist/db/schema/outbox.d.ts +195 -0
  96. package/dist/db/schema/outbox.d.ts.map +1 -0
  97. package/dist/db/schema/outbox.js +5 -0
  98. package/dist/db/schema/outbox.js.map +1 -0
  99. package/dist/db/schema/values.d.ts +193 -0
  100. package/dist/db/schema/values.d.ts.map +1 -0
  101. package/dist/db/schema/values.js +43 -0
  102. package/dist/db/schema/values.js.map +1 -0
  103. package/dist/db/schema/variables.d.ts +175 -0
  104. package/dist/db/schema/variables.d.ts.map +1 -0
  105. package/dist/db/schema/variables.js +41 -0
  106. package/dist/db/schema/variables.js.map +1 -0
  107. package/dist/db/scope.d.ts +20 -0
  108. package/dist/db/scope.d.ts.map +1 -0
  109. package/dist/db/scope.js +19 -0
  110. package/dist/db/scope.js.map +1 -0
  111. package/dist/db/values.d.ts +33 -0
  112. package/dist/db/values.d.ts.map +1 -0
  113. package/dist/db/values.js +119 -0
  114. package/dist/db/values.js.map +1 -0
  115. package/dist/db/variables.d.ts +32 -0
  116. package/dist/db/variables.d.ts.map +1 -0
  117. package/dist/db/variables.js +117 -0
  118. package/dist/db/variables.js.map +1 -0
  119. package/dist/index.d.ts +4 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +28 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/metrics/index.d.ts +3 -0
  124. package/dist/metrics/index.d.ts.map +1 -0
  125. package/dist/metrics/index.js +4 -0
  126. package/dist/metrics/index.js.map +1 -0
  127. package/dist/metrics/instance.d.ts +39 -0
  128. package/dist/metrics/instance.d.ts.map +1 -0
  129. package/dist/metrics/instance.js +151 -0
  130. package/dist/metrics/instance.js.map +1 -0
  131. package/dist/metrics/service.d.ts +2 -0
  132. package/dist/metrics/service.d.ts.map +1 -0
  133. package/dist/metrics/service.js +21 -0
  134. package/dist/metrics/service.js.map +1 -0
  135. package/dist/presentation/dto/index.d.ts +2 -0
  136. package/dist/presentation/dto/index.d.ts.map +1 -0
  137. package/dist/presentation/dto/index.js +3 -0
  138. package/dist/presentation/dto/index.js.map +1 -0
  139. package/dist/presentation/dto/management.d.ts +7 -0
  140. package/dist/presentation/dto/management.d.ts.map +1 -0
  141. package/dist/presentation/dto/management.js +32 -0
  142. package/dist/presentation/dto/management.js.map +1 -0
  143. package/dist/presentation/e2eRoutes/create-secret.d.ts +2 -0
  144. package/dist/presentation/e2eRoutes/create-secret.d.ts.map +1 -0
  145. package/dist/presentation/e2eRoutes/create-secret.js +34 -0
  146. package/dist/presentation/e2eRoutes/create-secret.js.map +1 -0
  147. package/dist/presentation/e2eRoutes/create-variable.d.ts +2 -0
  148. package/dist/presentation/e2eRoutes/create-variable.d.ts.map +1 -0
  149. package/dist/presentation/e2eRoutes/create-variable.js +34 -0
  150. package/dist/presentation/e2eRoutes/create-variable.js.map +1 -0
  151. package/dist/presentation/e2eRoutes/index.d.ts +3 -0
  152. package/dist/presentation/e2eRoutes/index.d.ts.map +1 -0
  153. package/dist/presentation/e2eRoutes/index.js +11 -0
  154. package/dist/presentation/e2eRoutes/index.js.map +1 -0
  155. package/dist/presentation/routes/auth.d.ts +16 -0
  156. package/dist/presentation/routes/auth.d.ts.map +1 -0
  157. package/dist/presentation/routes/auth.js +42 -0
  158. package/dist/presentation/routes/auth.js.map +1 -0
  159. package/dist/presentation/routes/batch-secrets.d.ts +2 -0
  160. package/dist/presentation/routes/batch-secrets.d.ts.map +1 -0
  161. package/dist/presentation/routes/batch-secrets.js +44 -0
  162. package/dist/presentation/routes/batch-secrets.js.map +1 -0
  163. package/dist/presentation/routes/batch-variables.d.ts +2 -0
  164. package/dist/presentation/routes/batch-variables.d.ts.map +1 -0
  165. package/dist/presentation/routes/batch-variables.js +44 -0
  166. package/dist/presentation/routes/batch-variables.js.map +1 -0
  167. package/dist/presentation/routes/cursor.d.ts +3 -0
  168. package/dist/presentation/routes/cursor.d.ts.map +1 -0
  169. package/dist/presentation/routes/cursor.js +19 -0
  170. package/dist/presentation/routes/cursor.js.map +1 -0
  171. package/dist/presentation/routes/delete-secret.d.ts +2 -0
  172. package/dist/presentation/routes/delete-secret.d.ts.map +1 -0
  173. package/dist/presentation/routes/delete-secret.js +40 -0
  174. package/dist/presentation/routes/delete-secret.js.map +1 -0
  175. package/dist/presentation/routes/delete-variable.d.ts +2 -0
  176. package/dist/presentation/routes/delete-variable.d.ts.map +1 -0
  177. package/dist/presentation/routes/delete-variable.js +40 -0
  178. package/dist/presentation/routes/delete-variable.js.map +1 -0
  179. package/dist/presentation/routes/errors.d.ts +2 -0
  180. package/dist/presentation/routes/errors.d.ts.map +1 -0
  181. package/dist/presentation/routes/errors.js +73 -0
  182. package/dist/presentation/routes/errors.js.map +1 -0
  183. package/dist/presentation/routes/get-variable.d.ts +2 -0
  184. package/dist/presentation/routes/get-variable.d.ts.map +1 -0
  185. package/dist/presentation/routes/get-variable.js +42 -0
  186. package/dist/presentation/routes/get-variable.js.map +1 -0
  187. package/dist/presentation/routes/index.d.ts +3 -0
  188. package/dist/presentation/routes/index.d.ts.map +1 -0
  189. package/dist/presentation/routes/index.js +29 -0
  190. package/dist/presentation/routes/index.js.map +1 -0
  191. package/dist/presentation/routes/list-secrets.d.ts +2 -0
  192. package/dist/presentation/routes/list-secrets.d.ts.map +1 -0
  193. package/dist/presentation/routes/list-secrets.js +50 -0
  194. package/dist/presentation/routes/list-secrets.js.map +1 -0
  195. package/dist/presentation/routes/list-variables.d.ts +2 -0
  196. package/dist/presentation/routes/list-variables.d.ts.map +1 -0
  197. package/dist/presentation/routes/list-variables.js +50 -0
  198. package/dist/presentation/routes/list-variables.js.map +1 -0
  199. package/dist/presentation/routes/put-secret.d.ts +2 -0
  200. package/dist/presentation/routes/put-secret.d.ts.map +1 -0
  201. package/dist/presentation/routes/put-secret.js +52 -0
  202. package/dist/presentation/routes/put-secret.js.map +1 -0
  203. package/dist/presentation/routes/put-variable.d.ts +2 -0
  204. package/dist/presentation/routes/put-variable.d.ts.map +1 -0
  205. package/dist/presentation/routes/put-variable.js +52 -0
  206. package/dist/presentation/routes/put-variable.js.map +1 -0
  207. package/dist/presentation/routes/warnings.d.ts +5 -0
  208. package/dist/presentation/routes/warnings.d.ts.map +1 -0
  209. package/dist/presentation/routes/warnings.js +16 -0
  210. package/dist/presentation/routes/warnings.js.map +1 -0
  211. package/dist/tsconfig.test.tsbuildinfo +1 -0
  212. package/drizzle/0000_lowly_ogun.sql +59 -0
  213. package/drizzle/meta/0000_snapshot.json +547 -0
  214. package/drizzle/meta/_journal.json +13 -0
  215. package/drizzle.config.ts +7 -0
  216. package/package.json +77 -0
  217. package/src/config.test.ts +41 -0
  218. package/src/config.ts +41 -0
  219. package/src/core/crypto.test.ts +115 -0
  220. package/src/core/crypto.ts +105 -0
  221. package/src/core/dek-manager.test.ts +120 -0
  222. package/src/core/dek-manager.ts +98 -0
  223. package/src/core/errors.ts +100 -0
  224. package/src/core/fingerprint.test.ts +27 -0
  225. package/src/core/fingerprint.ts +14 -0
  226. package/src/core/index.ts +153 -0
  227. package/src/core/key-provider.test.ts +44 -0
  228. package/src/core/key-provider.ts +70 -0
  229. package/src/core/local-secret-store.ts +49 -0
  230. package/src/core/management.test.ts +37 -0
  231. package/src/core/management.ts +503 -0
  232. package/src/core/rotate-kek.test.ts +183 -0
  233. package/src/core/rotate-kek.ts +100 -0
  234. package/src/core/secret-store.test.ts +301 -0
  235. package/src/core/secret-store.ts +251 -0
  236. package/src/core/store-resolver.test.ts +20 -0
  237. package/src/core/store-resolver.ts +28 -0
  238. package/src/core/store-validation.ts +43 -0
  239. package/src/core/value-cipher.ts +26 -0
  240. package/src/core/variable-store.test.ts +106 -0
  241. package/src/core/variable-store.ts +232 -0
  242. package/src/db/cap.ts +58 -0
  243. package/src/db/data-keys.ts +99 -0
  244. package/src/db/db.ts +26 -0
  245. package/src/db/index.ts +45 -0
  246. package/src/db/management.ts +252 -0
  247. package/src/db/schema/common.ts +8 -0
  248. package/src/db/schema/data-keys.ts +31 -0
  249. package/src/db/schema/outbox.ts +4 -0
  250. package/src/db/schema/values.ts +74 -0
  251. package/src/db/schema/variables.ts +71 -0
  252. package/src/db/scope.ts +42 -0
  253. package/src/db/values.ts +191 -0
  254. package/src/db/variables.ts +187 -0
  255. package/src/index.test.ts +11 -0
  256. package/src/index.ts +50 -0
  257. package/src/metrics/index.ts +19 -0
  258. package/src/metrics/instance.ts +219 -0
  259. package/src/metrics/service.ts +19 -0
  260. package/src/presentation/dto/index.ts +1 -0
  261. package/src/presentation/dto/management.ts +36 -0
  262. package/src/presentation/e2eRoutes/create-secret.ts +31 -0
  263. package/src/presentation/e2eRoutes/create-variable.ts +34 -0
  264. package/src/presentation/e2eRoutes/index.test.ts +94 -0
  265. package/src/presentation/e2eRoutes/index.ts +8 -0
  266. package/src/presentation/routes/auth.ts +50 -0
  267. package/src/presentation/routes/batch-secrets.ts +33 -0
  268. package/src/presentation/routes/batch-variables.ts +33 -0
  269. package/src/presentation/routes/cursor.ts +23 -0
  270. package/src/presentation/routes/delete-secret.ts +26 -0
  271. package/src/presentation/routes/delete-variable.ts +26 -0
  272. package/src/presentation/routes/errors.ts +63 -0
  273. package/src/presentation/routes/get-variable.ts +32 -0
  274. package/src/presentation/routes/index.ts +29 -0
  275. package/src/presentation/routes/list-secrets.ts +41 -0
  276. package/src/presentation/routes/list-variables.ts +41 -0
  277. package/src/presentation/routes/management.test.ts +452 -0
  278. package/src/presentation/routes/put-secret.ts +39 -0
  279. package/src/presentation/routes/put-variable.ts +39 -0
  280. package/src/presentation/routes/warnings.ts +23 -0
  281. package/test/env.ts +8 -0
  282. package/test/globalSetup.ts +18 -0
  283. package/test/setup.ts +17 -0
  284. package/tsconfig.build.json +10 -0
  285. package/tsconfig.build.tsbuildinfo +1 -0
  286. package/tsconfig.json +7 -0
  287. package/tsconfig.test.json +8 -0
  288. package/vitest.config.ts +12 -0
@@ -0,0 +1,59 @@
1
+ CREATE TABLE "secrets_data_keys" (
2
+ "workspace_id" uuid PRIMARY KEY NOT NULL,
3
+ "wrapped_dek" text NOT NULL,
4
+ "kek_version" text NOT NULL,
5
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
6
+ "rotated_at" timestamp with time zone
7
+ );
8
+ --> statement-breakpoint
9
+ CREATE TABLE "secrets_values" (
10
+ "id" uuid PRIMARY KEY DEFAULT uuidv7() NOT NULL,
11
+ "workspace_id" uuid NOT NULL,
12
+ "project_id" uuid,
13
+ "namespace" text NOT NULL,
14
+ "key" text NOT NULL,
15
+ "ciphertext" text NOT NULL,
16
+ "fingerprint" text,
17
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
18
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
19
+ "last_edited_by" uuid,
20
+ CONSTRAINT "secrets_values_namespace_ck" CHECK (char_length("secrets_values"."namespace") <= 128 AND ("secrets_values"."namespace" = '' OR "secrets_values"."namespace" ~ '^[a-z0-9]([a-z0-9_/-]*[a-z0-9])?$')),
21
+ CONSTRAINT "secrets_values_key_ck" CHECK ("secrets_values"."key" ~ '^[A-Z_][A-Z0-9_]*$')
22
+ );
23
+ --> statement-breakpoint
24
+ CREATE TABLE "secrets_variables" (
25
+ "id" uuid PRIMARY KEY DEFAULT uuidv7() NOT NULL,
26
+ "workspace_id" uuid NOT NULL,
27
+ "project_id" uuid,
28
+ "namespace" text NOT NULL,
29
+ "key" text NOT NULL,
30
+ "value" text NOT NULL,
31
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
32
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
33
+ "last_edited_by" uuid,
34
+ CONSTRAINT "secrets_variables_namespace_ck" CHECK (char_length("secrets_variables"."namespace") <= 128 AND ("secrets_variables"."namespace" = '' OR "secrets_variables"."namespace" ~ '^[a-z0-9]([a-z0-9_/-]*[a-z0-9])?$')),
35
+ CONSTRAINT "secrets_variables_key_ck" CHECK ("secrets_variables"."key" ~ '^[A-Z_][A-Z0-9_]*$')
36
+ );
37
+ --> statement-breakpoint
38
+ CREATE TABLE "secrets_outbox" (
39
+ "id" uuid PRIMARY KEY DEFAULT uuidv7() NOT NULL,
40
+ "event_type" text NOT NULL,
41
+ "ordering_key" text,
42
+ "payload" jsonb NOT NULL,
43
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
44
+ "dispatched_at" timestamp with time zone,
45
+ "dispatch_attempts" integer DEFAULT 0 NOT NULL,
46
+ "next_dispatch_at" timestamp with time zone DEFAULT now() NOT NULL,
47
+ "last_dispatch_error" jsonb,
48
+ "last_dispatch_failed_at" timestamp with time zone,
49
+ "dead_lettered_at" timestamp with time zone
50
+ );
51
+ --> statement-breakpoint
52
+ CREATE UNIQUE INDEX "secrets_values_ws_scope_unique" ON "secrets_values" USING btree ("workspace_id","namespace","key") WHERE "project_id" IS NULL;--> statement-breakpoint
53
+ CREATE UNIQUE INDEX "secrets_values_project_scope_unique" ON "secrets_values" USING btree ("workspace_id","project_id","namespace","key") WHERE "project_id" IS NOT NULL;--> statement-breakpoint
54
+ CREATE INDEX "secrets_values_lookup_idx" ON "secrets_values" USING btree ("workspace_id","namespace","project_id","key");--> statement-breakpoint
55
+ CREATE UNIQUE INDEX "secrets_variables_ws_scope_unique" ON "secrets_variables" USING btree ("workspace_id","namespace","key") WHERE "project_id" IS NULL;--> statement-breakpoint
56
+ CREATE UNIQUE INDEX "secrets_variables_project_scope_unique" ON "secrets_variables" USING btree ("workspace_id","project_id","namespace","key") WHERE "project_id" IS NOT NULL;--> statement-breakpoint
57
+ CREATE INDEX "secrets_variables_lookup_idx" ON "secrets_variables" USING btree ("workspace_id","namespace","project_id","key");--> statement-breakpoint
58
+ CREATE INDEX "secrets_outbox_pending_idx" ON "secrets_outbox" USING btree ("next_dispatch_at","created_at") WHERE "dispatched_at" IS NULL AND "dead_lettered_at" IS NULL;--> statement-breakpoint
59
+ CREATE INDEX "secrets_outbox_dispatched_retention_idx" ON "secrets_outbox" USING btree ("dispatched_at","id") WHERE "dispatched_at" IS NOT NULL;
@@ -0,0 +1,547 @@
1
+ {
2
+ "id": "f9352971-a9bc-497a-ab43-ba4a1b2b94e1",
3
+ "prevId": "00000000-0000-0000-0000-000000000000",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.secrets_data_keys": {
8
+ "name": "secrets_data_keys",
9
+ "schema": "",
10
+ "columns": {
11
+ "workspace_id": {
12
+ "name": "workspace_id",
13
+ "type": "uuid",
14
+ "primaryKey": true,
15
+ "notNull": true
16
+ },
17
+ "wrapped_dek": {
18
+ "name": "wrapped_dek",
19
+ "type": "text",
20
+ "primaryKey": false,
21
+ "notNull": true
22
+ },
23
+ "kek_version": {
24
+ "name": "kek_version",
25
+ "type": "text",
26
+ "primaryKey": false,
27
+ "notNull": true
28
+ },
29
+ "created_at": {
30
+ "name": "created_at",
31
+ "type": "timestamp with time zone",
32
+ "primaryKey": false,
33
+ "notNull": true,
34
+ "default": "now()"
35
+ },
36
+ "rotated_at": {
37
+ "name": "rotated_at",
38
+ "type": "timestamp with time zone",
39
+ "primaryKey": false,
40
+ "notNull": false
41
+ }
42
+ },
43
+ "indexes": {},
44
+ "foreignKeys": {},
45
+ "compositePrimaryKeys": {},
46
+ "uniqueConstraints": {},
47
+ "policies": {},
48
+ "checkConstraints": {},
49
+ "isRLSEnabled": false
50
+ },
51
+ "public.secrets_values": {
52
+ "name": "secrets_values",
53
+ "schema": "",
54
+ "columns": {
55
+ "id": {
56
+ "name": "id",
57
+ "type": "uuid",
58
+ "primaryKey": true,
59
+ "notNull": true,
60
+ "default": "uuidv7()"
61
+ },
62
+ "workspace_id": {
63
+ "name": "workspace_id",
64
+ "type": "uuid",
65
+ "primaryKey": false,
66
+ "notNull": true
67
+ },
68
+ "project_id": {
69
+ "name": "project_id",
70
+ "type": "uuid",
71
+ "primaryKey": false,
72
+ "notNull": false
73
+ },
74
+ "namespace": {
75
+ "name": "namespace",
76
+ "type": "text",
77
+ "primaryKey": false,
78
+ "notNull": true
79
+ },
80
+ "key": {
81
+ "name": "key",
82
+ "type": "text",
83
+ "primaryKey": false,
84
+ "notNull": true
85
+ },
86
+ "ciphertext": {
87
+ "name": "ciphertext",
88
+ "type": "text",
89
+ "primaryKey": false,
90
+ "notNull": true
91
+ },
92
+ "fingerprint": {
93
+ "name": "fingerprint",
94
+ "type": "text",
95
+ "primaryKey": false,
96
+ "notNull": false
97
+ },
98
+ "created_at": {
99
+ "name": "created_at",
100
+ "type": "timestamp with time zone",
101
+ "primaryKey": false,
102
+ "notNull": true,
103
+ "default": "now()"
104
+ },
105
+ "updated_at": {
106
+ "name": "updated_at",
107
+ "type": "timestamp with time zone",
108
+ "primaryKey": false,
109
+ "notNull": true,
110
+ "default": "now()"
111
+ },
112
+ "last_edited_by": {
113
+ "name": "last_edited_by",
114
+ "type": "uuid",
115
+ "primaryKey": false,
116
+ "notNull": false
117
+ }
118
+ },
119
+ "indexes": {
120
+ "secrets_values_ws_scope_unique": {
121
+ "name": "secrets_values_ws_scope_unique",
122
+ "columns": [
123
+ {
124
+ "expression": "workspace_id",
125
+ "isExpression": false,
126
+ "asc": true,
127
+ "nulls": "last"
128
+ },
129
+ {
130
+ "expression": "namespace",
131
+ "isExpression": false,
132
+ "asc": true,
133
+ "nulls": "last"
134
+ },
135
+ {
136
+ "expression": "key",
137
+ "isExpression": false,
138
+ "asc": true,
139
+ "nulls": "last"
140
+ }
141
+ ],
142
+ "isUnique": true,
143
+ "where": "\"project_id\" IS NULL",
144
+ "concurrently": false,
145
+ "method": "btree",
146
+ "with": {}
147
+ },
148
+ "secrets_values_project_scope_unique": {
149
+ "name": "secrets_values_project_scope_unique",
150
+ "columns": [
151
+ {
152
+ "expression": "workspace_id",
153
+ "isExpression": false,
154
+ "asc": true,
155
+ "nulls": "last"
156
+ },
157
+ {
158
+ "expression": "project_id",
159
+ "isExpression": false,
160
+ "asc": true,
161
+ "nulls": "last"
162
+ },
163
+ {
164
+ "expression": "namespace",
165
+ "isExpression": false,
166
+ "asc": true,
167
+ "nulls": "last"
168
+ },
169
+ {
170
+ "expression": "key",
171
+ "isExpression": false,
172
+ "asc": true,
173
+ "nulls": "last"
174
+ }
175
+ ],
176
+ "isUnique": true,
177
+ "where": "\"project_id\" IS NOT NULL",
178
+ "concurrently": false,
179
+ "method": "btree",
180
+ "with": {}
181
+ },
182
+ "secrets_values_lookup_idx": {
183
+ "name": "secrets_values_lookup_idx",
184
+ "columns": [
185
+ {
186
+ "expression": "workspace_id",
187
+ "isExpression": false,
188
+ "asc": true,
189
+ "nulls": "last"
190
+ },
191
+ {
192
+ "expression": "namespace",
193
+ "isExpression": false,
194
+ "asc": true,
195
+ "nulls": "last"
196
+ },
197
+ {
198
+ "expression": "project_id",
199
+ "isExpression": false,
200
+ "asc": true,
201
+ "nulls": "last"
202
+ },
203
+ {
204
+ "expression": "key",
205
+ "isExpression": false,
206
+ "asc": true,
207
+ "nulls": "last"
208
+ }
209
+ ],
210
+ "isUnique": false,
211
+ "concurrently": false,
212
+ "method": "btree",
213
+ "with": {}
214
+ }
215
+ },
216
+ "foreignKeys": {},
217
+ "compositePrimaryKeys": {},
218
+ "uniqueConstraints": {},
219
+ "policies": {},
220
+ "checkConstraints": {
221
+ "secrets_values_key_ck": {
222
+ "name": "secrets_values_key_ck",
223
+ "value": "\"secrets_values\".\"key\" ~ '^[A-Z_][A-Z0-9_]*$'"
224
+ },
225
+ "secrets_values_namespace_ck": {
226
+ "name": "secrets_values_namespace_ck",
227
+ "value": "char_length(\"secrets_values\".\"namespace\") <= 128 AND (\"secrets_values\".\"namespace\" = '' OR \"secrets_values\".\"namespace\" ~ '^[a-z0-9]([a-z0-9_/-]*[a-z0-9])?$')"
228
+ }
229
+ },
230
+ "isRLSEnabled": false
231
+ },
232
+ "public.secrets_variables": {
233
+ "name": "secrets_variables",
234
+ "schema": "",
235
+ "columns": {
236
+ "id": {
237
+ "name": "id",
238
+ "type": "uuid",
239
+ "primaryKey": true,
240
+ "notNull": true,
241
+ "default": "uuidv7()"
242
+ },
243
+ "workspace_id": {
244
+ "name": "workspace_id",
245
+ "type": "uuid",
246
+ "primaryKey": false,
247
+ "notNull": true
248
+ },
249
+ "project_id": {
250
+ "name": "project_id",
251
+ "type": "uuid",
252
+ "primaryKey": false,
253
+ "notNull": false
254
+ },
255
+ "namespace": {
256
+ "name": "namespace",
257
+ "type": "text",
258
+ "primaryKey": false,
259
+ "notNull": true
260
+ },
261
+ "key": {
262
+ "name": "key",
263
+ "type": "text",
264
+ "primaryKey": false,
265
+ "notNull": true
266
+ },
267
+ "value": {
268
+ "name": "value",
269
+ "type": "text",
270
+ "primaryKey": false,
271
+ "notNull": true
272
+ },
273
+ "created_at": {
274
+ "name": "created_at",
275
+ "type": "timestamp with time zone",
276
+ "primaryKey": false,
277
+ "notNull": true,
278
+ "default": "now()"
279
+ },
280
+ "updated_at": {
281
+ "name": "updated_at",
282
+ "type": "timestamp with time zone",
283
+ "primaryKey": false,
284
+ "notNull": true,
285
+ "default": "now()"
286
+ },
287
+ "last_edited_by": {
288
+ "name": "last_edited_by",
289
+ "type": "uuid",
290
+ "primaryKey": false,
291
+ "notNull": false
292
+ }
293
+ },
294
+ "indexes": {
295
+ "secrets_variables_ws_scope_unique": {
296
+ "name": "secrets_variables_ws_scope_unique",
297
+ "columns": [
298
+ {
299
+ "expression": "workspace_id",
300
+ "isExpression": false,
301
+ "asc": true,
302
+ "nulls": "last"
303
+ },
304
+ {
305
+ "expression": "namespace",
306
+ "isExpression": false,
307
+ "asc": true,
308
+ "nulls": "last"
309
+ },
310
+ {
311
+ "expression": "key",
312
+ "isExpression": false,
313
+ "asc": true,
314
+ "nulls": "last"
315
+ }
316
+ ],
317
+ "isUnique": true,
318
+ "where": "\"project_id\" IS NULL",
319
+ "concurrently": false,
320
+ "method": "btree",
321
+ "with": {}
322
+ },
323
+ "secrets_variables_project_scope_unique": {
324
+ "name": "secrets_variables_project_scope_unique",
325
+ "columns": [
326
+ {
327
+ "expression": "workspace_id",
328
+ "isExpression": false,
329
+ "asc": true,
330
+ "nulls": "last"
331
+ },
332
+ {
333
+ "expression": "project_id",
334
+ "isExpression": false,
335
+ "asc": true,
336
+ "nulls": "last"
337
+ },
338
+ {
339
+ "expression": "namespace",
340
+ "isExpression": false,
341
+ "asc": true,
342
+ "nulls": "last"
343
+ },
344
+ {
345
+ "expression": "key",
346
+ "isExpression": false,
347
+ "asc": true,
348
+ "nulls": "last"
349
+ }
350
+ ],
351
+ "isUnique": true,
352
+ "where": "\"project_id\" IS NOT NULL",
353
+ "concurrently": false,
354
+ "method": "btree",
355
+ "with": {}
356
+ },
357
+ "secrets_variables_lookup_idx": {
358
+ "name": "secrets_variables_lookup_idx",
359
+ "columns": [
360
+ {
361
+ "expression": "workspace_id",
362
+ "isExpression": false,
363
+ "asc": true,
364
+ "nulls": "last"
365
+ },
366
+ {
367
+ "expression": "namespace",
368
+ "isExpression": false,
369
+ "asc": true,
370
+ "nulls": "last"
371
+ },
372
+ {
373
+ "expression": "project_id",
374
+ "isExpression": false,
375
+ "asc": true,
376
+ "nulls": "last"
377
+ },
378
+ {
379
+ "expression": "key",
380
+ "isExpression": false,
381
+ "asc": true,
382
+ "nulls": "last"
383
+ }
384
+ ],
385
+ "isUnique": false,
386
+ "concurrently": false,
387
+ "method": "btree",
388
+ "with": {}
389
+ }
390
+ },
391
+ "foreignKeys": {},
392
+ "compositePrimaryKeys": {},
393
+ "uniqueConstraints": {},
394
+ "policies": {},
395
+ "checkConstraints": {
396
+ "secrets_variables_key_ck": {
397
+ "name": "secrets_variables_key_ck",
398
+ "value": "\"secrets_variables\".\"key\" ~ '^[A-Z_][A-Z0-9_]*$'"
399
+ },
400
+ "secrets_variables_namespace_ck": {
401
+ "name": "secrets_variables_namespace_ck",
402
+ "value": "char_length(\"secrets_variables\".\"namespace\") <= 128 AND (\"secrets_variables\".\"namespace\" = '' OR \"secrets_variables\".\"namespace\" ~ '^[a-z0-9]([a-z0-9_/-]*[a-z0-9])?$')"
403
+ }
404
+ },
405
+ "isRLSEnabled": false
406
+ },
407
+ "public.secrets_outbox": {
408
+ "name": "secrets_outbox",
409
+ "schema": "",
410
+ "columns": {
411
+ "id": {
412
+ "name": "id",
413
+ "type": "uuid",
414
+ "primaryKey": true,
415
+ "notNull": true,
416
+ "default": "uuidv7()"
417
+ },
418
+ "event_type": {
419
+ "name": "event_type",
420
+ "type": "text",
421
+ "primaryKey": false,
422
+ "notNull": true
423
+ },
424
+ "ordering_key": {
425
+ "name": "ordering_key",
426
+ "type": "text",
427
+ "primaryKey": false,
428
+ "notNull": false
429
+ },
430
+ "payload": {
431
+ "name": "payload",
432
+ "type": "jsonb",
433
+ "primaryKey": false,
434
+ "notNull": true
435
+ },
436
+ "created_at": {
437
+ "name": "created_at",
438
+ "type": "timestamp with time zone",
439
+ "primaryKey": false,
440
+ "notNull": true,
441
+ "default": "now()"
442
+ },
443
+ "dispatched_at": {
444
+ "name": "dispatched_at",
445
+ "type": "timestamp with time zone",
446
+ "primaryKey": false,
447
+ "notNull": false
448
+ },
449
+ "dispatch_attempts": {
450
+ "name": "dispatch_attempts",
451
+ "type": "integer",
452
+ "primaryKey": false,
453
+ "notNull": true,
454
+ "default": 0
455
+ },
456
+ "next_dispatch_at": {
457
+ "name": "next_dispatch_at",
458
+ "type": "timestamp with time zone",
459
+ "primaryKey": false,
460
+ "notNull": true,
461
+ "default": "now()"
462
+ },
463
+ "last_dispatch_error": {
464
+ "name": "last_dispatch_error",
465
+ "type": "jsonb",
466
+ "primaryKey": false,
467
+ "notNull": false
468
+ },
469
+ "last_dispatch_failed_at": {
470
+ "name": "last_dispatch_failed_at",
471
+ "type": "timestamp with time zone",
472
+ "primaryKey": false,
473
+ "notNull": false
474
+ },
475
+ "dead_lettered_at": {
476
+ "name": "dead_lettered_at",
477
+ "type": "timestamp with time zone",
478
+ "primaryKey": false,
479
+ "notNull": false
480
+ }
481
+ },
482
+ "indexes": {
483
+ "secrets_outbox_pending_idx": {
484
+ "name": "secrets_outbox_pending_idx",
485
+ "columns": [
486
+ {
487
+ "expression": "next_dispatch_at",
488
+ "isExpression": false,
489
+ "asc": true,
490
+ "nulls": "last"
491
+ },
492
+ {
493
+ "expression": "created_at",
494
+ "isExpression": false,
495
+ "asc": true,
496
+ "nulls": "last"
497
+ }
498
+ ],
499
+ "isUnique": false,
500
+ "where": "\"dispatched_at\" IS NULL AND \"dead_lettered_at\" IS NULL",
501
+ "concurrently": false,
502
+ "method": "btree",
503
+ "with": {}
504
+ },
505
+ "secrets_outbox_dispatched_retention_idx": {
506
+ "name": "secrets_outbox_dispatched_retention_idx",
507
+ "columns": [
508
+ {
509
+ "expression": "dispatched_at",
510
+ "isExpression": false,
511
+ "asc": true,
512
+ "nulls": "last"
513
+ },
514
+ {
515
+ "expression": "id",
516
+ "isExpression": false,
517
+ "asc": true,
518
+ "nulls": "last"
519
+ }
520
+ ],
521
+ "isUnique": false,
522
+ "where": "\"dispatched_at\" IS NOT NULL",
523
+ "concurrently": false,
524
+ "method": "btree",
525
+ "with": {}
526
+ }
527
+ },
528
+ "foreignKeys": {},
529
+ "compositePrimaryKeys": {},
530
+ "uniqueConstraints": {},
531
+ "policies": {},
532
+ "checkConstraints": {},
533
+ "isRLSEnabled": false
534
+ }
535
+ },
536
+ "enums": {},
537
+ "schemas": {},
538
+ "sequences": {},
539
+ "roles": {},
540
+ "policies": {},
541
+ "views": {},
542
+ "_meta": {
543
+ "columns": {},
544
+ "schemas": {},
545
+ "tables": {}
546
+ }
547
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "postgresql",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "7",
8
+ "when": 1782897060644,
9
+ "tag": "0000_lowly_ogun",
10
+ "breakpoints": true
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,7 @@
1
+ import {defineConfig} from 'drizzle-kit';
2
+
3
+ export default defineConfig({
4
+ schema: './src/db/schema/*.ts',
5
+ out: './drizzle',
6
+ dialect: 'postgresql',
7
+ });