@weave-kit/engine 0.5.0 → 0.7.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 (622) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +7 -7
  3. package/dist/adapters/auth/index.d.ts +4 -2
  4. package/dist/adapters/auth/index.d.ts.map +1 -1
  5. package/dist/adapters/auth/index.js +1 -0
  6. package/dist/adapters/auth/index.js.map +1 -1
  7. package/dist/adapters/auth/source.d.ts +4 -4
  8. package/dist/adapters/auth/source.d.ts.map +1 -1
  9. package/dist/adapters/auth/subject.d.ts +22 -0
  10. package/dist/adapters/auth/subject.d.ts.map +1 -0
  11. package/dist/adapters/auth/subject.js +42 -0
  12. package/dist/adapters/auth/subject.js.map +1 -0
  13. package/dist/adapters/auth/verify.d.ts +12 -0
  14. package/dist/adapters/auth/verify.d.ts.map +1 -0
  15. package/dist/adapters/auth/verify.js +2 -0
  16. package/dist/adapters/auth/verify.js.map +1 -0
  17. package/dist/adapters/events/index.d.ts +2 -1
  18. package/dist/adapters/events/index.d.ts.map +1 -1
  19. package/dist/adapters/events/index.js +2 -1
  20. package/dist/adapters/events/index.js.map +1 -1
  21. package/dist/adapters/mcp/generate.d.ts +3 -3
  22. package/dist/adapters/mcp/generate.d.ts.map +1 -1
  23. package/dist/adapters/mcp/generate.js +34 -11
  24. package/dist/adapters/mcp/generate.js.map +1 -1
  25. package/dist/adapters/mcp/guardrails.d.ts +1 -1
  26. package/dist/adapters/mcp/http.d.ts +3 -1
  27. package/dist/adapters/mcp/http.d.ts.map +1 -1
  28. package/dist/adapters/mcp/http.js +2 -2
  29. package/dist/adapters/mcp/http.js.map +1 -1
  30. package/dist/adapters/mcp/index.d.ts +13 -4
  31. package/dist/adapters/mcp/index.d.ts.map +1 -1
  32. package/dist/adapters/mcp/index.js +12 -8
  33. package/dist/adapters/mcp/index.js.map +1 -1
  34. package/dist/adapters/mcp/session.d.ts +5 -5
  35. package/dist/adapters/mcp/session.d.ts.map +1 -1
  36. package/dist/adapters/mcp/tools.d.ts +6 -0
  37. package/dist/adapters/mcp/tools.d.ts.map +1 -1
  38. package/dist/adapters/mcp/tools.js +38 -14
  39. package/dist/adapters/mcp/tools.js.map +1 -1
  40. package/dist/adapters/mcp/types.d.ts +3 -1
  41. package/dist/adapters/mcp/types.d.ts.map +1 -1
  42. package/dist/adapters/mcp/types.js +1 -1
  43. package/dist/adapters/mcp/types.js.map +1 -1
  44. package/dist/adapters/openapi/document.d.ts.map +1 -1
  45. package/dist/adapters/openapi/document.js +72 -2
  46. package/dist/adapters/openapi/document.js.map +1 -1
  47. package/dist/adapters/openapi/schema.d.ts.map +1 -1
  48. package/dist/adapters/openapi/schema.js +40 -4
  49. package/dist/adapters/openapi/schema.js.map +1 -1
  50. package/dist/adapters/openapi/types.d.ts +1 -0
  51. package/dist/adapters/openapi/types.d.ts.map +1 -1
  52. package/dist/adapters/openapi/types.js +2 -0
  53. package/dist/adapters/openapi/types.js.map +1 -1
  54. package/dist/adapters/rest/approvals.d.ts +2 -2
  55. package/dist/adapters/rest/approvals.js +2 -2
  56. package/dist/adapters/rest/audit.d.ts +2 -2
  57. package/dist/adapters/rest/audit.js +2 -2
  58. package/dist/adapters/rest/common.d.ts +3 -3
  59. package/dist/adapters/rest/common.d.ts.map +1 -1
  60. package/dist/adapters/rest/common.js +1 -1
  61. package/dist/adapters/rest/guardrails.d.ts +1 -1
  62. package/dist/adapters/rest/guardrails.js +1 -1
  63. package/dist/adapters/rest/identities.d.ts +4 -4
  64. package/dist/adapters/rest/identities.d.ts.map +1 -1
  65. package/dist/adapters/rest/identities.js +3 -3
  66. package/dist/adapters/rest/identities.js.map +1 -1
  67. package/dist/adapters/rest/identityAdmin.d.ts +18 -0
  68. package/dist/adapters/rest/identityAdmin.d.ts.map +1 -0
  69. package/dist/adapters/rest/identityAdmin.js +58 -0
  70. package/dist/adapters/rest/identityAdmin.js.map +1 -0
  71. package/dist/adapters/rest/index.d.ts +4 -0
  72. package/dist/adapters/rest/index.d.ts.map +1 -1
  73. package/dist/adapters/rest/index.js +3 -0
  74. package/dist/adapters/rest/index.js.map +1 -1
  75. package/dist/adapters/rest/metadata.d.ts +1 -1
  76. package/dist/adapters/rest/metadata.js +1 -1
  77. package/dist/adapters/rest/pages.d.ts +1 -1
  78. package/dist/adapters/rest/pages.d.ts.map +1 -1
  79. package/dist/adapters/rest/permissions.d.ts +1 -1
  80. package/dist/adapters/rest/permissions.js +1 -1
  81. package/dist/adapters/rest/plugin.d.ts +2 -2
  82. package/dist/adapters/rest/plugin.d.ts.map +1 -1
  83. package/dist/adapters/rest/schemas.d.ts +1 -1
  84. package/dist/adapters/rest/schemas.d.ts.map +1 -1
  85. package/dist/adapters/rest/workflow.d.ts +15 -0
  86. package/dist/adapters/rest/workflow.d.ts.map +1 -0
  87. package/dist/adapters/rest/workflow.js +89 -0
  88. package/dist/adapters/rest/workflow.js.map +1 -0
  89. package/dist/adapters/rest/workflowSource.d.ts +15 -0
  90. package/dist/adapters/rest/workflowSource.d.ts.map +1 -0
  91. package/dist/adapters/rest/workflowSource.js +63 -0
  92. package/dist/adapters/rest/workflowSource.js.map +1 -0
  93. package/dist/cli/commands/build.js +1 -1
  94. package/dist/cli/commands/build.js.map +1 -1
  95. package/dist/cli/commands/connect.d.ts +1 -1
  96. package/dist/cli/commands/default-view.d.ts +2 -2
  97. package/dist/cli/commands/default-view.js +2 -2
  98. package/dist/cli/commands/dev.d.ts.map +1 -1
  99. package/dist/cli/commands/dev.js +18 -9
  100. package/dist/cli/commands/dev.js.map +1 -1
  101. package/dist/cli/commands/identity.d.ts +15 -0
  102. package/dist/cli/commands/identity.d.ts.map +1 -0
  103. package/dist/cli/commands/identity.js +115 -0
  104. package/dist/cli/commands/identity.js.map +1 -0
  105. package/dist/cli/commands/introspect.d.ts.map +1 -1
  106. package/dist/cli/commands/introspect.js +23 -0
  107. package/dist/cli/commands/introspect.js.map +1 -1
  108. package/dist/cli/commands/mcp-config.js +1 -1
  109. package/dist/cli/commands/mcp-config.js.map +1 -1
  110. package/dist/cli/commands/migrate.js +2 -2
  111. package/dist/cli/commands/migrate.js.map +1 -1
  112. package/dist/cli/commands/module.d.ts +2 -2
  113. package/dist/cli/commands/module.d.ts.map +1 -1
  114. package/dist/cli/commands/module.js +2 -2
  115. package/dist/cli/commands/module.js.map +1 -1
  116. package/dist/cli/commands/object-create.d.ts.map +1 -1
  117. package/dist/cli/commands/object-create.js +15 -15
  118. package/dist/cli/commands/object-create.js.map +1 -1
  119. package/dist/cli/commands/workflow-close.d.ts +9 -0
  120. package/dist/cli/commands/workflow-close.d.ts.map +1 -0
  121. package/dist/cli/commands/workflow-close.js +48 -0
  122. package/dist/cli/commands/workflow-close.js.map +1 -0
  123. package/dist/cli/commands/workflow-migrate.d.ts +11 -0
  124. package/dist/cli/commands/workflow-migrate.d.ts.map +1 -0
  125. package/dist/cli/commands/workflow-migrate.js +120 -0
  126. package/dist/cli/commands/workflow-migrate.js.map +1 -0
  127. package/dist/cli/commands/workflow-open.d.ts +10 -0
  128. package/dist/cli/commands/workflow-open.d.ts.map +1 -0
  129. package/dist/cli/commands/workflow-open.js +112 -0
  130. package/dist/cli/commands/workflow-open.js.map +1 -0
  131. package/dist/cli/commands/workflow-starter.d.ts +10 -0
  132. package/dist/cli/commands/workflow-starter.d.ts.map +1 -0
  133. package/dist/cli/commands/workflow-starter.js +29 -0
  134. package/dist/cli/commands/workflow-starter.js.map +1 -0
  135. package/dist/cli/commands/workflow-switch.d.ts +10 -0
  136. package/dist/cli/commands/workflow-switch.d.ts.map +1 -0
  137. package/dist/cli/commands/workflow-switch.js +60 -0
  138. package/dist/cli/commands/workflow-switch.js.map +1 -0
  139. package/dist/cli/commands/workflow-upgrade.d.ts +12 -0
  140. package/dist/cli/commands/workflow-upgrade.d.ts.map +1 -0
  141. package/dist/cli/commands/workflow-upgrade.js +116 -0
  142. package/dist/cli/commands/workflow-upgrade.js.map +1 -0
  143. package/dist/cli/index.js +72 -3
  144. package/dist/cli/index.js.map +1 -1
  145. package/dist/cli/project-types/manifest.d.ts +25 -0
  146. package/dist/cli/project-types/manifest.d.ts.map +1 -0
  147. package/dist/cli/project-types/manifest.js +40 -0
  148. package/dist/cli/project-types/manifest.js.map +1 -0
  149. package/dist/cli/ready-screen.js +1 -1
  150. package/dist/cli/ready-screen.js.map +1 -1
  151. package/dist/cli/scaffold.d.ts.map +1 -1
  152. package/dist/cli/scaffold.js +22 -34
  153. package/dist/cli/scaffold.js.map +1 -1
  154. package/dist/cli/types/commands.d.ts +46 -0
  155. package/dist/cli/types/commands.d.ts.map +1 -1
  156. package/dist/cli/types/index.d.ts +1 -1
  157. package/dist/cli/types/index.d.ts.map +1 -1
  158. package/dist/cli/types/values.d.ts +9 -0
  159. package/dist/cli/types/values.d.ts.map +1 -1
  160. package/dist/cli/types/values.js +9 -0
  161. package/dist/cli/types/values.js.map +1 -1
  162. package/dist/core/api/error.d.ts.map +1 -1
  163. package/dist/core/api/error.js +7 -4
  164. package/dist/core/api/error.js.map +1 -1
  165. package/dist/core/audit/types.d.ts +4 -2
  166. package/dist/core/audit/types.d.ts.map +1 -1
  167. package/dist/core/audit/types.js +2 -0
  168. package/dist/core/audit/types.js.map +1 -1
  169. package/dist/core/formula/validate.d.ts.map +1 -1
  170. package/dist/core/formula/validate.js +6 -0
  171. package/dist/core/formula/validate.js.map +1 -1
  172. package/dist/core/i18n/ar.d.ts.map +1 -1
  173. package/dist/core/i18n/ar.js +38 -4
  174. package/dist/core/i18n/ar.js.map +1 -1
  175. package/dist/core/i18n/de.d.ts.map +1 -1
  176. package/dist/core/i18n/de.js +38 -4
  177. package/dist/core/i18n/de.js.map +1 -1
  178. package/dist/core/i18n/en.d.ts +39 -5
  179. package/dist/core/i18n/en.d.ts.map +1 -1
  180. package/dist/core/i18n/en.js +39 -5
  181. package/dist/core/i18n/en.js.map +1 -1
  182. package/dist/core/i18n/es.d.ts.map +1 -1
  183. package/dist/core/i18n/es.js +38 -4
  184. package/dist/core/i18n/es.js.map +1 -1
  185. package/dist/core/i18n/fr.d.ts.map +1 -1
  186. package/dist/core/i18n/fr.js +38 -4
  187. package/dist/core/i18n/fr.js.map +1 -1
  188. package/dist/core/i18n/hi.d.ts.map +1 -1
  189. package/dist/core/i18n/hi.js +38 -4
  190. package/dist/core/i18n/hi.js.map +1 -1
  191. package/dist/core/i18n/id.d.ts.map +1 -1
  192. package/dist/core/i18n/id.js +38 -4
  193. package/dist/core/i18n/id.js.map +1 -1
  194. package/dist/core/i18n/ja.d.ts.map +1 -1
  195. package/dist/core/i18n/ja.js +38 -4
  196. package/dist/core/i18n/ja.js.map +1 -1
  197. package/dist/core/i18n/ko.d.ts.map +1 -1
  198. package/dist/core/i18n/ko.js +38 -4
  199. package/dist/core/i18n/ko.js.map +1 -1
  200. package/dist/core/i18n/pt.d.ts.map +1 -1
  201. package/dist/core/i18n/pt.js +38 -4
  202. package/dist/core/i18n/pt.js.map +1 -1
  203. package/dist/core/i18n/ru.d.ts.map +1 -1
  204. package/dist/core/i18n/ru.js +38 -4
  205. package/dist/core/i18n/ru.js.map +1 -1
  206. package/dist/core/i18n/vi.d.ts.map +1 -1
  207. package/dist/core/i18n/vi.js +38 -4
  208. package/dist/core/i18n/vi.js.map +1 -1
  209. package/dist/core/i18n/zh-hant.d.ts.map +1 -1
  210. package/dist/core/i18n/zh-hant.js +38 -4
  211. package/dist/core/i18n/zh-hant.js.map +1 -1
  212. package/dist/core/i18n/zh.d.ts.map +1 -1
  213. package/dist/core/i18n/zh.js +39 -5
  214. package/dist/core/i18n/zh.js.map +1 -1
  215. package/dist/core/object/describe.d.ts +34 -3
  216. package/dist/core/object/describe.d.ts.map +1 -1
  217. package/dist/core/object/describe.js +48 -8
  218. package/dist/core/object/describe.js.map +1 -1
  219. package/dist/core/object/gen-types.d.ts.map +1 -1
  220. package/dist/core/object/gen-types.js +12 -1
  221. package/dist/core/object/gen-types.js.map +1 -1
  222. package/dist/core/object/graph.d.ts.map +1 -1
  223. package/dist/core/object/graph.js +52 -22
  224. package/dist/core/object/graph.js.map +1 -1
  225. package/dist/core/object/index.d.ts +5 -1
  226. package/dist/core/object/index.d.ts.map +1 -1
  227. package/dist/core/object/index.js +5 -1
  228. package/dist/core/object/index.js.map +1 -1
  229. package/dist/core/object/migrations.d.ts.map +1 -1
  230. package/dist/core/object/migrations.js +39 -0
  231. package/dist/core/object/migrations.js.map +1 -1
  232. package/dist/core/object/parse.d.ts +7 -0
  233. package/dist/core/object/parse.d.ts.map +1 -1
  234. package/dist/core/object/parse.js +32 -1
  235. package/dist/core/object/parse.js.map +1 -1
  236. package/dist/core/object/record-key.d.ts +19 -0
  237. package/dist/core/object/record-key.d.ts.map +1 -0
  238. package/dist/core/object/record-key.js +100 -0
  239. package/dist/core/object/record-key.js.map +1 -0
  240. package/dist/core/object/schema-version.d.ts +1 -1
  241. package/dist/core/object/schema-version.js +1 -1
  242. package/dist/core/object/system-objects.d.ts +16 -0
  243. package/dist/core/object/system-objects.d.ts.map +1 -0
  244. package/dist/core/object/system-objects.js +72 -0
  245. package/dist/core/object/system-objects.js.map +1 -0
  246. package/dist/core/object/validate/field.d.ts.map +1 -1
  247. package/dist/core/object/validate/field.js +235 -35
  248. package/dist/core/object/validate/field.js.map +1 -1
  249. package/dist/core/object/validate/formulas.d.ts.map +1 -1
  250. package/dist/core/object/validate/formulas.js +6 -0
  251. package/dist/core/object/validate/formulas.js.map +1 -1
  252. package/dist/core/object/validate/object.d.ts +2 -0
  253. package/dist/core/object/validate/object.d.ts.map +1 -1
  254. package/dist/core/object/validate/object.js +51 -19
  255. package/dist/core/object/validate/object.js.map +1 -1
  256. package/dist/core/object/validate/permissions.d.ts.map +1 -1
  257. package/dist/core/object/validate/permissions.js +4 -0
  258. package/dist/core/object/validate/permissions.js.map +1 -1
  259. package/dist/core/object/validate/primitives.d.ts +0 -1
  260. package/dist/core/object/validate/primitives.d.ts.map +1 -1
  261. package/dist/core/object/validate/primitives.js +1 -2
  262. package/dist/core/object/validate/primitives.js.map +1 -1
  263. package/dist/core/object/validate/workflow.d.ts +10 -0
  264. package/dist/core/object/validate/workflow.d.ts.map +1 -0
  265. package/dist/core/object/validate/workflow.js +143 -0
  266. package/dist/core/object/validate/workflow.js.map +1 -0
  267. package/dist/core/object/workflow-hash.d.ts +10 -0
  268. package/dist/core/object/workflow-hash.d.ts.map +1 -0
  269. package/dist/core/object/workflow-hash.js +27 -0
  270. package/dist/core/object/workflow-hash.js.map +1 -0
  271. package/dist/core/object/workflow-migrations.d.ts +27 -0
  272. package/dist/core/object/workflow-migrations.d.ts.map +1 -0
  273. package/dist/core/object/workflow-migrations.js +125 -0
  274. package/dist/core/object/workflow-migrations.js.map +1 -0
  275. package/dist/core/provider/event/index.d.ts +1 -1
  276. package/dist/core/provider/event/index.d.ts.map +1 -1
  277. package/dist/core/provider/event/index.js.map +1 -1
  278. package/dist/core/provider/event/types.d.ts +17 -2
  279. package/dist/core/provider/event/types.d.ts.map +1 -1
  280. package/dist/core/provider/event/types.js +2 -1
  281. package/dist/core/provider/event/types.js.map +1 -1
  282. package/dist/core/provider/identity/directory.d.ts +90 -0
  283. package/dist/core/provider/identity/directory.d.ts.map +1 -0
  284. package/dist/core/provider/identity/directory.js +3 -0
  285. package/dist/core/provider/identity/directory.js.map +1 -0
  286. package/dist/core/provider/identity/index.d.ts +5 -1
  287. package/dist/core/provider/identity/index.d.ts.map +1 -1
  288. package/dist/core/provider/identity/index.js +2 -1
  289. package/dist/core/provider/identity/index.js.map +1 -1
  290. package/dist/core/provider/identity/source.d.ts +22 -0
  291. package/dist/core/provider/identity/source.d.ts.map +1 -0
  292. package/dist/core/provider/identity/source.js +3 -0
  293. package/dist/core/provider/identity/source.js.map +1 -0
  294. package/dist/core/provider/identity/types.d.ts +62 -7
  295. package/dist/core/provider/identity/types.d.ts.map +1 -1
  296. package/dist/core/provider/identity/types.js +13 -0
  297. package/dist/core/provider/identity/types.js.map +1 -1
  298. package/dist/core/proxy/types.d.ts +4 -4
  299. package/dist/core/proxy/types.d.ts.map +1 -1
  300. package/dist/core/rbac/authorize.d.ts +10 -9
  301. package/dist/core/rbac/authorize.d.ts.map +1 -1
  302. package/dist/core/rbac/authorize.js +23 -18
  303. package/dist/core/rbac/authorize.js.map +1 -1
  304. package/dist/core/rbac/details.d.ts +33 -0
  305. package/dist/core/rbac/details.d.ts.map +1 -0
  306. package/dist/core/rbac/details.js +74 -0
  307. package/dist/core/rbac/details.js.map +1 -0
  308. package/dist/core/rbac/fields.d.ts +2 -1
  309. package/dist/core/rbac/fields.d.ts.map +1 -1
  310. package/dist/core/rbac/fields.js +3 -2
  311. package/dist/core/rbac/fields.js.map +1 -1
  312. package/dist/core/rbac/index.d.ts +3 -2
  313. package/dist/core/rbac/index.d.ts.map +1 -1
  314. package/dist/core/rbac/index.js +2 -1
  315. package/dist/core/rbac/index.js.map +1 -1
  316. package/dist/core/rbac/resolve.d.ts +3 -1
  317. package/dist/core/rbac/resolve.d.ts.map +1 -1
  318. package/dist/core/rbac/resolve.js +17 -9
  319. package/dist/core/rbac/resolve.js.map +1 -1
  320. package/dist/core/rbac/rls.d.ts +6 -0
  321. package/dist/core/rbac/rls.d.ts.map +1 -1
  322. package/dist/core/rbac/rls.js +52 -7
  323. package/dist/core/rbac/rls.js.map +1 -1
  324. package/dist/core/rbac/rowScope.d.ts +13 -6
  325. package/dist/core/rbac/rowScope.d.ts.map +1 -1
  326. package/dist/core/rbac/rowScope.js +88 -16
  327. package/dist/core/rbac/rowScope.js.map +1 -1
  328. package/dist/core/rbac/types.d.ts +6 -7
  329. package/dist/core/rbac/types.d.ts.map +1 -1
  330. package/dist/core/script/types.d.ts +1 -1
  331. package/dist/core/script/types.d.ts.map +1 -1
  332. package/dist/core/storage/diff.d.ts +4 -2
  333. package/dist/core/storage/diff.d.ts.map +1 -1
  334. package/dist/core/storage/diff.js +20 -17
  335. package/dist/core/storage/diff.js.map +1 -1
  336. package/dist/core/storage/index.d.ts +7 -1
  337. package/dist/core/storage/index.d.ts.map +1 -1
  338. package/dist/core/storage/index.js +6 -1
  339. package/dist/core/storage/index.js.map +1 -1
  340. package/dist/core/storage/inspect.d.ts +12 -3
  341. package/dist/core/storage/inspect.d.ts.map +1 -1
  342. package/dist/core/storage/inspect.js +39 -22
  343. package/dist/core/storage/inspect.js.map +1 -1
  344. package/dist/core/storage/introspect.d.ts +9 -2
  345. package/dist/core/storage/introspect.d.ts.map +1 -1
  346. package/dist/core/storage/introspect.js +100 -43
  347. package/dist/core/storage/introspect.js.map +1 -1
  348. package/dist/core/storage/link-table.d.ts +47 -0
  349. package/dist/core/storage/link-table.d.ts.map +1 -0
  350. package/dist/core/storage/link-table.js +110 -0
  351. package/dist/core/storage/link-table.js.map +1 -0
  352. package/dist/core/storage/map.d.ts.map +1 -1
  353. package/dist/core/storage/map.js +135 -81
  354. package/dist/core/storage/map.js.map +1 -1
  355. package/dist/core/storage/meta.d.ts +6 -3
  356. package/dist/core/storage/meta.d.ts.map +1 -1
  357. package/dist/core/storage/meta.js +9 -5
  358. package/dist/core/storage/meta.js.map +1 -1
  359. package/dist/core/storage/migrate.d.ts.map +1 -1
  360. package/dist/core/storage/migrate.js +144 -11
  361. package/dist/core/storage/migrate.js.map +1 -1
  362. package/dist/core/storage/record-key-sql.d.ts +19 -0
  363. package/dist/core/storage/record-key-sql.d.ts.map +1 -0
  364. package/dist/core/storage/record-key-sql.js +43 -0
  365. package/dist/core/storage/record-key-sql.js.map +1 -0
  366. package/dist/core/storage/record-meta.d.ts +68 -0
  367. package/dist/core/storage/record-meta.d.ts.map +1 -0
  368. package/dist/core/storage/record-meta.js +108 -0
  369. package/dist/core/storage/record-meta.js.map +1 -0
  370. package/dist/core/storage/report.d.ts.map +1 -1
  371. package/dist/core/storage/report.js +17 -7
  372. package/dist/core/storage/report.js.map +1 -1
  373. package/dist/core/storage/sql-literals.d.ts +9 -0
  374. package/dist/core/storage/sql-literals.d.ts.map +1 -0
  375. package/dist/core/storage/sql-literals.js +13 -0
  376. package/dist/core/storage/sql-literals.js.map +1 -0
  377. package/dist/core/storage/system-tables.d.ts +44 -0
  378. package/dist/core/storage/system-tables.d.ts.map +1 -0
  379. package/dist/core/storage/system-tables.js +268 -0
  380. package/dist/core/storage/system-tables.js.map +1 -0
  381. package/dist/core/tools/policies.d.ts +2 -2
  382. package/dist/core/tools/policies.js +2 -2
  383. package/dist/core/tools/types.d.ts +6 -6
  384. package/dist/core/tools/types.d.ts.map +1 -1
  385. package/dist/core/tools/values.d.ts +5 -0
  386. package/dist/core/tools/values.d.ts.map +1 -1
  387. package/dist/core/tools/values.js +9 -1
  388. package/dist/core/tools/values.js.map +1 -1
  389. package/dist/core/types/currency.d.ts +9 -0
  390. package/dist/core/types/currency.d.ts.map +1 -0
  391. package/dist/core/types/currency.js +28 -0
  392. package/dist/core/types/currency.js.map +1 -0
  393. package/dist/core/types/field-type.d.ts +4 -1
  394. package/dist/core/types/field-type.d.ts.map +1 -1
  395. package/dist/core/types/fields.d.ts +105 -19
  396. package/dist/core/types/fields.d.ts.map +1 -1
  397. package/dist/core/types/index.d.ts +8 -6
  398. package/dist/core/types/index.d.ts.map +1 -1
  399. package/dist/core/types/index.js +4 -3
  400. package/dist/core/types/index.js.map +1 -1
  401. package/dist/core/types/object.d.ts +18 -1
  402. package/dist/core/types/object.d.ts.map +1 -1
  403. package/dist/core/types/permission.d.ts +5 -0
  404. package/dist/core/types/permission.d.ts.map +1 -1
  405. package/dist/core/types/primaryField.d.ts +6 -1
  406. package/dist/core/types/primaryField.d.ts.map +1 -1
  407. package/dist/core/types/primaryField.js +8 -1
  408. package/dist/core/types/primaryField.js.map +1 -1
  409. package/dist/core/types/registry.d.ts +6 -4
  410. package/dist/core/types/registry.d.ts.map +1 -1
  411. package/dist/core/types/registry.js +40 -30
  412. package/dist/core/types/registry.js.map +1 -1
  413. package/dist/core/types/values.d.ts +97 -27
  414. package/dist/core/types/values.d.ts.map +1 -1
  415. package/dist/core/types/values.js +64 -29
  416. package/dist/core/types/values.js.map +1 -1
  417. package/dist/core/types/workflow.d.ts +140 -0
  418. package/dist/core/types/workflow.d.ts.map +1 -0
  419. package/dist/core/types/workflow.js +49 -0
  420. package/dist/core/types/workflow.js.map +1 -0
  421. package/dist/index.d.ts +2 -0
  422. package/dist/index.d.ts.map +1 -1
  423. package/dist/index.js +5 -3
  424. package/dist/index.js.map +1 -1
  425. package/dist/infrastructure/event/bus.d.ts.map +1 -1
  426. package/dist/infrastructure/event/bus.js +14 -0
  427. package/dist/infrastructure/event/bus.js.map +1 -1
  428. package/dist/infrastructure/identity.d.ts +2 -2
  429. package/dist/infrastructure/identity.d.ts.map +1 -1
  430. package/dist/infrastructure/identity.js.map +1 -1
  431. package/dist/layout-format.d.ts +6 -6
  432. package/dist/layout-format.js +4 -4
  433. package/dist/runtime/data-access/builder.d.ts +15 -5
  434. package/dist/runtime/data-access/builder.d.ts.map +1 -1
  435. package/dist/runtime/data-access/builder.js +222 -30
  436. package/dist/runtime/data-access/builder.js.map +1 -1
  437. package/dist/runtime/data-access/details.d.ts.map +1 -1
  438. package/dist/runtime/data-access/details.js +7 -2
  439. package/dist/runtime/data-access/details.js.map +1 -1
  440. package/dist/runtime/data-access/formula.d.ts +11 -3
  441. package/dist/runtime/data-access/formula.d.ts.map +1 -1
  442. package/dist/runtime/data-access/formula.js +82 -19
  443. package/dist/runtime/data-access/formula.js.map +1 -1
  444. package/dist/runtime/data-access/index.d.ts +1 -1
  445. package/dist/runtime/data-access/index.d.ts.map +1 -1
  446. package/dist/runtime/data-access/index.js +1 -1
  447. package/dist/runtime/data-access/index.js.map +1 -1
  448. package/dist/runtime/data-access/link.d.ts +7 -0
  449. package/dist/runtime/data-access/link.d.ts.map +1 -0
  450. package/dist/runtime/data-access/link.js +80 -0
  451. package/dist/runtime/data-access/link.js.map +1 -0
  452. package/dist/runtime/data-access/query.d.ts +48 -3
  453. package/dist/runtime/data-access/query.d.ts.map +1 -1
  454. package/dist/runtime/data-access/query.js +381 -45
  455. package/dist/runtime/data-access/query.js.map +1 -1
  456. package/dist/runtime/data-access/rbac.d.ts.map +1 -1
  457. package/dist/runtime/data-access/rbac.js +134 -16
  458. package/dist/runtime/data-access/rbac.js.map +1 -1
  459. package/dist/runtime/data-access/seqno.d.ts +0 -2
  460. package/dist/runtime/data-access/seqno.d.ts.map +1 -1
  461. package/dist/runtime/data-access/seqno.js +0 -9
  462. package/dist/runtime/data-access/seqno.js.map +1 -1
  463. package/dist/runtime/data-access/sql-executor.d.ts +13 -3
  464. package/dist/runtime/data-access/sql-executor.d.ts.map +1 -1
  465. package/dist/runtime/data-access/sql-executor.js +20 -14
  466. package/dist/runtime/data-access/sql-executor.js.map +1 -1
  467. package/dist/runtime/data-access/sql-gate.d.ts +4 -4
  468. package/dist/runtime/data-access/sql-gate.d.ts.map +1 -1
  469. package/dist/runtime/data-access/sql-gate.js +5 -5
  470. package/dist/runtime/data-access/sql-gate.js.map +1 -1
  471. package/dist/runtime/data-access/tx.d.ts +1 -1
  472. package/dist/runtime/data-access/tx.js +1 -1
  473. package/dist/runtime/data-access/types.d.ts +31 -3
  474. package/dist/runtime/data-access/types.d.ts.map +1 -1
  475. package/dist/runtime/data-access/validate.d.ts.map +1 -1
  476. package/dist/runtime/data-access/validate.js +79 -15
  477. package/dist/runtime/data-access/validate.js.map +1 -1
  478. package/dist/runtime/data-access/workflow.d.ts +146 -0
  479. package/dist/runtime/data-access/workflow.d.ts.map +1 -0
  480. package/dist/runtime/data-access/workflow.js +636 -0
  481. package/dist/runtime/data-access/workflow.js.map +1 -0
  482. package/dist/runtime/engine.d.ts +89 -14
  483. package/dist/runtime/engine.d.ts.map +1 -1
  484. package/dist/runtime/engine.js +123 -26
  485. package/dist/runtime/engine.js.map +1 -1
  486. package/dist/runtime/fieldtypes/loader.d.ts.map +1 -1
  487. package/dist/runtime/fieldtypes/loader.js +12 -1
  488. package/dist/runtime/fieldtypes/loader.js.map +1 -1
  489. package/dist/runtime/git/guardrailSource.d.ts +1 -1
  490. package/dist/runtime/git/index.d.ts +4 -2
  491. package/dist/runtime/git/index.d.ts.map +1 -1
  492. package/dist/runtime/git/index.js +2 -1
  493. package/dist/runtime/git/index.js.map +1 -1
  494. package/dist/runtime/git/layoutSource.d.ts +1 -1
  495. package/dist/runtime/git/loader.d.ts.map +1 -1
  496. package/dist/runtime/git/loader.js +18 -6
  497. package/dist/runtime/git/loader.js.map +1 -1
  498. package/dist/runtime/git/pageCatalog.d.ts +1 -1
  499. package/dist/runtime/git/schemaChange.d.ts +22 -0
  500. package/dist/runtime/git/schemaChange.d.ts.map +1 -1
  501. package/dist/runtime/git/schemaChange.js +28 -2
  502. package/dist/runtime/git/schemaChange.js.map +1 -1
  503. package/dist/runtime/git/schemaSource.d.ts +1 -1
  504. package/dist/runtime/git/sourceFile.d.ts +1 -1
  505. package/dist/runtime/git/sourceFile.js +1 -1
  506. package/dist/runtime/git/sourceTransaction.d.ts +1 -1
  507. package/dist/runtime/git/workflowSource.d.ts +40 -0
  508. package/dist/runtime/git/workflowSource.d.ts.map +1 -0
  509. package/dist/runtime/git/workflowSource.js +45 -0
  510. package/dist/runtime/git/workflowSource.js.map +1 -0
  511. package/dist/runtime/identity/admin.d.ts +18 -0
  512. package/dist/runtime/identity/admin.d.ts.map +1 -0
  513. package/dist/runtime/identity/admin.js +27 -0
  514. package/dist/runtime/identity/admin.js.map +1 -0
  515. package/dist/runtime/identity/directory.d.ts +12 -0
  516. package/dist/runtime/identity/directory.d.ts.map +1 -0
  517. package/dist/runtime/identity/directory.js +22 -0
  518. package/dist/runtime/identity/directory.js.map +1 -0
  519. package/dist/runtime/identity/index.d.ts +11 -0
  520. package/dist/runtime/identity/index.d.ts.map +1 -0
  521. package/dist/runtime/identity/index.js +8 -0
  522. package/dist/runtime/identity/index.js.map +1 -0
  523. package/dist/runtime/identity/resolve.d.ts +10 -0
  524. package/dist/runtime/identity/resolve.d.ts.map +1 -0
  525. package/dist/runtime/identity/resolve.js +16 -0
  526. package/dist/runtime/identity/resolve.js.map +1 -0
  527. package/dist/runtime/identity/sources/function.d.ts +10 -0
  528. package/dist/runtime/identity/sources/function.d.ts.map +1 -0
  529. package/dist/runtime/identity/sources/function.js +9 -0
  530. package/dist/runtime/identity/sources/function.js.map +1 -0
  531. package/dist/runtime/identity/sources/pg.d.ts +42 -0
  532. package/dist/runtime/identity/sources/pg.d.ts.map +1 -0
  533. package/dist/runtime/identity/sources/pg.js +121 -0
  534. package/dist/runtime/identity/sources/pg.js.map +1 -0
  535. package/dist/runtime/identity/store.d.ts +27 -0
  536. package/dist/runtime/identity/store.d.ts.map +1 -0
  537. package/dist/runtime/identity/store.js +139 -0
  538. package/dist/runtime/identity/store.js.map +1 -0
  539. package/dist/runtime/identity/sync.d.ts +34 -0
  540. package/dist/runtime/identity/sync.d.ts.map +1 -0
  541. package/dist/runtime/identity/sync.js +149 -0
  542. package/dist/runtime/identity/sync.js.map +1 -0
  543. package/dist/runtime/metadata/cache.d.ts +0 -2
  544. package/dist/runtime/metadata/cache.d.ts.map +1 -1
  545. package/dist/runtime/metadata/cache.js +0 -11
  546. package/dist/runtime/metadata/cache.js.map +1 -1
  547. package/dist/runtime/metadata/index.d.ts +1 -1
  548. package/dist/runtime/metadata/index.d.ts.map +1 -1
  549. package/dist/runtime/metadata/index.js +1 -1
  550. package/dist/runtime/metadata/index.js.map +1 -1
  551. package/dist/runtime/record-meta/index.d.ts +2 -0
  552. package/dist/runtime/record-meta/index.d.ts.map +1 -0
  553. package/dist/runtime/record-meta/index.js +2 -0
  554. package/dist/runtime/record-meta/index.js.map +1 -0
  555. package/dist/runtime/record-meta/store.d.ts +43 -0
  556. package/dist/runtime/record-meta/store.d.ts.map +1 -0
  557. package/dist/runtime/record-meta/store.js +88 -0
  558. package/dist/runtime/record-meta/store.js.map +1 -0
  559. package/dist/runtime/sql-analyzer/index.d.ts.map +1 -1
  560. package/dist/runtime/sql-analyzer/index.js +59 -0
  561. package/dist/runtime/sql-analyzer/index.js.map +1 -1
  562. package/dist/runtime/tools/executor.d.ts +11 -11
  563. package/dist/runtime/tools/executor.d.ts.map +1 -1
  564. package/dist/runtime/tools/executor.js +6 -6
  565. package/dist/runtime/tools/executor.js.map +1 -1
  566. package/dist/runtime/tools/index.d.ts +2 -0
  567. package/dist/runtime/tools/index.d.ts.map +1 -1
  568. package/dist/runtime/tools/index.js +1 -0
  569. package/dist/runtime/tools/index.js.map +1 -1
  570. package/dist/runtime/tools/policies.d.ts +22 -5
  571. package/dist/runtime/tools/policies.d.ts.map +1 -1
  572. package/dist/runtime/tools/policies.js +42 -12
  573. package/dist/runtime/tools/policies.js.map +1 -1
  574. package/dist/runtime/tunnel/connector.d.ts +1 -1
  575. package/dist/runtime/tunnel/forwarder.js +1 -1
  576. package/dist/runtime/tunnel/framing.d.ts +1 -1
  577. package/dist/runtime/tunnel/server.d.ts +1 -1
  578. package/dist/subsystems/approvals/index.d.ts +4 -4
  579. package/dist/subsystems/approvals/index.d.ts.map +1 -1
  580. package/dist/subsystems/approvals/index.js +5 -6
  581. package/dist/subsystems/approvals/index.js.map +1 -1
  582. package/dist/subsystems/approvals/store.d.ts +1 -3
  583. package/dist/subsystems/approvals/store.d.ts.map +1 -1
  584. package/dist/subsystems/approvals/store.js +1 -16
  585. package/dist/subsystems/approvals/store.js.map +1 -1
  586. package/dist/subsystems/audit/index.d.ts +1 -1
  587. package/dist/subsystems/audit/index.d.ts.map +1 -1
  588. package/dist/subsystems/audit/index.js +2 -3
  589. package/dist/subsystems/audit/index.js.map +1 -1
  590. package/dist/subsystems/audit/store.d.ts +0 -2
  591. package/dist/subsystems/audit/store.d.ts.map +1 -1
  592. package/dist/subsystems/audit/store.js +0 -21
  593. package/dist/subsystems/audit/store.js.map +1 -1
  594. package/dist/subsystems/quota/store.d.ts +9 -0
  595. package/dist/subsystems/quota/store.d.ts.map +1 -1
  596. package/dist/subsystems/quota/store.js +0 -8
  597. package/dist/subsystems/quota/store.js.map +1 -1
  598. package/dist/subsystems/script/backend/isolated-vm.js +4 -4
  599. package/dist/subsystems/script/backend/types.d.ts +2 -2
  600. package/dist/subsystems/script/backend/types.d.ts.map +1 -1
  601. package/dist/subsystems/script/bridge.d.ts +1 -1
  602. package/dist/subsystems/script/bridge.d.ts.map +1 -1
  603. package/dist/subsystems/script/bridge.js +6 -4
  604. package/dist/subsystems/script/bridge.js.map +1 -1
  605. package/dist/subsystems/script/dispatcher.d.ts.map +1 -1
  606. package/dist/subsystems/script/dispatcher.js +3 -1
  607. package/dist/subsystems/script/dispatcher.js.map +1 -1
  608. package/dist/subsystems/workflow/index.d.ts +4 -0
  609. package/dist/subsystems/workflow/index.d.ts.map +1 -0
  610. package/dist/subsystems/workflow/index.js +3 -0
  611. package/dist/subsystems/workflow/index.js.map +1 -0
  612. package/dist/subsystems/workflow/scheduler.d.ts +27 -0
  613. package/dist/subsystems/workflow/scheduler.d.ts.map +1 -0
  614. package/dist/subsystems/workflow/scheduler.js +109 -0
  615. package/dist/subsystems/workflow/scheduler.js.map +1 -0
  616. package/dist/subsystems/workflow/store.d.ts +10 -0
  617. package/dist/subsystems/workflow/store.d.ts.map +1 -0
  618. package/dist/subsystems/workflow/store.js +44 -0
  619. package/dist/subsystems/workflow/store.js.map +1 -0
  620. package/dist/version.d.ts +1 -1
  621. package/dist/version.js +1 -1
  622. package/package.json +9 -5
