@adminiumjs/meta 0.1.2 → 0.2.2-rc.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 (193) hide show
  1. package/dist/bootstrap.d.ts +10 -2
  2. package/dist/bootstrap.d.ts.map +1 -1
  3. package/dist/bootstrap.js +12 -3
  4. package/dist/bootstrap.js.map +1 -1
  5. package/dist/columns.d.ts.map +1 -1
  6. package/dist/columns.js +1 -0
  7. package/dist/columns.js.map +1 -1
  8. package/dist/connect.d.ts +26 -1
  9. package/dist/connect.d.ts.map +1 -1
  10. package/dist/connect.js +33 -1
  11. package/dist/connect.js.map +1 -1
  12. package/dist/ids.d.ts +2 -0
  13. package/dist/ids.d.ts.map +1 -1
  14. package/dist/ids.js +3 -0
  15. package/dist/ids.js.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/migrate-lock.d.ts +104 -0
  21. package/dist/migrate-lock.d.ts.map +1 -0
  22. package/dist/migrate-lock.js +197 -0
  23. package/dist/migrate-lock.js.map +1 -0
  24. package/dist/migrations/0001_core_auth.d.ts.map +1 -1
  25. package/dist/migrations/0001_core_auth.js +1 -0
  26. package/dist/migrations/0001_core_auth.js.map +1 -1
  27. package/dist/migrations/0002_rbac.d.ts.map +1 -1
  28. package/dist/migrations/0002_rbac.js +1 -0
  29. package/dist/migrations/0002_rbac.js.map +1 -1
  30. package/dist/migrations/0003_connections_schema.d.ts.map +1 -1
  31. package/dist/migrations/0003_connections_schema.js +1 -0
  32. package/dist/migrations/0003_connections_schema.js.map +1 -1
  33. package/dist/migrations/0004_pages_views.d.ts.map +1 -1
  34. package/dist/migrations/0004_pages_views.js +1 -0
  35. package/dist/migrations/0004_pages_views.js.map +1 -1
  36. package/dist/migrations/0005_ops.d.ts.map +1 -1
  37. package/dist/migrations/0005_ops.js +1 -0
  38. package/dist/migrations/0005_ops.js.map +1 -1
  39. package/dist/migrations/0006_platform.d.ts.map +1 -1
  40. package/dist/migrations/0006_platform.js +1 -0
  41. package/dist/migrations/0006_platform.js.map +1 -1
  42. package/dist/migrations/0007_llm_runs.d.ts.map +1 -1
  43. package/dist/migrations/0007_llm_runs.js +1 -0
  44. package/dist/migrations/0007_llm_runs.js.map +1 -1
  45. package/dist/migrations/0008_llm_overrides.d.ts.map +1 -1
  46. package/dist/migrations/0008_llm_overrides.js +1 -0
  47. package/dist/migrations/0008_llm_overrides.js.map +1 -1
  48. package/dist/migrations/0009_views_kind.d.ts.map +1 -1
  49. package/dist/migrations/0009_views_kind.js +1 -0
  50. package/dist/migrations/0009_views_kind.js.map +1 -1
  51. package/dist/migrations/0010_llm_prompt_version_width.d.ts.map +1 -1
  52. package/dist/migrations/0010_llm_prompt_version_width.js +1 -0
  53. package/dist/migrations/0010_llm_prompt_version_width.js.map +1 -1
  54. package/dist/migrations/0011_i18n_runtime.d.ts +42 -0
  55. package/dist/migrations/0011_i18n_runtime.d.ts.map +1 -0
  56. package/dist/migrations/0011_i18n_runtime.js +102 -0
  57. package/dist/migrations/0011_i18n_runtime.js.map +1 -0
  58. package/dist/migrations/0012_locale_width.d.ts +29 -0
  59. package/dist/migrations/0012_locale_width.d.ts.map +1 -0
  60. package/dist/migrations/0012_locale_width.js +43 -0
  61. package/dist/migrations/0012_locale_width.js.map +1 -0
  62. package/dist/migrations/0013_connection_last_error_hint.d.ts +17 -0
  63. package/dist/migrations/0013_connection_last_error_hint.d.ts.map +1 -0
  64. package/dist/migrations/0013_connection_last_error_hint.js +22 -0
  65. package/dist/migrations/0013_connection_last_error_hint.js.map +1 -0
  66. package/dist/migrations/index.d.ts.map +1 -1
  67. package/dist/migrations/index.js +7 -0
  68. package/dist/migrations/index.js.map +1 -1
  69. package/dist/migrator.d.ts +22 -3
  70. package/dist/migrator.d.ts.map +1 -1
  71. package/dist/migrator.js +27 -6
  72. package/dist/migrator.js.map +1 -1
  73. package/dist/prefix.d.ts.map +1 -1
  74. package/dist/prefix.js +1 -0
  75. package/dist/prefix.js.map +1 -1
  76. package/dist/relocate.d.ts +118 -0
  77. package/dist/relocate.d.ts.map +1 -0
  78. package/dist/relocate.js +376 -0
  79. package/dist/relocate.js.map +1 -0
  80. package/dist/repos/api-keys.d.ts.map +1 -1
  81. package/dist/repos/api-keys.js +1 -0
  82. package/dist/repos/api-keys.js.map +1 -1
  83. package/dist/repos/audit.d.ts.map +1 -1
  84. package/dist/repos/audit.js +1 -0
  85. package/dist/repos/audit.js.map +1 -1
  86. package/dist/repos/connections.d.ts +5 -0
  87. package/dist/repos/connections.d.ts.map +1 -1
  88. package/dist/repos/connections.js +8 -0
  89. package/dist/repos/connections.js.map +1 -1
  90. package/dist/repos/email-templates.d.ts.map +1 -1
  91. package/dist/repos/email-templates.js +1 -0
  92. package/dist/repos/email-templates.js.map +1 -1
  93. package/dist/repos/exports.d.ts.map +1 -1
  94. package/dist/repos/exports.js +1 -0
  95. package/dist/repos/exports.js.map +1 -1
  96. package/dist/repos/files.d.ts.map +1 -1
  97. package/dist/repos/files.js +1 -0
  98. package/dist/repos/files.js.map +1 -1
  99. package/dist/repos/i18n-version.d.ts +32 -0
  100. package/dist/repos/i18n-version.d.ts.map +1 -0
  101. package/dist/repos/i18n-version.js +57 -0
  102. package/dist/repos/i18n-version.js.map +1 -0
  103. package/dist/repos/imports.d.ts.map +1 -1
  104. package/dist/repos/imports.js +1 -0
  105. package/dist/repos/imports.js.map +1 -1
  106. package/dist/repos/index.d.ts +3 -0
  107. package/dist/repos/index.d.ts.map +1 -1
  108. package/dist/repos/index.js +4 -0
  109. package/dist/repos/index.js.map +1 -1
  110. package/dist/repos/jobs.d.ts.map +1 -1
  111. package/dist/repos/jobs.js +1 -0
  112. package/dist/repos/jobs.js.map +1 -1
  113. package/dist/repos/llm-overrides.d.ts.map +1 -1
  114. package/dist/repos/llm-overrides.js +1 -0
  115. package/dist/repos/llm-overrides.js.map +1 -1
  116. package/dist/repos/llm-runs.d.ts.map +1 -1
  117. package/dist/repos/llm-runs.js +1 -0
  118. package/dist/repos/llm-runs.js.map +1 -1
  119. package/dist/repos/locales.d.ts +85 -0
  120. package/dist/repos/locales.d.ts.map +1 -0
  121. package/dist/repos/locales.js +190 -0
  122. package/dist/repos/locales.js.map +1 -0
  123. package/dist/repos/notification-prefs.d.ts.map +1 -1
  124. package/dist/repos/notification-prefs.js +1 -0
  125. package/dist/repos/notification-prefs.js.map +1 -1
  126. package/dist/repos/notifications.d.ts.map +1 -1
  127. package/dist/repos/notifications.js +1 -0
  128. package/dist/repos/notifications.js.map +1 -1
  129. package/dist/repos/overrides.d.ts +2 -2
  130. package/dist/repos/overrides.d.ts.map +1 -1
  131. package/dist/repos/overrides.js +1 -0
  132. package/dist/repos/overrides.js.map +1 -1
  133. package/dist/repos/pages.d.ts +147 -1
  134. package/dist/repos/pages.d.ts.map +1 -1
  135. package/dist/repos/pages.js +318 -23
  136. package/dist/repos/pages.js.map +1 -1
  137. package/dist/repos/password-resets.d.ts.map +1 -1
  138. package/dist/repos/password-resets.js +1 -0
  139. package/dist/repos/password-resets.js.map +1 -1
  140. package/dist/repos/permissions.d.ts +15 -0
  141. package/dist/repos/permissions.d.ts.map +1 -1
  142. package/dist/repos/permissions.js +39 -0
  143. package/dist/repos/permissions.js.map +1 -1
  144. package/dist/repos/roles.d.ts.map +1 -1
  145. package/dist/repos/roles.js +1 -0
  146. package/dist/repos/roles.js.map +1 -1
  147. package/dist/repos/scheduled-reports.d.ts.map +1 -1
  148. package/dist/repos/scheduled-reports.js +1 -0
  149. package/dist/repos/scheduled-reports.js.map +1 -1
  150. package/dist/repos/sessions.d.ts +9 -0
  151. package/dist/repos/sessions.d.ts.map +1 -1
  152. package/dist/repos/sessions.js +26 -0
  153. package/dist/repos/sessions.js.map +1 -1
  154. package/dist/repos/settings.d.ts.map +1 -1
  155. package/dist/repos/settings.js +1 -0
  156. package/dist/repos/settings.js.map +1 -1
  157. package/dist/repos/snapshots.d.ts.map +1 -1
  158. package/dist/repos/snapshots.js +1 -0
  159. package/dist/repos/snapshots.js.map +1 -1
  160. package/dist/repos/translations.d.ts +107 -0
  161. package/dist/repos/translations.d.ts.map +1 -0
  162. package/dist/repos/translations.js +232 -0
  163. package/dist/repos/translations.js.map +1 -0
  164. package/dist/repos/user-prefs.d.ts +8 -1
  165. package/dist/repos/user-prefs.d.ts.map +1 -1
  166. package/dist/repos/user-prefs.js +27 -3
  167. package/dist/repos/user-prefs.js.map +1 -1
  168. package/dist/repos/users.d.ts +31 -0
  169. package/dist/repos/users.d.ts.map +1 -1
  170. package/dist/repos/users.js +80 -4
  171. package/dist/repos/users.js.map +1 -1
  172. package/dist/repos/util.d.ts.map +1 -1
  173. package/dist/repos/util.js +1 -0
  174. package/dist/repos/util.js.map +1 -1
  175. package/dist/repos/views.d.ts.map +1 -1
  176. package/dist/repos/views.js +1 -0
  177. package/dist/repos/views.js.map +1 -1
  178. package/dist/schema/index.d.ts.map +1 -1
  179. package/dist/schema/index.js +1 -0
  180. package/dist/schema/index.js.map +1 -1
  181. package/dist/schema/json-payloads.d.ts +32 -2
  182. package/dist/schema/json-payloads.d.ts.map +1 -1
  183. package/dist/schema/json-payloads.js +36 -2
  184. package/dist/schema/json-payloads.js.map +1 -1
  185. package/dist/schema/settings-registry.d.ts +22 -1
  186. package/dist/schema/settings-registry.d.ts.map +1 -1
  187. package/dist/schema/settings-registry.js +22 -0
  188. package/dist/schema/settings-registry.js.map +1 -1
  189. package/dist/schema/tables.d.ts +49 -1
  190. package/dist/schema/tables.d.ts.map +1 -1
  191. package/dist/schema/tables.js +3 -0
  192. package/dist/schema/tables.js.map +1 -1
  193. package/package.json +2 -2
