@revealui/db 0.2.1 → 0.3.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 (213) hide show
  1. package/dist/audit-store.d.ts.map +1 -1
  2. package/dist/audit-store.js.map +1 -1
  3. package/dist/cleanup/cross-db-cleanup.d.ts +63 -0
  4. package/dist/cleanup/cross-db-cleanup.d.ts.map +1 -0
  5. package/dist/cleanup/cross-db-cleanup.js +150 -0
  6. package/dist/cleanup/cross-db-cleanup.js.map +1 -0
  7. package/dist/cleanup/index.d.ts +10 -0
  8. package/dist/cleanup/index.d.ts.map +1 -0
  9. package/dist/cleanup/index.js +10 -0
  10. package/dist/cleanup/index.js.map +1 -0
  11. package/dist/cleanup/stale-tokens.d.ts +37 -0
  12. package/dist/cleanup/stale-tokens.d.ts.map +1 -0
  13. package/dist/cleanup/stale-tokens.js +113 -0
  14. package/dist/cleanup/stale-tokens.js.map +1 -0
  15. package/dist/client/index.d.ts +13 -0
  16. package/dist/client/index.d.ts.map +1 -1
  17. package/dist/client/index.js +46 -7
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/client/types.d.ts.map +1 -1
  20. package/dist/crypto.js.map +1 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/log-transport.d.ts.map +1 -1
  26. package/dist/log-transport.js +3 -1
  27. package/dist/log-transport.js.map +1 -1
  28. package/dist/pool.d.ts +0 -3
  29. package/dist/pool.d.ts.map +1 -1
  30. package/dist/pool.js +13 -5
  31. package/dist/pool.js.map +1 -1
  32. package/dist/queries/boards.d.ts +13 -1
  33. package/dist/queries/boards.d.ts.map +1 -1
  34. package/dist/queries/boards.js +5 -2
  35. package/dist/queries/boards.js.map +1 -1
  36. package/dist/queries/code-provenance.d.ts.map +1 -1
  37. package/dist/queries/code-provenance.js.map +1 -1
  38. package/dist/queries/media.d.ts +9 -0
  39. package/dist/queries/media.d.ts.map +1 -1
  40. package/dist/queries/media.js +23 -13
  41. package/dist/queries/media.js.map +1 -1
  42. package/dist/queries/pages.d.ts +10 -0
  43. package/dist/queries/pages.d.ts.map +1 -1
  44. package/dist/queries/pages.js +24 -5
  45. package/dist/queries/pages.js.map +1 -1
  46. package/dist/queries/posts.d.ts +10 -0
  47. package/dist/queries/posts.d.ts.map +1 -1
  48. package/dist/queries/posts.js +17 -5
  49. package/dist/queries/posts.js.map +1 -1
  50. package/dist/queries/sites.d.ts +36 -1
  51. package/dist/queries/sites.d.ts.map +1 -1
  52. package/dist/queries/sites.js +45 -5
  53. package/dist/queries/sites.js.map +1 -1
  54. package/dist/queries/ticket-comments.d.ts +9 -1
  55. package/dist/queries/ticket-comments.d.ts.map +1 -1
  56. package/dist/queries/ticket-comments.js +4 -0
  57. package/dist/queries/ticket-comments.js.map +1 -1
  58. package/dist/queries/ticket-labels.d.ts +10 -0
  59. package/dist/queries/ticket-labels.d.ts.map +1 -1
  60. package/dist/queries/ticket-labels.js +4 -0
  61. package/dist/queries/ticket-labels.js.map +1 -1
  62. package/dist/queries/tickets.d.ts +1 -1
  63. package/dist/queries/tickets.d.ts.map +1 -1
  64. package/dist/queries/tickets.js +4 -7
  65. package/dist/queries/tickets.js.map +1 -1
  66. package/dist/queries/users.d.ts +109 -0
  67. package/dist/queries/users.d.ts.map +1 -0
  68. package/dist/queries/users.js +44 -0
  69. package/dist/queries/users.js.map +1 -0
  70. package/dist/schema/accounts.d.ts +962 -0
  71. package/dist/schema/accounts.d.ts.map +1 -0
  72. package/dist/schema/accounts.js +115 -0
  73. package/dist/schema/accounts.js.map +1 -0
  74. package/dist/schema/agents.d.ts +165 -1
  75. package/dist/schema/agents.d.ts.map +1 -1
  76. package/dist/schema/agents.js +56 -5
  77. package/dist/schema/agents.js.map +1 -1
  78. package/dist/schema/api-keys.d.ts +17 -0
  79. package/dist/schema/api-keys.d.ts.map +1 -1
  80. package/dist/schema/api-keys.js +3 -0
  81. package/dist/schema/api-keys.js.map +1 -1
  82. package/dist/schema/app-logs.d.ts.map +1 -1
  83. package/dist/schema/app-logs.js.map +1 -1
  84. package/dist/schema/audit-log.d.ts.map +1 -1
  85. package/dist/schema/audit-log.js.map +1 -1
  86. package/dist/schema/cms.d.ts +68 -0
  87. package/dist/schema/cms.d.ts.map +1 -1
  88. package/dist/schema/cms.js +18 -4
  89. package/dist/schema/cms.js.map +1 -1
  90. package/dist/schema/code-provenance.d.ts.map +1 -1
  91. package/dist/schema/code-provenance.js.map +1 -1
  92. package/dist/schema/collab-edits.d.ts.map +1 -1
  93. package/dist/schema/collab-edits.js +2 -2
  94. package/dist/schema/collab-edits.js.map +1 -1
  95. package/dist/schema/coordination.d.ts +967 -0
  96. package/dist/schema/coordination.d.ts.map +1 -0
  97. package/dist/schema/coordination.js +109 -0
  98. package/dist/schema/coordination.js.map +1 -0
  99. package/dist/schema/crdt-operations.d.ts.map +1 -1
  100. package/dist/schema/crdt-operations.js.map +1 -1
  101. package/dist/schema/error-events.d.ts.map +1 -1
  102. package/dist/schema/error-events.js.map +1 -1
  103. package/dist/schema/gdpr.d.ts +529 -0
  104. package/dist/schema/gdpr.d.ts.map +1 -0
  105. package/dist/schema/gdpr.js +93 -0
  106. package/dist/schema/gdpr.js.map +1 -0
  107. package/dist/schema/index.d.ts +37 -1
  108. package/dist/schema/index.d.ts.map +1 -1
  109. package/dist/schema/index.js +73 -0
  110. package/dist/schema/index.js.map +1 -1
  111. package/dist/schema/jobs.d.ts +242 -0
  112. package/dist/schema/jobs.d.ts.map +1 -0
  113. package/dist/schema/jobs.js +48 -0
  114. package/dist/schema/jobs.js.map +1 -0
  115. package/dist/schema/licenses.d.ts +51 -0
  116. package/dist/schema/licenses.d.ts.map +1 -1
  117. package/dist/schema/licenses.js +8 -2
  118. package/dist/schema/licenses.js.map +1 -1
  119. package/dist/schema/magic-links.d.ts +136 -0
  120. package/dist/schema/magic-links.d.ts.map +1 -0
  121. package/dist/schema/magic-links.js +32 -0
  122. package/dist/schema/magic-links.js.map +1 -0
  123. package/dist/schema/marketplace.d.ts +496 -0
  124. package/dist/schema/marketplace.d.ts.map +1 -0
  125. package/dist/schema/marketplace.js +110 -0
  126. package/dist/schema/marketplace.js.map +1 -0
  127. package/dist/schema/node-ids.d.ts.map +1 -1
  128. package/dist/schema/node-ids.js.map +1 -1
  129. package/dist/schema/oauth-accounts.d.ts +34 -0
  130. package/dist/schema/oauth-accounts.d.ts.map +1 -1
  131. package/dist/schema/oauth-accounts.js +5 -0
  132. package/dist/schema/oauth-accounts.js.map +1 -1
  133. package/dist/schema/pages.d.ts +34 -0
  134. package/dist/schema/pages.d.ts.map +1 -1
  135. package/dist/schema/pages.js +14 -4
  136. package/dist/schema/pages.js.map +1 -1
  137. package/dist/schema/passkeys.d.ts +208 -0
  138. package/dist/schema/passkeys.d.ts.map +1 -0
  139. package/dist/schema/passkeys.js +47 -0
  140. package/dist/schema/passkeys.js.map +1 -0
  141. package/dist/schema/password-reset-tokens.d.ts.map +1 -1
  142. package/dist/schema/password-reset-tokens.js +5 -2
  143. package/dist/schema/password-reset-tokens.js.map +1 -1
  144. package/dist/schema/rag.d.ts.map +1 -1
  145. package/dist/schema/rag.js +5 -2
  146. package/dist/schema/rag.js.map +1 -1
  147. package/dist/schema/rate-limits.d.ts.map +1 -1
  148. package/dist/schema/rate-limits.js +5 -2
  149. package/dist/schema/rate-limits.js.map +1 -1
  150. package/dist/schema/rest.d.ts +9 -2
  151. package/dist/schema/rest.d.ts.map +1 -1
  152. package/dist/schema/rest.js +9 -2
  153. package/dist/schema/rest.js.map +1 -1
  154. package/dist/schema/sites.d.ts +34 -0
  155. package/dist/schema/sites.d.ts.map +1 -1
  156. package/dist/schema/sites.js +15 -3
  157. package/dist/schema/sites.js.map +1 -1
  158. package/dist/schema/tenants.d.ts +188 -0
  159. package/dist/schema/tenants.d.ts.map +1 -0
  160. package/dist/schema/tenants.js +15 -0
  161. package/dist/schema/tenants.js.map +1 -0
  162. package/dist/schema/tickets.d.ts.map +1 -1
  163. package/dist/schema/tickets.js +17 -5
  164. package/dist/schema/tickets.js.map +1 -1
  165. package/dist/schema/users.d.ts +174 -0
  166. package/dist/schema/users.d.ts.map +1 -1
  167. package/dist/schema/users.js +32 -3
  168. package/dist/schema/users.js.map +1 -1
  169. package/dist/schema/vector.d.ts.map +1 -1
  170. package/dist/schema/vector.js.map +1 -1
  171. package/dist/schema/waitlist.d.ts.map +1 -1
  172. package/dist/schema/waitlist.js.map +1 -1
  173. package/dist/schema/webhook-events.d.ts.map +1 -1
  174. package/dist/schema/webhook-events.js.map +1 -1
  175. package/dist/schema/yjs-documents.d.ts.map +1 -1
  176. package/dist/schema/yjs-documents.js.map +1 -1
  177. package/dist/scripts/cleanup-expired.d.ts +12 -0
  178. package/dist/scripts/cleanup-expired.d.ts.map +1 -0
  179. package/dist/scripts/cleanup-expired.js +50 -0
  180. package/dist/scripts/cleanup-expired.js.map +1 -0
  181. package/dist/security-audit-storage.d.ts +54 -0
  182. package/dist/security-audit-storage.d.ts.map +1 -0
  183. package/dist/security-audit-storage.js +100 -0
  184. package/dist/security-audit-storage.js.map +1 -0
  185. package/dist/types/database.d.ts +320 -2
  186. package/dist/types/database.d.ts.map +1 -1
  187. package/dist/types/database.js +66 -1
  188. package/dist/types/database.js.map +1 -1
  189. package/dist/types/discover.d.ts +2 -2
  190. package/dist/types/discover.d.ts.map +1 -1
  191. package/dist/types/discover.js +16 -16
  192. package/dist/types/discover.js.map +1 -1
  193. package/dist/types/extract-relationships.d.ts.map +1 -1
  194. package/dist/types/extract-relationships.js.map +1 -1
  195. package/dist/types/generate-contracts.js.map +1 -1
  196. package/dist/types/generate-zod-schemas.js.map +1 -1
  197. package/dist/types/generate.js.map +1 -1
  198. package/dist/types/index.d.ts.map +1 -1
  199. package/dist/types/introspect.d.ts.map +1 -1
  200. package/dist/types/introspect.js +0 -1
  201. package/dist/types/introspect.js.map +1 -1
  202. package/dist/types/stripe-schema.d.ts.map +1 -1
  203. package/dist/types/stripe-schema.js +7 -2
  204. package/dist/types/stripe-schema.js.map +1 -1
  205. package/dist/utils/soft-delete.d.ts +45 -0
  206. package/dist/utils/soft-delete.d.ts.map +1 -0
  207. package/dist/utils/soft-delete.js +45 -0
  208. package/dist/utils/soft-delete.js.map +1 -0
  209. package/dist/validation/cross-db.d.ts +60 -0
  210. package/dist/validation/cross-db.d.ts.map +1 -0
  211. package/dist/validation/cross-db.js +146 -0
  212. package/dist/validation/cross-db.js.map +1 -0
  213. package/package.json +25 -6