@@ -1,38 +1,48 @@
1
1
  import { DEFAULT_FIELD_TYPE_REGISTRY, fieldBase } from '../types/index.js';
2
+ import { currencyMinorUnits } from '../types/currency.js';
2
3
  import { SchemaError } from '../types/errors.js';
3
4
  import { FIELD_TYPES, ON_DELETE_ACTIONS } from '../types/values.js';
5
+ import { sqlLiteral } from './sql-literals.js';
6
+ /**
7
+ * PG type-name vocabulary → canonical array element `udt_name` (without the
8
+ * leading underscore). The single source for both the safe-type whitelist a
9
+ * registered `storage.pgType` may return and array-element comparison.
10
+ */
11
+ const PG_TYPE_BASE = {
12
+ VARCHAR: 'varchar',
13
+ 'CHARACTER VARYING': 'varchar',
14
+ CHAR: 'bpchar',
15
+ BPCHAR: 'bpchar',
16
+ TEXT: 'text',
17
+ SMALLINT: 'int2',
18
+ INT2: 'int2',
19
+ INTEGER: 'int4',
20
+ INT: 'int4',
21
+ INT4: 'int4',
22
+ BIGINT: 'int8',
23
+ INT8: 'int8',
24
+ NUMERIC: 'numeric',
25
+ DECIMAL: 'numeric',
26
+ REAL: 'float4',
27
+ 'DOUBLE PRECISION': 'float8',
28
+ BOOLEAN: 'bool',
29
+ DATE: 'date',
30
+ TIME: 'time',
31
+ TIMETZ: 'timetz',
32
+ TIMESTAMP: 'timestamp',
33
+ 'TIMESTAMP WITHOUT TIME ZONE': 'timestamp',
34
+ TIMESTAMPTZ: 'timestamptz',
35
+ 'TIMESTAMP WITH TIME ZONE': 'timestamptz',
36
+ JSON: 'json',
37
+ JSONB: 'jsonb',
38
+ UUID: 'uuid',
39
+ MONEY: 'money',
40
+ };
4
41
  /** base PostgreSQL type names a registered `storage.pgType` may return */
