@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,284 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { performance } from 'node:perf_hooks';
3
+ import { POOL_DURATION_BOUNDS_MS } from '../../adapters/poolMetrics.js';
4
+ import { RequestMetrics } from './requestMetrics.js';
5
+ /** The registry's pools and this process's event loop, now. Cumulative
6
+ * since start: compare two snapshots for an interval, as with the HTTP metrics. */
7
+ export function collectCapacity(source) {
8
+ const loop = performance.eventLoopUtilization();
9
+ return Object.freeze({
10
+ eventLoop: Object.freeze({ activeMs: Math.round(loop.active), idleMs: Math.round(loop.idle) }),
11
+ durationBoundsMs: POOL_DURATION_BOUNDS_MS,
12
+ pools: Object.freeze([...source.poolStats()]),
13
+ });
14
+ }
15
+ /* These labels are declared here, never copied from a request. App URLs can
16
+ contain whole database queries, and even an unknown API path can be a secret. */
17
+ const ROUTE_GROUPS = [
18
+ [
19
+ 'connections',
20
+ [
21
+ '/api/connections',
22
+ '/api/connections/test',
23
+ '/api/connections/demo',
24
+ '/api/connections/update',
25
+ '/api/connections/remove',
26
+ '/api/connections/save',
27
+ '/api/connections/select',
28
+ '/api/connections/refresh',
29
+ ],
30
+ ],
31
+ ['identity', ['/api/whoami']],
32
+ ['app', ['/api/app']],
33
+ ['schema', ['/api/schema', '/api/ddl']],
34
+ [
35
+ 'definitions',
36
+ [
37
+ '/api/views',
38
+ '/api/queries',
39
+ '/api/layouts',
40
+ '/api/pages',
41
+ '/api/pages/relations',
42
+ '/api/pages/suggested',
43
+ '/api/pages/saved',
44
+ '/api/pages/save',
45
+ '/api/filters',
46
+ '/api/filters/save',
47
+ ],
48
+ ],
49
+ ['agent', ['/api/agent/tools', '/api/agent/call']],
50
+ [
51
+ 'query',
52
+ [
53
+ '/api/query',
54
+ '/api/run',
55
+ '/api/breakdown',
56
+ '/api/breakdowns',
57
+ '/api/view/run',
58
+ '/api/view/compile',
59
+ '/api/count',
60
+ '/api/counts',
61
+ '/api/export',
62
+ '/api/references',
63
+ '/api/pages/plan',
64
+ '/api/pages/compose',
65
+ '/api/http/operations',
66
+ '/api/http/operation',
67
+ ],
68
+ ],
69
+ ['update', ['/api/update']],
70
+ ['insert', ['/api/insert']],
71
+ ['delete', ['/api/delete']],
72
+ ['revert', ['/api/revert']],
73
+ ['sql', ['/api/sql']],
74
+ ];
75
+ const ROUTES = new Map(ROUTE_GROUPS.flatMap(([label, paths]) => paths.map((path) => [path, `api.${label}`])));
76
+ const METHODS = new Set(['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']);
77
+ const CAPACITY = 64;
78
+ function routeFor(url) {
79
+ try {
80
+ const path = new URL(url ?? '/', 'http://localhost').pathname;
81
+ if (path === '/api/auth' || path.startsWith('/api/auth/'))
82
+ return 'api.auth';
83
+ return ROUTES.get(path) ?? (path.startsWith('/api/') ? 'api.other' : 'web');
84
+ }
85
+ catch {
86
+ return 'unknown';
87
+ }
88
+ }
89
+ /** Local, best-effort HTTP diagnostics, separate from the business journal.
90
+ * The caller owns the stream. No request waits for it, and only one bounded
91
+ * record is handed to it at a time. A failed stream disables further output. */
92
+ export class RequestDiagnostics {
93
+ output;
94
+ queue = [];
95
+ scheduled = false;
96
+ writing;
97
+ failed = false;
98
+ dropped = 0;
99
+ metrics = new RequestMetrics();
100
+ summaryPending = false;
101
+ summaryRevision;
102
+ summaryDropped = 0;
103
+ flushPromise;
104
+ flushDone;
105
+ capacity;
106
+ constructor(output) {
107
+ this.output = output;
108
+ output.on('error', this.fail);
109
+ }
110
+ get droppedTotal() {
111
+ return this.dropped;
112
+ }
113
+ /** Carry the host's capacity (its pools and event loop) in every summary
114
+ * from now on. Read when the summary is taken, never per request. */
115
+ watchCapacity(read) {
116
+ this.capacity = read;
117
+ }
118
+ snapshot() {
119
+ let capacity;
120
+ // Instrumentation must not become a new failure path: a capacity that cannot be read is left out.
121
+ try {
122
+ capacity = this.capacity?.();
123
+ }
124
+ catch {
125
+ capacity = undefined;
126
+ }
127
+ return Object.freeze({
128
+ event: 'http.metrics',
129
+ version: 1,
130
+ ...this.metrics.snapshot(),
131
+ ...(capacity ? { capacity } : {}),
132
+ health: Object.freeze({
133
+ droppedTotal: this.dropped,
134
+ failed: this.failed,
135
+ queuedRecords: this.queue.length,
136
+ writingRecord: this.writing === 'request',
137
+ writingSummary: this.writing === 'summary',
138
+ summaryPending: this.summaryPending,
139
+ summaryDroppedTotal: this.summaryDropped,
140
+ }),
141
+ });
142
+ }
143
+ get revision() {
144
+ return `${this.metrics.revision}:${this.dropped}`;
145
+ }
146
+ observe(req, res) {
147
+ try {
148
+ const requestId = randomUUID();
149
+ const method = METHODS.has(req.method ?? '') ? req.method : 'OTHER';
150
+ const route = routeFor(req.url);
151
+ const started = performance.now();
152
+ res.setHeader('x-request-id', requestId);
153
+ const recordMetrics = this.metrics.begin(method, route);
154
+ let recorded = false;
155
+ const complete = (outcome) => {
156
+ if (recorded)
157
+ return;
158
+ recorded = true;
159
+ res.removeListener('finish', finished);
160
+ res.removeListener('close', closed);
161
+ const status = res.headersSent ? res.statusCode : null;
162
+ const elapsedMs = Math.max(0, performance.now() - started);
163
+ const durationMs = Math.round(elapsedMs * 100) / 100;
164
+ recordMetrics(status, elapsedMs, outcome);
165
+ this.enqueue({
166
+ event: 'http.request',
167
+ timestamp: new Date().toISOString(),
168
+ requestId,
169
+ method,
170
+ route,
171
+ status,
172
+ durationMs,
173
+ outcome,
174
+ });
175
+ };
176
+ const finished = () => complete('completed');
177
+ const closed = () => complete(res.writableFinished ? 'completed' : 'aborted');
178
+ res.once('finish', finished);
179
+ res.once('close', closed);
180
+ }
181
+ catch {
182
+ // Instrumentation must not become a new request failure path.
183
+ this.dropped += 1;
184
+ }
185
+ }
186
+ /** A bounded shutdown opportunity, not a delivery guarantee. Does not end
187
+ * stderr (or a caller's stream), and never participates in a business write. */
188
+ flush(timeoutMs = 250) {
189
+ if (this.failed)
190
+ return Promise.resolve(false);
191
+ if (this.summaryRevision !== this.revision)
192
+ this.summaryPending = true;
193
+ this.schedule();
194
+ if (this.flushPromise)
195
+ return this.flushPromise;
196
+ if (!this.writing && !this.queue.length && !this.summaryPending)
197
+ return Promise.resolve(true);
198
+ this.flushPromise = new Promise((resolve) => {
199
+ const done = () => {
200
+ clearTimeout(timer);
201
+ this.flushDone = undefined;
202
+ this.flushPromise = undefined;
203
+ resolve(!this.failed);
204
+ };
205
+ const timer = setTimeout(() => {
206
+ this.flushDone = undefined;
207
+ this.flushPromise = undefined;
208
+ resolve(false);
209
+ }, Number.isFinite(timeoutMs) ? Math.max(0, Math.min(timeoutMs, 1_000)) : 250);
210
+ this.flushDone = done;
211
+ });
212
+ return this.flushPromise;
213
+ }
214
+ enqueue(event) {
215
+ if (this.failed || this.queue.length + Number(this.writing === 'request') >= CAPACITY) {
216
+ this.dropped += 1;
217
+ return;
218
+ }
219
+ this.queue.push(event);
220
+ this.schedule();
221
+ }
222
+ schedule() {
223
+ if (this.scheduled || this.writing || this.failed || (!this.queue.length && !this.summaryPending))
224
+ return;
225
+ this.scheduled = true;
226
+ setImmediate(() => {
227
+ this.scheduled = false;
228
+ if (this.failed)
229
+ return;
230
+ const request = this.queue.shift();
231
+ let event;
232
+ if (request) {
233
+ event = { ...request, droppedTotal: this.dropped };
234
+ this.writing = 'request';
235
+ }
236
+ else if (this.summaryPending && this.summaryRevision !== this.revision) {
237
+ this.summaryPending = false;
238
+ event = this.snapshot();
239
+ this.summaryRevision = this.revision;
240
+ this.writing = 'summary';
241
+ }
242
+ else {
243
+ this.summaryPending = false;
244
+ this.notifyIdle();
245
+ return;
246
+ }
247
+ try {
248
+ this.output.write(`${JSON.stringify(event)}\n`, (error) => {
249
+ if (error) {
250
+ this.fail();
251
+ return;
252
+ }
253
+ if (this.failed)
254
+ return;
255
+ this.writing = undefined;
256
+ this.schedule();
257
+ this.notifyIdle();
258
+ });
259
+ }
260
+ catch {
261
+ this.fail();
262
+ }
263
+ });
264
+ }
265
+ fail = () => {
266
+ if (this.failed)
267
+ return;
268
+ this.failed = true;
269
+ this.dropped += this.queue.length + Number(this.writing === 'request');
270
+ this.summaryDropped += Number(this.summaryPending) + Number(this.writing === 'summary');
271
+ this.summaryPending = false;
272
+ this.queue.length = 0;
273
+ this.writing = undefined;
274
+ this.notifyIdle();
275
+ };
276
+ notifyIdle() {
277
+ if (!this.writing && !this.queue.length && !this.summaryPending)
278
+ this.flushDone?.();
279
+ }
280
+ }
281
+ /** Only the exact explicit opt-in enables diagnostics. MCP never calls this. */
282
+ export function diagnosticsFromEnvironment(value, output = process.stderr) {
283
+ return value === '1' ? new RequestDiagnostics(output) : undefined;
284
+ }
@@ -0,0 +1,33 @@
1
+ export declare const REQUEST_METHODS: readonly ["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "OTHER"];
2
+ export declare const REQUEST_ROUTES: readonly ["api.connections", "api.identity", "api.app", "api.schema", "api.definitions", "api.agent", "api.query", "api.update", "api.insert", "api.delete", "api.revert", "api.sql", "api.auth", "api.other", "web", "unknown"];
3
+ export declare const REQUEST_STATUS_CLASSES: readonly ["1xx", "2xx", "3xx", "4xx", "5xx", "unknown"];
4
+ export declare const REQUEST_DURATION_BOUNDS_MS: readonly number[];
5
+ interface RequestMetricSeries {
6
+ readonly method: (typeof REQUEST_METHODS)[number];
7
+ readonly route: (typeof REQUEST_ROUTES)[number];
8
+ readonly statusClass: (typeof REQUEST_STATUS_CLASSES)[number];
9
+ readonly count: number;
10
+ readonly completed: number;
11
+ readonly aborted: number;
12
+ /** Disjoint inclusive-upper-bound buckets, followed by an overflow bucket. */
13
+ readonly durationBuckets: readonly number[];
14
+ readonly invalidDurationTotal: number;
15
+ }
16
+ export interface RequestMetricsSnapshot {
17
+ readonly started: number;
18
+ readonly completed: number;
19
+ readonly aborted: number;
20
+ readonly inFlight: number;
21
+ readonly durationBoundsMs: readonly number[];
22
+ readonly series: readonly RequestMetricSeries[];
23
+ }
24
+ export declare class RequestMetrics {
25
+ private started;
26
+ private completed;
27
+ private aborted;
28
+ private readonly series;
29
+ get revision(): number;
30
+ begin(method: string, route: string): (status: number | null, durationMs: number, outcome: 'completed' | 'aborted') => void;
31
+ snapshot(): RequestMetricsSnapshot;
32
+ }
33
+ export {};
@@ -0,0 +1,94 @@
1
+ /* Only declared dimensions enter storage. There are at most 8 × 16 × 6
2
+ series, regardless of the number of requests or distinct private URLs. */
3
+ export const REQUEST_METHODS = Object.freeze(['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'OTHER']);
4
+ export const REQUEST_ROUTES = Object.freeze([
5
+ 'api.connections',
6
+ 'api.identity',
7
+ 'api.app',
8
+ 'api.schema',
9
+ 'api.definitions',
10
+ 'api.agent',
11
+ 'api.query',
12
+ 'api.update',
13
+ 'api.insert',
14
+ 'api.delete',
15
+ 'api.revert',
16
+ 'api.sql',
17
+ 'api.auth',
18
+ 'api.other',
19
+ 'web',
20
+ 'unknown',
21
+ ]);
22
+ export const REQUEST_STATUS_CLASSES = Object.freeze(['1xx', '2xx', '3xx', '4xx', '5xx', 'unknown']);
23
+ export const REQUEST_DURATION_BOUNDS_MS = Object.freeze([1, 5, 10, 25, 50, 100, 250, 500, 1_000, 2_500, 5_000, 10_000, 30_000]);
24
+ export class RequestMetrics {
25
+ started = 0;
26
+ completed = 0;
27
+ aborted = 0;
28
+ series = new Map();
29
+ get revision() {
30
+ return this.started + this.completed + this.aborted;
31
+ }
32
+ begin(method, route) {
33
+ const methodIndex = REQUEST_METHODS.findIndex((value) => value === method);
34
+ const routeIndex = REQUEST_ROUTES.findIndex((value) => value === route);
35
+ const safeMethod = methodIndex < 0 ? REQUEST_METHODS.length - 1 : methodIndex;
36
+ const safeRoute = routeIndex < 0 ? REQUEST_ROUTES.length - 1 : routeIndex;
37
+ this.started += 1;
38
+ let finished = false;
39
+ return (status, durationMs, outcome) => {
40
+ if (finished)
41
+ return;
42
+ finished = true;
43
+ if (outcome === 'completed')
44
+ this.completed += 1;
45
+ else
46
+ this.aborted += 1;
47
+ const statusIndex = status !== null && Number.isInteger(status) && status >= 100 && status < 600
48
+ ? Math.floor(status / 100) - 1
49
+ : REQUEST_STATUS_CLASSES.length - 1;
50
+ const key = (safeMethod * REQUEST_ROUTES.length + safeRoute) * REQUEST_STATUS_CLASSES.length + statusIndex;
51
+ let series = this.series.get(key);
52
+ if (!series) {
53
+ series = {
54
+ method: REQUEST_METHODS[safeMethod],
55
+ route: REQUEST_ROUTES[safeRoute],
56
+ statusClass: REQUEST_STATUS_CLASSES[statusIndex],
57
+ count: 0,
58
+ completed: 0,
59
+ aborted: 0,
60
+ durationBuckets: Array(REQUEST_DURATION_BOUNDS_MS.length + 1).fill(0),
61
+ invalidDurationTotal: 0,
62
+ };
63
+ this.series.set(key, series);
64
+ }
65
+ series.count += 1;
66
+ if (outcome === 'completed')
67
+ series.completed += 1;
68
+ else
69
+ series.aborted += 1;
70
+ if (!Number.isFinite(durationMs) || durationMs < 0) {
71
+ series.invalidDurationTotal += 1;
72
+ }
73
+ else {
74
+ const bucket = REQUEST_DURATION_BOUNDS_MS.findIndex((bound) => durationMs <= bound);
75
+ series.durationBuckets[bucket < 0 ? REQUEST_DURATION_BOUNDS_MS.length : bucket] += 1;
76
+ }
77
+ };
78
+ }
79
+ snapshot() {
80
+ return Object.freeze({
81
+ started: this.started,
82
+ completed: this.completed,
83
+ aborted: this.aborted,
84
+ inFlight: this.started - this.completed - this.aborted,
85
+ durationBoundsMs: REQUEST_DURATION_BOUNDS_MS,
86
+ series: Object.freeze([...this.series.entries()]
87
+ .sort(([a], [b]) => a - b)
88
+ .map(([, series]) => Object.freeze({
89
+ ...series,
90
+ durationBuckets: Object.freeze([...series.durationBuckets]),
91
+ }))),
92
+ });
93
+ }
94
+ }
@@ -0,0 +1 @@
1
+ export declare function runtimeVersion(): string;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * This runtime's version, read from its own package.json: what `--version`
3
+ * prints, what MCP's serverInfo says and what a build is pinned to. A module
4
+ * of its own so a start that only needs the number does not load the build.
5
+ */
6
+ import { readFileSync } from 'node:fs';
7
+ let version;
8
+ export function runtimeVersion() {
9
+ version ??= JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version;
10
+ return version;
11
+ }
@@ -0,0 +1,34 @@
1
+ /** A connection's pool as its entry sizes it; what it leaves out is the process default. */
2
+ export interface PoolSize {
3
+ read?: number;
4
+ write?: number;
5
+ }
6
+ /**
7
+ * Refused rather than clamped or ignored, as `writable` is: a number quietly
8
+ * overridden is a capacity plan that is not the one in the file. An HTTP
9
+ * connection has no pool, and neither has a URL that plainly names another
10
+ * engine; one that is still a `${VAR}` reference is checked when it opens
11
+ * (Registry.dial), once the environment has said what it names. `write`
12
+ * sizes the writers an App writes through; the database browser writes
13
+ * through one whatever it says (writeLanes.ts).
14
+ */
15
+ export declare function poolOf(entry: Record<string, unknown>, http: boolean, path: string): PoolSize | undefined;
16
+ /**
17
+ * A connection's `"replicas"`: `["postgres://…", "${REPLICA_URL}", …]`, read
18
+ * replicas of the database `url` names, each a URL of the same engine and
19
+ * each resolved as `url` is (`${VAR}`, keychain, credentials file). Up to
20
+ * MAX_REPLICAS. Refused for SQLite and HTTP, where nothing could replicate,
21
+ * rather than quietly ignored: a replica plan that is not happening is a
22
+ * capacity plan that is not the one in the file. A URL that is still a
23
+ * reference is checked when it opens (Registry.dial).
24
+ */
25
+ export declare function replicasOf(entry: Record<string, unknown>, http: boolean, path: string): string[] | undefined;
26
+ /**
27
+ * A connection's `"listen"`: a direct PostgreSQL URL (`"postgres://app@db:5432/app"`, or `${VAR}`) a jobs host
28
+ * holds its `LISTEN` on. Behind a transaction-mode pooler a session keeps no server connection between
29
+ * statements, so the main `url` cannot listen; this one names the database without the pooler. Refused for
30
+ * anything but PostgreSQL rather than ignored: a wake that is not happening is a 30-second wait nobody chose.
31
+ */
32
+ export declare function listenOf(entry: Record<string, unknown>, http: boolean, path: string): string | undefined;
33
+ /** Which engine a URL names, for a replica's agreement with its primary; undefined for anything else. */
34
+ export declare function replicaEngine(url: string): 'PostgreSQL' | undefined;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * A connection's `"pool"` and `"replicas"` in tablewalk.json, checked where the file is read:
3
+ * `{ "read": n, "write": m }`, each a whole number from 1 to 64 and either
4
+ * one optional, on a PostgreSQL connection. Apart from the loader because
5
+ * the rule is the pool's (postgresPool.ts holds the bounds); the loader only
6
+ * asks it, as it asks httpConnection.ts about an API's fields.
7
+ */
8
+ import { isReaderCount, MAX_READERS } from '../adapters/postgresPool.js';
9
+ import { isWriterCount, MAX_WRITERS } from '../adapters/writeLanes.js';
10
+ import { MAX_REPLICAS } from '../adapters/replicas.js';
11
+ /**
12
+ * Refused rather than clamped or ignored, as `writable` is: a number quietly
13
+ * overridden is a capacity plan that is not the one in the file. An HTTP
14
+ * connection has no pool, and neither has a URL that plainly names another
15
+ * engine; one that is still a `${VAR}` reference is checked when it opens
16
+ * (Registry.dial), once the environment has said what it names. `write`
17
+ * sizes the writers an App writes through; the database browser writes
18
+ * through one whatever it says (writeLanes.ts).
19
+ */
20
+ export function poolOf(entry, http, path) {
21
+ const written = entry.pool;
22
+ if (written === undefined)
23
+ return undefined;
24
+ const where = `${path}: connection "${String(entry.name)}"`;
25
+ if (http)
26
+ throw new Error(`${where} is an HTTP connection; "pool" sizes database connections.`);
27
+ if (!written || typeof written !== 'object' || Array.isArray(written)) {
28
+ throw new Error(`${where} has "pool": ${JSON.stringify(written)}. It must be an object such as { "read": 16, "write": 8 }.`);
29
+ }
30
+ const pool = written;
31
+ const stray = Object.keys(pool).find((key) => key !== 'read' && key !== 'write');
32
+ if (stray !== undefined)
33
+ throw new Error(`${where} has "pool.${stray}". A pool takes "read" and "write".`);
34
+ if (pool.read === undefined && pool.write === undefined) {
35
+ throw new Error(`${where} has an empty "pool". Say how many connections may read or write at once, such as { "read": 16, "write": 8 }.`);
36
+ }
37
+ if (pool.read !== undefined && !isReaderCount(pool.read)) {
38
+ throw new Error(`${where} has "pool": { "read": ${JSON.stringify(pool.read)} }. It must be a whole number from 1 to ${MAX_READERS}, without quotes.`);
39
+ }
40
+ if (pool.write !== undefined && !isWriterCount(pool.write)) {
41
+ throw new Error(`${where} has "pool": { "write": ${JSON.stringify(pool.write)} }. It must be a whole number from 1 to ${MAX_WRITERS}, without quotes.`);
42
+ }
43
+ const url = String(entry.url);
44
+ if (!url.includes('$')) {
45
+ if (!/^postgres(ql)?:\/\//i.test(url))
46
+ throw new Error(`${where} is not a PostgreSQL connection; SQLite has no pool. Remove "pool".`);
47
+ }
48
+ return { ...(pool.read !== undefined ? { read: pool.read } : {}), ...(pool.write !== undefined ? { write: pool.write } : {}) };
49
+ }
50
+ /**
51
+ * A connection's `"replicas"`: `["postgres://…", "${REPLICA_URL}", …]`, read
52
+ * replicas of the database `url` names, each a URL of the same engine and
53
+ * each resolved as `url` is (`${VAR}`, keychain, credentials file). Up to
54
+ * MAX_REPLICAS. Refused for SQLite and HTTP, where nothing could replicate,
55
+ * rather than quietly ignored: a replica plan that is not happening is a
56
+ * capacity plan that is not the one in the file. A URL that is still a
57
+ * reference is checked when it opens (Registry.dial).
58
+ */
59
+ export function replicasOf(entry, http, path) {
60
+ const written = entry.replicas;
61
+ if (written === undefined)
62
+ return undefined;
63
+ const where = `${path}: connection "${String(entry.name)}"`;
64
+ if (http)
65
+ throw new Error(`${where} is an HTTP connection; "replicas" are copies of a database.`);
66
+ if (!Array.isArray(written) || !written.length || written.some((url) => typeof url !== 'string' || !url.trim())) {
67
+ throw new Error(`${where} has "replicas": ${JSON.stringify(written)}. It must be a list of database URLs, such as ["postgres://reader@replica-1/app"].`);
68
+ }
69
+ if (written.length > MAX_REPLICAS)
70
+ throw new Error(`${where} names ${written.length} replicas; at most ${MAX_REPLICAS}.`);
71
+ const replicas = written.map((url) => url.trim());
72
+ if (new Set(replicas).size !== replicas.length)
73
+ throw new Error(`${where} names one replica twice in "replicas".`);
74
+ const url = String(entry.url);
75
+ if (!url.includes('$')) {
76
+ const engine = replicaEngine(url);
77
+ if (!engine)
78
+ throw new Error(`${where} is not a PostgreSQL connection; SQLite has no replicas. Remove "replicas".`);
79
+ const stray = replicas.find((replica) => !replica.includes('$') && replicaEngine(replica) !== engine);
80
+ if (stray !== undefined)
81
+ throw new Error(`${where} has a replica that is not a ${engine} URL; a replica is the same engine as "url".`);
82
+ }
83
+ return replicas;
84
+ }
85
+ /**
86
+ * A connection's `"listen"`: a direct PostgreSQL URL (`"postgres://app@db:5432/app"`, or `${VAR}`) a jobs host
87
+ * holds its `LISTEN` on. Behind a transaction-mode pooler a session keeps no server connection between
88
+ * statements, so the main `url` cannot listen; this one names the database without the pooler. Refused for
89
+ * anything but PostgreSQL rather than ignored: a wake that is not happening is a 30-second wait nobody chose.
90
+ */
91
+ export function listenOf(entry, http, path) {
92
+ const written = entry.listen;
93
+ if (written === undefined)
94
+ return undefined;
95
+ const where = `${path}: connection "${String(entry.name)}"`;
96
+ if (http)
97
+ throw new Error(`${where} is an HTTP connection; "listen" is a database URL to wait for notifications on.`);
98
+ if (typeof written !== 'string' || !written.trim()) {
99
+ throw new Error(`${where} has "listen": ${JSON.stringify(written)}. It must be a PostgreSQL URL, such as "postgres://app@db-direct:5432/app".`);
100
+ }
101
+ const listen = written.trim();
102
+ if (!listen.includes('$') && replicaEngine(listen) !== 'PostgreSQL')
103
+ throw new Error(`${where} has a "listen" that is not a PostgreSQL URL; only PostgreSQL has LISTEN/NOTIFY.`);
104
+ const url = String(entry.url);
105
+ if (!url.includes('$') && replicaEngine(url) !== 'PostgreSQL')
106
+ throw new Error(`${where} is not a PostgreSQL connection, so it has nothing to listen on. Remove "listen".`);
107
+ return listen;
108
+ }
109
+ /** Which engine a URL names, for a replica's agreement with its primary; undefined for anything else. */
110
+ export function replicaEngine(url) {
111
+ if (/^postgres(ql)?:\/\//i.test(url))
112
+ return 'PostgreSQL';
113
+ return undefined;
114
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Which product this process is: the database browser (`tablewalk`) or the App framework (`mistri`). The engine is
3
+ * both binaries', and what an operator sets is said in the binary's own name: `TABLEWALK_READ_POOL` for the
4
+ * browser, `MISTRI_READ_POOL` for an App, read by the same code here. Each main says which it is before it reads a
5
+ * flag (packages/tablewalk/src/server/cli/browserMain.ts, packages/mistri/src/server/cli/mistriMain.ts); anything
6
+ * else that runs the engine — an App mounted in a host's server (`createHandler`), a test — is an App's.
7
+ *
8
+ * Only the variables both binaries read go through here. A variable one product alone reads names itself.
9
+ */
10
+ type ProductName = 'tablewalk' | 'mistri';
11
+ /** Say which product this process is. A main calls it first. */
12
+ export declare function setProduct(name: ProductName): void;
13
+ export declare const product: () => ProductName;
14
+ /** The config file a project keeps beside it: `mistri.json` for an App, `tablewalk.json` for the browser. */
15
+ export declare const configFileName: () => string;
16
+ /** The variable an operator sets for `key` (`READ_POOL` → `MISTRI_READ_POOL`), in this product's name. */
17
+ export declare const envName: (key: string) => string;
18
+ /** What the environment holds for `key`, read in this product's name. */
19
+ export declare const productEnv: (key: string, env?: NodeJS.ProcessEnv) => string | undefined;
20
+ export {};
@@ -0,0 +1,12 @@
1
+ let current = 'mistri';
2
+ /** Say which product this process is. A main calls it first. */
3
+ export function setProduct(name) {
4
+ current = name;
5
+ }
6
+ export const product = () => current;
7
+ /** The config file a project keeps beside it: `mistri.json` for an App, `tablewalk.json` for the browser. */
8
+ export const configFileName = () => `${current}.json`;
9
+ /** The variable an operator sets for `key` (`READ_POOL` → `MISTRI_READ_POOL`), in this product's name. */
10
+ export const envName = (key) => `${current.toUpperCase()}_${key}`;
11
+ /** What the environment holds for `key`, read in this product's name. */
12
+ export const productEnv = (key, env = process.env) => env[envName(key)];
@@ -0,0 +1,39 @@
1
+ import type { JournalEntry } from './journal.js';
2
+ export type HistoryDraft = Omit<JournalEntry, 'id' | 'at' | 'connection'>;
3
+ export type UnknownHistoryDraft = HistoryDraft & {
4
+ revertible: false;
5
+ undoState: 'unknown';
6
+ };
7
+ export interface PreparedWrite<R> {
8
+ result: R;
9
+ entry: HistoryDraft;
10
+ }
11
+ interface OwnedHistory {
12
+ publish(entry: HistoryDraft): JournalEntry;
13
+ /** Captured, synchronous, non-throwing quarantine. No clock or publication. */
14
+ quarantine(): void;
15
+ }
16
+ type Transaction<Tx, R> = (work: (tx: Tx) => Promise<R>) => Promise<R>;
17
+ interface Preview<Tx, R> {
18
+ mode: 'preview';
19
+ transaction: Transaction<Tx, R>;
20
+ work(tx: Tx): Promise<R>;
21
+ }
22
+ interface Write<Tx, R> {
23
+ mode: 'write';
24
+ transaction: Transaction<Tx, PreparedWrite<R>>;
25
+ work(tx: Tx): Promise<PreparedWrite<R>>;
26
+ history: OwnedHistory;
27
+ uncertainty: UnknownHistoryDraft;
28
+ /** Trusted operation-specific rejection classification, never request data.
29
+ * It cannot classify unknown transaction acknowledgement as rejection. */
30
+ isRejection(error: unknown): boolean;
31
+ }
32
+ export declare function runRecordedTransaction<Tx, R>(options: Preview<Tx, R>): Promise<{
33
+ result: R;
34
+ }>;
35
+ export declare function runRecordedTransaction<Tx, R>(options: Write<Tx, R>): Promise<{
36
+ result: R;
37
+ undoId?: number;
38
+ }>;
39
+ export {};