@coffre/db 0.3.0 → 0.4.1

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 (76) hide show
  1. package/dist/connect.d.ts +1 -1
  2. package/dist/{database-Cq_52uUo.d.ts → database-edkMkG02.d.ts} +1 -1
  3. package/dist/dialect.d.ts +10 -2
  4. package/dist/dialect.js +34 -1
  5. package/dist/grants.d.ts +32 -0
  6. package/dist/grants.js +27 -0
  7. package/dist/hyperdrive.d.ts +1 -1
  8. package/dist/index.d.ts +2 -2
  9. package/dist/log.d.ts +1 -1
  10. package/dist/migrate.js +6 -1
  11. package/dist/migrations/postgres/0000_baseline.sql +174 -46
  12. package/dist/migrations/postgres/0001_mcp_approvals.sql +24 -0
  13. package/dist/migrations/postgres/meta/0000_snapshot.json +963 -185
  14. package/dist/migrations/postgres/meta/0001_snapshot.json +1171 -30
  15. package/dist/migrations/postgres/meta/_journal.json +3 -24
  16. package/dist/migrations/sqlite/0000_baseline.sql +142 -35
  17. package/dist/migrations/sqlite/0001_mcp_approvals.sql +19 -0
  18. package/dist/migrations/sqlite/meta/0000_snapshot.json +878 -235
  19. package/dist/migrations/sqlite/meta/0001_snapshot.json +1062 -57
  20. package/dist/migrations/sqlite/meta/_journal.json +3 -24
  21. package/dist/portable.d.ts +2 -2
  22. package/dist/{schema-Wt-p8AOh.d.ts → schema-BqCB3XFm.d.ts} +1153 -83
  23. package/dist/schema-sqlite.d.ts +1171 -60
  24. package/dist/schema-sqlite.js +173 -11
  25. package/dist/schema-version.d.ts +9 -13
  26. package/dist/schema-version.js +38 -90
  27. package/dist/schema.d.ts +2 -2
  28. package/dist/schema.js +208 -15
  29. package/package.json +7 -2
  30. package/src/baseline/postgres.sql +46 -10
  31. package/src/baseline/sqlite.sql +15 -0
  32. package/src/baseline.ts +7 -3
  33. package/src/dialect.ts +25 -1
  34. package/src/grants.ts +51 -0
  35. package/src/migrate.ts +5 -0
  36. package/src/migrations/postgres/0000_baseline.sql +174 -46
  37. package/src/migrations/postgres/0001_mcp_approvals.sql +24 -0
  38. package/src/migrations/postgres/meta/0000_snapshot.json +963 -185
  39. package/src/migrations/postgres/meta/0001_snapshot.json +1171 -30
  40. package/src/migrations/postgres/meta/_journal.json +3 -24
  41. package/src/migrations/sqlite/0000_baseline.sql +142 -35
  42. package/src/migrations/sqlite/0001_mcp_approvals.sql +19 -0
  43. package/src/migrations/sqlite/meta/0000_snapshot.json +878 -235
  44. package/src/migrations/sqlite/meta/0001_snapshot.json +1062 -57
  45. package/src/migrations/sqlite/meta/_journal.json +3 -24
  46. package/src/schema-version.ts +26 -18
  47. package/src/schema.sqlite.ts +223 -8
  48. package/src/schema.ts +263 -11
  49. package/dist/migrations/postgres/0001_remove_syncs.sql +0 -13
  50. package/dist/migrations/postgres/0002_service_bindings.sql +0 -28
  51. package/dist/migrations/postgres/0003_exchanges.sql +0 -10
  52. package/dist/migrations/postgres/0004_live_indexes.sql +0 -3
  53. package/dist/migrations/postgres/meta/0002_snapshot.json +0 -1870
  54. package/dist/migrations/postgres/meta/0003_snapshot.json +0 -1917
  55. package/dist/migrations/postgres/meta/0004_snapshot.json +0 -2006
  56. package/dist/migrations/sqlite/0001_remove_syncs.sql +0 -13
  57. package/dist/migrations/sqlite/0002_service_bindings.sql +0 -23
  58. package/dist/migrations/sqlite/0003_exchanges.sql +0 -7
  59. package/dist/migrations/sqlite/0004_live_indexes.sql +0 -3
  60. package/dist/migrations/sqlite/meta/0002_snapshot.json +0 -1736
  61. package/dist/migrations/sqlite/meta/0003_snapshot.json +0 -1781
  62. package/dist/migrations/sqlite/meta/0004_snapshot.json +0 -1811
  63. package/src/migrations/postgres/0001_remove_syncs.sql +0 -13
  64. package/src/migrations/postgres/0002_service_bindings.sql +0 -28
  65. package/src/migrations/postgres/0003_exchanges.sql +0 -10
  66. package/src/migrations/postgres/0004_live_indexes.sql +0 -3
  67. package/src/migrations/postgres/meta/0002_snapshot.json +0 -1870
  68. package/src/migrations/postgres/meta/0003_snapshot.json +0 -1917
  69. package/src/migrations/postgres/meta/0004_snapshot.json +0 -2006
  70. package/src/migrations/sqlite/0001_remove_syncs.sql +0 -13
  71. package/src/migrations/sqlite/0002_service_bindings.sql +0 -23
  72. package/src/migrations/sqlite/0003_exchanges.sql +0 -7
  73. package/src/migrations/sqlite/0004_live_indexes.sql +0 -3
  74. package/src/migrations/sqlite/meta/0002_snapshot.json +0 -1736
  75. package/src/migrations/sqlite/meta/0003_snapshot.json +0 -1781
  76. package/src/migrations/sqlite/meta/0004_snapshot.json +0 -1811
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": "6",
3
3
  "dialect": "sqlite",
4
- "id": "6de9e286-f9d7-4c08-ac7d-e963092320c1",
4
+ "id": "77ab1ca5-1c82-4f95-a295-592dbe7c56e1",
5
5
  "prevId": "00000000-0000-0000-0000-000000000000",
6
6
  "tables": {
7
7
  "audit_chain_head": {
@@ -271,6 +271,57 @@
271
271
  "seq"
272
272
  ],
273
273
  "isUnique": false
274
+ },
275
+ "audit_log_unbind_idx": {
276
+ "name": "audit_log_unbind_idx",
277
+ "columns": [
278
+ "json_extract(\"metadata\", '$.bindingId')"
279
+ ],
280
+ "isUnique": false,
281
+ "where": "\"audit_log\".\"author\" = 'app' AND \"audit_log\".\"action\" = 'token.unbind' AND \"audit_log\".\"decision\" = 'allow'"
282
+ },
283
+ "audit_log_exchange_idx": {
284
+ "name": "audit_log_exchange_idx",
285
+ "columns": [
286
+ "json_extract(\"metadata\", '$.credentialId')"
287
+ ],
288
+ "isUnique": false,
289
+ "where": "\"audit_log\".\"author\" = 'app' AND \"audit_log\".\"action\" = 'token.exchange' AND \"audit_log\".\"decision\" = 'allow'"
290
+ },
291
+ "audit_log_reference_end_idx": {
292
+ "name": "audit_log_reference_end_idx",
293
+ "columns": [
294
+ "related_seq"
295
+ ],
296
+ "isUnique": false,
297
+ "where": "\"audit_log\".\"author\" = 'vault' AND \"audit_log\".\"action\" = 'reference.end' AND \"audit_log\".\"decision\" = 'allow'"
298
+ },
299
+ "audit_log_also_project_idx": {
300
+ "name": "audit_log_also_project_idx",
301
+ "columns": [
302
+ "json_extract(\"metadata\", '$.also.projectId')",
303
+ "seq"
304
+ ],
305
+ "isUnique": false,
306
+ "where": "json_extract(\"audit_log\".\"metadata\", '$.also') IS NOT NULL"
307
+ },
308
+ "audit_log_also_environment_idx": {
309
+ "name": "audit_log_also_environment_idx",
310
+ "columns": [
311
+ "json_extract(\"metadata\", '$.also.environmentId')",
312
+ "seq"
313
+ ],
314
+ "isUnique": false,
315
+ "where": "json_extract(\"audit_log\".\"metadata\", '$.also') IS NOT NULL"
316
+ },
317
+ "audit_log_also_secret_idx": {
318
+ "name": "audit_log_also_secret_idx",
319
+ "columns": [
320
+ "json_extract(\"metadata\", '$.also.secretId')",
321
+ "seq"
322
+ ],
323
+ "isUnique": false,
324
+ "where": "json_extract(\"audit_log\".\"metadata\", '$.also') IS NOT NULL"
274
325
  }