5
- const SAFE_PG_BASE = new Set([
6
- 'VARCHAR',
7
- 'CHARACTER VARYING',
8
- 'CHAR',
9
- 'BPCHAR',
10
- 'TEXT',
11
- 'SMALLINT',
12
- 'INTEGER',
13
- 'INT',
14
- 'INT2',
15
- 'INT4',
16
- 'INT8',
17
- 'BIGINT',
18
- 'NUMERIC',
19
- 'DECIMAL',
20
- 'REAL',
21
- 'DOUBLE PRECISION',
22
- 'BOOLEAN',
23
- 'DATE',
24
- 'TIME',
25
- 'TIMETZ',
26
- 'TIMESTAMP',
27
- 'TIMESTAMPTZ',
28
- 'TIMESTAMP WITH TIME ZONE',
29
- 'TIMESTAMP WITHOUT TIME ZONE',
30
- 'JSON',
31
- 'JSONB',
32
- 'UUID',
33
- 'MONEY',
34
- ]);
42
+ const SAFE_PG_BASE = new Set(Object.keys(PG_TYPE_BASE));
35
43
  const SAFE_PG_RE = /^([A-Z][A-Z0-9_ ]*?)(\(\d+(?:\s*,\s*\d+)?\))?(\[\])?$/;
44
+ /** a native enum type name is interpolated raw into DDL: snake_case identifier only */
45
+ const PG_ENUM_TYPE_RE = /^[a-z][a-z0-9_]*$/;
36
46
  /**
37
47
  * True when a registered `storage.pgType` output is a safe PostgreSQL column
38
48
  * type: a known base type with optional numeric parameters and an optional
@@ -72,28 +82,73 @@ export function pgType(field, targetPkType, registry = DEFAULT_FIELD_TYPE_REGIST
72
82
  return 'VARCHAR(255)';
73
83
  case FIELD_TYPES.TEXT:
74
84
  return 'TEXT';
85
+ case FIELD_TYPES.CHAR:
86
+ return `CHAR(${field.length ?? 1})`;
87
+ case FIELD_TYPES.SMALLINT:
88
+ return 'SMALLINT';
75
89
  case FIELD_TYPES.INTEGER:
76
90
  return 'INTEGER';
77
- case FIELD_TYPES.NUMBER:
78
- return field.precision
79
- ? `NUMERIC(${field.precision})`
80
- : 'NUMERIC';
81
- case FIELD_TYPES.CURRENCY:
82
- return 'NUMERIC(12,2)';
91
+ case FIELD_TYPES.BIGINT:
92
+ return 'BIGINT';
93
+ case FIELD_TYPES.NUMBER: {
94
+ const precision = field.precision;
95
+ const scale = field.scale;
96
+ if (!precision)
97
+ return 'NUMERIC';
98
+ return scale ? `NUMERIC(${precision},${scale})` : `NUMERIC(${precision})`;
99
+ }
100
+ case FIELD_TYPES.REAL:
101
+ return 'REAL';
102
+ case FIELD_TYPES.DOUBLE:
103
+ return 'DOUBLE PRECISION';
104
+ case FIELD_TYPES.CURRENCY: {
105
+ // scale follows the ISO 4217 code when declared (USD=2, JPY=0); absent → 2
106
+ const code = field.currency;
107
+ const scale = code === undefined ? 2 : currencyMinorUnits(code);
108
+ // precision is configurable for large amounts; default 12
109
+ const precision = field.precision ?? 12;
110
+ return `NUMERIC(${precision},${scale})`;
111
+ }
83
112
  case FIELD_TYPES.BOOLEAN:
84
113
  return 'BOOLEAN';
85
- case FIELD_TYPES.DATETIME:
86
- return 'TIMESTAMPTZ';
87
114
  case FIELD_TYPES.DATE:
88
115
  return 'DATE';
116
+ case FIELD_TYPES.TIME:
117
+ return 'TIME';
118
+ case FIELD_TYPES.TIMETZ:
119
+ return 'TIMETZ';
120
+ case FIELD_TYPES.TIMESTAMP:
121
+ return 'TIMESTAMP';
122
+ case FIELD_TYPES.TIMESTAMPTZ:
123
+ return 'TIMESTAMPTZ';
124
+ case FIELD_TYPES.INTERVAL:
125
+ return 'INTERVAL';
126
+ case FIELD_TYPES.UUID:
127
+ return 'UUID';
89
128
  case FIELD_TYPES.JSON:
129
+ return 'JSON';
130
+ case FIELD_TYPES.JSONB:
90
131
  return 'JSONB';
91
- case FIELD_TYPES.ENUM:
92
- return field.multiple ? 'TEXT[]' : 'VARCHAR(255)';
132
+ case FIELD_TYPES.ENUM: {
133
+ const enumType = field.enumType;
134
+ const multiple = field.multiple === true;
135
+ if (enumType !== undefined) {
136
+ // defense in depth: the validator already restricts enumType to a
137
+ // snake_case identifier, but it is interpolated raw into DDL here, so
138
+ // re-check before it can reach a type name.
139
+ if (!PG_ENUM_TYPE_RE.test(enumType)) {
140
+ throw new SchemaError('field.enum.enumType.invalid', { object: field.name, value: enumType });
141
+ }
142
+ return multiple ? `${enumType}[]` : enumType;
143
+ }
144
+ return multiple ? 'TEXT[]' : 'VARCHAR(255)';
145
+ }
93
146
  case FIELD_TYPES.RELATION:
94
147
  return targetPkType ?? 'VARCHAR(255)';
95
148
  case FIELD_TYPES.MULTI_RELATION:
96
- return 'TEXT[]';
149
+ // multiRelation fields have no column — they are backed by an engine link
150
+ // table (`core/storage/link-table.ts`), never mapped to a column type
151
+ throw new Error('multiRelation fields do not create a column (link table)');
97
152
  case FIELD_TYPES.SEQ_NO:
98
153
  return 'VARCHAR(255)';
99
154
  case FIELD_TYPES.DETAILS:
@@ -109,60 +164,52 @@ export function defaultExpr(field, registry = DEFAULT_FIELD_TYPE_REGISTRY) {
109
164
  return undefined;
110
165
  const base = fieldBase(registry, field.type);
111
166
  switch (base) {
112
- case FIELD_TYPES.DATETIME:
113
167
  case FIELD_TYPES.DATE:
114
- return raw.default === 'now' ? 'now()' : `'${String(raw.default)}'`;
168
+ case FIELD_TYPES.TIMESTAMP:
169
+ case FIELD_TYPES.TIMESTAMPTZ:
170
+ return raw.default === 'now' ? 'now()' : sqlLiteral(String(raw.default));
171
+ case FIELD_TYPES.TIME:
172
+ case FIELD_TYPES.TIMETZ:
173
+ return sqlLiteral(String(raw.default));
115
174
  case FIELD_TYPES.ENUM:
116
175
  // multi-value enum defaults are not expressed in DDL (application layer)
117
- return field.multiple ? undefined : `'${String(raw.default)}'`;
176
+ return field.multiple ? undefined : sqlLiteral(String(raw.default));
118
177
  case FIELD_TYPES.STRING:
119
178
  // multi-value image defaults are application layer too
120
179
  if (field.type === FIELD_TYPES.IMAGE && field.multiple === true)
121
180
  return undefined;
122
- return `'${String(raw.default)}'`;
181
+ return sqlLiteral(String(raw.default));
123
182
  case FIELD_TYPES.TEXT:
124
- return `'${String(raw.default)}'`;
183
+ case FIELD_TYPES.CHAR:
184
+ case FIELD_TYPES.UUID:
185
+ return sqlLiteral(String(raw.default));
125
186
  case FIELD_TYPES.BOOLEAN:
126
187
  return String(raw.default);
188
+ case FIELD_TYPES.SMALLINT:
127
189
  case FIELD_TYPES.INTEGER:
190
+ case FIELD_TYPES.BIGINT:
128
191
  case FIELD_TYPES.NUMBER:
192
+ case FIELD_TYPES.REAL:
193
+ case FIELD_TYPES.DOUBLE:
129
194
  case FIELD_TYPES.CURRENCY:
130
- return String(raw.default);
195
+ return numericLiteral(field, raw.default);
131
196
  default:
132
197
  return undefined;
133
198
  }
134
199
  }
135
- /** element `udt_name` (without the leading underscore) for engine array columns */
136
- const ARRAY_ELEMENT_UDT = {
137
- TEXT: 'text',
138
- VARCHAR: 'varchar',
139
- 'CHARACTER VARYING': 'varchar',
140
- CHAR: 'bpchar',
141
- BPCHAR: 'bpchar',
142
- SMALLINT: 'int2',
143
- INT2: 'int2',
144
- INTEGER: 'int4',
145
- INT: 'int4',
146
- INT4: 'int4',
147
- BIGINT: 'int8',
148
- INT8: 'int8',
149
- NUMERIC: 'numeric',
150
- DECIMAL: 'numeric',
151
- REAL: 'float4',
152
- 'DOUBLE PRECISION': 'float8',
153
- BOOLEAN: 'bool',
154
- DATE: 'date',
155
- TIME: 'time',
156
- TIMETZ: 'timetz',
157
- TIMESTAMP: 'timestamp',
158
- TIMESTAMPTZ: 'timestamptz',
159
- 'TIMESTAMP WITH TIME ZONE': 'timestamptz',
160
- 'TIMESTAMP WITHOUT TIME ZONE': 'timestamp',
161
- JSON: 'json',
162
- JSONB: 'jsonb',
163
- UUID: 'uuid',
164
- MONEY: 'money',
165
- };
200
+ /**
201
+ * A safe numeric DDL literal. JS numbers are emitted verbatim (finite only);
202
+ * string defaults (only reachable for `bigint`, whose large values may exceed
203
+ * `Number.MAX_SAFE_INTEGER`) must be a plain integer. Anything else fails loud
204
+ * rather than being interpolated raw into DDL.
205
+ */
206
+ function numericLiteral(field, value) {
207
+ if (typeof value === 'number' && Number.isFinite(value))
208
+ return String(value);
209
+ if (typeof value === 'string' && /^[+-]?\d+$/.test(value))
210
+ return value;
211
+ throw new SchemaError('storage.default.invalid', { field: field.name, value: String(value) });
212
+ }
166
213
  /**
167
214
  * Compare a declared column type (`pgType()` output, e.g. `VARCHAR(255)`,
168
215
  * `NUMERIC(12,2)`, `TEXT[]`, or a custom `storage.pgType` value) against a live
@@ -174,7 +221,7 @@ const ARRAY_ELEMENT_UDT = {
174
221
  */
