@mistriwork/engine 0.0.0-stage → 1.0.0-rc.10

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 (546) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -2
  3. package/dist/adapters/adapter.d.ts +693 -0
  4. package/dist/adapters/adapter.js +444 -0
  5. package/dist/adapters/cache/cacheStore.d.ts +75 -0
  6. package/dist/adapters/cache/cacheStore.js +160 -0
  7. package/dist/adapters/cache/resp.d.ts +52 -0
  8. package/dist/adapters/cache/resp.js +237 -0
  9. package/dist/adapters/commands/canonicalJson.d.ts +19 -0
  10. package/dist/adapters/commands/canonicalJson.js +154 -0
  11. package/dist/adapters/connect.d.ts +29 -0
  12. package/dist/adapters/connect.js +40 -0
  13. package/dist/adapters/connectionBudget.d.ts +101 -0
  14. package/dist/adapters/connectionBudget.js +128 -0
  15. package/dist/adapters/dbLatency.d.ts +35 -0
  16. package/dist/adapters/dbLatency.js +79 -0
  17. package/dist/adapters/epochCache.d.ts +50 -0
  18. package/dist/adapters/epochCache.js +85 -0
  19. package/dist/adapters/http/egress.d.ts +48 -0
  20. package/dist/adapters/http/egress.js +175 -0
  21. package/dist/adapters/http/httpAdapter.d.ts +71 -0
  22. package/dist/adapters/http/httpAdapter.js +512 -0
  23. package/dist/adapters/http/httpDescription.d.ts +32 -0
  24. package/dist/adapters/http/httpDescription.js +246 -0
  25. package/dist/adapters/http/openapi.d.ts +98 -0
  26. package/dist/adapters/http/openapi.js +487 -0
  27. package/dist/adapters/layoutRefusal.d.ts +24 -0
  28. package/dist/adapters/layoutRefusal.js +35 -0
  29. package/dist/adapters/net/networkPolicy.d.ts +44 -0
  30. package/dist/adapters/net/networkPolicy.js +123 -0
  31. package/dist/adapters/net/untrustedDatabase.d.ts +18 -0
  32. package/dist/adapters/net/untrustedDatabase.js +120 -0
  33. package/dist/adapters/poolAdmission.d.ts +43 -0
  34. package/dist/adapters/poolAdmission.js +184 -0
  35. package/dist/adapters/poolMetrics.d.ts +121 -0
  36. package/dist/adapters/poolMetrics.js +185 -0
  37. package/dist/adapters/postgres.d.ts +436 -0
  38. package/dist/adapters/postgres.js +1890 -0
  39. package/dist/adapters/postgresCatalog.d.ts +96 -0
  40. package/dist/adapters/postgresCatalog.js +387 -0
  41. package/dist/adapters/postgresCatalogDigest.d.ts +30 -0
  42. package/dist/adapters/postgresCatalogDigest.js +87 -0
  43. package/dist/adapters/postgresCatalogRows.d.ts +62 -0
  44. package/dist/adapters/postgresCatalogRows.js +37 -0
  45. package/dist/adapters/postgresDates.d.ts +1 -0
  46. package/dist/adapters/postgresDates.js +39 -0
  47. package/dist/adapters/postgresMaintenance.d.ts +33 -0
  48. package/dist/adapters/postgresMaintenance.js +179 -0
  49. package/dist/adapters/postgresPool.d.ts +255 -0
  50. package/dist/adapters/postgresPool.js +838 -0
  51. package/dist/adapters/postgresPooler.d.ts +28 -0
  52. package/dist/adapters/postgresPooler.js +267 -0
  53. package/dist/adapters/postgresReadCatalog.d.ts +31 -0
  54. package/dist/adapters/postgresReadCatalog.js +226 -0
  55. package/dist/adapters/postgresReadSnapshot.d.ts +46 -0
  56. package/dist/adapters/postgresReadSnapshot.js +133 -0
  57. package/dist/adapters/postgresSchemaEpoch.d.ts +24 -0
  58. package/dist/adapters/postgresSchemaEpoch.js +149 -0
  59. package/dist/adapters/postgresTransactionHandle.d.ts +173 -0
  60. package/dist/adapters/postgresTransactionHandle.js +524 -0
  61. package/dist/adapters/postgresValues.d.ts +30 -0
  62. package/dist/adapters/postgresValues.js +75 -0
  63. package/dist/adapters/replicas.d.ts +70 -0
  64. package/dist/adapters/replicas.js +208 -0
  65. package/dist/adapters/reservedSql.d.ts +38 -0
  66. package/dist/adapters/reservedSql.js +264 -0
  67. package/dist/adapters/rolePrivileges.d.ts +17 -0
  68. package/dist/adapters/rolePrivileges.js +22 -0
  69. package/dist/adapters/scoped/keyRows.d.ts +65 -0
  70. package/dist/adapters/scoped/keyRows.js +173 -0
  71. package/dist/adapters/scoped/postgresScopeCatalog.d.ts +16 -0
  72. package/dist/adapters/scoped/postgresScopeCatalog.js +117 -0
  73. package/dist/adapters/scoped/scopedCommandOperations.d.ts +5 -0
  74. package/dist/adapters/scoped/scopedCommandOperations.js +48 -0
  75. package/dist/adapters/scoped/scopedReads.d.ts +20 -0
  76. package/dist/adapters/scoped/scopedReads.js +174 -0
  77. package/dist/adapters/scoped/scopedTransaction.d.ts +89 -0
  78. package/dist/adapters/scoped/scopedTransaction.js +303 -0
  79. package/dist/adapters/scoped/sqliteScopeCatalog.d.ts +16 -0
  80. package/dist/adapters/scoped/sqliteScopeCatalog.js +241 -0
  81. package/dist/adapters/scoped/updateGuard.d.ts +3 -0
  82. package/dist/adapters/scoped/updateGuard.js +40 -0
  83. package/dist/adapters/serverSettings.d.ts +45 -0
  84. package/dist/adapters/serverSettings.js +46 -0
  85. package/dist/adapters/sqlite.d.ts +262 -0
  86. package/dist/adapters/sqlite.js +1434 -0
  87. package/dist/adapters/sqliteCostlyReads.d.ts +33 -0
  88. package/dist/adapters/sqliteCostlyReads.js +49 -0
  89. package/dist/adapters/sqliteDecimals.d.ts +22 -0
  90. package/dist/adapters/sqliteDecimals.js +57 -0
  91. package/dist/adapters/sqliteHandles.d.ts +43 -0
  92. package/dist/adapters/sqliteHandles.js +143 -0
  93. package/dist/adapters/sqliteStatementProcess.d.ts +29 -0
  94. package/dist/adapters/sqliteStatementProcess.js +131 -0
  95. package/dist/adapters/statementControl.d.ts +34 -0
  96. package/dist/adapters/statementControl.js +90 -0
  97. package/dist/adapters/storeHost.d.ts +130 -0
  98. package/dist/adapters/storeHost.js +13 -0
  99. package/dist/adapters/telemetry/drivers.d.ts +21 -0
  100. package/dist/adapters/telemetry/drivers.js +321 -0
  101. package/dist/adapters/telemetry/metrics.d.ts +63 -0
  102. package/dist/adapters/telemetry/metrics.js +122 -0
  103. package/dist/adapters/telemetry/otlp.d.ts +12 -0
  104. package/dist/adapters/telemetry/otlp.js +320 -0
  105. package/dist/adapters/telemetry/otlpEncode.d.ts +48 -0
  106. package/dist/adapters/telemetry/otlpEncode.js +366 -0
  107. package/dist/adapters/telemetry/otlpEnv.d.ts +1 -0
  108. package/dist/adapters/telemetry/otlpEnv.js +12 -0
  109. package/dist/adapters/telemetry/serverTiming.d.ts +83 -0
  110. package/dist/adapters/telemetry/serverTiming.js +503 -0
  111. package/dist/adapters/telemetry/start.d.ts +10 -0
  112. package/dist/adapters/telemetry/start.js +25 -0
  113. package/dist/adapters/telemetry/statement.d.ts +16 -0
  114. package/dist/adapters/telemetry/statement.js +134 -0
  115. package/dist/adapters/telemetry/trace.d.ts +127 -0
  116. package/dist/adapters/telemetry/trace.js +295 -0
  117. package/dist/adapters/writeAhead.d.ts +27 -0
  118. package/dist/adapters/writeAhead.js +46 -0
  119. package/dist/adapters/writeAttribution.d.ts +18 -0
  120. package/dist/adapters/writeAttribution.js +23 -0
  121. package/dist/adapters/writeCapture.d.ts +73 -0
  122. package/dist/adapters/writeCapture.js +20 -0
  123. package/dist/adapters/writeLanes.d.ts +94 -0
  124. package/dist/adapters/writeLanes.js +232 -0
  125. package/dist/engine.d.ts +15 -0
  126. package/dist/engine.js +13 -0
  127. package/dist/server/auth/credentials.d.ts +61 -0
  128. package/dist/server/auth/credentials.js +260 -0
  129. package/dist/server/cacheService.d.ts +50 -0
  130. package/dist/server/cacheService.js +110 -0
  131. package/dist/server/cli/args.d.ts +176 -0
  132. package/dist/server/cli/args.js +342 -0
  133. package/dist/server/cli/bin.d.ts +5 -0
  134. package/dist/server/cli/bin.js +66 -0
  135. package/dist/server/cli/browser.d.ts +15 -0
  136. package/dist/server/cli/browser.js +37 -0
  137. package/dist/server/cli/config.d.ts +50 -0
  138. package/dist/server/cli/config.js +206 -0
  139. package/dist/server/cli/startup.d.ts +36 -0
  140. package/dist/server/cli/startup.js +128 -0
  141. package/dist/server/cli/startupOptions.d.ts +63 -0
  142. package/dist/server/cli/startupOptions.js +143 -0
  143. package/dist/server/cli/subcommand.d.ts +28 -0
  144. package/dist/server/cli/subcommand.js +32 -0
  145. package/dist/server/cli/usage.d.ts +13 -0
  146. package/dist/server/cli/usage.js +31 -0
  147. package/dist/server/clientHttp.d.ts +184 -0
  148. package/dist/server/clientHttp.js +700 -0
  149. package/dist/server/clientSurface.d.ts +128 -0
  150. package/dist/server/clientSurface.js +182 -0
  151. package/dist/server/columnGrants.d.ts +103 -0
  152. package/dist/server/columnGrants.js +730 -0
  153. package/dist/server/compileCache.d.ts +1 -0
  154. package/dist/server/compileCache.js +30 -0
  155. package/dist/server/config/locations.d.ts +1 -0
  156. package/dist/server/config/locations.js +15 -0
  157. package/dist/server/configPaths.d.ts +7 -0
  158. package/dist/server/configPaths.js +34 -0
  159. package/dist/server/configSections.d.ts +64 -0
  160. package/dist/server/configSections.js +72 -0
  161. package/dist/server/connectionRedaction.d.ts +30 -0
  162. package/dist/server/connectionRedaction.js +77 -0
  163. package/dist/server/connections.d.ts +353 -0
  164. package/dist/server/connections.js +978 -0
  165. package/dist/server/constraints.d.ts +82 -0
  166. package/dist/server/constraints.js +169 -0
  167. package/dist/server/demo.d.ts +9 -0
  168. package/dist/server/demo.js +554 -0
  169. package/dist/server/devclient.d.ts +108 -0
  170. package/dist/server/devclient.js +361 -0
  171. package/dist/server/evidence.d.ts +55 -0
  172. package/dist/server/evidence.js +323 -0
  173. package/dist/server/hiddenColumns.d.ts +32 -0
  174. package/dist/server/hiddenColumns.js +238 -0
  175. package/dist/server/http/baselineHeaders.d.ts +24 -0
  176. package/dist/server/http/baselineHeaders.js +12 -0
  177. package/dist/server/http/captured.d.ts +35 -0
  178. package/dist/server/http/captured.js +73 -0
  179. package/dist/server/http/clock.d.ts +1 -0
  180. package/dist/server/http/clock.js +14 -0
  181. package/dist/server/http/connectionSource.d.ts +4 -0
  182. package/dist/server/http/connectionSource.js +48 -0
  183. package/dist/server/http/context.d.ts +189 -0
  184. package/dist/server/http/context.js +11 -0
  185. package/dist/server/http/crawlerText.d.ts +15 -0
  186. package/dist/server/http/crawlerText.js +32 -0
  187. package/dist/server/http/dataRoutes.d.ts +88 -0
  188. package/dist/server/http/dataRoutes.js +137 -0
  189. package/dist/server/http/door.d.ts +57 -0
  190. package/dist/server/http/door.js +39 -0
  191. package/dist/server/http/exportRoute.d.ts +15 -0
  192. package/dist/server/http/exportRoute.js +320 -0
  193. package/dist/server/http/firstPaint.d.ts +108 -0
  194. package/dist/server/http/firstPaint.js +262 -0
  195. package/dist/server/http/httpOperationRoutes.d.ts +11 -0
  196. package/dist/server/http/httpOperationRoutes.js +50 -0
  197. package/dist/server/http/pageReads.d.ts +20 -0
  198. package/dist/server/http/pageReads.js +205 -0
  199. package/dist/server/http/pageRoutes.d.ts +39 -0
  200. package/dist/server/http/pageRoutes.js +291 -0
  201. package/dist/server/http/probes.d.ts +22 -0
  202. package/dist/server/http/probes.js +27 -0
  203. package/dist/server/http/rateLimit.d.ts +131 -0
  204. package/dist/server/http/rateLimit.js +351 -0
  205. package/dist/server/http/readRoutes.d.ts +9 -0
  206. package/dist/server/http/readRoutes.js +131 -0
  207. package/dist/server/http/readRouting.d.ts +20 -0
  208. package/dist/server/http/readRouting.js +80 -0
  209. package/dist/server/http/recordCompose.d.ts +67 -0
  210. package/dist/server/http/recordCompose.js +167 -0
  211. package/dist/server/http/recordWrites.d.ts +89 -0
  212. package/dist/server/http/recordWrites.js +298 -0
  213. package/dist/server/http/refusalReport.d.ts +38 -0
  214. package/dist/server/http/refusalReport.js +63 -0
  215. package/dist/server/http/reply.d.ts +130 -0
  216. package/dist/server/http/reply.js +394 -0
  217. package/dist/server/http/requestOrigin.d.ts +11 -0
  218. package/dist/server/http/requestOrigin.js +8 -0
  219. package/dist/server/http/router.d.ts +45 -0
  220. package/dist/server/http/router.js +22 -0
  221. package/dist/server/http/serverCore.d.ts +68 -0
  222. package/dist/server/http/serverCore.js +177 -0
  223. package/dist/server/http/traceRequest.d.ts +30 -0
  224. package/dist/server/http/traceRequest.js +224 -0
  225. package/dist/server/http/trust.d.ts +261 -0
  226. package/dist/server/http/trust.js +472 -0
  227. package/dist/server/http/writeRefusal.d.ts +33 -0
  228. package/dist/server/http/writeRefusal.js +24 -0
  229. package/dist/server/httpConnection.d.ts +49 -0
  230. package/dist/server/httpConnection.js +170 -0
  231. package/dist/server/impact.d.ts +55 -0
  232. package/dist/server/impact.js +47 -0
  233. package/dist/server/journal.d.ts +134 -0
  234. package/dist/server/journal.js +398 -0
  235. package/dist/server/keysetReadHttp.d.ts +52 -0
  236. package/dist/server/keysetReadHttp.js +85 -0
  237. package/dist/server/layouts.d.ts +49 -0
  238. package/dist/server/layouts.js +192 -0
  239. package/dist/server/migrate/cli.d.ts +55 -0
  240. package/dist/server/migrate/cli.js +517 -0
  241. package/dist/server/migrate/database.d.ts +37 -0
  242. package/dist/server/migrate/database.js +247 -0
  243. package/dist/server/migrate/desired.d.ts +76 -0
  244. package/dist/server/migrate/desired.js +292 -0
  245. package/dist/server/migrate/files.d.ts +34 -0
  246. package/dist/server/migrate/files.js +141 -0
  247. package/dist/server/migrate/flyway.d.ts +7 -0
  248. package/dist/server/migrate/flyway.js +69 -0
  249. package/dist/server/migrate/history.d.ts +70 -0
  250. package/dist/server/migrate/history.js +211 -0
  251. package/dist/server/migrate/runner.d.ts +100 -0
  252. package/dist/server/migrate/runner.js +409 -0
  253. package/dist/server/migrate/snapshot.d.ts +30 -0
  254. package/dist/server/migrate/snapshot.js +239 -0
  255. package/dist/server/migrate/target.d.ts +33 -0
  256. package/dist/server/migrate/target.js +82 -0
  257. package/dist/server/openapiDraft.d.ts +25 -0
  258. package/dist/server/openapiDraft.js +171 -0
  259. package/dist/server/operations/diagnostics.d.ts +101 -0
  260. package/dist/server/operations/diagnostics.js +284 -0
  261. package/dist/server/operations/requestMetrics.d.ts +33 -0
  262. package/dist/server/operations/requestMetrics.js +94 -0
  263. package/dist/server/packageVersion.d.ts +1 -0
  264. package/dist/server/packageVersion.js +11 -0
  265. package/dist/server/poolConfig.d.ts +34 -0
  266. package/dist/server/poolConfig.js +114 -0
  267. package/dist/server/product.d.ts +20 -0
  268. package/dist/server/product.js +12 -0
  269. package/dist/server/recordHistoryOperations.d.ts +39 -0
  270. package/dist/server/recordHistoryOperations.js +43 -0
  271. package/dist/server/recordWriteOperations.d.ts +111 -0
  272. package/dist/server/recordWriteOperations.js +329 -0
  273. package/dist/server/resourceReadHttp.d.ts +81 -0
  274. package/dist/server/resourceReadHttp.js +606 -0
  275. package/dist/server/resourceReadOperations.d.ts +147 -0
  276. package/dist/server/resourceReadOperations.js +452 -0
  277. package/dist/server/scaffoldMachine.d.ts +54 -0
  278. package/dist/server/scaffoldMachine.js +184 -0
  279. package/dist/server/seed/cli.d.ts +20 -0
  280. package/dist/server/seed/cli.js +164 -0
  281. package/dist/server/seed/lexicon.d.ts +26 -0
  282. package/dist/server/seed/lexicon.js +585 -0
  283. package/dist/server/seed/seed.d.ts +70 -0
  284. package/dist/server/seed/seed.js +779 -0
  285. package/dist/server/seed/words.d.ts +21 -0
  286. package/dist/server/seed/words.js +164 -0
  287. package/dist/server/serverRequests.d.ts +6 -0
  288. package/dist/server/serverRequests.js +33 -0
  289. package/dist/server/serverTimeouts.d.ts +33 -0
  290. package/dist/server/serverTimeouts.js +32 -0
  291. package/dist/server/shapeonly.d.ts +32 -0
  292. package/dist/server/shapeonly.js +110 -0
  293. package/dist/server/startupWarnings.d.ts +32 -0
  294. package/dist/server/startupWarnings.js +92 -0
  295. package/dist/shared/addressParams.d.ts +28 -0
  296. package/dist/shared/addressParams.js +47 -0
  297. package/dist/shared/appCards.d.ts +123 -0
  298. package/dist/shared/appCards.js +385 -0
  299. package/dist/shared/appComponents.d.ts +177 -0
  300. package/dist/shared/appComponents.js +422 -0
  301. package/dist/shared/appDocuments.d.ts +43 -0
  302. package/dist/shared/appDocuments.js +131 -0
  303. package/dist/shared/appEmbeds.d.ts +21 -0
  304. package/dist/shared/appEmbeds.js +24 -0
  305. package/dist/shared/appIcons.d.ts +28 -0
  306. package/dist/shared/appIcons.js +223 -0
  307. package/dist/shared/appLinks.d.ts +17 -0
  308. package/dist/shared/appLinks.js +124 -0
  309. package/dist/shared/appListColumns.d.ts +3 -0
  310. package/dist/shared/appListColumns.js +66 -0
  311. package/dist/shared/appLocale.d.ts +36 -0
  312. package/dist/shared/appLocale.js +86 -0
  313. package/dist/shared/appMessages.d.ts +44 -0
  314. package/dist/shared/appMessages.js +78 -0
  315. package/dist/shared/appNoun.d.ts +21 -0
  316. package/dist/shared/appNoun.js +32 -0
  317. package/dist/shared/autoBucket.d.ts +98 -0
  318. package/dist/shared/autoBucket.js +305 -0
  319. package/dist/shared/autoValues.d.ts +25 -0
  320. package/dist/shared/autoValues.js +25 -0
  321. package/dist/shared/breakdown.d.ts +228 -0
  322. package/dist/shared/breakdown.js +557 -0
  323. package/dist/shared/breakdowntext.d.ts +41 -0
  324. package/dist/shared/breakdowntext.js +400 -0
  325. package/dist/shared/builtInThemes.d.ts +2 -0
  326. package/dist/shared/builtInThemes.js +771 -0
  327. package/dist/shared/chartSeparation.d.ts +11 -0
  328. package/dist/shared/chartSeparation.js +58 -0
  329. package/dist/shared/clauses.d.ts +22 -0
  330. package/dist/shared/clauses.js +97 -0
  331. package/dist/shared/columnCaption.d.ts +16 -0
  332. package/dist/shared/columnCaption.js +90 -0
  333. package/dist/shared/commandFieldPath.d.ts +2 -0
  334. package/dist/shared/commandFieldPath.js +7 -0
  335. package/dist/shared/commandWire.d.ts +26 -0
  336. package/dist/shared/commandWire.js +41 -0
  337. package/dist/shared/computed.d.ts +161 -0
  338. package/dist/shared/computed.js +378 -0
  339. package/dist/shared/computedParse.d.ts +13 -0
  340. package/dist/shared/computedParse.js +278 -0
  341. package/dist/shared/computedValue.d.ts +47 -0
  342. package/dist/shared/computedValue.js +191 -0
  343. package/dist/shared/connection.d.ts +30 -0
  344. package/dist/shared/connection.js +1 -0
  345. package/dist/shared/csv.d.ts +20 -0
  346. package/dist/shared/csv.js +63 -0
  347. package/dist/shared/dashLayout.d.ts +30 -0
  348. package/dist/shared/dashLayout.js +132 -0
  349. package/dist/shared/dashboardAsks.d.ts +93 -0
  350. package/dist/shared/dashboardAsks.js +129 -0
  351. package/dist/shared/dashboardTrend.d.ts +20 -0
  352. package/dist/shared/dashboardTrend.js +50 -0
  353. package/dist/shared/declaredReferences.d.ts +50 -0
  354. package/dist/shared/declaredReferences.js +202 -0
  355. package/dist/shared/definedFields.d.ts +63 -0
  356. package/dist/shared/definedFields.js +103 -0
  357. package/dist/shared/definedValues.d.ts +63 -0
  358. package/dist/shared/definedValues.js +184 -0
  359. package/dist/shared/displayDefaults.d.ts +135 -0
  360. package/dist/shared/displayDefaults.js +529 -0
  361. package/dist/shared/dueDate.d.ts +6 -0
  362. package/dist/shared/dueDate.js +6 -0
  363. package/dist/shared/duration.d.ts +4 -0
  364. package/dist/shared/duration.js +23 -0
  365. package/dist/shared/fileBounds.d.ts +9 -0
  366. package/dist/shared/fileBounds.js +9 -0
  367. package/dist/shared/filter.d.ts +217 -0
  368. package/dist/shared/filter.js +305 -0
  369. package/dist/shared/firstPaint.d.ts +24 -0
  370. package/dist/shared/firstPaint.js +33 -0
  371. package/dist/shared/form.d.ts +21 -0
  372. package/dist/shared/form.js +25 -0
  373. package/dist/shared/formValues.d.ts +104 -0
  374. package/dist/shared/formValues.js +352 -0
  375. package/dist/shared/funnel.d.ts +45 -0
  376. package/dist/shared/funnel.js +108 -0
  377. package/dist/shared/httpOperations.d.ts +48 -0
  378. package/dist/shared/httpOperations.js +9 -0
  379. package/dist/shared/iconGlyphs.d.ts +4 -0
  380. package/dist/shared/iconGlyphs.js +151 -0
  381. package/dist/shared/iconWeights.d.ts +3 -0
  382. package/dist/shared/iconWeights.js +162 -0
  383. package/dist/shared/imageWidths.d.ts +32 -0
  384. package/dist/shared/imageWidths.js +38 -0
  385. package/dist/shared/keysetPage.d.ts +64 -0
  386. package/dist/shared/keysetPage.js +161 -0
  387. package/dist/shared/like.d.ts +20 -0
  388. package/dist/shared/like.js +29 -0
  389. package/dist/shared/listEmpty.d.ts +12 -0
  390. package/dist/shared/listEmpty.js +36 -0
  391. package/dist/shared/listFilters.d.ts +28 -0
  392. package/dist/shared/listFilters.js +84 -0
  393. package/dist/shared/listPresentations.d.ts +199 -0
  394. package/dist/shared/listPresentations.js +7 -0
  395. package/dist/shared/listQuestion.d.ts +52 -0
  396. package/dist/shared/listQuestion.js +137 -0
  397. package/dist/shared/lookPalettes.d.ts +62 -0
  398. package/dist/shared/lookPalettes.js +306 -0
  399. package/dist/shared/maskQuoted.d.ts +24 -0
  400. package/dist/shared/maskQuoted.js +48 -0
  401. package/dist/shared/mentionLabel.d.ts +19 -0
  402. package/dist/shared/mentionLabel.js +38 -0
  403. package/dist/shared/mentionLookup.d.ts +17 -0
  404. package/dist/shared/mentionLookup.js +64 -0
  405. package/dist/shared/menuCounts.d.ts +16 -0
  406. package/dist/shared/menuCounts.js +74 -0
  407. package/dist/shared/model.d.ts +79 -0
  408. package/dist/shared/model.js +153 -0
  409. package/dist/shared/money.d.ts +44 -0
  410. package/dist/shared/money.js +81 -0
  411. package/dist/shared/moneyEntry.d.ts +7 -0
  412. package/dist/shared/moneyEntry.js +27 -0
  413. package/dist/shared/mount.d.ts +118 -0
  414. package/dist/shared/mount.js +248 -0
  415. package/dist/shared/niceTicks.d.ts +26 -0
  416. package/dist/shared/niceTicks.js +50 -0
  417. package/dist/shared/order.d.ts +59 -0
  418. package/dist/shared/order.js +133 -0
  419. package/dist/shared/page.d.ts +135 -0
  420. package/dist/shared/page.js +1187 -0
  421. package/dist/shared/pageAnatomy.d.ts +99 -0
  422. package/dist/shared/pageAnatomy.js +370 -0
  423. package/dist/shared/pageConfig.d.ts +25 -0
  424. package/dist/shared/pageConfig.js +1308 -0
  425. package/dist/shared/pageEmptyActions.d.ts +12 -0
  426. package/dist/shared/pageEmptyActions.js +20 -0
  427. package/dist/shared/pageLayouts.d.ts +72 -0
  428. package/dist/shared/pageLayouts.js +205 -0
  429. package/dist/shared/pageModel.d.ts +785 -0
  430. package/dist/shared/pageModel.js +121 -0
  431. package/dist/shared/pagePaths.d.ts +180 -0
  432. package/dist/shared/pagePaths.js +869 -0
  433. package/dist/shared/pagePlans.d.ts +52 -0
  434. package/dist/shared/pagePlans.js +108 -0
  435. package/dist/shared/pageRoutes.d.ts +9 -0
  436. package/dist/shared/pageRoutes.js +9 -0
  437. package/dist/shared/query.d.ts +166 -0
  438. package/dist/shared/query.js +1302 -0
  439. package/dist/shared/queryDates.d.ts +12 -0
  440. package/dist/shared/queryDates.js +101 -0
  441. package/dist/shared/queryOperands.d.ts +99 -0
  442. package/dist/shared/queryOperands.js +131 -0
  443. package/dist/shared/reads.d.ts +103 -0
  444. package/dist/shared/reads.js +154 -0
  445. package/dist/shared/recordLabel.d.ts +51 -0
  446. package/dist/shared/recordLabel.js +123 -0
  447. package/dist/shared/recordReadKeys.d.ts +30 -0
  448. package/dist/shared/recordReadKeys.js +51 -0
  449. package/dist/shared/recordReads.d.ts +268 -0
  450. package/dist/shared/recordReads.js +368 -0
  451. package/dist/shared/recordview.d.ts +198 -0
  452. package/dist/shared/recordview.js +356 -0
  453. package/dist/shared/referenceModel.d.ts +58 -0
  454. package/dist/shared/referenceModel.js +194 -0
  455. package/dist/shared/refusal.d.ts +64 -0
  456. package/dist/shared/refusal.js +144 -0
  457. package/dist/shared/relatedCreate.d.ts +30 -0
  458. package/dist/shared/relatedCreate.js +162 -0
  459. package/dist/shared/resourceHttp.d.ts +464 -0
  460. package/dist/shared/resourceHttp.js +1 -0
  461. package/dist/shared/richText.d.ts +85 -0
  462. package/dist/shared/richText.js +305 -0
  463. package/dist/shared/rollups.d.ts +143 -0
  464. package/dist/shared/rollups.js +64 -0
  465. package/dist/shared/rowScope.d.ts +72 -0
  466. package/dist/shared/rowScope.js +376 -0
  467. package/dist/shared/runtimeTables.d.ts +44 -0
  468. package/dist/shared/runtimeTables.js +79 -0
  469. package/dist/shared/schema.d.ts +523 -0
  470. package/dist/shared/schema.js +627 -0
  471. package/dist/shared/schematext.d.ts +38 -0
  472. package/dist/shared/schematext.js +101 -0
  473. package/dist/shared/scopeCatalog.d.ts +29 -0
  474. package/dist/shared/scopeCatalog.js +468 -0
  475. package/dist/shared/servedApp.d.ts +681 -0
  476. package/dist/shared/servedApp.js +45 -0
  477. package/dist/shared/sessionLease.d.ts +34 -0
  478. package/dist/shared/sessionLease.js +3 -0
  479. package/dist/shared/shape.d.ts +55 -0
  480. package/dist/shared/shape.js +168 -0
  481. package/dist/shared/slug.d.ts +1 -0
  482. package/dist/shared/slug.js +12 -0
  483. package/dist/shared/sortText.d.ts +14 -0
  484. package/dist/shared/sortText.js +26 -0
  485. package/dist/shared/sqlRelation.d.ts +4 -0
  486. package/dist/shared/sqlRelation.js +8 -0
  487. package/dist/shared/sqlsaved.d.ts +44 -0
  488. package/dist/shared/sqlsaved.js +63 -0
  489. package/dist/shared/stitchedPaths.d.ts +27 -0
  490. package/dist/shared/stitchedPaths.js +38 -0
  491. package/dist/shared/structuredFilter.d.ts +22 -0
  492. package/dist/shared/structuredFilter.js +1 -0
  493. package/dist/shared/subtitlePath.d.ts +20 -0
  494. package/dist/shared/subtitlePath.js +24 -0
  495. package/dist/shared/suggest.d.ts +18 -0
  496. package/dist/shared/suggest.js +59 -0
  497. package/dist/shared/tableSizing.d.ts +4 -0
  498. package/dist/shared/tableSizing.js +9 -0
  499. package/dist/shared/tagLists.d.ts +57 -0
  500. package/dist/shared/tagLists.js +34 -0
  501. package/dist/shared/textRules.d.ts +54 -0
  502. package/dist/shared/textRules.js +133 -0
  503. package/dist/shared/theme.d.ts +94 -0
  504. package/dist/shared/theme.js +800 -0
  505. package/dist/shared/themeColor.d.ts +34 -0
  506. package/dist/shared/themeColor.js +109 -0
  507. package/dist/shared/themeFaces.d.ts +30 -0
  508. package/dist/shared/themeFaces.js +42 -0
  509. package/dist/shared/themeInk.d.ts +20 -0
  510. package/dist/shared/themeInk.js +52 -0
  511. package/dist/shared/themeLooks.d.ts +9 -0
  512. package/dist/shared/themeLooks.js +572 -0
  513. package/dist/shared/themeParts.d.ts +26 -0
  514. package/dist/shared/themeParts.js +71 -0
  515. package/dist/shared/themePartsCheck.d.ts +21 -0
  516. package/dist/shared/themePartsCheck.js +91 -0
  517. package/dist/shared/themePresets.d.ts +85 -0
  518. package/dist/shared/themePresets.js +139 -0
  519. package/dist/shared/themeRecipeWords.d.ts +156 -0
  520. package/dist/shared/themeRecipeWords.js +156 -0
  521. package/dist/shared/themeRecipes.d.ts +213 -0
  522. package/dist/shared/themeRecipes.js +234 -0
  523. package/dist/shared/themeResolve.d.ts +55 -0
  524. package/dist/shared/themeResolve.js +52 -0
  525. package/dist/shared/themeTokens.d.ts +107 -0
  526. package/dist/shared/themeTokens.js +116 -0
  527. package/dist/shared/themeType.d.ts +38 -0
  528. package/dist/shared/themeType.js +205 -0
  529. package/dist/shared/unitWord.d.ts +4 -0
  530. package/dist/shared/unitWord.js +37 -0
  531. package/dist/shared/view.d.ts +195 -0
  532. package/dist/shared/view.js +987 -0
  533. package/dist/shared/viewLabels.d.ts +47 -0
  534. package/dist/shared/viewLabels.js +459 -0
  535. package/dist/shared/viewPaths.d.ts +248 -0
  536. package/dist/shared/viewPaths.js +294 -0
  537. package/dist/shared/viewtext.d.ts +57 -0
  538. package/dist/shared/viewtext.js +282 -0
  539. package/dist/shared/vocabulary.d.ts +71 -0
  540. package/dist/shared/vocabulary.js +249 -0
  541. package/dist/shared/weekStart.d.ts +7 -0
  542. package/dist/shared/weekStart.js +36 -0
  543. package/mark.svg +1 -0
  544. package/package.json +261 -4
  545. package/schema/model.d.ts +298 -0
  546. package/schema/theme.d.ts +587 -0