275
326
  },
276
327
  "foreignKeys": {
@@ -349,7 +400,7 @@
349
400
  },
350
401
  "audit_log_actor_check": {
351
402
  "name": "audit_log_actor_check",
352
- "value": "\"audit_log\".\"actor\" GLOB 'user:?*' OR \"audit_log\".\"actor\" GLOB 'token:?*' OR \"audit_log\".\"actor\" GLOB 'sync:?*' OR \"audit_log\".\"actor\" GLOB 'system:?*'"
403
+ "value": "\"audit_log\".\"actor\" GLOB 'user:?*' OR \"audit_log\".\"actor\" GLOB 'token:?*' OR \"audit_log\".\"actor\" GLOB 'system:?*'"
353
404
  },
354
405
  "audit_log_decision_check": {
355
406
  "name": "audit_log_decision_check",
@@ -373,6 +424,36 @@
373
424
  }
374
425
  }
375
426
  },
427
+ "consumed_tokens": {
428
+ "name": "consumed_tokens",
429
+ "columns": {
430
+ "hash": {
431
+ "name": "hash",
432
+ "type": "blob",
433
+ "primaryKey": true,
434
+ "notNull": true,
435
+ "autoincrement": false
436
+ },
437
+ "consumed_at": {
438
+ "name": "consumed_at",
439
+ "type": "integer",
440
+ "primaryKey": false,
441
+ "notNull": true,
442
+ "autoincrement": false,
443
+ "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
444
+ }
445
+ },
446
+ "indexes": {},
447
+ "foreignKeys": {},
448
+ "compositePrimaryKeys": {},
449
+ "uniqueConstraints": {},
450
+ "checkConstraints": {
451
+ "consumed_tokens_hash_check": {
452
+ "name": "consumed_tokens_hash_check",
453
+ "value": "octet_length(\"consumed_tokens\".\"hash\") = 32"
454
+ }
455
+ }
456
+ },
376
457
  "credentials": {
377
458
  "name": "credentials",
378
459
  "columns": {
@@ -499,6 +580,24 @@
499
580
  ],
500
581
  "isUnique": false
501
582
  },
583
+ "credentials_live_idx": {
584
+ "name": "credentials_live_idx",
585
+ "columns": [
586
+ "principal",
587
+ "expires_at"
588
+ ],
589
+ "isUnique": false,
590
+ "where": "\"credentials\".\"revoked_at\" IS NULL"
591
+ },
592
+ "credentials_issued_by_idx": {
593
+ "name": "credentials_issued_by_idx",
594
+ "columns": [
595
+ "principal",
596
+ "created_by",
597
+ "created_at"
598
+ ],
599
+ "isUnique": false
600
+ },
502
601
  "credentials_token_hash_key": {
503
602
  "name": "credentials_token_hash_key",
504
603
  "columns": [
@@ -709,6 +808,86 @@
709
808
  }
710
809
  }
711
810
  },
811
+ "dismissed_keys": {
812
+ "name": "dismissed_keys",
813
+ "columns": {
814
+ "environment_id": {
815
+ "name": "environment_id",
816
+ "type": "text",
817
+ "primaryKey": false,
818
+ "notNull": true,
819
+ "autoincrement": false
820
+ },
821
+ "key": {
822
+ "name": "key",
823
+ "type": "text",
824
+ "primaryKey": false,
825
+ "notNull": true,
826
+ "autoincrement": false
827
+ },
828
+ "dismissed_at": {
829
+ "name": "dismissed_at",
830
+ "type": "integer",
831
+ "primaryKey": false,
832
+ "notNull": true,
833
+ "autoincrement": false,
834
+ "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
835
+ },
836
+ "dismissed_by": {
837
+ "name": "dismissed_by",
838
+ "type": "text",
839
+ "primaryKey": false,
840
+ "notNull": true,
841
+ "autoincrement": false
842
+ },
843
+ "restored_at": {
844
+ "name": "restored_at",
845
+ "type": "integer",
846
+ "primaryKey": false,
847
+ "notNull": false,
848
+ "autoincrement": false
849
+ },
850
+ "restored_by": {
851
+ "name": "restored_by",
852
+ "type": "text",
853
+ "primaryKey": false,
854
+ "notNull": false,
855
+ "autoincrement": false
856
+ }
857
+ },
858
+ "indexes": {},
859
+ "foreignKeys": {
860
+ "dismissed_keys_environment_id_fkey": {
861
+ "name": "dismissed_keys_environment_id_fkey",
862
+ "tableFrom": "dismissed_keys",
863
+ "tableTo": "environments",
864
+ "columnsFrom": [
865
+ "environment_id"
866
+ ],
867
+ "columnsTo": [
868
+ "id"
869
+ ],
870
+ "onDelete": "restrict",
871
+ "onUpdate": "no action"
872
+ }
873
+ },
874
+ "compositePrimaryKeys": {
875
+ "dismissed_keys_pkey": {
876
+ "columns": [
877
+ "environment_id",
878
+ "key"
879
+ ],
880
+ "name": "dismissed_keys_pkey"
881
+ }
882
+ },
883
+ "uniqueConstraints": {},
884
+ "checkConstraints": {
885
+ "dismissed_keys_key_check": {
886
+ "name": "dismissed_keys_key_check",
887
+ "value": "length(\"dismissed_keys\".\"key\") BETWEEN 1 AND 128 AND \"dismissed_keys\".\"key\" GLOB '[A-Za-z_]*' AND \"dismissed_keys\".\"key\" NOT GLOB '*[^A-Za-z0-9_]*'"
888
+ }
889
+ }
890
+ },
712
891
  "environments": {
713
892
  "name": "environments",
714
893
  "columns": {
@@ -794,7 +973,7 @@
794
973
  "checkConstraints": {
795
974
  "environments_slug_check": {
796
975
  "name": "environments_slug_check",
797
- "value": "length(\"environments\".\"slug\") BETWEEN 1 AND 63 AND \"environments\".\"slug\" GLOB '[a-z0-9]*' AND \"environments\".\"slug\" NOT GLOB '*[^a-z0-9-]*'"
976
+ "value": "(length(\"environments\".\"slug\") BETWEEN 1 AND 63 AND \"environments\".\"slug\" GLOB '[a-z0-9]*' AND \"environments\".\"slug\" NOT GLOB '*[^a-z0-9-]*') OR (instr(\"environments\".\"slug\", '~') BETWEEN 2 AND 64 AND substr(\"environments\".\"slug\", 1, instr(\"environments\".\"slug\", '~') - 1) GLOB '[a-z0-9]*' AND substr(\"environments\".\"slug\", 1, instr(\"environments\".\"slug\", '~') - 1) NOT GLOB '*[^a-z0-9-]*' AND length(substr(\"environments\".\"slug\", instr(\"environments\".\"slug\", '~') + 1)) BETWEEN 1 AND 40 AND substr(\"environments\".\"slug\", instr(\"environments\".\"slug\", '~') + 1) NOT GLOB '*[^a-z0-9-]*')"
798
977
  }
799
978
  }
800
979
  },
@@ -965,8 +1144,8 @@
965
1144
  }