175
222
  export function pgTypeMatches(expected, actual) {
176
223
  const exp = expected.trim().toUpperCase();
177
- const match = /^([A-Z][A-Z ]*?)(?:\(([^)]*)\))?(\[\])?$/.exec(exp);
224
+ const match = /^([A-Z][A-Z0-9_ ]*?)(?:\(([^)]*)\))?(\[\])?$/.exec(exp);
178
225
  if (match === null)
179
226
  return false;
180
227
  const base = match[1].trim();
@@ -185,7 +232,11 @@ export function pgTypeMatches(expected, actual) {
185
232
  if (!liveIsArray)
186
233
  return false;
187
234
  const udt = actual.udtName?.replace(/^_/, '').toLowerCase();
188
- return ARRAY_ELEMENT_UDT[base] === udt;
235
+ const mapped = PG_TYPE_BASE[base];
236
+ if (mapped !== undefined)
237
+ return mapped === udt;
238
+ // a user-defined element type (e.g. a native enum): compare the type name
239
+ return base.toLowerCase() === udt;
189
240
  }
190
241
  const actualBase = actual.dataType.toUpperCase();
191
242
  switch (base) {
@@ -224,6 +275,8 @@ export function pgTypeMatches(expected, actual) {
224
275
  case 'TIMESTAMPTZ':
225
276
  case 'TIMESTAMP WITH TIME ZONE':
226
277
  return actualBase === 'TIMESTAMP WITH TIME ZONE';
278
+ case 'INTERVAL':
279
+ return actualBase === 'INTERVAL';
227
280
  case 'JSON':
228
281
  return actualBase === 'JSON';
229
282
  case 'JSONB':
@@ -248,7 +301,8 @@ export function pgTypeMatches(expected, actual) {
248
301
  return true;
249
302
  }
250
303
  default:
251
- return false;
304
+ // user-defined type (e.g. a native enum): compare to the live udt_name
305
+ return actual.udtName !== undefined && base.toLowerCase() === actual.udtName.toLowerCase();
252
306
  }
253
307
  }