@@ -0,0 +1,529 @@
1
+ /**
2
+ * GDPR Tables - Persistent storage for consent records and deletion requests.
3
+ *
4
+ * These tables back the GDPRStorage interface from @revealui/core/security.
5
+ * Consent records are keyed by userId + type (unique constraint).
6
+ * Deletion requests are append-only audit records.
7
+ */
8
+ export declare const gdprConsents: import("drizzle-orm/pg-core").PgTableWithColumns<{
9
+ name: "gdpr_consents";
10
+ schema: undefined;
11
+ columns: {
12
+ id: import("drizzle-orm/pg-core").PgColumn<{
13
+ name: "id";
14
+ tableName: "gdpr_consents";
15
+ dataType: "string";
16
+ columnType: "PgText";
17
+ data: string;
18
+ driverParam: string;
19
+ notNull: true;
20
+ hasDefault: false;
21
+ isPrimaryKey: true;
22
+ isAutoincrement: false;
23
+ hasRuntimeDefault: false;
24
+ enumValues: [string, ...string[]];
25
+ baseColumn: never;
26
+ identity: undefined;
27
+ generated: undefined;
28
+ }, {}, {}>;
29
+ userId: import("drizzle-orm/pg-core").PgColumn<{
30
+ name: "user_id";
31
+ tableName: "gdpr_consents";
32
+ dataType: "string";
33
+ columnType: "PgText";
34
+ data: string;
35
+ driverParam: string;
36
+ notNull: true;
37
+ hasDefault: false;
38
+ isPrimaryKey: false;
39
+ isAutoincrement: false;
40
+ hasRuntimeDefault: false;
41
+ enumValues: [string, ...string[]];
42
+ baseColumn: never;
43
+ identity: undefined;
44
+ generated: undefined;
45
+ }, {}, {}>;
46
+ type: import("drizzle-orm/pg-core").PgColumn<{
47
+ name: "type";
48
+ tableName: "gdpr_consents";
49
+ dataType: "string";
50
+ columnType: "PgText";
51
+ data: string;
52
+ driverParam: string;
53
+ notNull: true;
54
+ hasDefault: false;
55
+ isPrimaryKey: false;
56
+ isAutoincrement: false;
57
+ hasRuntimeDefault: false;
58
+ enumValues: [string, ...string[]];
59
+ baseColumn: never;
60
+ identity: undefined;
61
+ generated: undefined;
62
+ }, {}, {}>;
63
+ granted: import("drizzle-orm/pg-core").PgColumn<{
64
+ name: "granted";
65
+ tableName: "gdpr_consents";
66
+ dataType: "boolean";
67
+ columnType: "PgBoolean";
68
+ data: boolean;
69
+ driverParam: boolean;
70
+ notNull: true;
71
+ hasDefault: true;
72
+ isPrimaryKey: false;
73
+ isAutoincrement: false;
74
+ hasRuntimeDefault: false;
75
+ enumValues: undefined;
76
+ baseColumn: never;
77
+ identity: undefined;
78
+ generated: undefined;
79
+ }, {}, {}>;
80
+ timestamp: import("drizzle-orm/pg-core").PgColumn<{
81
+ name: "timestamp";
82
+ tableName: "gdpr_consents";
83
+ dataType: "date";
84
+ columnType: "PgTimestamp";
85
+ data: Date;
86
+ driverParam: string;
87
+ notNull: true;
88
+ hasDefault: true;
89
+ isPrimaryKey: false;
90
+ isAutoincrement: false;
91
+ hasRuntimeDefault: false;
92
+ enumValues: undefined;
93
+ baseColumn: never;
94
+ identity: undefined;
95
+ generated: undefined;
96
+ }, {}, {}>;
97
+ expiresAt: import("drizzle-orm/pg-core").PgColumn<{
98
+ name: "expires_at";
99
+ tableName: "gdpr_consents";
100
+ dataType: "date";
101
+ columnType: "PgTimestamp";
102
+ data: Date;
103
+ driverParam: string;
104
+ notNull: false;
105
+ hasDefault: false;
106
+ isPrimaryKey: false;
107
+ isAutoincrement: false;
108
+ hasRuntimeDefault: false;
109
+ enumValues: undefined;
110
+ baseColumn: never;
111
+ identity: undefined;
112
+ generated: undefined;
113
+ }, {}, {}>;
114
+ source: import("drizzle-orm/pg-core").PgColumn<{
115
+ name: "source";
116
+ tableName: "gdpr_consents";
117
+ dataType: "string";
118
+ columnType: "PgText";
119
+ data: string;
120
+ driverParam: string;
121
+ notNull: true;
122
+ hasDefault: true;
123
+ isPrimaryKey: false;
124
+ isAutoincrement: false;
125
+ hasRuntimeDefault: false;
126
+ enumValues: [string, ...string[]];
127
+ baseColumn: never;
128
+ identity: undefined;
129
+ generated: undefined;
130
+ }, {}, {}>;
131
+ version: import("drizzle-orm/pg-core").PgColumn<{
132
+ name: "version";
133
+ tableName: "gdpr_consents";
134
+ dataType: "string";
135
+ columnType: "PgText";
136
+ data: string;
137
+ driverParam: string;
138
+ notNull: true;
139
+ hasDefault: true;
140
+ isPrimaryKey: false;
141
+ isAutoincrement: false;
142
+ hasRuntimeDefault: false;
143
+ enumValues: [string, ...string[]];
144
+ baseColumn: never;
145
+ identity: undefined;
146
+ generated: undefined;
147
+ }, {}, {}>;
148
+ metadata: import("drizzle-orm/pg-core").PgColumn<{
149
+ name: "metadata";
150
+ tableName: "gdpr_consents";
151
+ dataType: "json";
152
+ columnType: "PgJsonb";
153
+ data: Record<string, unknown>;
154
+ driverParam: unknown;
155
+ notNull: false;
156
+ hasDefault: false;
157
+ isPrimaryKey: false;
158
+ isAutoincrement: false;
159
+ hasRuntimeDefault: false;
160
+ enumValues: undefined;
161
+ baseColumn: never;
162
+ identity: undefined;
163
+ generated: undefined;
164
+ }, {}, {
165
+ $type: Record<string, unknown>;
166
+ }>;
167
+ };
168
+ dialect: "pg";
169
+ }>;
170
+ /** Row type for select queries */
171
+ export type GdprConsentRow = typeof gdprConsents.$inferSelect;
172
+ /** Insert type for new records */
173
+ export type GdprConsentInsert = typeof gdprConsents.$inferInsert;
174
+ export declare const gdprDeletionRequests: import("drizzle-orm/pg-core").PgTableWithColumns<{
175
+ name: "gdpr_deletion_requests";
176
+ schema: undefined;
177
+ columns: {
178
+ id: import("drizzle-orm/pg-core").PgColumn<{
179
+ name: "id";
180
+ tableName: "gdpr_deletion_requests";
181
+ dataType: "string";
182
+ columnType: "PgText";
183
+ data: string;
184
+ driverParam: string;
185
+ notNull: true;
186
+ hasDefault: false;
187
+ isPrimaryKey: true;
188
+ isAutoincrement: false;
189
+ hasRuntimeDefault: false;
190
+ enumValues: [string, ...string[]];
191
+ baseColumn: never;
192
+ identity: undefined;
193
+ generated: undefined;
194
+ }, {}, {}>;
195
+ userId: import("drizzle-orm/pg-core").PgColumn<{
196
+ name: "user_id";
197
+ tableName: "gdpr_deletion_requests";
198
+ dataType: "string";
199
+ columnType: "PgText";
200
+ data: string;
201
+ driverParam: string;
202
+ notNull: true;
203
+ hasDefault: false;
204
+ isPrimaryKey: false;
205
+ isAutoincrement: false;
206
+ hasRuntimeDefault: false;
207
+ enumValues: [string, ...string[]];
208
+ baseColumn: never;
209
+ identity: undefined;
210
+ generated: undefined;
211
+ }, {}, {}>;
212
+ requestedAt: import("drizzle-orm/pg-core").PgColumn<{
213
+ name: "requested_at";
214
+ tableName: "gdpr_deletion_requests";
215
+ dataType: "date";
216
+ columnType: "PgTimestamp";
217
+ data: Date;
218
+ driverParam: string;
219
+ notNull: true;
220
+ hasDefault: true;
221
+ isPrimaryKey: false;
222
+ isAutoincrement: false;
223
+ hasRuntimeDefault: false;
224
+ enumValues: undefined;
225
+ baseColumn: never;
226
+ identity: undefined;
227
+ generated: undefined;
228
+ }, {}, {}>;
229
+ processedAt: import("drizzle-orm/pg-core").PgColumn<{
230
+ name: "processed_at";
231
+ tableName: "gdpr_deletion_requests";
232
+ dataType: "date";
233
+ columnType: "PgTimestamp";
234
+ data: Date;
235
+ driverParam: string;
236
+ notNull: false;
237
+ hasDefault: false;
238
+ isPrimaryKey: false;
239
+ isAutoincrement: false;
240
+ hasRuntimeDefault: false;
241
+ enumValues: undefined;
242
+ baseColumn: never;
243
+ identity: undefined;
244
+ generated: undefined;
245
+ }, {}, {}>;
246
+ status: import("drizzle-orm/pg-core").PgColumn<{
247
+ name: "status";
248
+ tableName: "gdpr_deletion_requests";
249
+ dataType: "string";
250
+ columnType: "PgText";
251
+ data: string;
252
+ driverParam: string;
253
+ notNull: true;
254
+ hasDefault: true;
255
+ isPrimaryKey: false;
256
+ isAutoincrement: false;
257
+ hasRuntimeDefault: false;
258
+ enumValues: [string, ...string[]];
259
+ baseColumn: never;
260
+ identity: undefined;
261
+ generated: undefined;
262
+ }, {}, {}>;
263
+ dataCategories: import("drizzle-orm/pg-core").PgColumn<{
264
+ name: "data_categories";
265
+ tableName: "gdpr_deletion_requests";
266
+ dataType: "json";
267
+ columnType: "PgJsonb";
268
+ data: string[];
269
+ driverParam: unknown;
270
+ notNull: true;
271
+ hasDefault: true;
272
+ isPrimaryKey: false;
273
+ isAutoincrement: false;
274
+ hasRuntimeDefault: false;
275
+ enumValues: undefined;
276
+ baseColumn: never;
277
+ identity: undefined;
278
+ generated: undefined;
279
+ }, {}, {
280
+ $type: string[];
281
+ }>;
282
+ reason: import("drizzle-orm/pg-core").PgColumn<{
283
+ name: "reason";
284
+ tableName: "gdpr_deletion_requests";
285
+ dataType: "string";
286
+ columnType: "PgText";
287
+ data: string;
288
+ driverParam: string;
289
+ notNull: false;
290
+ hasDefault: false;
291
+ isPrimaryKey: false;
292
+ isAutoincrement: false;
293
+ hasRuntimeDefault: false;
294
+ enumValues: [string, ...string[]];
295
+ baseColumn: never;
296
+ identity: undefined;
297
+ generated: undefined;
298
+ }, {}, {}>;
299
+ retainedData: import("drizzle-orm/pg-core").PgColumn<{
300
+ name: "retained_data";
301
+ tableName: "gdpr_deletion_requests";
302
+ dataType: "json";
303
+ columnType: "PgJsonb";
304
+ data: string[];
305
+ driverParam: unknown;
306
+ notNull: false;
307
+ hasDefault: false;
308
+ isPrimaryKey: false;
309
+ isAutoincrement: false;
310
+ hasRuntimeDefault: false;
311
+ enumValues: undefined;
312
+ baseColumn: never;
313
+ identity: undefined;
314
+ generated: undefined;
315
+ }, {}, {
316
+ $type: string[];
317
+ }>;
318
+ deletedData: import("drizzle-orm/pg-core").PgColumn<{
319
+ name: "deleted_data";
320
+ tableName: "gdpr_deletion_requests";
321
+ dataType: "json";
322
+ columnType: "PgJsonb";
323
+ data: string[];
324
+ driverParam: unknown;
325
+ notNull: false;
326
+ hasDefault: false;
327
+ isPrimaryKey: false;
328
+ isAutoincrement: false;
329
+ hasRuntimeDefault: false;
330
+ enumValues: undefined;
331
+ baseColumn: never;
332
+ identity: undefined;
333
+ generated: undefined;
334
+ }, {}, {
335
+ $type: string[];
336
+ }>;
337
+ };
338
+ dialect: "pg";
339
+ }>;
340
+ /** Row type for select queries */
341
+ export type GdprDeletionRequestRow = typeof gdprDeletionRequests.$inferSelect;
342
+ /** Insert type for new records */
343
+ export type GdprDeletionRequestInsert = typeof gdprDeletionRequests.$inferInsert;
344
+ export declare const gdprBreaches: import("drizzle-orm/pg-core").PgTableWithColumns<{
345
+ name: "gdpr_breaches";
346
+ schema: undefined;
347
+ columns: {
348
+ id: import("drizzle-orm/pg-core").PgColumn<{
349
+ name: "id";
350
+ tableName: "gdpr_breaches";
351
+ dataType: "string";
352
+ columnType: "PgText";
353
+ data: string;
354
+ driverParam: string;
355
+ notNull: true;
356
+ hasDefault: false;
357
+ isPrimaryKey: true;
358
+ isAutoincrement: false;
359
+ hasRuntimeDefault: false;
360
+ enumValues: [string, ...string[]];
361
+ baseColumn: never;
362
+ identity: undefined;
363
+ generated: undefined;
364
+ }, {}, {}>;
365
+ detectedAt: import("drizzle-orm/pg-core").PgColumn<{
366
+ name: "detected_at";
367
+ tableName: "gdpr_breaches";
368
+ dataType: "date";
369
+ columnType: "PgTimestamp";
370
+ data: Date;
371
+ driverParam: string;
372
+ notNull: true;
373
+ hasDefault: true;
374
+ isPrimaryKey: false;
375
+ isAutoincrement: false;
376
+ hasRuntimeDefault: false;
377
+ enumValues: undefined;
378
+ baseColumn: never;
379
+ identity: undefined;
380
+ generated: undefined;
381
+ }, {}, {}>;
382
+ reportedAt: import("drizzle-orm/pg-core").PgColumn<{
383
+ name: "reported_at";
384
+ tableName: "gdpr_breaches";
385
+ dataType: "date";
386
+ columnType: "PgTimestamp";
387
+ data: Date;
388
+ driverParam: string;
389
+ notNull: false;
390
+ hasDefault: false;
391
+ isPrimaryKey: false;
392
+ isAutoincrement: false;
393
+ hasRuntimeDefault: false;
394
+ enumValues: undefined;
395
+ baseColumn: never;
396
+ identity: undefined;
397
+ generated: undefined;
398
+ }, {}, {}>;
399
+ type: import("drizzle-orm/pg-core").PgColumn<{
400
+ name: "type";
401
+ tableName: "gdpr_breaches";
402
+ dataType: "string";
403
+ columnType: "PgText";
404
+ data: string;
405
+ driverParam: string;
406
+ notNull: true;
407
+ hasDefault: false;
408
+ isPrimaryKey: false;
409
+ isAutoincrement: false;
410
+ hasRuntimeDefault: false;
411
+ enumValues: [string, ...string[]];
412
+ baseColumn: never;
413
+ identity: undefined;
414
+ generated: undefined;
415
+ }, {}, {}>;
416
+ severity: import("drizzle-orm/pg-core").PgColumn<{
417
+ name: "severity";
418
+ tableName: "gdpr_breaches";
419
+ dataType: "string";
420
+ columnType: "PgText";
421
+ data: string;
422
+ driverParam: string;
423
+ notNull: true;
424
+ hasDefault: false;
425
+ isPrimaryKey: false;
426
+ isAutoincrement: false;
427
+ hasRuntimeDefault: false;
428
+ enumValues: [string, ...string[]];
429
+ baseColumn: never;
430
+ identity: undefined;
431
+ generated: undefined;
432
+ }, {}, {}>;
433
+ affectedUsers: import("drizzle-orm/pg-core").PgColumn<{
434
+ name: "affected_users";
435
+ tableName: "gdpr_breaches";
436
+ dataType: "json";
437
+ columnType: "PgJsonb";
438
+ data: string[];
439
+ driverParam: unknown;
440
+ notNull: true;
441
+ hasDefault: true;
442
+ isPrimaryKey: false;
443
+ isAutoincrement: false;
444
+ hasRuntimeDefault: false;
445
+ enumValues: undefined;
446
+ baseColumn: never;
447
+ identity: undefined;
448
+ generated: undefined;
449
+ }, {}, {
450
+ $type: string[];
451
+ }>;
452
+ dataCategories: import("drizzle-orm/pg-core").PgColumn<{
453
+ name: "data_categories";
454
+ tableName: "gdpr_breaches";
455
+ dataType: "json";
456
+ columnType: "PgJsonb";
457
+ data: string[];
458
+ driverParam: unknown;
459
+ notNull: true;
460
+ hasDefault: true;
461
+ isPrimaryKey: false;
462
+ isAutoincrement: false;
463
+ hasRuntimeDefault: false;
464
+ enumValues: undefined;
465
+ baseColumn: never;
466
+ identity: undefined;
467
+ generated: undefined;
468
+ }, {}, {
469
+ $type: string[];
470
+ }>;
471
+ description: import("drizzle-orm/pg-core").PgColumn<{
472
+ name: "description";
473
+ tableName: "gdpr_breaches";
474
+ dataType: "string";
475
+ columnType: "PgText";
476
+ data: string;
477
+ driverParam: string;
478
+ notNull: true;
479
+ hasDefault: false;
480
+ isPrimaryKey: false;
481
+ isAutoincrement: false;
482
+ hasRuntimeDefault: false;
483
+ enumValues: [string, ...string[]];
484
+ baseColumn: never;
485
+ identity: undefined;
486
+ generated: undefined;
487
+ }, {}, {}>;
488
+ mitigation: import("drizzle-orm/pg-core").PgColumn<{
489
+ name: "mitigation";
490
+ tableName: "gdpr_breaches";
491
+ dataType: "string";
492
+ columnType: "PgText";
493
+ data: string;
494
+ driverParam: string;
495
+ notNull: false;
496
+ hasDefault: false;
497
+ isPrimaryKey: false;
498
+ isAutoincrement: false;
499
+ hasRuntimeDefault: false;
500
+ enumValues: [string, ...string[]];
501
+ baseColumn: never;
502
+ identity: undefined;
503
+ generated: undefined;
504
+ }, {}, {}>;
505
+ status: import("drizzle-orm/pg-core").PgColumn<{
506
+ name: "status";
507
+ tableName: "gdpr_breaches";
508
+ dataType: "string";
509
+ columnType: "PgText";
510
+ data: string;
511
+ driverParam: string;
512
+ notNull: true;
513
+ hasDefault: true;
514
+ isPrimaryKey: false;
515
+ isAutoincrement: false;
516
+ hasRuntimeDefault: false;
517
+ enumValues: [string, ...string[]];
518
+ baseColumn: never;
519
+ identity: undefined;
520
+ generated: undefined;
521
+ }, {}, {}>;
522
+ };
523
+ dialect: "pg";
524
+ }>;
525
+ /** Row type for select queries */
526
+ export type GdprBreachRow = typeof gdprBreaches.$inferSelect;
527
+ /** Insert type for new records */
528
+ export type GdprBreachInsert = typeof gdprBreaches.$inferInsert;
529
+ //# sourceMappingURL=gdpr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gdpr.d.ts","sourceRoot":"","sources":["../../src/schema/gdpr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCxB,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,cAAc,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAE9D,kCAAkC;AAClC,MAAM,MAAM,iBAAiB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAMjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmChC,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,sBAAsB,GAAG,OAAO,oBAAoB,CAAC,YAAY,CAAC;AAE9E,kCAAkC;AAClC,MAAM,MAAM,yBAAyB,GAAG,OAAO,oBAAoB,CAAC,YAAY,CAAC;AAMjF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCxB,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,aAAa,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAE7D,kCAAkC;AAClC,MAAM,MAAM,gBAAgB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * GDPR Tables - Persistent storage for consent records and deletion requests.
3
+ *
4
+ * These tables back the GDPRStorage interface from @revealui/core/security.
5
+ * Consent records are keyed by userId + type (unique constraint).
6
+ * Deletion requests are append-only audit records.
7
+ */
8
+ import { boolean, index, jsonb, pgTable, text, timestamp, unique } from 'drizzle-orm/pg-core';
9
+ // =============================================================================
10
+ // Consent Records
11
+ // =============================================================================
12
+ export const gdprConsents = pgTable('gdpr_consents', {
13
+ /** Unique consent record ID (UUID) */
14
+ id: text('id').primaryKey(),
15
+ /** User who granted/revoked consent */
16
+ userId: text('user_id').notNull(),
17
+ /** Consent type: necessary, functional, analytics, marketing, personalization */
18
+ type: text('type').notNull(),
19
+ /** Whether consent is currently granted */
20
+ granted: boolean('granted').notNull().default(true),
21
+ /** When the consent was recorded */
22
+ timestamp: timestamp('timestamp', { withTimezone: true }).defaultNow().notNull(),
23
+ /** When consent expires (null = never) */
24
+ expiresAt: timestamp('expires_at', { withTimezone: true }),
25
+ /** How consent was obtained */
26
+ source: text('source').notNull().default('explicit'),
27
+ /** Consent version string for tracking policy changes */
28
+ version: text('version').notNull().default('1.0'),
29
+ /** Optional metadata (JSON) */
30
+ metadata: jsonb('metadata').$type(),
31
+ }, (table) => [
32
+ unique('gdpr_consents_user_type_uq').on(table.userId, table.type),
33
+ index('gdpr_consents_user_id_idx').on(table.userId),
34
+ index('gdpr_consents_type_idx').on(table.type),
35
+ index('gdpr_consents_granted_idx').on(table.granted),
36
+ ]);
37
+ // =============================================================================
38
+ // Deletion Requests
39
+ // =============================================================================
40
+ export const gdprDeletionRequests = pgTable('gdpr_deletion_requests', {
41
+ /** Unique request ID (UUID) */
42
+ id: text('id').primaryKey(),
43
+ /** User who requested deletion */
44
+ userId: text('user_id').notNull(),
45
+ /** When the request was submitted */
46
+ requestedAt: timestamp('requested_at', { withTimezone: true }).defaultNow().notNull(),
47
+ /** When the request was processed (null = pending) */
48
+ processedAt: timestamp('processed_at', { withTimezone: true }),
49
+ /** Request status */
50
+ status: text('status').notNull().default('pending'),
51
+ /** Data categories requested for deletion (JSON array) */
52
+ dataCategories: jsonb('data_categories').$type().notNull().default(['personal']),
53
+ /** User-supplied reason */
54
+ reason: text('reason'),
55
+ /** Data categories that were retained (legal obligation, etc.) */
56
+ retainedData: jsonb('retained_data').$type(),
57
+ /** Data categories that were successfully deleted */
58
+ deletedData: jsonb('deleted_data').$type(),
59
+ }, (table) => [
60
+ index('gdpr_deletion_requests_user_id_idx').on(table.userId),
61
+ index('gdpr_deletion_requests_status_idx').on(table.status),
62
+ index('gdpr_deletion_requests_requested_at_idx').on(table.requestedAt),
63
+ ]);
64
+ // =============================================================================
65
+ // Data Breach Records
66
+ // =============================================================================
67
+ export const gdprBreaches = pgTable('gdpr_breaches', {
68
+ /** Unique breach ID (UUID) */
69
+ id: text('id').primaryKey(),
70
+ /** When the breach was detected */
71
+ detectedAt: timestamp('detected_at', { withTimezone: true }).defaultNow().notNull(),
72
+ /** When authorities were notified (GDPR requires within 72 hours) */
73
+ reportedAt: timestamp('reported_at', { withTimezone: true }),
74
+ /** Breach type */
75
+ type: text('type').notNull(),
76
+ /** Severity: low, medium, high, critical */
77
+ severity: text('severity').notNull(),
78
+ /** IDs of affected users */
79
+ affectedUsers: jsonb('affected_users').$type().notNull().default([]),
80
+ /** Categories of data affected */
81
+ dataCategories: jsonb('data_categories').$type().notNull().default([]),
82
+ /** Description of the breach */
83
+ description: text('description').notNull(),
84
+ /** Mitigation steps taken */
85
+ mitigation: text('mitigation'),
86
+ /** Status: detected, investigating, notified, resolved */
87
+ status: text('status').notNull().default('detected'),
88
+ }, (table) => [
89
+ index('gdpr_breaches_detected_at_idx').on(table.detectedAt),
90
+ index('gdpr_breaches_status_idx').on(table.status),
91
+ index('gdpr_breaches_severity_idx').on(table.severity),
92
+ ]);
93
+ //# sourceMappingURL=gdpr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gdpr.js","sourceRoot":"","sources":["../../src/schema/gdpr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE9F,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CACjC,eAAe,EACf;IACE,sCAAsC;IACtC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE3B,uCAAuC;IACvC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAEjC,iFAAiF;IACjF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAE5B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEnD,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE;IAEhF,0CAA0C;IAC1C,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAE1D,+BAA+B;IAC/B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;IAEpD,yDAAyD;IACzD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAEjD,+BAA+B;IAC/B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,EAA2B;CAC7D,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;IACjE,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IACnD,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9C,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;CACrD,CACF,CAAC;AAQF,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CACzC,wBAAwB,EACxB;IACE,+BAA+B;IAC/B,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE3B,kCAAkC;IAClC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAEjC,qCAAqC;IACrC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE;IAErF,sDAAsD;IACtD,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAE9D,qBAAqB;IACrB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IAEnD,0DAA0D;IAC1D,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;IAE1F,2BAA2B;IAC3B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;IAEtB,kEAAkE;IAClE,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,EAAY;IAEtD,qDAAqD;IACrD,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,EAAY;CACrD,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,oCAAoC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5D,KAAK,CAAC,mCAAmC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3D,KAAK,CAAC,yCAAyC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC;CACvE,CACF,CAAC;AAQF,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CACjC,eAAe,EACf;IACE,8BAA8B;IAC9B,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE3B,mCAAmC;IACnC,UAAU,EAAE,SAAS,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE;IAEnF,qEAAqE;IACrE,UAAU,EAAE,SAAS,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAE5D,kBAAkB;IAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAE5B,4CAA4C;IAC5C,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;IAEpC,4BAA4B;IAC5B,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAE9E,kCAAkC;IAClC,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAEhF,gCAAgC;IAChC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE;IAE1C,6BAA6B;IAC7B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;IAE9B,0DAA0D;IAC1D,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;CACrD,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IAC3D,KAAK,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAClD,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;CACvD,CACF,CAAC"}