966
1145
  }
967
1146
  },
968
- "projects": {
969
- "name": "projects",
1147
+ "mcp_connections": {
1148
+ "name": "mcp_connections",
970
1149
  "columns": {
971
1150
  "id": {
972
1151
  "name": "id",
@@ -975,131 +1154,107 @@
975
1154
  "notNull": true,
976
1155
  "autoincrement": false
977
1156
  },
978
- "slug": {
979
- "name": "slug",
980
- "type": "text",
1157
+ "auth_mac": {
1158
+ "name": "auth_mac",
1159
+ "type": "blob",
981
1160
  "primaryKey": false,
982
1161
  "notNull": true,
983
1162
  "autoincrement": false
984
1163
  },
985
- "name": {
986
- "name": "name",
1164
+ "principal": {
1165
+ "name": "principal",
987
1166
  "type": "text",
988
1167
  "primaryKey": false,
989
1168
  "notNull": true,
990
1169
  "autoincrement": false
991
1170
  },
992
- "created_at": {
993
- "name": "created_at",
1171
+ "generation": {
1172
+ "name": "generation",
994
1173
  "type": "integer",
995
1174
  "primaryKey": false,
996
1175
  "notNull": true,
997
- "autoincrement": false,
998
- "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
1176
+ "autoincrement": false
999
1177
  },
1000
- "archived_at": {
1001
- "name": "archived_at",
1002
- "type": "integer",
1178
+ "client_id": {
1179
+ "name": "client_id",
1180
+ "type": "text",
1003
1181
  "primaryKey": false,
1004
- "notNull": false,
1182
+ "notNull": true,
1005
1183
  "autoincrement": false
1006
- }
1007
- },
1008
- "indexes": {
1009
- "projects_slug_key": {
1010
- "name": "projects_slug_key",
1011
- "columns": [
1012
- "slug"
1013
- ],
1014
- "isUnique": true
1015
- }
1016
- },
1017
- "foreignKeys": {},
1018
- "compositePrimaryKeys": {},
1019
- "uniqueConstraints": {},
1020
- "checkConstraints": {
1021
- "projects_slug_check": {
1022
- "name": "projects_slug_check",
1023
- "value": "length(\"projects\".\"slug\") BETWEEN 1 AND 63 AND \"projects\".\"slug\" GLOB '[a-z0-9]*' AND \"projects\".\"slug\" NOT GLOB '*[^a-z0-9-]*'"
1024
- }
1025
- }
1026
- },
1027
- "secret_versions": {
1028
- "name": "secret_versions",
1029
- "columns": {
1030
- "id": {
1031
- "name": "id",
1184
+ },
1185
+ "client_name": {
1186
+ "name": "client_name",
1032
1187
  "type": "text",
1033
- "primaryKey": true,
1188
+ "primaryKey": false,
1034
1189
  "notNull": true,
1035
1190
  "autoincrement": false
1036
1191
  },
1037
- "secret_id": {
1038
- "name": "secret_id",
1192
+ "client_host": {
1193
+ "name": "client_host",
1039
1194
  "type": "text",
1040
1195
  "primaryKey": false,
1041
- "notNull": true,
1196
+ "notNull": false,
1042
1197
  "autoincrement": false
1043
1198
  },
1044
- "version": {
1045
- "name": "version",
1046
- "type": "integer",
1199
+ "registration": {
1200
+ "name": "registration",
1201
+ "type": "text",
1047
1202
  "primaryKey": false,
1048
1203
  "notNull": true,
1049
1204
  "autoincrement": false
1050
1205
  },
1051
- "envelope_version": {
1052
- "name": "envelope_version",
1053
- "type": "integer",
1206
+ "scopes": {
1207
+ "name": "scopes",
1208
+ "type": "text",
1054
1209
  "primaryKey": false,
1055
1210
  "notNull": true,
1056
1211
  "autoincrement": false
1057
1212
  },
1058
- "ciphertext": {
1059
- "name": "ciphertext",
1060
- "type": "blob",
1213
+ "redirect_uri": {
1214
+ "name": "redirect_uri",
1215
+ "type": "text",
1061
1216
  "primaryKey": false,
1062
1217
  "notNull": true,
1063
1218
  "autoincrement": false
1064
1219
  },
1065
- "iv": {
1066
- "name": "iv",
1220
+ "code_hash": {
1221
+ "name": "code_hash",
1067
1222
  "type": "blob",
1068
1223
  "primaryKey": false,
1069
- "notNull": true,
1224
+ "notNull": false,
1070
1225
  "autoincrement": false
1071
1226
  },
1072
- "auth_tag": {
1073
- "name": "auth_tag",
1074
- "type": "blob",
1227
+ "code_challenge": {
1228
+ "name": "code_challenge",
1229
+ "type": "text",
1075
1230
  "primaryKey": false,
1076
- "notNull": true,
1231
+ "notNull": false,
1077
1232
  "autoincrement": false
1078
1233
  },
1079
- "wrapped_dek": {
1080
- "name": "wrapped_dek",
1081
- "type": "blob",
1234
+ "code_expires_at": {
1235
+ "name": "code_expires_at",
1236
+ "type": "integer",
1082
1237
  "primaryKey": false,
1083
- "notNull": true,
1238
+ "notNull": false,
1084
1239
  "autoincrement": false
1085
1240
  },
1086
- "kek_provider": {
1087
- "name": "kek_provider",
1088
- "type": "text",
1241
+ "refresh_hash": {
1242
+ "name": "refresh_hash",
1243
+ "type": "blob",
1089
1244
  "primaryKey": false,
1090
- "notNull": true,
1245
+ "notNull": false,
1091
1246
  "autoincrement": false
1092
1247
  },
1093
- "kek_id": {
1094
- "name": "kek_id",
1095
- "type": "text",
1248
+ "refresh_previous_hash": {
1249
+ "name": "refresh_previous_hash",
1250
+ "type": "blob",
1096
1251
  "primaryKey": false,
1097
- "notNull": true,
1252
+ "notNull": false,
1098
1253
  "autoincrement": false
1099
1254
  },
1100
- "kek_version": {
1101
- "name": "kek_version",
1102
- "type": "text",
1255
+ "expires_at": {
1256
+ "name": "expires_at",
1257
+ "type": "integer",
1103
1258
  "primaryKey": false,
1104
1259
  "notNull": true,
1105
1260
  "autoincrement": false
@@ -1112,28 +1267,521 @@
1112
1267
  "autoincrement": false,
1113
1268
  "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
1114
1269
  },
1115
- "created_by": {
1116
- "name": "created_by",
1270
+ "last_used_at": {
1271
+ "name": "last_used_at",
1272
+ "type": "integer",
1273
+ "primaryKey": false,
1274
+ "notNull": false,
1275
+ "autoincrement": false
1276
+ },
1277
+ "last_used_ip": {
1278
+ "name": "last_used_ip",
1117
1279
  "type": "text",
1118
1280
  "primaryKey": false,
1119
- "notNull": true,
1281
+ "notNull": false,
1282
+ "autoincrement": false
1283
+ },
1284
+ "revoked_at": {
1285
+ "name": "revoked_at",
1286
+ "type": "integer",
1287
+ "primaryKey": false,
1288
+ "notNull": false,
1289
+ "autoincrement": false
1290
+ },
1291
+ "revoked_by": {
1292
+ "name": "revoked_by",
1293
+ "type": "text",
1294
+ "primaryKey": false,
1295
+ "notNull": false,
1120
1296
  "autoincrement": false
1121
1297
  }
1122
1298
  },
1123
1299
  "indexes": {
1124
- "secret_versions_secret_idx": {
1125
- "name": "secret_versions_secret_idx",
1300
+ "mcp_connections_refresh_previous_idx": {
1301
+ "name": "mcp_connections_refresh_previous_idx",
1126
1302
  "columns": [
1127
- "secret_id",
1128
- "version"
1303
+ "refresh_previous_hash"
1129
1304
  ],
1130
1305
  "isUnique": false
1131
1306
  },
1132
- "secret_versions_secret_id_version_key": {
1133
- "name": "secret_versions_secret_id_version_key",
1307
+ "mcp_connections_live_idx": {
1308
+ "name": "mcp_connections_live_idx",
1134
1309
  "columns": [
1135
- "secret_id",
1136
- "version"
1310
+ "principal",
1311
+ "expires_at"
1312
+ ],
1313
+ "isUnique": false,
1314
+ "where": "\"mcp_connections\".\"revoked_at\" IS NULL"
1315
+ },
1316
+ "mcp_connections_code_hash_key": {
1317
+ "name": "mcp_connections_code_hash_key",
1318
+ "columns": [
1319
+ "code_hash"
1320
+ ],
1321
+ "isUnique": true
1322
+ },
1323
+ "mcp_connections_refresh_hash_key": {
1324
+ "name": "mcp_connections_refresh_hash_key",
1325
+ "columns": [
1326
+ "refresh_hash"
1327
+ ],
1328
+ "isUnique": true
1329
+ }
1330
+ },
1331
+ "foreignKeys": {
1332
+ "mcp_connections_principal_fkey": {
1333
+ "name": "mcp_connections_principal_fkey",
1334
+ "tableFrom": "mcp_connections",
1335
+ "tableTo": "vault_members",
1336
+ "columnsFrom": [
1337
+ "principal"
1338
+ ],
1339
+ "columnsTo": [
1340
+ "principal"
1341
+ ],
1342
+ "onDelete": "restrict",
1343
+ "onUpdate": "no action"
1344
+ }
1345
+ },
1346
+ "compositePrimaryKeys": {},
1347
+ "uniqueConstraints": {},
1348
+ "checkConstraints": {
1349
+ "mcp_connections_principal_check": {
1350
+ "name": "mcp_connections_principal_check",
1351
+ "value": "\"mcp_connections\".\"principal\" LIKE 'user:%'"
1352
+ },
1353
+ "mcp_connections_registration_check": {
1354
+ "name": "mcp_connections_registration_check",
1355
+ "value": "\"mcp_connections\".\"registration\" IN ('cimd', 'dcr')"
1356
+ },
1357
+ "mcp_connections_auth_mac_check": {
1358
+ "name": "mcp_connections_auth_mac_check",
1359
+ "value": "octet_length(\"mcp_connections\".\"auth_mac\") = 32"
1360
+ },
1361
+ "mcp_connections_code_hash_check": {
1362
+ "name": "mcp_connections_code_hash_check",
1363
+ "value": "\"mcp_connections\".\"code_hash\" IS NULL OR octet_length(\"mcp_connections\".\"code_hash\") = 32"
1364
+ },
1365
+ "mcp_connections_refresh_hash_check": {
1366
+ "name": "mcp_connections_refresh_hash_check",
1367
+ "value": "\"mcp_connections\".\"refresh_hash\" IS NULL OR octet_length(\"mcp_connections\".\"refresh_hash\") = 32"
1368
+ }
1369
+ }
1370
+ },
1371
+ "oauth_clients": {
1372
+ "name": "oauth_clients",
1373
+ "columns": {
1374
+ "id": {
1375
+ "name": "id",
1376
+ "type": "text",
1377
+ "primaryKey": true,
1378
+ "notNull": true,
1379
+ "autoincrement": false
1380
+ },
1381
+ "auth_mac": {
1382
+ "name": "auth_mac",
1383
+ "type": "blob",
1384
+ "primaryKey": false,
1385
+ "notNull": true,
1386
+ "autoincrement": false
1387
+ },
1388
+ "name": {
1389
+ "name": "name",
1390
+ "type": "text",
1391
+ "primaryKey": false,
1392
+ "notNull": true,
1393
+ "autoincrement": false
1394
+ },
1395
+ "redirect_uris": {
1396
+ "name": "redirect_uris",
1397
+ "type": "text",
1398
+ "primaryKey": false,
1399
+ "notNull": true,
1400
+ "autoincrement": false
1401
+ },
1402
+ "created_at": {
1403
+ "name": "created_at",
1404
+ "type": "integer",
1405
+ "primaryKey": false,
1406
+ "notNull": true,
1407
+ "autoincrement": false,
1408
+ "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
1409
+ },
1410
+ "created_ip": {
1411
+ "name": "created_ip",
1412
+ "type": "text",
1413
+ "primaryKey": false,
1414
+ "notNull": false,
1415
+ "autoincrement": false
1416
+ },
1417
+ "revoked_at": {
1418
+ "name": "revoked_at",
1419
+ "type": "integer",
1420
+ "primaryKey": false,
1421
+ "notNull": false,
1422
+ "autoincrement": false
1423
+ }
1424
+ },
1425
+ "indexes": {},
1426
+ "foreignKeys": {},
1427
+ "compositePrimaryKeys": {},
1428
+ "uniqueConstraints": {},
1429
+ "checkConstraints": {
1430
+ "oauth_clients_auth_mac_check": {
1431
+ "name": "oauth_clients_auth_mac_check",
1432
+ "value": "octet_length(\"oauth_clients\".\"auth_mac\") = 32"
1433
+ },
1434
+ "oauth_clients_redirect_uris_check": {
1435
+ "name": "oauth_clients_redirect_uris_check",
1436
+ "value": "json_valid(\"oauth_clients\".\"redirect_uris\")"
1437
+ }
1438
+ }
1439
+ },
1440
+ "projects": {
1441
+ "name": "projects",
1442
+ "columns": {
1443
+ "id": {
1444
+ "name": "id",
1445
+ "type": "text",
1446
+ "primaryKey": true,
1447
+ "notNull": true,
1448
+ "autoincrement": false
1449
+ },
1450
+ "slug": {
1451
+ "name": "slug",
1452
+ "type": "text",
1453
+ "primaryKey": false,
1454
+ "notNull": true,
1455
+ "autoincrement": false
1456
+ },
1457
+ "name": {
1458
+ "name": "name",
1459
+ "type": "text",
1460
+ "primaryKey": false,
1461
+ "notNull": true,
1462
+ "autoincrement": false
1463
+ },
1464
+ "created_at": {
1465
+ "name": "created_at",
1466
+ "type": "integer",
1467
+ "primaryKey": false,
1468
+ "notNull": true,
1469
+ "autoincrement": false,
1470
+ "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
1471
+ },
1472
+ "archived_at": {
1473
+ "name": "archived_at",
1474
+ "type": "integer",
1475
+ "primaryKey": false,
1476
+ "notNull": false,
1477
+ "autoincrement": false
1478
+ },
1479
+ "folder": {
1480
+ "name": "folder",
1481
+ "type": "text",
1482
+ "primaryKey": false,
1483
+ "notNull": false,
1484
+ "autoincrement": false
1485
+ }
1486
+ },
1487
+ "indexes": {
1488
+ "projects_slug_key": {
1489
+ "name": "projects_slug_key",
1490
+ "columns": [
1491
+ "slug"
1492
+ ],
1493
+ "isUnique": true
1494
+ }
1495
+ },
1496
+ "foreignKeys": {},
1497
+ "compositePrimaryKeys": {},
1498
+ "uniqueConstraints": {},
1499
+ "checkConstraints": {
1500
+ "projects_slug_check": {
1501
+ "name": "projects_slug_check",
1502
+ "value": "(length(\"projects\".\"slug\") BETWEEN 1 AND 63 AND \"projects\".\"slug\" GLOB '[a-z0-9]*' AND \"projects\".\"slug\" NOT GLOB '*[^a-z0-9-]*') OR (instr(\"projects\".\"slug\", '~') BETWEEN 2 AND 64 AND substr(\"projects\".\"slug\", 1, instr(\"projects\".\"slug\", '~') - 1) GLOB '[a-z0-9]*' AND substr(\"projects\".\"slug\", 1, instr(\"projects\".\"slug\", '~') - 1) NOT GLOB '*[^a-z0-9-]*' AND length(substr(\"projects\".\"slug\", instr(\"projects\".\"slug\", '~') + 1)) BETWEEN 1 AND 40 AND substr(\"projects\".\"slug\", instr(\"projects\".\"slug\", '~') + 1) NOT GLOB '*[^a-z0-9-]*')"
1503
+ },
1504
+ "projects_folder_check": {
1505
+ "name": "projects_folder_check",
1506
+ "value": "\"projects\".\"folder\" IS NULL OR (length(\"projects\".\"folder\") BETWEEN 1 AND 64 AND \"projects\".\"folder\" NOT GLOB '*/*' AND \"projects\".\"folder\" = trim(\"projects\".\"folder\"))"
1507
+ }
1508
+ }
1509
+ },
1510
+ "secret_references": {
1511
+ "name": "secret_references",
1512
+ "columns": {
1513
+ "id": {
1514
+ "name": "id",
1515
+ "type": "text",
1516
+ "primaryKey": true,
1517
+ "notNull": true,
1518
+ "autoincrement": false
1519
+ },
1520
+ "project_id": {
1521
+ "name": "project_id",
1522
+ "type": "text",
1523
+ "primaryKey": false,
1524
+ "notNull": true,
1525
+ "autoincrement": false
1526
+ },
1527
+ "environment_id": {
1528
+ "name": "environment_id",
1529
+ "type": "text",
1530
+ "primaryKey": false,
1531
+ "notNull": true,
1532
+ "autoincrement": false
1533
+ },
1534
+ "secret_id": {
1535
+ "name": "secret_id",
1536
+ "type": "text",
1537
+ "primaryKey": false,
1538
+ "notNull": true,
1539
+ "autoincrement": false
1540
+ },
1541
+ "source_project_id": {
1542
+ "name": "source_project_id",
1543
+ "type": "text",
1544
+ "primaryKey": false,
1545
+ "notNull": true,
1546
+ "autoincrement": false
1547
+ },
1548
+ "source_environment_id": {
1549
+ "name": "source_environment_id",
1550
+ "type": "text",
1551
+ "primaryKey": false,
1552
+ "notNull": true,
1553
+ "autoincrement": false
1554
+ },
1555
+ "source_secret_id": {
1556
+ "name": "source_secret_id",
1557
+ "type": "text",
1558
+ "primaryKey": false,
1559
+ "notNull": true,
1560
+ "autoincrement": false
1561
+ },
1562
+ "created_seq": {
1563
+ "name": "created_seq",
1564
+ "type": "integer",
1565
+ "primaryKey": false,
1566
+ "notNull": true,
1567
+ "autoincrement": false
1568
+ },
1569
+ "created_at": {
1570
+ "name": "created_at",
1571
+ "type": "integer",
1572
+ "primaryKey": false,
1573
+ "notNull": true,
1574
+ "autoincrement": false,
1575
+ "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
1576
+ },
1577
+ "created_by": {
1578
+ "name": "created_by",
1579
+ "type": "text",
1580
+ "primaryKey": false,
1581
+ "notNull": true,
1582
+ "autoincrement": false
1583
+ }
1584
+ },
1585
+ "indexes": {
1586
+ "secret_references_holder_idx": {
1587
+ "name": "secret_references_holder_idx",
1588
+ "columns": [
1589
+ "secret_id",
1590
+ "created_seq"
1591
+ ],
1592
+ "isUnique": false
1593
+ },
1594
+ "secret_references_source_idx": {
1595
+ "name": "secret_references_source_idx",
1596
+ "columns": [
1597
+ "source_secret_id"
1598
+ ],
1599
+ "isUnique": false
1600
+ },
1601
+ "secret_references_project_idx": {
1602
+ "name": "secret_references_project_idx",
1603
+ "columns": [
1604
+ "project_id"
1605
+ ],
1606
+ "isUnique": false
1607
+ },
1608
+ "secret_references_source_project_idx": {
1609
+ "name": "secret_references_source_project_idx",
1610
+ "columns": [
1611
+ "source_project_id"
1612
+ ],
1613
+ "isUnique": false
1614
+ },
1615
+ "secret_references_created_by_idx": {
1616
+ "name": "secret_references_created_by_idx",
1617
+ "columns": [
1618
+ "created_by"
1619
+ ],
1620
+ "isUnique": false
1621
+ },
1622
+ "secret_references_created_seq_key": {
1623
+ "name": "secret_references_created_seq_key",
1624
+ "columns": [
1625
+ "created_seq"
1626
+ ],
1627
+ "isUnique": true
1628
+ }
1629
+ },
1630
+ "foreignKeys": {
1631
+ "secret_references_secret_id_fkey": {
1632
+ "name": "secret_references_secret_id_fkey",
1633
+ "tableFrom": "secret_references",
1634
+ "tableTo": "secrets",
1635
+ "columnsFrom": [
1636
+ "secret_id"
1637
+ ],
1638
+ "columnsTo": [
1639
+ "id"
1640
+ ],
1641
+ "onDelete": "restrict",
1642
+ "onUpdate": "no action"
1643
+ },
1644
+ "secret_references_source_secret_id_fkey": {
1645
+ "name": "secret_references_source_secret_id_fkey",
1646
+ "tableFrom": "secret_references",
1647
+ "tableTo": "secrets",
1648
+ "columnsFrom": [
1649
+ "source_secret_id"
1650
+ ],
1651
+ "columnsTo": [
1652
+ "id"
1653
+ ],
1654
+ "onDelete": "restrict",
1655
+ "onUpdate": "no action"
1656
+ },
1657
+ "secret_references_created_seq_fkey": {
1658
+ "name": "secret_references_created_seq_fkey",
1659
+ "tableFrom": "secret_references",
1660
+ "tableTo": "audit_log",
1661
+ "columnsFrom": [
1662
+ "created_seq"
1663
+ ],
1664
+ "columnsTo": [
1665
+ "seq"
1666
+ ],
1667
+ "onDelete": "restrict",
1668
+ "onUpdate": "no action"
1669
+ }
1670
+ },
1671
+ "compositePrimaryKeys": {},
1672
+ "uniqueConstraints": {},
1673
+ "checkConstraints": {}
1674
+ },
1675
+ "secret_versions": {
1676
+ "name": "secret_versions",
1677
+ "columns": {
1678
+ "id": {
1679
+ "name": "id",
1680
+ "type": "text",
1681
+ "primaryKey": true,
1682
+ "notNull": true,
1683
+ "autoincrement": false
1684
+ },
1685
+ "secret_id": {
1686
+ "name": "secret_id",
1687
+ "type": "text",
1688
+ "primaryKey": false,
1689
+ "notNull": true,
1690
+ "autoincrement": false
1691
+ },
1692
+ "version": {
1693
+ "name": "version",
1694
+ "type": "integer",
1695
+ "primaryKey": false,
1696
+ "notNull": true,
1697
+ "autoincrement": false
1698
+ },
1699
+ "envelope_version": {
1700
+ "name": "envelope_version",
1701
+ "type": "integer",
1702
+ "primaryKey": false,
1703
+ "notNull": true,
1704
+ "autoincrement": false
1705
+ },
1706
+ "ciphertext": {
1707
+ "name": "ciphertext",
1708
+ "type": "blob",
1709
+ "primaryKey": false,
1710
+ "notNull": true,
1711
+ "autoincrement": false
1712
+ },
1713
+ "iv": {
1714
+ "name": "iv",
1715
+ "type": "blob",
1716
+ "primaryKey": false,
1717
+ "notNull": true,
1718
+ "autoincrement": false
1719
+ },
1720
+ "auth_tag": {
1721
+ "name": "auth_tag",
1722
+ "type": "blob",
1723
+ "primaryKey": false,
1724
+ "notNull": true,
1725
+ "autoincrement": false
1726
+ },
1727
+ "wrapped_dek": {
1728
+ "name": "wrapped_dek",
1729
+ "type": "blob",
1730
+ "primaryKey": false,
1731
+ "notNull": true,
1732
+ "autoincrement": false
1733
+ },
1734
+ "kek_provider": {
1735
+ "name": "kek_provider",
1736
+ "type": "text",
1737
+ "primaryKey": false,
1738
+ "notNull": true,
1739
+ "autoincrement": false
1740
+ },
1741
+ "kek_id": {
1742
+ "name": "kek_id",
1743
+ "type": "text",
1744
+ "primaryKey": false,
1745
+ "notNull": true,
1746
+ "autoincrement": false
1747
+ },
1748
+ "kek_version": {
1749
+ "name": "kek_version",
1750
+ "type": "text",
1751
+ "primaryKey": false,
1752
+ "notNull": true,
1753
+ "autoincrement": false
1754
+ },
1755
+ "created_at": {
1756
+ "name": "created_at",
1757
+ "type": "integer",
1758
+ "primaryKey": false,
1759
+ "notNull": true,
1760
+ "autoincrement": false,
1761
+ "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
1762
+ },
1763
+ "created_by": {
1764
+ "name": "created_by",
1765
+ "type": "text",
1766
+ "primaryKey": false,
1767
+ "notNull": true,
1768
+ "autoincrement": false
1769
+ }
1770
+ },
1771
+ "indexes": {
1772
+ "secret_versions_secret_idx": {
1773
+ "name": "secret_versions_secret_idx",
1774
+ "columns": [
1775
+ "secret_id",
1776
+ "version"
1777
+ ],
1778
+ "isUnique": false
1779
+ },
1780
+ "secret_versions_secret_id_version_key": {
1781
+ "name": "secret_versions_secret_id_version_key",
1782
+ "columns": [
1783
+ "secret_id",
1784
+ "version"
1137
1785
  ],
1138
1786
  "isUnique": true
1139
1787
  }
@@ -1238,6 +1886,13 @@
1238
1886
  "primaryKey": false,
1239
1887
  "notNull": false,
1240
1888
  "autoincrement": false
1889
+ },
1890
+ "folder": {
1891
+ "name": "folder",
1892
+ "type": "text",
1893
+ "primaryKey": false,
1894
+ "notNull": false,
1895
+ "autoincrement": false
1241
1896
  }
1242
1897
  },
1243
1898
  "indexes": {
@@ -1322,133 +1977,77 @@
1322
1977
  "secrets_key_check": {
1323
1978
  "name": "secrets_key_check",
1324
1979
  "value": "length(\"secrets\".\"key\") BETWEEN 1 AND 128 AND \"secrets\".\"key\" GLOB '[A-Za-z_]*' AND \"secrets\".\"key\" NOT GLOB '*[^A-Za-z0-9_]*'"
1980
+ },
1981
+ "secrets_folder_check": {
1982
+ "name": "secrets_folder_check",
1983
+ "value": "\"secrets\".\"folder\" IS NULL OR (length(\"secrets\".\"folder\") BETWEEN 1 AND 64 AND \"secrets\".\"folder\" NOT GLOB '*/*' AND \"secrets\".\"folder\" = trim(\"secrets\".\"folder\"))"
1325
1984
  }
1326
1985
  }
1327
1986
  },
1328
- "sync_keys": {
1329
- "name": "sync_keys",
1987
+ "service_bindings": {
1988
+ "name": "service_bindings",
1330
1989
  "columns": {
1331
- "sync_id": {
1332
- "name": "sync_id",
1990
+ "id": {
1991
+ "name": "id",
1333
1992
  "type": "text",
1334
- "primaryKey": false,
1993
+ "primaryKey": true,
1335
1994
  "notNull": true,
1336
1995
  "autoincrement": false
1337
1996
  },
1338
- "key": {
1339
- "name": "key",
1340
- "type": "text",
1997
+ "auth_mac": {
1998
+ "name": "auth_mac",
1999
+ "type": "blob",
1341
2000
  "primaryKey": false,
1342
2001
  "notNull": true,
1343
2002
  "autoincrement": false
1344
2003
  },
1345
- "secret_version_id": {
1346
- "name": "secret_version_id",
2004
+ "principal": {
2005
+ "name": "principal",
1347
2006
  "type": "text",
1348
2007
  "primaryKey": false,
1349
- "notNull": false,
1350
- "autoincrement": false
1351
- },
1352
- "pushed_at": {
1353
- "name": "pushed_at",
1354
- "type": "integer",
1355
- "primaryKey": false,
1356
2008
  "notNull": true,
1357
- "autoincrement": false,
1358
- "default": "(CAST(unixepoch('subsec') * 1000 AS INTEGER))"
2009
+ "autoincrement": false
1359
2010
  },
1360
- "removed_at": {
1361
- "name": "removed_at",
2011
+ "generation": {
2012
+ "name": "generation",
1362
2013
  "type": "integer",
1363
2014
  "primaryKey": false,
1364
- "notNull": false,
1365
- "autoincrement": false
1366
- }
1367
- },
1368
- "indexes": {},
1369
- "foreignKeys": {
1370
- "sync_keys_sync_id_fkey": {
1371
- "name": "sync_keys_sync_id_fkey",
1372
- "tableFrom": "sync_keys",
1373
- "tableTo": "syncs",
1374
- "columnsFrom": [
1375
- "sync_id"
1376
- ],
1377
- "columnsTo": [
1378
- "id"
1379
- ],
1380
- "onDelete": "restrict",
1381
- "onUpdate": "no action"
1382
- },
1383
- "sync_keys_secret_version_id_fkey": {
1384
- "name": "sync_keys_secret_version_id_fkey",
1385
- "tableFrom": "sync_keys",
1386
- "tableTo": "secret_versions",
1387
- "columnsFrom": [
1388
- "secret_version_id"
1389
- ],
1390
- "columnsTo": [
1391
- "id"
1392
- ],
1393
- "onDelete": "restrict",
1394
- "onUpdate": "no action"
1395
- }
1396
- },
1397
- "compositePrimaryKeys": {
1398
- "sync_keys_pkey": {
1399
- "columns": [
1400
- "sync_id",
1401
- "key"
1402
- ],
1403
- "name": "sync_keys_pkey"
1404
- }
1405
- },
1406
- "uniqueConstraints": {},
1407
- "checkConstraints": {}
1408
- },
1409
- "syncs": {
1410
- "name": "syncs",
1411
- "columns": {
1412
- "id": {
1413
- "name": "id",
1414
- "type": "text",
1415
- "primaryKey": true,
1416
2015
  "notNull": true,
1417
2016
  "autoincrement": false
1418
2017
  },
1419
- "project_id": {
1420
- "name": "project_id",
2018
+ "profile": {
2019
+ "name": "profile",
1421
2020
  "type": "text",
1422
2021
  "primaryKey": false,
1423
2022
  "notNull": true,
1424
2023
  "autoincrement": false
1425
2024
  },
1426
- "environment_id": {
1427
- "name": "environment_id",
2025
+ "issuer": {
2026
+ "name": "issuer",
1428
2027
  "type": "text",
1429
2028
  "primaryKey": false,
1430
2029
  "notNull": true,
1431
2030
  "autoincrement": false
1432
2031
  },
1433
- "provider": {
1434
- "name": "provider",
2032
+ "jwks_uri": {
2033
+ "name": "jwks_uri",
1435
2034
  "type": "text",
1436
2035
  "primaryKey": false,
1437
2036
  "notNull": true,
1438
2037
  "autoincrement": false
1439
2038
  },
1440
- "config": {
1441
- "name": "config",
2039
+ "claims": {
2040
+ "name": "claims",
1442
2041
  "type": "text",
1443
2042
  "primaryKey": false,
1444
2043
  "notNull": true,
1445
2044
  "autoincrement": false
1446
2045
  },
1447
- "credential_secret_id": {
1448
- "name": "credential_secret_id",
2046
+ "label": {
2047
+ "name": "label",
1449
2048
  "type": "text",
1450
2049
  "primaryKey": false,
1451
- "notNull": true,
2050
+ "notNull": false,
1452
2051
  "autoincrement": false
1453
2052
  },
1454
2053
  "created_at": {
@@ -1466,43 +2065,22 @@
1466
2065
  "notNull": true,
1467
2066
  "autoincrement": false
1468
2067
  },
1469
- "paused_at": {
1470
- "name": "paused_at",
1471
- "type": "integer",
1472
- "primaryKey": false,
1473
- "notNull": false,
1474
- "autoincrement": false
1475
- },
1476
- "archived_at": {
1477
- "name": "archived_at",
1478
- "type": "integer",
1479
- "primaryKey": false,
1480
- "notNull": false,
1481
- "autoincrement": false
1482
- },
1483
- "lease_until": {
1484
- "name": "lease_until",
2068
+ "last_used_at": {
2069
+ "name": "last_used_at",
1485
2070
  "type": "integer",
1486
2071
  "primaryKey": false,
1487
2072
  "notNull": false,
1488
2073
  "autoincrement": false
1489
2074
  },
1490
- "last_run_at": {
1491
- "name": "last_run_at",
2075
+ "revoked_at": {
2076
+ "name": "revoked_at",
1492
2077
  "type": "integer",
1493
2078
  "primaryKey": false,
1494
2079
  "notNull": false,
1495
2080
  "autoincrement": false
1496
2081
  },
1497
- "last_status": {
1498
- "name": "last_status",
1499
- "type": "text",
1500
- "primaryKey": false,
1501
- "notNull": false,
1502
- "autoincrement": false
1503
- },
1504
- "last_error": {
1505
- "name": "last_error",
2082
+ "revoked_by": {
2083
+ "name": "revoked_by",
1506
2084
  "type": "text",
1507
2085
  "primaryKey": false,
1508
2086
  "notNull": false,
@@ -1510,39 +2088,37 @@
1510
2088
  }
1511
2089
  },
1512
2090
  "indexes": {
1513
- "syncs_environment_idx": {
1514
- "name": "syncs_environment_idx",
2091
+ "service_bindings_principal_idx": {
2092
+ "name": "service_bindings_principal_idx",
1515
2093
  "columns": [
1516
- "environment_id"
2094
+ "principal",
2095
+ "issuer"
1517
2096
  ],
1518
2097
  "isUnique": false
2098
+ },
2099
+ "service_bindings_live_idx": {
2100
+ "name": "service_bindings_live_idx",
2101
+ "columns": [
2102
+ "principal",
2103
+ "issuer",
2104
+ "generation",
2105
+ "created_at",
2106
+ "id"
2107
+ ],
2108
+ "isUnique": false,
2109
+ "where": "\"service_bindings\".\"revoked_at\" IS NULL"
1519
2110
  }
1520
2111
  },
1521
2112
  "foreignKeys": {
1522
- "syncs_environment_in_project": {
1523
- "name": "syncs_environment_in_project",
1524
- "tableFrom": "syncs",
1525
- "tableTo": "environments",
1526
- "columnsFrom": [
1527
- "environment_id",
1528
- "project_id"
1529
- ],
1530
- "columnsTo": [
1531
- "id",
1532
- "project_id"
1533
- ],
1534
- "onDelete": "restrict",
1535
- "onUpdate": "no action"
1536
- },
1537
- "syncs_credential_secret_id_fkey": {
1538
- "name": "syncs_credential_secret_id_fkey",
1539
- "tableFrom": "syncs",
1540
- "tableTo": "secrets",
2113
+ "service_bindings_principal_fkey": {
2114
+ "name": "service_bindings_principal_fkey",
2115
+ "tableFrom": "service_bindings",
2116
+ "tableTo": "vault_members",
1541
2117
  "columnsFrom": [
1542
- "credential_secret_id"
2118
+ "principal"
1543
2119
  ],
1544
2120
  "columnsTo": [
1545
- "id"
2121
+ "principal"
1546
2122
  ],
1547
2123
  "onDelete": "restrict",
1548
2124
  "onUpdate": "no action"
@@ -1551,13 +2127,17 @@
1551
2127
  "compositePrimaryKeys": {},
1552
2128
  "uniqueConstraints": {},
1553
2129
  "checkConstraints": {
1554
- "syncs_config_check": {
1555
- "name": "syncs_config_check",
1556
- "value": "json_valid(\"syncs\".\"config\")"
2130
+ "service_bindings_principal_check": {
2131
+ "name": "service_bindings_principal_check",
2132
+ "value": "\"service_bindings\".\"principal\" LIKE 'token:%'"
1557
2133
  },
1558
- "syncs_last_status_check": {
1559
- "name": "syncs_last_status_check",
1560
- "value": "\"syncs\".\"last_status\" IS NULL OR \"syncs\".\"last_status\" IN ('ok', 'partial', 'failed')"
2134
+ "service_bindings_auth_mac_check": {
2135
+ "name": "service_bindings_auth_mac_check",
2136
+ "value": "octet_length(\"service_bindings\".\"auth_mac\") = 32"
2137
+ },
2138
+ "service_bindings_claims_check": {
2139
+ "name": "service_bindings_claims_check",
2140
+ "value": "json_valid(\"service_bindings\".\"claims\")"
1561
2141
  }
1562
2142
  }
1563
2143
  },
@@ -1585,6 +2165,13 @@
1585
2165
  "notNull": false,
1586
2166
  "autoincrement": false
1587
2167
  },
2168
+ "environment_slug": {
2169
+ "name": "environment_slug",
2170
+ "type": "text",
2171
+ "primaryKey": false,
2172
+ "notNull": false,
2173
+ "autoincrement": false
2174
+ },
1588
2175
  "role": {
1589
2176
  "name": "role",
1590
2177
  "type": "text",
@@ -1615,6 +2202,14 @@
1615
2202
  }
1616
2203
  },
1617
2204
  "indexes": {
2205
+ "vault_grants_on_every_project": {
2206
+ "name": "vault_grants_on_every_project",
2207
+ "columns": [
2208
+ "principal"
2209
+ ],
2210
+ "isUnique": true,
2211
+ "where": "\"vault_grants\".\"project_id\" IS NULL AND \"vault_grants\".\"environment_id\" IS NULL AND \"vault_grants\".\"environment_slug\" IS NULL"
2212
+ },
1618
2213
  "vault_grants_on_project": {
1619
2214
  "name": "vault_grants_on_project",
1620
2215
  "columns": [
@@ -1630,6 +2225,14 @@
1630
2225
  "environment_id"
1631
2226
  ],
1632
2227
  "isUnique": true
2228
+ },
2229
+ "vault_grants_on_environment_slug": {
2230
+ "name": "vault_grants_on_environment_slug",
2231
+ "columns": [
2232
+ "principal",
2233
+ "environment_slug"
2234
+ ],
2235
+ "isUnique": true
1633
2236
  }
1634
2237
  },
1635
2238
  "foreignKeys": {
@@ -1678,7 +2281,11 @@
1678
2281
  "checkConstraints": {
1679
2282
  "vault_grants_one_place": {
1680
2283
  "name": "vault_grants_one_place",
1681
- "value": "(\"vault_grants\".\"project_id\" IS NULL) <> (\"vault_grants\".\"environment_id\" IS NULL)"
2284
+ "value": "((\"vault_grants\".\"project_id\" IS NULL) <> (\"vault_grants\".\"environment_id\" IS NULL) AND \"vault_grants\".\"environment_slug\" IS NULL) OR (\"vault_grants\".\"project_id\" IS NULL AND \"vault_grants\".\"environment_id\" IS NULL)"
2285
+ },
2286
+ "vault_grants_environment_slug_check": {
2287
+ "name": "vault_grants_environment_slug_check",
2288
+ "value": "\"vault_grants\".\"environment_slug\" IS NULL OR (length(\"vault_grants\".\"environment_slug\") BETWEEN 1 AND 63 AND \"vault_grants\".\"environment_slug\" GLOB '[a-z0-9]*' AND \"vault_grants\".\"environment_slug\" NOT GLOB '*[^a-z0-9-]*')"
1682
2289
  },
1683
2290
  "vault_grants_role_check": {
1684
2291
  "name": "vault_grants_role_check",
@@ -1686,7 +2293,7 @@
1686
2293
  },
1687
2294
  "vault_grants_environment_role_check": {
1688
2295
  "name": "vault_grants_environment_role_check",
1689
- "value": "\"vault_grants\".\"environment_id\" IS NULL OR \"vault_grants\".\"role\" IN ('viewer', 'developer', 'auditor')"
2296
+ "value": "(\"vault_grants\".\"environment_id\" IS NULL AND \"vault_grants\".\"environment_slug\" IS NULL) OR \"vault_grants\".\"role\" IN ('viewer', 'developer', 'auditor')"
1690
2297
  }
1691
2298
  }
1692
2299
  },
@@ -1777,7 +2384,7 @@
1777
2384
  },
1778
2385
  "vault_members_principal_check": {
1779
2386
  "name": "vault_members_principal_check",
1780
- "value": "(\"vault_members\".\"principal\" GLOB 'user:?*' OR \"vault_members\".\"principal\" GLOB 'token:?*' OR \"vault_members\".\"principal\" GLOB 'sync:?*')\n AND substr(\"vault_members\".\"principal\", instr(\"vault_members\".\"principal\", ':') + 1, 1) <> ':'\n AND instr(\"vault_members\".\"principal\", ' ') = 0 AND instr(\"vault_members\".\"principal\", char(9)) = 0\n AND instr(\"vault_members\".\"principal\", char(10)) = 0 AND instr(\"vault_members\".\"principal\", char(13)) = 0"
2387
+ "value": "(\"vault_members\".\"principal\" GLOB 'user:?*' OR \"vault_members\".\"principal\" GLOB 'token:?*')\n AND substr(\"vault_members\".\"principal\", instr(\"vault_members\".\"principal\", ':') + 1, 1) <> ':'\n AND instr(\"vault_members\".\"principal\", ' ') = 0 AND instr(\"vault_members\".\"principal\", char(9)) = 0\n AND instr(\"vault_members\".\"principal\", char(10)) = 0 AND instr(\"vault_members\".\"principal\", char(13)) = 0"
1781
2388
  },
1782
2389
  "vault_members_user_lowercase": {
1783
2390
  "name": "vault_members_user_lowercase",
@@ -1806,6 +2413,42 @@
1806
2413
  "columns": {}
1807
2414
  },
1808
2415
  "internal": {
1809
- "indexes": {}
2416
+ "indexes": {
2417
+ "audit_log_unbind_idx": {
2418
+ "columns": {
2419
+ "json_extract(\"metadata\", '$.bindingId')": {
2420
+ "isExpression": true
2421
+ }
2422
+ }
2423
+ },
2424
+ "audit_log_exchange_idx": {
2425
+ "columns": {
2426
+ "json_extract(\"metadata\", '$.credentialId')": {
2427
+ "isExpression": true
2428
+ }
2429
+ }
2430
+ },
2431
+ "audit_log_also_project_idx": {
2432
+ "columns": {
2433
+ "json_extract(\"metadata\", '$.also.projectId')": {
2434
+ "isExpression": true
2435
+ }
2436
+ }
2437
+ },
2438
+ "audit_log_also_environment_idx": {
2439
+ "columns": {
2440
+ "json_extract(\"metadata\", '$.also.environmentId')": {
2441
+ "isExpression": true
2442
+ }
2443
+ }
2444
+ },
2445
+ "audit_log_also_secret_idx": {
2446
+ "columns": {
2447
+ "json_extract(\"metadata\", '$.also.secretId')": {
2448
+ "isExpression": true
2449
+ }
2450
+ }
2451
+ }
2452
+ }
1810
2453
  }
1811
2454
  }