@@ -0,0 +1,170 @@
1
+ /**
2
+ * An `http` connection in the config file: checked when the file is read,
3
+ * opened when the connection is first used.
4
+ *
5
+ * { "name": "Desk", "kind": "http", "url": "https://desk.example/v1/",
6
+ * "description": "desk.http.json", "auth": { "bearer": "${DESK_TOKEN}" },
7
+ * "cache": { "ttl": 60 } }
8
+ *
9
+ * The description is the file `tablewalk --from-openapi` drafts, found
10
+ * relative to the config file so the two travel together — or the description
11
+ * itself, inline, which is what `--openapi` drafts in memory and what saving
12
+ * such a connection writes. The credential is written as a `${VAR}` reference
13
+ * and expanded only here, at open, into a header the adapter hands to egress;
14
+ * it is never stored expanded, never sent to the browser, and never attached
15
+ * to a URL a browser supplied. `cache` opts the connection's reads into the
16
+ * deployment's cache (the process's own, or the Valkey a `"kind": "cache"`
17
+ * connection names) for `ttl` seconds.
18
+ */
19
+ import { readFile } from 'node:fs/promises';
20
+ import { dirname, resolve } from 'node:path';
21
+ import { DEFAULT_POLICY } from '../adapters/http/egress.js';
22
+ import { HttpAdapter } from '../adapters/http/httpAdapter.js';
23
+ import { readDescription } from '../adapters/http/httpDescription.js';
24
+ import { expandEnvReferences } from './auth/credentials.js';
25
+ import { product } from './product.js';
26
+ const HTTP_ONLY = ['description', 'auth', 'insecure', 'allowLinkLocal', 'cache'];
27
+ /* RFC 9110's token, minus the headers the request itself owns. */
28
+ const HEADER_NAME = /^[A-Za-z0-9!#$%&'*+.^_`|~-]+$/;
29
+ const OWNED_HEADERS = new Set(['host', 'content-length', 'content-type', 'accept', 'connection', 'transfer-encoding', 'cookie']);
30
+ /* A day: an answer older than that is not a cached answer, it is a copy. */
31
+ const MAX_CACHE_TTL_SECONDS = 86_400;
32
+ /**
33
+ * An entry's HTTP fields, checked: the resolved block for an `http`
34
+ * connection, undefined for a database. Throws naming the field, because a
35
+ * config someone wrote is refused rather than half-read. Service kinds
36
+ * (`cache`, `webhook`, …) are read by serviceConnections.ts before this is asked.
37
+ */
38
+ export function httpConnectionOf(entry, path) {
39
+ const where = `${path}: connection "${String(entry.name)}"`;
40
+ if (entry.kind === undefined) {
41
+ const stray = HTTP_ONLY.find((key) => entry[key] !== undefined);
42
+ if (stray)
43
+ throw new Error(`${where} has "${stray}", which only an HTTP connection takes. Add "kind": "http", or remove it.`);
44
+ return undefined;
45
+ }
46
+ /* Said by name rather than as an unknown kind: a config written for 0.9.5 or earlier had one, and the reader should learn where it went. */
47
+ if (entry.kind === 'search') {
48
+ throw new Error(`${where} has "kind": "search". Search providers are not part of ${product()}: they are packs (Typesense is @mistriwork/search-typesense, SQLite FTS5 is @mistriwork/search-sqlite, Postgres tsvector is @mistriwork/search-postgres), which ship after 1.0. Remove the entry, and a text filter runs on the database.`);
49
+ }
50
+ if (entry.kind !== 'http') {
51
+ throw new Error(`${where} has "kind": ${JSON.stringify(entry.kind)}. The kinds are "http", "cache" and "webhook"; a database needs none.`);
52
+ }
53
+ // Writes to an API arrive with their own slice; until then a flag saying otherwise would be a promise nothing keeps.
54
+ if (entry.writable === true)
55
+ throw new Error(`${where} is an HTTP connection, which is read-only; remove "writable".`);
56
+ if (entry.schemas !== undefined)
57
+ throw new Error(`${where} is an HTTP connection; "schemas" belongs to Postgres.`);
58
+ const written = entry.description;
59
+ let description;
60
+ if (typeof written === 'string' && written)
61
+ description = written;
62
+ else if (written && typeof written === 'object' && !Array.isArray(written))
63
+ description = readDescription(written, `${where}: "description"`);
64
+ else
65
+ throw new Error(`${where} needs a "description": the file ${product()} --from-openapi drafts from the API's spec, or the description itself.`);
66
+ for (const flag of ['insecure', 'allowLinkLocal']) {
67
+ if (entry[flag] !== undefined && typeof entry[flag] !== 'boolean') {
68
+ throw new Error(`${where} has "${flag}": ${JSON.stringify(entry[flag])}. It must be true or false, without quotes.`);
69
+ }
70
+ }
71
+ // A base URL that is still a reference is checked when it opens, once the environment has said what it is.
72
+ if (!String(entry.url).includes('${'))
73
+ baseUrl(String(entry.url), entry.insecure === true, where);
74
+ return {
75
+ description,
76
+ ...(typeof description === 'string' ? { descriptionPath: resolve(dirname(path), description) } : {}),
77
+ ...(entry.auth !== undefined ? { auth: authOf(entry.auth, where) } : {}),
78
+ ...(entry.insecure === true ? { insecure: true } : {}),
79
+ ...(entry.allowLinkLocal === true ? { allowLinkLocal: true } : {}),
80
+ ...(entry.cache !== undefined ? { cache: cacheOf(entry.cache, where) } : {}),
81
+ };
82
+ }
83
+ function cacheOf(value, where) {
84
+ const cache = value;
85
+ const keys = cache && typeof cache === 'object' && !Array.isArray(cache) ? Object.keys(cache).join(',') : '';
86
+ if (keys === 'ttl' && Number.isSafeInteger(cache.ttl) && cache.ttl >= 1 && cache.ttl <= MAX_CACHE_TTL_SECONDS) {
87
+ return { ttl: cache.ttl };
88
+ }
89
+ throw new Error(`${where} has a "cache" ${product()} cannot read. Write { "ttl": 60 }: whole seconds, from 1 to ${MAX_CACHE_TTL_SECONDS}.`);
90
+ }
91
+ function authOf(value, where) {
92
+ const auth = value;
93
+ const keys = auth && typeof auth === 'object' && !Array.isArray(auth) ? Object.keys(auth).sort().join(',') : '';
94
+ if (keys === 'bearer' && typeof auth.bearer === 'string' && auth.bearer)
95
+ return { bearer: auth.bearer };
96
+ if (keys === 'header,value' && typeof auth.header === 'string' && typeof auth.value === 'string' && auth.value) {
97
+ if (!HEADER_NAME.test(auth.header) || OWNED_HEADERS.has(auth.header.toLowerCase())) {
98
+ throw new Error(`${where} has "auth.header": ${JSON.stringify(auth.header)}, which is not a header a credential can travel in.`);
99
+ }
100
+ return { header: auth.header, value: auth.value };
101
+ }
102
+ throw new Error(`${where} has an "auth" ${product()} cannot read. Write { "bearer": "\${TOKEN}" } or { "header": "x-api-key", "value": "\${KEY}" }.`);
103
+ }
104
+ /* The base every description path resolves under: https unless the operator
105
+ said otherwise, no credential in it, and ending in "/" so a relative path
106
+ extends it rather than replacing its last segment. */
107
+ function baseUrl(text, insecure, where) {
108
+ let url;
109
+ try {
110
+ url = new URL(text);
111
+ }
112
+ catch {
113
+ throw new Error(`${where} has a "url" that is not a URL.`);
114
+ }
115
+ if (url.protocol !== 'https:' && !(url.protocol === 'http:' && insecure)) {
116
+ throw new Error(`${where} has a ${url.protocol}// "url". Use https, or set "insecure": true for an API on a trusted network.`);
117
+ }
118
+ if (url.username || url.password)
119
+ throw new Error(`${where} has a credential in its "url"; it belongs in "auth".`);
120
+ if (url.search || url.hash)
121
+ throw new Error(`${where} has a query or fragment in its "url"; the base is a path only.`);
122
+ if (!url.pathname.endsWith('/'))
123
+ url.pathname += '/';
124
+ return url;
125
+ }
126
+ /* A description file, read and checked. */
127
+ async function describedIn(file) {
128
+ let text;
129
+ try {
130
+ text = await readFile(file, 'utf8');
131
+ }
132
+ catch {
133
+ throw new Error(`the description file ${file} could not be read.`);
134
+ }
135
+ let raw;
136
+ try {
137
+ raw = JSON.parse(text);
138
+ }
139
+ catch {
140
+ throw new Error(`${file} is not valid JSON.`);
141
+ }
142
+ return readDescription(raw, file);
143
+ }
144
+ /**
145
+ * Open an HTTP connection: read its description, resolve its credential and
146
+ * hand both to the adapter. `secrets: false` — a URL a browser supplied —
147
+ * opens without the credential rather than sending it to that URL, and
148
+ * without the cache: an answer fetched for one URL is not kept under a name
149
+ * another URL could be given.
150
+ */
151
+ export async function openHttp(name, url, http, options) {
152
+ const where = `"${name}"`;
153
+ const base = baseUrl(options.secrets ? expandEnvReferences(url, options.environment) : url, http.insecure === true, where);
154
+ const description = typeof http.description === 'string' ? await describedIn(http.descriptionPath ?? http.description) : http.description;
155
+ let auth;
156
+ let secret = 'none';
157
+ let warning;
158
+ if (http.auth && options.secrets) {
159
+ const written = 'bearer' in http.auth ? http.auth.bearer : http.auth.value;
160
+ const value = expandEnvReferences(written, options.environment);
161
+ auth =
162
+ 'bearer' in http.auth ? { header: 'authorization', value: `Bearer ${value}` } : { header: http.auth.header.toLowerCase(), value };
163
+ secret = value !== written ? 'environment' : 'inline';
164
+ if (secret === 'inline')
165
+ warning = 'This connection has its credential written into the config file. Prefer ${ENV_VAR}.';
166
+ }
167
+ const policy = { ...DEFAULT_POLICY, insecure: http.insecure === true, allowLinkLocal: http.allowLinkLocal === true };
168
+ const cache = http.cache && options.cache && options.secrets ? { store: options.cache, ttlMs: http.cache.ttl * 1000 } : undefined;
169
+ return { adapter: new HttpAdapter({ base, description, label: name, auth, policy, ...(cache ? { cache } : {}) }), secret, warning };
170
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * What deleting a row would take with it — shared by the HTTP endpoint and
3
+ * the MCP server, which cannot import index.ts without also running it.
4
+ *
5
+ * One filtered count per incoming constraint, batched, with the constraint's
6
+ * `ON DELETE` rule beside each count: the same three rows are three
7
+ * deletions, three holes, or a refusal depending on it, and a count without
8
+ * the rule invites the reader to guess which.
9
+ *
10
+ * Only the first level. A `cascade` whose children themselves cascade would
11
+ * need the whole reachable graph, and walking it means a query per table per
12
+ * level on a schema that may be cyclic — expensive, and slow exactly when the
13
+ * answer matters most. Saying "three invoice rows, which cascade" is honest
14
+ * and useful; claiming a total that quietly stopped one level down would not
15
+ * be.
16
+ */
17
+ import type { Adapter } from '../adapters/adapter.js';
18
+ import { type DatabaseSchema } from '../shared/schema.js';
19
+ /**
20
+ * Run `work` over `items`, at most `width` at a time, keeping input order.
21
+ *
22
+ * `Promise.all` over a map is the usual shape and is unbounded: it starts
23
+ * everything and hopes the pool underneath copes. For a handful of cheap
24
+ * queries that is right; for a dozen table scans it is a way to make one page
25
+ * load monopolise a connection.
26
+ */
27
+ export declare function inBatches<T, R>(items: readonly T[], width: number, work: (item: T) => Promise<R>): Promise<R[]>;
28
+ export declare function deleteImpact(adapter: Adapter, schema: DatabaseSchema, tableId: string, key: Record<string, string | number>, errorMessage?: (error: unknown) => string): Promise<NonNullable<{
29
+ table: string;
30
+ columns: string[];
31
+ constraint: string;
32
+ onDelete: import("../shared/schema.js").DeleteRule | undefined;
33
+ filter: {
34
+ groups: {
35
+ column: string;
36
+ op: '=';
37
+ value: string | number;
38
+ }[][];
39
+ };
40
+ count: number;
41
+ } | {
42
+ table: string;
43
+ columns: string[];
44
+ constraint: string;
45
+ onDelete: import("../shared/schema.js").DeleteRule | undefined;
46
+ filter: {
47
+ groups: {
48
+ column: string;
49
+ op: '=';
50
+ value: string | number;
51
+ }[][];
52
+ };
53
+ count: number;
54
+ error: string;
55
+ } | null>[]>;
@@ -0,0 +1,47 @@
1
+ import { referencesTo } from '../shared/schema.js';
2
+ /**
3
+ * Run `work` over `items`, at most `width` at a time, keeping input order.
4
+ *
5
+ * `Promise.all` over a map is the usual shape and is unbounded: it starts
6
+ * everything and hopes the pool underneath copes. For a handful of cheap
7
+ * queries that is right; for a dozen table scans it is a way to make one page
8
+ * load monopolise a connection.
9
+ */
10
+ export async function inBatches(items, width, work) {
11
+ const out = [];
12
+ for (let i = 0; i < items.length; i += width) {
13
+ out.push(...(await Promise.all(items.slice(i, i + width).map(work))));
14
+ }
15
+ return out;
16
+ }
17
+ export async function deleteImpact(adapter, schema, tableId, key, errorMessage = (error) => error.message) {
18
+ // A declared reference is not the database's: deleting its target touches no row that names it.
19
+ const incoming = referencesTo(schema, tableId).filter((fk) => !fk.declared);
20
+ const found = await inBatches(incoming, 4, async (fk) => {
21
+ const conditions = fk.to.columns.map((toCol, i) => ({
22
+ column: fk.from.columns[i] ?? fk.from.columns[0],
23
+ op: '=',
24
+ value: key[toCol],
25
+ }));
26
+ if (conditions.some((c) => c.value === undefined || c.value === null))
27
+ return null;
28
+ const base = {
29
+ table: fk.from.table,
30
+ columns: fk.from.columns,
31
+ constraint: fk.name,
32
+ onDelete: fk.onDelete,
33
+ filter: { groups: [conditions] },
34
+ };
35
+ try {
36
+ return { ...base, count: await adapter.count(fk.from.table, base.filter) };
37
+ }
38
+ catch (err) {
39
+ // One unreadable table must not stop the report; a count nobody could
40
+ // take is more honest as an error than as a zero.
41
+ return { ...base, count: -1, error: errorMessage(err) };
42
+ }
43
+ });
44
+ /* Constraints with nothing behind them are dropped: "0 rows point at this"
45
+ is noise in a list whose only job is to say what would be affected. */
46
+ return found.filter((r) => r !== null).filter((r) => r.count !== 0);
47
+ }
@@ -0,0 +1,134 @@
1
+ /**
2
+ * What was written, and how to put it back.
3
+ *
4
+ * Transactions protect a call from failing *halfway*. They do nothing at all
5
+ * about a call that succeeded and should not have — which is the failure mode
6
+ * that actually happens when an agent has write access: nothing errored,
7
+ * nothing rolled back, and the row is simply wrong now. Every destructive
8
+ * label in the tool surface warns about that and none of them helped after
9
+ * the fact.
10
+ *
11
+ * So every write that lands is recorded with what it would take to undo it,
12
+ * and `revert` undoes the last one. The browser has had an undo for its own
13
+ * edits since write mode shipped; this is the same idea one door out, covering
14
+ * the writes an agent makes as well, and covering inserts and deletes, which
15
+ * that one never did.
16
+ *
17
+ * Three things it deliberately does not do.
18
+ *
19
+ * It is **not persisted**. The browser's undo stack makes this argument and it
20
+ * is the right one: a stack that outlives the process invites undoing
21
+ * something from an hour ago, by which time the row has very likely moved on
22
+ * and the "undo" is an overwrite wearing a friendly name. In-session is the
23
+ * honest scope.
24
+ *
25
+ * It **checks before it writes**. Putting the old value back over a newer one
26
+ * is not an undo, it is a silent overwrite — so the row is re-read first and
27
+ * the revert refused if it no longer holds what this journal put there. An
28
+ * undo that can quietly destroy someone else's edit is worse than no undo.
29
+ *
30
+ * And it **does not pretend about SQL**. A `runSql` write is recorded so the
31
+ * history is complete, and marked unrevertible with the reason: arbitrary SQL
32
+ * has no general inverse, and guessing one is how a safety net becomes the
33
+ * thing that cut you.
34
+ */
35
+ import { type Adapter, type WriteTransaction } from '../adapters/adapter.js';
36
+ type WriteKind = 'update' | 'insert' | 'delete' | 'insert_graph' | 'delete_graph' | 'sql';
37
+ /** One row's worth of change, and everything needed to reverse it. */
38
+ export interface WriteStep {
39
+ table: string;
40
+ /** The row's primary key. Absent only where the write never had one. */
41
+ key?: Record<string, unknown>;
42
+ /** What the row held before. The inverse of an update or a delete. */
43
+ before?: Record<string, unknown>;
44
+ /** What it holds after, which is what a revert checks is still true. */
45
+ after?: Record<string, unknown>;
46
+ /** Complete stored image for bounded single-row inverses. Requires a fenced
47
+ * transaction and lossless comparison; restore also requires non-replacing
48
+ * insertion. Unmarked graph/scoped entries retain their existing contracts. */
49
+ wholeRow?: boolean;
50
+ /** Bounded update inverse: fence and compare only the touched fields, then
51
+ * verify their restored stored values before committing. */
52
+ exactFields?: boolean;
53
+ }
54
+ export interface JournalEntry {
55
+ id: number;
56
+ connection: string;
57
+ kind: WriteKind;
58
+ at: string;
59
+ /** One line, in the words someone would use about it afterwards. */
60
+ summary: string;
61
+ /** Who made it, when a proxy header said (see --auth-proxy-header). */
62
+ by?: string;
63
+ /** Verified account and authored app identity, never request-supplied labels. */
64
+ principal?: string;
65
+ app?: string;
66
+ revertible: boolean;
67
+ /** Present when it is not, saying why rather than leaving it to be guessed. */
68
+ reason?: string;
69
+ /** In-memory attempt state, not a durable operation receipt. */
70
+ undoState?: 'pending' | 'unknown';
71
+ /** A confirmed write without a safe inverse must not expose an older Undo. */
72
+ blocksUndo?: boolean;
73
+ steps: WriteStep[];
74
+ }
75
+ /** Record a write that landed. Returns the entry, mostly for tests. */
76
+ export declare function recordWrite(connection: string, entry: Omit<JournalEntry, 'id' | 'at' | 'connection'>): JournalEntry;
77
+ /** The most recent first, which is the order anyone asks about them in. */
78
+ export declare function history(connection: string, limit?: number): JournalEntry[];
79
+ /** The newest write that could still be undone, if there is one. */
80
+ export declare function lastRevertible(connection: string): JournalEntry | undefined;
81
+ /** Entries are newest first. Never silently step past an unresolved Undo. */
82
+ export declare function latestRevertible(entries: readonly JournalEntry[]): JournalEntry | undefined;
83
+ export declare function forget(connection: string, id: number): void;
84
+ /** Testing seam: a fresh process is the normal state, and tests want it too. */
85
+ export declare function clearJournal(connection?: string): void;
86
+ /** Fail closed without publishing another entry (or consulting a clock). The
87
+ * caller supplies already verified ownership; no record values are introduced. */
88
+ export declare function quarantineHistory(connection: string, owner?: {
89
+ principal?: string;
90
+ app?: string;
91
+ }): void;
92
+ type RevertResult = {
93
+ entry: JournalEntry;
94
+ /** What was put back, in the order it was put back. */
95
+ steps?: Array<{
96
+ table: string;
97
+ key?: Record<string, unknown>;
98
+ action: string;
99
+ }>;
100
+ } & ({
101
+ reverted: true;
102
+ outcome: 'applied';
103
+ errors?: never;
104
+ } | {
105
+ reverted: false;
106
+ outcome: 'not_applied' | 'unknown';
107
+ errors?: string[];
108
+ });
109
+ /**
110
+ * Undo one recorded write.
111
+ *
112
+ * Every step is checked against the database before anything is written, and
113
+ * the whole revert is refused if any of them has moved on. Half an undo is
114
+ * worse than none: it leaves the row in a state neither the write nor the
115
+ * revert intended, and nothing recorded that it happened.
116
+ */
117
+ export declare function revert(adapter: Adapter, connection: string, entry: JournalEntry, errorMessage?: (error: unknown) => string): Promise<RevertResult>;
118
+ /** Call on the fenced writer BOTH when capturing an image and when undoing it.
119
+ * SQL equality detects lossy driver conversions (e.g. submillisecond dates);
120
+ * strict scalar comparison also rejects NULL/empty and collation-equivalent
121
+ * text changes. Capture-time validation is essential: a later rounded value
122
+ * could match an image whose original precision was already lost.
123
+ * Permission wrappers must expose complete raw fields before marking wholeRow.
124
+ * This proves one scalar row, not trigger/cascade side effects or DDL history. */
125
+ export declare function journalImageMatches(tx: Pick<WriteTransaction, 'query'>, table: string, image: Record<string, unknown> | undefined): Promise<boolean>;
126
+ /** The touched-field counterpart to journalImageMatches. Call under lockRecord
127
+ * before and after a shared update to establish lossless history, and around
128
+ * its inverse to detect races and restore coercion. Untouched fields need no
129
+ * projection or inverse permission. A successful capture is not a guarantee
130
+ * that generic type coercion will restore it; inverse readback must still pass. */
131
+ export declare function journalFieldsMatch(tx: Pick<WriteTransaction, 'query'>, table: string, key: Record<string, unknown> | undefined, values: Record<string, unknown> | undefined): Promise<boolean>;
132
+ /** A sentence for the history, in the words someone would use about it. */
133
+ export declare function summarise(kind: WriteKind, steps: WriteStep[], detail?: string): string;
134
+ export {};