254
308
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/core/storage/map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/core/storage/map.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import type { Pool } from 'pg';
2
- /** create the audit meta table if it does not exist */
3
- export declare function ensureMetaTable(pool: Pool): Promise<void>;
4
- /** upsert an audit record (e.g. schema.applied.<object> -> applied_at) */
2
+ /**
3
+ * Upsert a meta record (e.g. `schema.applied.<object>` -> applied_at).
4
+ * The table is created by `weave migrate` — the runtime never runs DDL.
5
+ */
5
6
  export declare function setMeta(pool: Pool, key: string, value: string): Promise<void>;
7
+ /** read a meta value (null when the key is absent) */
8
+ export declare function getMeta(pool: Pool, key: string): Promise<string | null>;
6
9
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI/B,uDAAuD;AACvD,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D;AAED,0EAA0E;AAC1E,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI/B;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;AAED,sDAAsD;AACtD,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAG7E"}
@@ -1,11 +1,15 @@
1
1
  const META_TABLE = 'weavekit_meta';
2
- /** create the audit meta table if it does not exist */
3
- export async function ensureMetaTable(pool) {
4
- await pool.query(`CREATE TABLE IF NOT EXISTS ${META_TABLE} (key text PRIMARY KEY, value text NOT NULL)`);
5
- }
6
- /** upsert an audit record (e.g. schema.applied.<object> -> applied_at) */
2
+ /**
3
+ * Upsert a meta record (e.g. `schema.applied.<object>` -> applied_at).
4
+ * The table is created by `weave migrate` — the runtime never runs DDL.
5
+ */
7
6
  export async function setMeta(pool, key, value) {
8
7
  await pool.query(`INSERT INTO ${META_TABLE} (key, value) VALUES ($1, $2)
9
8
  ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`, [key, value]);
10
9
  }