@@ -18,8 +18,16 @@ export interface BuiltinRoleDef {
18
18
  /**
19
19
  * The four built-in roles (§3.8, §6). Super-admin gets every system action
20
20
  * (the RBAC layer short-circuits for `super-admin` anyway); admin gets the §6
21
- * management set; editor/viewer get table/page grants dynamically at
22
- * generation time, no system actions.
21
+ * management set including `users.manage` and `audit.read`, without which an
22
+ * Admin can neither invite a colleague nor read the trail its own changes
23
+ * leave; editor/viewer get table/page grants dynamically at generation time,
24
+ * no system actions.
25
+ *
26
+ * `roles.manage` deliberately stays super-admin-only: it authorizes GRANTING a
27
+ * role, and an actor that can both invite a user and pick that user's role can
28
+ * mint itself any privilege (the invite reply carries the activation token —
29
+ * there is no SMTP to keep it out of the inviter's hands). `seedBuiltinRoles`
30
+ * runs at every boot and backfills the two new rows on existing installs.
23
31
  *
24
32
  * Reserved-key footprint: "every system action" includes ALL FOUR
25
33
  * `RESERVED_SYSTEM_ACTION_KEYS` (automations/webhooks/manifests/sql.run — no
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAIrF,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,aAAa,EAAE,SAAS,eAAe,EAAE,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,cAAc,EAyBlD,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IACpC,IAAI,SAA0B;;CAIxC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACnC,IAAI,SAAyB;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsBjH;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAK7F;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,0BAA0B,EACjC,EAAE,GAAE,MAAmB,GACtB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAqBD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAIrF,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,aAAa,EAAE,SAAS,eAAe,EAAE,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,cAAc,EAyBlD,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IACpC,IAAI,SAA0B;;CAIxC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACnC,IAAI,SAAyB;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsBjH;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAK7F;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,0BAA0B,EACjC,EAAE,GAAE,MAAmB,GACtB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAqBD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxE"}
package/dist/bootstrap.js CHANGED
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * First-run bootstrap (07-meta-store.md §6): migrations + built-in role and
3
4
  * permission seeds + `system.*` settings, plus the guarded creation of the
@@ -16,8 +17,16 @@ import { packJson } from './repos/util.js';
16
17
  /**
17
18
  * The four built-in roles (§3.8, §6). Super-admin gets every system action
18
19
  * (the RBAC layer short-circuits for `super-admin` anyway); admin gets the §6
19
- * management set; editor/viewer get table/page grants dynamically at
20
- * generation time, no system actions.
20
+ * management set including `users.manage` and `audit.read`, without which an
21
+ * Admin can neither invite a colleague nor read the trail its own changes
22
+ * leave; editor/viewer get table/page grants dynamically at generation time,
23
+ * no system actions.
24
+ *
25
+ * `roles.manage` deliberately stays super-admin-only: it authorizes GRANTING a
26
+ * role, and an actor that can both invite a user and pick that user's role can
27
+ * mint itself any privilege (the invite reply carries the activation token —
28
+ * there is no SMTP to keep it out of the inviter's hands). `seedBuiltinRoles`
29
+ * runs at every boot and backfills the two new rows on existing installs.
21
30
  *
22
31
  * Reserved-key footprint: "every system action" includes ALL FOUR
23
32
  * `RESERVED_SYSTEM_ACTION_KEYS` (automations/webhooks/manifests/sql.run — no
@@ -43,7 +52,7 @@ export const BUILTIN_ROLES = [
43
52
  slug: 'admin',
44
53
  name: 'Admin',
45
54
  description: 'Manages connections, schema, and LLM assist.',
46
- systemActions: ['connections.manage', 'schema.remap', 'llm.run'],
55
+ systemActions: ['users.manage', 'audit.read', 'connections.manage', 'schema.remap', 'llm.run'],
47
56
  },
48
57
  {
49
58
  slug: 'editor',
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAa,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAa,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAU3C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,aAAa,GAA8B;IACtD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,kEAAkE;QAC/E,aAAa,EAAE,kBAAkB;KAClC;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,8CAA8C;QAC3D,aAAa,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,CAAC;KAC/F;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mDAAmD;QAChE,aAAa,EAAE,EAAE;KAClB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wCAAwC;QACrD,aAAa,EAAE,EAAE;KAClB;CACF,CAAC;AAEF,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,GAAG,sBAAsB,CAAC;IACvC;QACE,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACxE,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,GAAG,qBAAqB,CAAC;CACvC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;IAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,IAAI,GAAgB,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CACvB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,EACjF,EAAE,CACH,CAAC;YACF,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;IAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACvD,MAAM,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3D,MAAM,QAAQ,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,QAAQ,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAOD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;IAClE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACtD,CAAC;AAUD;;;GAGG;AACH,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAE3D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,KAAiC,EACjC,KAAa,IAAI,CAAC,GAAG,EAAE;IAEvB,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACjD,MAAM,KAAK,GAAW,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAE/B,+DAA+D;QAC/D,MAAM,OAAO,GAAG,MAAM,GAAG;aACtB,UAAU,CAAC,mBAAmB,CAAC;aAC/B,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,qBAAqB,CAAC;aACxC,gBAAgB,EAAE,CAAC;QACtB,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;QAEhE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,mBAAmB,CAAC,yEAAyE,CAAC,CAAC;QAC3G,CAAC;QAED,0EAA0E;QAC1E,yEAAyE;QACzE,IAAI,CAAC;YACH,MAAM,GAAG;iBACN,UAAU,CAAC,mBAAmB,CAAC;iBAC/B,MAAM,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBAC3F,OAAO,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oEAAoE;YACpE,sEAAsE;YACtE,qEAAqE;YACrE,kEAAkE;YAClE,IAAI,mBAAmB,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;YACjE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAC7B,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,EAChF,EAAE,CACH,CAAC;QACF,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,CAAC,GAAG,KAA+D,CAAC;IAC1E,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,CAAC,4BAA4B;QACjE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;YAAE,OAAO,IAAI,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,gBAAgB;IACnD,OAAO,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE;SAC1B,UAAU,CAAC,mBAAmB,CAAC;SAC/B,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,qBAAqB,CAAC;SACxC,gBAAgB,EAAE,CAAC;IACtB,OAAO,OAAO,KAAK,SAAS,CAAC;AAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAO,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAChC,wCAAwC;IACxC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAChC,iEAAiE;IACjE,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;CAClD;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAkCjE"}
1
+ {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAO,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAChC,wCAAwC;IACxC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAChC,iEAAiE;IACjE,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;CAClD;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAkCjE"}
package/dist/columns.js CHANGED
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * Portable column-type helpers (07-meta-store.md §2.1).
3
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"columns.js","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,GAAG,EAAwC,MAAM,QAAQ,CAAC;AA4BnE,4FAA4F;AAC5F,8FAA8F;AAC9F,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,MAAM,UAAU,aAAa,CAAC,OAAoB;IAChD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAsB,EAAE;QAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,UAAU,CAAC,uCAAuC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,WAAW,CAAC,GAAsB,CAAC;IAC7E,CAAC,CAAC;IACF,OAAO;QACL,OAAO;QACP,0EAA0E;QAC1E,oEAAoE;QACpE,yEAAyE;QACzE,wEAAwE;QACxE,0EAA0E;QAC1E,4EAA4E;QAC5E,EAAE;QACF,0EAA0E;QAC1E,iEAAiE;QACjE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,sEAAsE;QACtE,oEAAoE;QACpE,EAAE,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAE,aAAgC,CAAC,CAAC,CAAC,GAAG,CAAA,UAAU;QAC9E,GAAG;QACH,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC9E,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA,YAAY,CAAC,CAAC,CAAC,SAAS;QAC5F,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACnD,EAAE,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC/C,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE,CAC9B,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAA,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG;KACtF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"columns.js","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,GAAG,EAAwC,MAAM,QAAQ,CAAC;AA4BnE,4FAA4F;AAC5F,8FAA8F;AAC9F,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,MAAM,UAAU,aAAa,CAAC,OAAoB;IAChD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAsB,EAAE;QAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,UAAU,CAAC,uCAAuC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,WAAW,CAAC,GAAsB,CAAC;IAC7E,CAAC,CAAC;IACF,OAAO;QACL,OAAO;QACP,0EAA0E;QAC1E,oEAAoE;QACpE,yEAAyE;QACzE,wEAAwE;QACxE,0EAA0E;QAC1E,4EAA4E;QAC5E,EAAE;QACF,0EAA0E;QAC1E,iEAAiE;QACjE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,sEAAsE;QACtE,oEAAoE;QACpE,EAAE,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAE,aAAgC,CAAC,CAAC,CAAC,GAAG,CAAA,UAAU;QAC9E,GAAG;QACH,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC9E,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA,YAAY,CAAC,CAAC,CAAC,SAAS;QAC5F,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACnD,EAAE,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC/C,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE,CAC9B,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAA,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG;KACtF,CAAC;AACJ,CAAC"}
package/dist/connect.d.ts CHANGED
@@ -26,9 +26,34 @@ export interface MetaDb {
26
26
  export declare function createSqliteMetaDb(config: SqliteDialectConfig): MetaDb;
27
27
  /**
28
28
  * PostgreSQL meta-store around an injected `pg` Pool. The pool must parse
29
- * int8 as JS number (all ts values < 2^53 — 07-meta-store.md §2.1).
29
+ * int8 as JS number (all ts values < 2^53 — 07-meta-store.md §2.1); build it
30
+ * with {@link postgresInt8AsNumber}.
30
31
  */
31
32
  export declare function createPostgresMetaDb(config: PostgresDialectConfig): MetaDb;
33
+ /**
34
+ * The `types` option that satisfies {@link createPostgresMetaDb}'s requirement:
35
+ * `new Pool({ …, types: postgresInt8AsNumber(pg) })`.
36
+ *
37
+ * The requirement was stated here and satisfiable nowhere, so every caller
38
+ * either forgot it (the product: each `ts` column arrived as a string and
39
+ * `GET /api/v1/bootstrap` 500'd on its own reply schema) or met it with a
40
+ * process-global `pg.types.setTypeParser`, which papered over the callers that
41
+ * had forgotten. Now there is one implementation, next to the contract.
42
+ *
43
+ * `node-postgres` decodes int8 as a string by default and is right to — int64
44
+ * outruns `Number.MAX_SAFE_INTEGER`. The META schema does not: `columns.ts`
45
+ * pins `ts` to epoch milliseconds and `bigint` to "values always < 2^53". So
46
+ * this is scoped to one pool ON PURPOSE. The global equivalent is a
47
+ * data-integrity bug waiting to happen: the server reads the USER's tables
48
+ * through the same `pg` module, and their `bigint` ids are under no such
49
+ * promise.
50
+ *
51
+ * Structurally typed over the module so this package still declares no driver
52
+ * dependency — the caller that imports `pg` passes it in.
53
+ */
54
+ export declare function postgresInt8AsNumber(pgModule: Record<string, unknown>): {
55
+ getTypeParser: (oid: number, format?: unknown) => unknown;
56
+ };
32
57
  /** MySQL/MariaDB meta-store around an injected `mysql2` pool. */
33
58
  export declare function createMysqlMetaDb(config: MysqlDialectConfig): MetaDb;
34
59
  /** One-time per-connection setup (currently: SQLite FK pragma). */
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAEL,MAAM,EAKN,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACzB,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,gEAAgE;AAChE,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;CACtB;AAiBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAE1E;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAEpE;AAED,mEAAmE;AACnE,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,8CAA8C;AAC9C,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAEL,MAAM,EAKN,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACzB,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,gEAAgE;AAChE,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;CACtB;AAiBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAE1E;AAKD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACvE,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3D,CASA;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAEpE;AAED,mEAAmE;AACnE,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,8CAA8C;AAC9C,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D"}
package/dist/connect.js CHANGED
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * Meta-store Kysely factories (07-meta-store.md §1 connect.ts, §5.2).
3
4
  *
@@ -36,11 +37,42 @@ export function createSqliteMetaDb(config) {
36
37
  }
37
38
  /**
38
39
  * PostgreSQL meta-store around an injected `pg` Pool. The pool must parse
39
- * int8 as JS number (all ts values < 2^53 — 07-meta-store.md §2.1).
40
+ * int8 as JS number (all ts values < 2^53 — 07-meta-store.md §2.1); build it
41
+ * with {@link postgresInt8AsNumber}.
40
42
  */
41
43
  export function createPostgresMetaDb(config) {
42
44
  return build('postgres', new PostgresDialect(config));
43
45
  }
46
+ /** `pg`'s OID for `bigint`/`int8`. */
47
+ const PG_INT8_OID = 20;
48
+ /**
49
+ * The `types` option that satisfies {@link createPostgresMetaDb}'s requirement:
50
+ * `new Pool({ …, types: postgresInt8AsNumber(pg) })`.
51
+ *
52
+ * The requirement was stated here and satisfiable nowhere, so every caller
53
+ * either forgot it (the product: each `ts` column arrived as a string and
54
+ * `GET /api/v1/bootstrap` 500'd on its own reply schema) or met it with a
55
+ * process-global `pg.types.setTypeParser`, which papered over the callers that
56
+ * had forgotten. Now there is one implementation, next to the contract.
57
+ *
58
+ * `node-postgres` decodes int8 as a string by default and is right to — int64
59
+ * outruns `Number.MAX_SAFE_INTEGER`. The META schema does not: `columns.ts`
60
+ * pins `ts` to epoch milliseconds and `bigint` to "values always < 2^53". So
61
+ * this is scoped to one pool ON PURPOSE. The global equivalent is a
62
+ * data-integrity bug waiting to happen: the server reads the USER's tables
63
+ * through the same `pg` module, and their `bigint` ids are under no such
64
+ * promise.
65
+ *
66
+ * Structurally typed over the module so this package still declares no driver
67
+ * dependency — the caller that imports `pg` passes it in.
68
+ */
69
+ export function postgresInt8AsNumber(pgModule) {
70
+ const types = (pgModule.types ??
71
+ pgModule.default?.types);
72
+ return {
73
+ getTypeParser: (oid, format) => oid === PG_INT8_OID ? Number : (types?.getTypeParser(oid, format) ?? String),
74
+ };
75
+ }
44
76
  /** MySQL/MariaDB meta-store around an injected `mysql2` pool. */
45
77
  export function createMysqlMetaDb(config) {
46
78
  return build('mysql', new MysqlDialect(config));
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,eAAe,EACf,MAAM,EACN,YAAY,EACZ,eAAe,EACf,aAAa,GAKd,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AASxD,SAAS,KAAK,CAAC,OAAoB,EAAE,aAAsB;IACzD,OAAO;QACL,EAAE,EAAE,IAAI,MAAM,CAAS;YACrB,OAAO,EAAE,aAAa;YACtB,0EAA0E;YAC1E,qEAAqE;YACrE,wEAAwE;YACxE,uEAAuE;YACvE,6DAA6D;YAC7D,OAAO,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC;SACnE,CAAC;QACF,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA2B;IAC5D,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA6B;IAChE,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;GAUG;AAEH,OAAO,EACL,eAAe,EACf,MAAM,EACN,YAAY,EACZ,eAAe,EACf,aAAa,GAKd,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AASxD,SAAS,KAAK,CAAC,OAAoB,EAAE,aAAsB;IACzD,OAAO;QACL,EAAE,EAAE,IAAI,MAAM,CAAS;YACrB,OAAO,EAAE,aAAa;YACtB,0EAA0E;YAC1E,qEAAqE;YACrE,wEAAwE;YACxE,uEAAuE;YACvE,6DAA6D;YAC7D,OAAO,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC;SACnE,CAAC;QACF,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA2B;IAC5D,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA6B;IAChE,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,sCAAsC;AACtC,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAiC;IAGpE,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK;QAC1B,QAAQ,CAAC,OAA+C,EAAE,KAAK,CAErD,CAAC;IACd,OAAO;QACL,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAC7B,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;KAC/E,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC"}
package/dist/ids.d.ts CHANGED
@@ -44,6 +44,8 @@ export declare const ID_PREFIXES: {
44
44
  readonly whd: "adminium_webhook_deliveries";
45
45
  readonly flag: "adminium_feature_flags";
46
46
  readonly mft: "adminium_manifests";
47
+ readonly loc: "adminium_locales";
48
+ readonly trn: "adminium_translations";
47
49
  };
48
50
  export type IdPrefix = keyof typeof ID_PREFIXES;
49
51
  /** Maximum column width every id must fit (07-meta-store.md §2.1). */
package/dist/ids.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,QAAA,MAAM,QAAQ,QAAsB,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bd,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,WAAW,CAAC;AAOhD,sEAAsE;AACtE,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,qBAAa,cAAe,SAAQ,KAAK;IAC9B,IAAI,SAAoB;CAClC;AAiDD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAc9C;AAED,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,MAAM,EAAE,QAAQ,CAAC;IACjB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8FAA8F;AAC9F,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAY5C;AAED,uFAAuF;AACvF,wBAAgB,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAQ5D;AAED,yDAAyD;AACzD,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,2CAA2C;AAC3C,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAQH,QAAA,MAAM,QAAQ,QAAsB,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bd,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,WAAW,CAAC;AAOhD,sEAAsE;AACtE,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,qBAAa,cAAe,SAAQ,KAAK;IAC9B,IAAI,SAAoB;CAClC;AAiDD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAc9C;AAED,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,MAAM,EAAE,QAAQ,CAAC;IACjB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8FAA8F;AAC9F,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAY5C;AAED,uFAAuF;AACvF,wBAAgB,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAQ5D;AAED,yDAAyD;AACzD,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,2CAA2C;AAC3C,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,CAAC"}
package/dist/ids.js CHANGED
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * Type-prefixed monotonic ULID generator for every adminium_* primary key.
3
4
  *
@@ -49,6 +50,8 @@ export const ID_PREFIXES = {
49
50
  whd: 'adminium_webhook_deliveries',
50
51
  flag: 'adminium_feature_flags',
51
52
  mft: 'adminium_manifests',
53
+ loc: 'adminium_locales',
54
+ trn: 'adminium_translations',
52
55
  };
53
56
  const PREFIX_SET = new Set(Object.keys(ID_PREFIXES));
54
57
  /** `<prefix>_<26 Crockford chars>` — Crockford charset excludes I, L, O, U. */
package/dist/ids.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -15,7 +15,9 @@ export * from './columns.js';
15
15
  export * from './connect.js';
16
16
  export * from './schema/index.js';
17
17
  export * from './migrations/index.js';
18
+ export * from './migrate-lock.js';
18
19
  export * from './migrator.js';
20
+ export * from './relocate.js';
19
21
  export * from './repos/index.js';
20
22
  export * from './bootstrap.js';
21
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * @adminium/meta — the adminium_* meta-store (07-meta-store.md).
3
4
  *
@@ -15,7 +16,9 @@ export * from './columns.js';
15
16
  export * from './connect.js';
16
17
  export * from './schema/index.js';
17
18
  export * from './migrations/index.js';
19
+ export * from './migrate-lock.js';
18
20
  export * from './migrator.js';
21
+ export * from './relocate.js';
19
22
  export * from './repos/index.js';
20
23
  export * from './bootstrap.js';
21
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;GAUG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Per-dialect advisory lock around the migration pass (07-meta-store.md §4).
3
+ *
4
+ * WHY IT EXISTS. `docker compose pull && docker compose up -d` with more than
5
+ * one replica — or a PM2 cluster, or a rolling fleet deploy — boots several
6
+ * Adminium processes against one meta store at the same time, and every one of
7
+ * them runs the migration pass. The runner is idempotent per migration, but
8
+ * only PostgreSQL and SQLite are actually defended: there the ledger INSERT
9
+ * shares a transaction with the DDL, so a second runner entering the same
10
+ * pending migration collides on the ledger primary key and rolls back.
11
+ * MySQL has no transactional DDL — `migrator.ts` runs `migration.up()` bare and
12
+ * writes the ledger row after it — so two runners can both enter the same
13
+ * migration, and a crash between the last statement and the ledger insert
14
+ * leaves a migration applied-but-unrecorded that the next boot re-applies.
15
+ * One lock, held for the whole pass, is what closes that.
16
+ *
17
+ * WHY THE CONNECTION IS PINNED. All three mechanisms are SESSION-scoped, not
18
+ * statement-scoped: `pg_advisory_lock`, `GET_LOCK` and SQLite's RESERVED lock
19
+ * belong to the connection that took them. On a pooled Kysely the acquire and
20
+ * the release can land on different pooled connections, which unlocks nothing
21
+ * and protects nothing — the classic `GET_LOCK` footgun. So every branch here
22
+ * runs inside `db.connection()`, which binds one connection for the whole
23
+ * callback, and hands that same pinned handle to the caller's work.
24
+ *
25
+ * SELF-HEALING. A process that dies mid-migration does not wedge the next boot:
26
+ * PostgreSQL releases session advisory locks when the backend goes away, MySQL
27
+ * releases `GET_LOCK` when the connection drops, and SQLite's file lock dies
28
+ * with the process. There is no stale-lock table to clean up by hand.
29
+ *
30
+ * NOT RE-ENTRANT. Taking the lock twice on one handle is not supported and not
31
+ * needed — the only holder is the migration pass. `applyMigrations` therefore
32
+ * passes `lock: false` to the inner pass it wraps rather than nesting.
33
+ */
34
+ import { type Kysely } from 'kysely';
35
+ import type { MetaDialect } from './columns.js';
36
+ import type { MetaDB } from './schema/tables.js';
37
+ /**
38
+ * Fixed 64-bit PostgreSQL advisory-lock key: the first 8 bytes of
39
+ * sha256('adminium:migrations') read as a big-endian signed int64
40
+ * (0xf15280bf1fc422eb). Advisory locks live in a per-database namespace shared
41
+ * by every session, which is exactly the scope we want — two Adminium
42
+ * deployments in two databases of one cluster do not block each other.
43
+ *
44
+ * The value is hardcoded rather than derived at runtime because it is a wire
45
+ * constant: it must be byte-identical across versions, and greppable when an
46
+ * operator is staring at `pg_locks`.
47
+ */
48
+ export declare const PG_MIGRATION_LOCK_KEY = -1057641404118588693n;
49
+ /**
50
+ * MySQL `GET_LOCK` names are SERVER-wide, not schema-scoped, so a fixed name
51
+ * would make two Adminium schemas on one MySQL server serialize against each
52
+ * other. The current schema is folded into the name instead. Names are capped
53
+ * at 64 characters since MySQL 5.7, hence the digest rather than the raw
54
+ * schema name.
55
+ */
56
+ export declare const MYSQL_MIGRATION_LOCK_PREFIX = "adminium_migrate_";
57
+ /**
58
+ * How long a boot waits for another process's migration pass before giving up.
59
+ * Bounded on purpose: a container that hangs forever on a lock is worse than
60
+ * one that exits with a message a restart can retry. Two minutes covers an
61
+ * honest pass on a large meta store; operators of very large ones raise it.
62
+ */
63
+ export declare const DEFAULT_MIGRATION_LOCK_TIMEOUT_MS = 120000;
64
+ export declare class MigrationLockTimeoutError extends Error {
65
+ readonly dialect: MetaDialect;
66
+ readonly timeoutMs: number;
67
+ name: string;
68
+ constructor(dialect: MetaDialect, timeoutMs: number);
69
+ }
70
+ /** Emitted once per pass, the first time the lock is not immediately free. */
71
+ export interface MigrationLockWait {
72
+ dialect: MetaDialect;
73
+ timeoutMs: number;
74
+ }
75
+ export interface MigrationLockOptions {
76
+ dialect: MetaDialect;
77
+ /** Wait bound; defaults to {@link DEFAULT_MIGRATION_LOCK_TIMEOUT_MS}. */
78
+ timeoutMs?: number;
79
+ /**
80
+ * Called once when the lock is contended, so an operator watching
81
+ * `docker compose logs` knows why the boot is slow. Defaults to a
82
+ * `console.warn` — this package has no logger to inject.
83
+ */
84
+ onWait?: (wait: MigrationLockWait) => void;
85
+ }
86
+ export interface MigrationLockContext {
87
+ /**
88
+ * True when the lock itself opened a transaction on the pinned connection
89
+ * (SQLite only). The work inside must not open another — SQLite has no
90
+ * nested `BEGIN`.
91
+ */
92
+ inTransaction: boolean;
93
+ }
94
+ /**
95
+ * Run `run` while holding the meta store's migration lock, on a connection
96
+ * pinned for the lock's whole lifetime. The lock is always released — on
97
+ * success, on failure, and by the database itself if the process dies.
98
+ *
99
+ * `run` receives the PINNED handle and must use it for every statement:
100
+ * work sent to the original pooled handle is not covered by the lock (and, on
101
+ * SQLite, not part of the lock's transaction).
102
+ */
103
+ export declare function withMigrationLock<T>(db: Kysely<MetaDB>, options: MigrationLockOptions, run: (db: Kysely<MetaDB>, ctx: MigrationLockContext) => Promise<T>): Promise<T>;
104
+ //# sourceMappingURL=migrate-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-lock.d.ts","sourceRoot":"","sources":["../src/migrate-lock.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAKH,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,SAAU,CAAC;AAQzD,qBAAa,yBAA0B,SAAQ,KAAK;IAGhD,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAHnB,IAAI,SAA+B;gBAEjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM;CAQ7B;AAED,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAC;IACrB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAC;CACxB;AAwID;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAClB,OAAO,EAAE,oBAAoB,EAC7B,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,CAAC,CAAC,GACjE,OAAO,CAAC,CAAC,CAAC,CAaZ"}
@@ -0,0 +1,197 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ /**
3
+ * Per-dialect advisory lock around the migration pass (07-meta-store.md §4).
4
+ *
5
+ * WHY IT EXISTS. `docker compose pull && docker compose up -d` with more than
6
+ * one replica — or a PM2 cluster, or a rolling fleet deploy — boots several
7
+ * Adminium processes against one meta store at the same time, and every one of
8
+ * them runs the migration pass. The runner is idempotent per migration, but
9
+ * only PostgreSQL and SQLite are actually defended: there the ledger INSERT
10
+ * shares a transaction with the DDL, so a second runner entering the same
11
+ * pending migration collides on the ledger primary key and rolls back.
12
+ * MySQL has no transactional DDL — `migrator.ts` runs `migration.up()` bare and
13
+ * writes the ledger row after it — so two runners can both enter the same
14
+ * migration, and a crash between the last statement and the ledger insert
15
+ * leaves a migration applied-but-unrecorded that the next boot re-applies.
16
+ * One lock, held for the whole pass, is what closes that.
17
+ *
18
+ * WHY THE CONNECTION IS PINNED. All three mechanisms are SESSION-scoped, not
19
+ * statement-scoped: `pg_advisory_lock`, `GET_LOCK` and SQLite's RESERVED lock
20
+ * belong to the connection that took them. On a pooled Kysely the acquire and
21
+ * the release can land on different pooled connections, which unlocks nothing
22
+ * and protects nothing — the classic `GET_LOCK` footgun. So every branch here
23
+ * runs inside `db.connection()`, which binds one connection for the whole
24
+ * callback, and hands that same pinned handle to the caller's work.
25
+ *
26
+ * SELF-HEALING. A process that dies mid-migration does not wedge the next boot:
27
+ * PostgreSQL releases session advisory locks when the backend goes away, MySQL
28
+ * releases `GET_LOCK` when the connection drops, and SQLite's file lock dies
29
+ * with the process. There is no stale-lock table to clean up by hand.
30
+ *
31
+ * NOT RE-ENTRANT. Taking the lock twice on one handle is not supported and not
32
+ * needed — the only holder is the migration pass. `applyMigrations` therefore
33
+ * passes `lock: false` to the inner pass it wraps rather than nesting.
34
+ */
35
+ import { createHash } from 'node:crypto';
36
+ import { setTimeout as sleep } from 'node:timers/promises';
37
+ import { sql } from 'kysely';
38
+ /**
39
+ * Fixed 64-bit PostgreSQL advisory-lock key: the first 8 bytes of
40
+ * sha256('adminium:migrations') read as a big-endian signed int64
41
+ * (0xf15280bf1fc422eb). Advisory locks live in a per-database namespace shared
42
+ * by every session, which is exactly the scope we want — two Adminium
43
+ * deployments in two databases of one cluster do not block each other.
44
+ *
45
+ * The value is hardcoded rather than derived at runtime because it is a wire
46
+ * constant: it must be byte-identical across versions, and greppable when an
47
+ * operator is staring at `pg_locks`.
48
+ */
49
+ export const PG_MIGRATION_LOCK_KEY = -1057641404118588693n;
50
+ /**
51
+ * MySQL `GET_LOCK` names are SERVER-wide, not schema-scoped, so a fixed name
52
+ * would make two Adminium schemas on one MySQL server serialize against each
53
+ * other. The current schema is folded into the name instead. Names are capped
54
+ * at 64 characters since MySQL 5.7, hence the digest rather than the raw
55
+ * schema name.
56
+ */
57
+ export const MYSQL_MIGRATION_LOCK_PREFIX = 'adminium_migrate_';
58
+ /**
59
+ * How long a boot waits for another process's migration pass before giving up.
60
+ * Bounded on purpose: a container that hangs forever on a lock is worse than
61
+ * one that exits with a message a restart can retry. Two minutes covers an
62
+ * honest pass on a large meta store; operators of very large ones raise it.
63
+ */
64
+ export const DEFAULT_MIGRATION_LOCK_TIMEOUT_MS = 120_000;
65
+ /** Gap between acquisition attempts while waiting. */
66
+ const LOCK_POLL_INTERVAL_MS = 250;
67
+ /** SQLite's busy signals, as better-sqlite3 surfaces them. */
68
+ const SQLITE_BUSY = /SQLITE_BUSY|database is locked|database table is locked/i;
69
+ export class MigrationLockTimeoutError extends Error {
70
+ dialect;
71
+ timeoutMs;
72
+ name = 'MigrationLockTimeoutError';
73
+ constructor(dialect, timeoutMs) {
74
+ super(`Timed out after ${timeoutMs}ms waiting for the ${dialect} migration lock. ` +
75
+ 'Another Adminium process is applying migrations to this meta store — let it finish and retry, ' +
76
+ 'or raise the lock timeout if this store legitimately takes longer to migrate.');
77
+ this.dialect = dialect;
78
+ this.timeoutMs = timeoutMs;
79
+ }
80
+ }
81
+ function warnOnWait(wait) {
82
+ console.warn(`[adminium/meta] waiting for the ${wait.dialect} migration lock — another Adminium process is ` +
83
+ `migrating this meta store (giving up after ${Math.round(wait.timeoutMs / 1000)}s)`);
84
+ }
85
+ /**
86
+ * Poll `attempt` until it reports success or the deadline passes. Polling
87
+ * rather than a blocking `pg_advisory_lock` / `GET_LOCK(name, timeout)` keeps
88
+ * all three dialects on one code path and one bound, and gives us a place to
89
+ * emit the "still waiting" line.
90
+ */
91
+ async function acquire(attempt, dialect, timeoutMs, onWait) {
92
+ const deadline = Date.now() + timeoutMs;
93
+ let warned = false;
94
+ for (;;) {
95
+ if (await attempt())
96
+ return;
97
+ if (!warned) {
98
+ warned = true;
99
+ onWait({ dialect, timeoutMs });
100
+ }
101
+ const remaining = deadline - Date.now();
102
+ if (remaining <= 0)
103
+ throw new MigrationLockTimeoutError(dialect, timeoutMs);
104
+ await sleep(Math.min(LOCK_POLL_INTERVAL_MS, remaining));
105
+ }
106
+ }
107
+ const NOT_IN_TRANSACTION = { inTransaction: false };
108
+ async function withPostgresLock(db, timeoutMs, onWait, run) {
109
+ await acquire(async () => {
110
+ const { rows } = await sql `select pg_try_advisory_lock(${sql.lit(PG_MIGRATION_LOCK_KEY)}) as ok`.execute(db);
111
+ return rows[0]?.ok === true;
112
+ }, 'postgres', timeoutMs, onWait);
113
+ try {
114
+ return await run(db, NOT_IN_TRANSACTION);
115
+ }
116
+ finally {
117
+ // A failing unlock means the session is already broken, and a dead session
118
+ // releases its advisory locks anyway — never mask the real error with it.
119
+ await sql `select pg_advisory_unlock(${sql.lit(PG_MIGRATION_LOCK_KEY)})`
120
+ .execute(db)
121
+ .catch(() => undefined);
122
+ }
123
+ }
124
+ async function mysqlLockName(db) {
125
+ const { rows } = await sql `select database() as dbname`.execute(db);
126
+ // A pool opened on a bare DSN has no schema selected; the migration pass
127
+ // would fail on its first statement anyway, so any stable name will do.
128
+ const schema = rows[0]?.dbname ?? '';
129
+ return MYSQL_MIGRATION_LOCK_PREFIX + createHash('sha256').update(schema).digest('hex').slice(0, 16);
130
+ }
131
+ async function withMysqlLock(db, timeoutMs, onWait, run) {
132
+ const name = await mysqlLockName(db);
133
+ await acquire(async () => {
134
+ // GET_LOCK returns 1 acquired, 0 timed out, NULL on error.
135
+ const { rows } = await sql `select get_lock(${name}, 0) as ok`.execute(db);
136
+ return Number(rows[0]?.ok ?? 0) === 1;
137
+ }, 'mysql', timeoutMs, onWait);
138
+ try {
139
+ return await run(db, NOT_IN_TRANSACTION);
140
+ }
141
+ finally {
142
+ await sql `select release_lock(${name})`.execute(db).catch(() => undefined);
143
+ }
144
+ }
145
+ async function withSqliteLock(db, timeoutMs, onWait, run) {
146
+ // `PRAGMA foreign_keys` is a no-op inside a transaction, so the pragma the
147
+ // runner relies on (enableSqliteForeignKeys) has to land BEFORE the BEGIN —
148
+ // otherwise the whole pass, and the rest of the process's life on this
149
+ // connection, would run with foreign keys off.
150
+ await sql `PRAGMA foreign_keys = ON`.execute(db);
151
+ await acquire(async () => {
152
+ try {
153
+ // RESERVED immediately, rather than deferred BEGIN's "upgrade on first
154
+ // write" — this is SQLite's advisory lock.
155
+ await sql `BEGIN IMMEDIATE`.execute(db);
156
+ return true;
157
+ }
158
+ catch (error) {
159
+ if (error instanceof Error && SQLITE_BUSY.test(error.message))
160
+ return false;
161
+ throw error;
162
+ }
163
+ }, 'sqlite', timeoutMs, onWait);
164
+ try {
165
+ const result = await run(db, { inTransaction: true });
166
+ await sql `COMMIT`.execute(db);
167
+ return result;
168
+ }
169
+ catch (error) {
170
+ await sql `ROLLBACK`.execute(db).catch(() => undefined);
171
+ throw error;
172
+ }
173
+ }
174
+ /**
175
+ * Run `run` while holding the meta store's migration lock, on a connection
176
+ * pinned for the lock's whole lifetime. The lock is always released — on
177
+ * success, on failure, and by the database itself if the process dies.
178
+ *
179
+ * `run` receives the PINNED handle and must use it for every statement:
180
+ * work sent to the original pooled handle is not covered by the lock (and, on
181
+ * SQLite, not part of the lock's transaction).
182
+ */
183
+ export async function withMigrationLock(db, options, run) {
184
+ const timeoutMs = options.timeoutMs ?? DEFAULT_MIGRATION_LOCK_TIMEOUT_MS;
185
+ const onWait = options.onWait ?? warnOnWait;
186
+ return db.connection().execute(async (pinned) => {
187
+ switch (options.dialect) {
188
+ case 'postgres':
189
+ return withPostgresLock(pinned, timeoutMs, onWait, run);
190
+ case 'mysql':
191
+ return withMysqlLock(pinned, timeoutMs, onWait, run);
192
+ case 'sqlite':
193
+ return withSqliteLock(pinned, timeoutMs, onWait, run);
194
+ }
195
+ });
196
+ }
197
+ //# sourceMappingURL=migrate-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-lock.js","sourceRoot":"","sources":["../src/migrate-lock.ts"],"names":[],"mappings":"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"}