10
+ /** read a meta value (null when the key is absent) */
11
+ export async function getMeta(pool, key) {
12
+ const res = await pool.query(`SELECT value FROM ${META_TABLE} WHERE key = $1`, [key]);
13
+ return res.rows[0]?.value ?? null;
14
+ }
11
15
  //# sourceMappingURL=meta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,eAAe,CAAC;AAEnC,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU;IAC9C,MAAM,IAAI,CAAC,KAAK,CACd,8BAA8B,UAAU,8CAA8C,CACvF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,GAAW,EAAE,KAAa;IAClE,MAAM,IAAI,CAAC,KAAK,CACd,eAAe,UAAU;4DAC+B,EACxD,CAAC,GAAG,EAAE,KAAK,CAAC,CACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,eAAe,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,GAAW,EAAE,KAAa;IAClE,MAAM,IAAI,CAAC,KAAK,CACd,eAAe,UAAU;4DAC+B,EACxD,CAAC,GAAG,EAAE,KAAK,CAAC,CACb,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,GAAW;IACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,UAAU,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,OAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAmC,EAAE,KAAK,IAAI,IAAI,CAAC;AACvE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/storage/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAUzD,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA8BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAyF9G"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/storage/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAiBzD,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAmGD;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4I9G"}
@@ -1,11 +1,64 @@
1
+ import { systemObjects } from '../object/index.js';
1
2
  import { FIELD_TYPES } from '../types/index.js';
2
3
  import { SchemaError, primaryKeyOf } from '../types/index.js';
3
4
  import { applyStatements } from './apply.js';
4
5
  import { buildExpectedTable, diffAll, diffRls, diffTable } from './diff.js';
5
6
  import { inspectSchema } from './inspect.js';
6
- import { ensureMetaTable, setMeta } from './meta.js';
7
+ import { buildLinkTables } from './link-table.js';
8
+ import { setMeta } from './meta.js';
7
9
  import { createPool } from './pool.js';
8
- const RLS_ROLE_RE = /^[a-z_][a-z0-9_]*$/;
10
+ import { buildRecordMetaTable } from './record-meta.js';
11
+ import { sqlIdent, sqlLiteral } from './sql-literals.js';
12
+ import { SYSTEM_TABLES, buildSystemTables, systemHardeningStatements } from './system-tables.js';
13
+ import { isSafeRlsRole } from '../rbac/index.js';
14
+ const q = (id) => `"${id}"`;
15
+ /**
16
+ * DDL to ensure the native enum types referenced by managed objects exist.
17
+ * `CREATE TYPE` when the type is missing; `ALTER TYPE … ADD VALUE IF NOT EXISTS`
18
+ * only for managed (created / `alter: true`) objects — never for adopted,
19
+ * read-only tables (the engine must not ALTER a customer's type).
20
+ */
21
+ async function buildEnumStatements(pool, defs, managed) {
22
+ const declared = new Map();
23
+ for (const def of defs.values()) {
24
+ if (!managed.has(def.name))
25
+ continue;
26
+ for (const field of def.fields) {
27
+ const e = field;
28
+ if (e.type !== FIELD_TYPES.ENUM || e.enumType === undefined || !Array.isArray(e.options))
29
+ continue;
30
+ const set = declared.get(e.enumType) ?? new Set();
31
+ for (const option of e.options)
32
+ set.add(String(option));
33
+ declared.set(e.enumType, set);
34
+ }
35
+ }
36
+ if (declared.size === 0)
37
+ return [];
38
+ const res = await pool.query(`SELECT t.typname AS name, e.enumlabel AS label
39
+ FROM pg_type t JOIN pg_enum e ON e.enumtypid = t.oid
40
+ WHERE t.typtype = 'e'`);
41
+ const existing = new Map();
42
+ for (const row of res.rows) {
43
+ const set = existing.get(row.name) ?? new Set();
44
+ set.add(row.label);
45
+ existing.set(row.name, set);
46
+ }
47
+ const statements = [];
48
+ for (const [name, options] of declared) {
49
+ const labels = existing.get(name);
50
+ if (labels === undefined) {
51
+ statements.push(`CREATE TYPE ${q(name)} AS ENUM (${[...options].map(sqlLiteral).join(', ')})`);
52
+ }
53
+ else {
54
+ for (const option of options) {
55
+ if (!labels.has(option))
56
+ statements.push(`ALTER TYPE ${q(name)} ADD VALUE IF NOT EXISTS ${sqlLiteral(option)}`);
57
+ }
58
+ }
59
+ }
60
+ return statements;
61
+ }
9
62
  /**
10
63
  * Best-effort provisioning of the restricted-SQL role: `CREATE ROLE` (needs
11
64
  * CREATEROLE; failure → warning + false) and `GRANT` membership for
@@ -16,7 +69,7 @@ async function provisionRlsRole(pool, role, warnings) {
16
69
  const existing = await pool.query('SELECT 1 FROM pg_roles WHERE rolname = $1', [role]);
17
70
  if (existing.rows.length === 0) {
18
71
  try {
19
- await pool.query(`CREATE ROLE ${role}`);
72
+ await pool.query(`CREATE ROLE ${sqlIdent(role)}`);
20
73
  }
21
74
  catch {
22
75
  warnings.push(`could not create role "${role}" (needs CREATEROLE) — create it manually to enable RLS`);
@@ -24,13 +77,30 @@ async function provisionRlsRole(pool, role, warnings) {
24
77
  }
25
78
  }
26
79
  try {
27
- await pool.query(`DO $$ BEGIN IF NOT pg_has_role(current_user, '${role}', 'MEMBER') THEN EXECUTE 'GRANT ${role} TO current_user'; END IF; END $$;`);
80
+ // no dynamic SQL: decide membership in JS, then GRANT with a quoted identifier
81
+ const res = await pool.query(`SELECT pg_has_role(current_user, $1, 'MEMBER') AS member`, [role]);
82
+ if (res.rows[0].member !== true) {
83
+ await pool.query(`GRANT ${sqlIdent(role)} TO current_user`);
84
+ }
28
85
  }
29
86
  catch (error) {
30
87
  warnings.push(`could not grant role "${role}" to current user: ${String(error.message)}`);
31
88
  }
32
89
  return true;
33
90
  }
91
+ /**
92
+ * True when `PUBLIC` still holds `TRUNCATE` on `table`, i.e. the append-only
93
+ * hardening `REVOKE` is worth emitting. New tables grant nothing to `PUBLIC`
94
+ * by default, so a clean run emits no hardening statement (keeps migrate
95
+ * idempotent).
96
+ */
97
+ async function publicHasTruncate(pool, table) {
98
+ const res = await pool.query(`SELECT EXISTS (
99
+ SELECT 1 FROM pg_class c, aclexplode(coalesce(c.relacl, acldefault('r', c.relowner))) a
100
+ WHERE c.oid = to_regclass($1) AND a.grantee = 0 AND a.privilege_type = 'TRUNCATE'
101
+ ) AS needs`, [table]);
102
+ return res.rows[0]?.needs === true;
103
+ }
34
104
  /**
35
105
  * State-diff migration: compare each engine-managed object's expected table
36
106
  * against the live `information_schema`, generate DDL, apply inside a
@@ -52,9 +122,9 @@ export async function migrate(registry, options = {}) {
52
122
  const warnings = [];
53
123
  const pool = createPool(url);
54
124
  try {
55
- const defs = new Map(registry.list().map((d) => [d.name, d]));
125
+ const defs = new Map([...systemObjects(), ...registry.list()].map((d) => [d.name, d]));
56
126
  const actual = await inspectSchema(pool);
57
- if (options.rls !== undefined && !RLS_ROLE_RE.test(options.rls.role)) {
127
+ if (options.rls !== undefined && !isSafeRlsRole(options.rls.role)) {
58
128
  throw new Error(`invalid RLS role name "${options.rls.role}"`);
59
129
  }
60
130
  // new objects (no live table by that name) are diffed and created; objects
@@ -64,6 +134,31 @@ export async function migrate(registry, options = {}) {
64
134
  .filter((d) => d.alter === true || actual.get(d.name) === undefined)
65
135
  .map((d) => buildExpectedTable(d, defs, registry.fieldTypes));
66
136
  const statements = diffAll(expected, actual);
137
+ // native enum types must exist before the tables that reference them
138
+ const enumStatements = await buildEnumStatements(pool, defs, new Set(expected.map((t) => t.name)));
139
+ // engine-owned per-object record metadata side tables: one per object (R1),
140
+ // created idempotently for every object regardless of `alter`/ownership —
141
+ // they never touch the customer's own table
142
+ const metaTables = [...defs.keys()].map((name) => buildRecordMetaTable(name));
143
+ const metaStatements = diffAll(metaTables, actual);
144
+ // engine-owned many-to-many link tables for every `multiRelation` field:
145
+ // one per (object, field), created idempotently regardless of `alter`.
146
+ const linkTables = buildLinkTables(defs, registry.fieldTypes);
147
+ const linkStatements = diffAll(linkTables, actual);
148
+ // engine-owned system tables (metadata cache / seq / audit / approvals /
149
+ // timers / counters) + their ACL hardening: provisioned here (and only
150
+ // here) so the runtime never runs DDL and can be least-privileged.
151
+ // one-time reshape of the legacy workflow timer table
152
+ // (id/state/workflow_version -> record_key/node_id): engine-owned and
153
+ // transient, so drop+recreate is safe (there are no users yet).
154
+ const legacyTimers = actual.get(SYSTEM_TABLES.WORKFLOW_TIMERS);
155
+ const dropLegacyTimers = legacyTimers !== undefined &&
156
+ legacyTimers.columns.some((c) => c.name === 'state') &&
157
+ !legacyTimers.columns.some((c) => c.name === 'record_key');
158
+ if (dropLegacyTimers)
159
+ actual.delete(SYSTEM_TABLES.WORKFLOW_TIMERS);
160
+ const systemStatements = diffAll(buildSystemTables(), actual);
161
+ const hardening = (await publicHasTruncate(pool, SYSTEM_TABLES.AUDIT)) ? systemHardeningStatements() : [];
67
162
  // existing tables are read-only unless the object opted in (`alter: true`):
68
163
  // verify every declared field is a live column (prevents REST/MCP pointing
69
164
  // at ghost columns). With `alter: true`, missing fields become ADD COLUMN
@@ -83,8 +178,9 @@ export async function migrate(registry, options = {}) {
83
178
  continue;
84
179
  for (const field of def.fields) {
85
180
  // details fields have no column on the parent (the child table carries
86
- // parent_id/parent_type/parent_idx) — never a ghost-column check
87
- if (field.type === FIELD_TYPES.DETAILS)
181
+ // parent_id/parent_type/parent_idx); multiRelation fields have no column
182
+ // either (a link table carries the pairs) — never ghost-column checks
183
+ if (field.type === FIELD_TYPES.DETAILS || field.type === FIELD_TYPES.MULTI_RELATION)
88
184
  continue;
89
185
  if (!cols.has(field.name)) {
90
186
  throw new SchemaError('object.field.columnMissing', { object: def.name, table: def.name, field: field.name });
@@ -103,7 +199,7 @@ export async function migrate(registry, options = {}) {
103
199
  if (roleReady) {
104
200
  const { rows } = await pool.query('SELECT current_user AS u');
105
201
  const currentUser = String(rows[0].u);
106
- for (const def of defs.values()) {
202
+ for (const def of registry.list()) {
107
203
  const actualTable = actual.get(def.name);
108
204
  const applies = actualTable === undefined || (def.alter === true && actualTable.owner === currentUser);
109
205
  if (!applies) {
@@ -114,20 +210,57 @@ export async function migrate(registry, options = {}) {
114
210
  }
115
211
  rlsStatements = rlsStatements.concat(diffRls(def, actualTable, options.rls.role));
116
212
  }
213
+ // link tables are engine plumbing (never registry-visible): enable
214
+ // RLS with no policy so the restricted role reads 0 rows even if it is
215
+ // ever granted, a second layer behind the sql-gate. The engine runs as
216
+ // the owner and bypasses RLS, so its own reads are unaffected.
217
+ for (const table of linkTables) {
218
+ if (actual.get(table.name)?.rlsEnabled !== true) {
219
+ rlsStatements.push(`ALTER TABLE ${q(table.name)} ENABLE ROW LEVEL SECURITY;`);
220
+ }
221
+ }
117
222
  }
118
223
  }
119
- const allStatements = [...statements, ...rlsStatements];
224
+ const allStatements = [
225
+ ...enumStatements,
226
+ ...(dropLegacyTimers ? [`DROP TABLE ${q(SYSTEM_TABLES.WORKFLOW_TIMERS)};`] : []),
227
+ ...statements,
228
+ ...metaStatements,
229
+ ...linkStatements,
230
+ ...systemStatements,
231
+ ...rlsStatements,
232
+ ...hardening,
233
+ ];
120
234
  if (!dryRun && allStatements.length > 0) {
121
- await ensureMetaTable(pool);
122
235
  await applyStatements(pool, allStatements);
123
236
  const ts = new Date().toISOString();
124
237
  for (const name of applied)
125
238
  await setMeta(pool, `schema.applied.${name}`, ts);
126
239
  }
240
+ // content-address every object's workflow definition (append-only, idempotent)
241
+ // so running instances can resolve the exact revision they were pinned to.
242
+ if (!dryRun)
243
+ await registerWorkflowDefinitions(pool, defs);
127
244
  return { statements: allStatements, applied, dryRun, warnings };
128
245
  }
129
246
  finally {
130
247
  await pool.end();
131
248
  }
132
249
  }
250
+ /**
251
+ * Upsert each object's current workflow definition into
252
+ * `weavekit_workflow_definitions` (keyed by content hash). Idempotent; the
253
+ * `version_seq` is a monotonic display/switch ordinal. Never rewrites or drops
254
+ * an existing row (append-only revision history for instance pinning).
255
+ */
256
+ async function registerWorkflowDefinitions(pool, defs) {
257
+ const table = q(SYSTEM_TABLES.WORKFLOW_DEFINITIONS);
258
+ for (const def of defs.values()) {
259
+ if (def.workflow === undefined || def.workflowHash === undefined)
260
+ continue;
261
+ await pool.query(`INSERT INTO ${table} (object, hash, version_seq, definition)
262
+ VALUES ($1, $2, (SELECT COALESCE(MAX(version_seq), 0) + 1 FROM ${table} WHERE object = $1), $3::jsonb)
263
+ ON CONFLICT (object, hash) DO NOTHING`, [def.name, def.workflowHash, JSON.stringify(def.workflow)]);
264
+ }
265
+ }
133
266
  //# sourceMappingURL=migrate.js.map