@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,68 @@
1
+ /**
2
+ * The HTTP server every product's dispatcher listens on: a `node:http`
3
+ * server with the request's span, the baseline headers, the address read
4
+ * through the mounts, the orchestrator's probes, and the error-to-status
5
+ * mapping the tests pin — and, in the middle, the product's own answer
6
+ * (`Answering`). The database browser's server (browserServer.ts) and the
7
+ * App framework's (server.ts) are each this, with what their product adds.
8
+ *
9
+ * Kept whole rather than rebuilt per product, for the reason `createApp`
10
+ * was pulled out of `main` in the first place: a wiring a product wrote for
11
+ * itself would be the one its tests prove, and the shared parts — what a
12
+ * malformed target is answered with, what an error's status is, which
13
+ * requests a close waits for — would agree only by convention.
14
+ */
15
+ import { type IncomingMessage, type Server, type ServerResponse } from 'node:http';
16
+ import type { RequestDiagnostics } from '../operations/diagnostics.js';
17
+ import { type AddressMount } from '../../shared/mount.js';
18
+ import { type Bound } from './trust.js';
19
+ /**
20
+ * The request read through the server's mounts (shared/mount.ts): the base
21
+ * path taken off `req.url`, which the static files, the App API and Better
22
+ * Auth read, and the address turned to its inside form on `url`, which every
23
+ * route reads. False when it was answered: an address outside the base, or
24
+ * an App's id where it is mounted under another name, names nothing.
25
+ */
26
+ export declare function routeAddress(req: IncomingMessage, res: ServerResponse, url: URL, mount: AddressMount): boolean;
27
+ /** The requests a server is still answering that its close waits for (`Answering.drains`). */
28
+ export declare const commandOperations: WeakMap<Server<typeof IncomingMessage, typeof ServerResponse>, Set<Promise<void>>>;
29
+ /** What every server is given, whatever its product: where it listens, and the operator's meters. */
30
+ export interface Listening {
31
+ /**
32
+ * Read on every request instead of copied, so a caller listening on port 0
33
+ * can fill the port in once the kernel has chosen one. That matters because
34
+ * `doorRefusal` compares the `Host` header against it, and a bound record
35
+ * that disagrees with the socket refuses every write.
36
+ */
37
+ readonly bound: Bound;
38
+ readonly diagnostics?: RequestDiagnostics;
39
+ /** Whether the server should take traffic now: false while it starts, reloads its policy or shuts down (`/readyz`). */
40
+ readonly ready?: () => boolean;
41
+ /** A suite owns the source client and HMR at its shared listener. */
42
+ readonly sourceClient?: false;
43
+ /** A suite must drain even disconnected form submissions before closing its App registry. */
44
+ readonly drainRequests?: true;
45
+ }
46
+ /** A product's part of the server: its addresses, its answer, and the failures it says in its own words. */
47
+ export interface Answering {
48
+ /** Where requests are served (shared/mount.ts), read per request. */
49
+ mount(): AddressMount;
50
+ /** Before the base path is read: a document whose address follows the origin, not the base. True when answered. */
51
+ outside?(req: IncomingMessage, res: ServerResponse, url: URL): boolean;
52
+ /** Which App the request is for, as far as its address says, for its span. */
53
+ served?(url: URL): string | undefined;
54
+ /** After the probes and before any door: what no product's door holds. True when answered. */
55
+ ahead?(req: IncomingMessage, res: ServerResponse, url: URL, mount: AddressMount): boolean;
56
+ /** The request itself. */
57
+ answer(req: IncomingMessage, res: ServerResponse, url: URL, mount: AddressMount): Promise<void>;
58
+ /** A failure the product answers in a shape of its own (a command's outcome). True when answered; asked first. */
59
+ failed?(error: Error, req: IncomingMessage, res: ServerResponse, url: URL): boolean;
60
+ /** The status of a failure the engine has no status for, where the product has one. */
61
+ status?(error: Error): number | undefined;
62
+ /** A failure's body in the product's own words (an App's, which never says a driver's). True when answered. */
63
+ said?(error: Error, req: IncomingMessage, res: ServerResponse, status: number): boolean;
64
+ /** Whether a close waits for this request's answer. */
65
+ drains?(url: URL): boolean;
66
+ }
67
+ /** The server, wired but not listening. */
68
+ export declare function listen(options: Listening, answering: Answering): Server;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * The HTTP server every product's dispatcher listens on: a `node:http`
3
+ * server with the request's span, the baseline headers, the address read
4
+ * through the mounts, the orchestrator's probes, and the error-to-status
5
+ * mapping the tests pin — and, in the middle, the product's own answer
6
+ * (`Answering`). The database browser's server (browserServer.ts) and the
7
+ * App framework's (server.ts) are each this, with what their product adds.
8
+ *
9
+ * Kept whole rather than rebuilt per product, for the reason `createApp`
10
+ * was pulled out of `main` in the first place: a wiring a product wrote for
11
+ * itself would be the one its tests prove, and the shared parts — what a
12
+ * malformed target is answered with, what an error's status is, which
13
+ * requests a close waits for — would agree only by convention.
14
+ */
15
+ import { createServer } from 'node:http';
16
+ import { SOURCE_CLIENT, attachDevClient } from '../devclient.js';
17
+ import { applyServerTimeouts } from '../serverTimeouts.js';
18
+ import { Refusal, WriteConflict } from '../../adapters/adapter.js';
19
+ import { HttpSourceError } from '../../adapters/http/egress.js';
20
+ import { isPoolBusy } from '../../adapters/poolMetrics.js';
21
+ import { withAdmission } from '../../adapters/poolAdmission.js';
22
+ import { AppAccessDenied } from '../columnGrants.js';
23
+ import { wrongTypeValue } from '../constraints.js';
24
+ import { PathError } from '../../shared/view.js';
25
+ import { inward } from '../../shared/mount.js';
26
+ import { arrivedUrls } from './context.js';
27
+ import { probe } from './probes.js';
28
+ import { reportRefusal } from './refusalReport.js';
29
+ import { HttpError, send, sendBusy } from './reply.js';
30
+ import { routedPath, servedApp, traceRequest } from './traceRequest.js';
31
+ import { setBaselineHeaders } from './baselineHeaders.js';
32
+ import { forwardedClient } from './trust.js';
33
+ import { timeRequests } from '../../adapters/telemetry/serverTiming.js';
34
+ /* From source, Vite's modules are addressed from the root whatever the base
35
+ (devclient.ts): its own paths and the client's files, never a page, the
36
+ API or the host modules. */
37
+ const devModule = (path) => !/^\/(?:api|_mistri)(?:\/|$)/.test(path) && (/^\/(?:@|node_modules\/)/.test(path) || /\.[A-Za-z0-9]+$/.test(path));
38
+ /**
39
+ * The request read through the server's mounts (shared/mount.ts): the base
40
+ * path taken off `req.url`, which the static files, the App API and Better
41
+ * Auth read, and the address turned to its inside form on `url`, which every
42
+ * route reads. False when it was answered: an address outside the base, or
43
+ * an App's id where it is mounted under another name, names nothing.
44
+ */
45
+ export function routeAddress(req, res, url, mount) {
46
+ if (mount.base) {
47
+ const under = url.pathname === mount.base || url.pathname.startsWith(`${mount.base}/`);
48
+ if (!under) {
49
+ if (SOURCE_CLIENT && devModule(url.pathname))
50
+ return true;
51
+ res
52
+ .writeHead(404, { 'content-type': 'text/plain; charset=utf-8', 'cache-control': 'no-store' })
53
+ .end(`Not found: this server is served under ${mount.base}.\n`);
54
+ return false;
55
+ }
56
+ arrivedUrls.set(req, req.url ?? '/');
57
+ req.url = (url.pathname.slice(mount.base.length) || '/') + url.search;
58
+ }
59
+ const inside = inward(mount, url.pathname);
60
+ if (inside === undefined) {
61
+ res.writeHead(404, { 'content-type': 'text/plain; charset=utf-8', 'cache-control': 'no-store' }).end('Not found.\n');
62
+ return false;
63
+ }
64
+ url.pathname = inside;
65
+ return true;
66
+ }
67
+ /** The requests a server is still answering that its close waits for (`Answering.drains`). */
68
+ export const commandOperations = new WeakMap();
69
+ /**
70
+ * A failure's status. A path that does not resolve is the caller's mistake,
71
+ * not the server's, and a 500 would have the client report it as an outage
72
+ * rather than as the typo it is. Same for anything that named its own status
73
+ * on the way up.
74
+ */
75
+ function statusOf(err, answering) {
76
+ if (err instanceof HttpError)
77
+ return err.status;
78
+ if (err instanceof AppAccessDenied)
79
+ return 403;
80
+ const own = answering.status?.(err);
81
+ if (own !== undefined)
82
+ return own;
83
+ if (err instanceof WriteConflict)
84
+ return 409;
85
+ /* A path that does not resolve, an adapter that will not carry out the
86
+ request and a value its column cannot hold (words searched in a number)
87
+ are all the caller's mistake, and a 500 tells them to go and look at the
88
+ server. */
89
+ if (err instanceof PathError || err instanceof Refusal || wrongTypeValue(err))
90
+ return 400;
91
+ // An API behind an HTTP connection failed; this server did not.
92
+ if (err instanceof HttpSourceError)
93
+ return 502;
94
+ return 500;
95
+ }
96
+ /** The server, wired but not listening. */
97
+ export function listen(options, answering) {
98
+ const pending = new Set();
99
+ /* The span of each request (traceRequest.ts) names its route from the
100
+ address after routeAddress has read it inward, never as the browser
101
+ spelled it: under a base path or a root mount it is the same route. */
102
+ const server = createServer((req, res) =>
103
+ /* Its pool checkouts wait in line as its client's until its session names
104
+ the account (adapters/poolAdmission.ts, http/door.ts). */
105
+ traceRequest(req, res, () => withAdmission(forwardedClient(req, options.bound.trustedProxies), () => {
106
+ options.diagnostics?.observe(req, res);
107
+ setBaselineHeaders(req, res, options.bound.trustedProxies);
108
+ // Node accepts request targets that URL cannot parse. Refuse them before
109
+ // dispatch, and reuse this parse in error mapping and drain tracking too.
110
+ let url;
111
+ try {
112
+ url = new URL(req.url ?? '/', 'http://localhost');
113
+ }
114
+ catch {
115
+ return send(res, 400, { error: 'Invalid request target.' });
116
+ }
117
+ const mount = answering.mount();
118
+ if (answering.outside?.(req, res, url))
119
+ return routedPath(req, url.pathname);
120
+ // An address outside the base, or an App's id where it is not mounted, names no route: its span says so.
121
+ if (!routeAddress(req, res, url, mount))
122
+ return routedPath(req, undefined);
123
+ routedPath(req, url.pathname);
124
+ if (answering.served)
125
+ servedApp(req, answering.served(url));
126
+ // The orchestrator's probes, before any door: they are no product's.
127
+ if (probe(req, res, url.pathname, options.ready) || answering.ahead?.(req, res, url, mount))
128
+ return;
129
+ const operation = answering.answer(req, res, url, mount).catch((err) => {
130
+ if (answering.failed?.(err, req, res, url))
131
+ return;
132
+ /* The client left: its request was cut off mid-body, or it closed the
133
+ socket before the answer, and what failed was the read it no longer
134
+ waits for. Nobody can be answered and nothing went wrong on this
135
+ side, so it is not a 500 on the operator's terminal: the request's
136
+ span still says it was aborted (traceRequest.ts). */
137
+ if (clientLeft(req, res, err)) {
138
+ res.destroy();
139
+ return;
140
+ }
141
+ /* The pool had no connection to give within its budget: the server is
142
+ busy, which is neither the caller's mistake nor a failure, and a 500
143
+ after ten seconds said both. Answered now, with when to come back. */
144
+ if (isPoolBusy(err) && !res.headersSent) {
145
+ reportRefusal(req, 503, 'server_busy', err.message, err);
146
+ return sendBusy(res, {}, false, err);
147
+ }
148
+ const status = statusOf(err, answering);
149
+ if (answering.said?.(err, req, res, status))
150
+ return;
151
+ reportRefusal(req, status, undefined, err.message, err);
152
+ send(res, status, { error: err.message });
153
+ });
154
+ if (options.drainRequests || answering.drains?.(url)) {
155
+ pending.add(operation);
156
+ void operation.finally(() => pending.delete(operation));
157
+ }
158
+ })));
159
+ commandOperations.set(server, pending);
160
+ if (SOURCE_CLIENT && options.sourceClient !== false)
161
+ attachDevClient(server);
162
+ /* Explicit, rather than Node's defaults; serverTimeouts.ts says why. */
163
+ /* Outermost, so a request's timing covers every listener above (serverTiming.ts); nothing when off. */
164
+ timeRequests(server);
165
+ applyServerTimeouts(server);
166
+ return server;
167
+ }
168
+ /** Whether a request failed only because its client went away. */
169
+ function clientLeft(req, res, error) {
170
+ if (res.headersSent)
171
+ return false;
172
+ const gone = req.destroyed || res.destroyed || res.writableEnded;
173
+ const code = error?.code;
174
+ const stopped = error instanceof Error &&
175
+ (error.name === 'StatementStopped' || error.name === 'AbortError' || (error.message === 'aborted' && code === 'ECONNRESET'));
176
+ return gone && (stopped || code === 'ECONNRESET' || code === 'ERR_STREAM_PREMATURE_CLOSE');
177
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The span of one HTTP request, as the semantic conventions name it:
3
+ * `GET /api/query`, kind server, with the method, the route template and the
4
+ * status. The route is a template the server declares, never the path the
5
+ * browser sent: a tablewalk path can carry a whole query (`/demo/invoice
6
+ * total > 500`), a record id or a public slug.
7
+ *
8
+ * An incoming W3C `traceparent` makes the request a child of its caller's
9
+ * trace. For the dev observer (and only then) the raw exchange is kept as
10
+ * local detail: the path, the headers, and the bodies both ways, bounded.
11
+ */
12
+ import type { IncomingMessage, ServerResponse } from 'node:http';
13
+ /** Run a request's handling inside its span, ended when the response closes. */
14
+ export declare function traceRequest(req: IncomingMessage, res: ServerResponse, handle: () => void): void;
15
+ /** The App a request was served for, by its id: what the observer lists a request under. */
16
+ export declare function servedApp(req: IncomingMessage, appId: string | undefined): void;
17
+ /**
18
+ * The request's address as the routes read it — the base path off, an App
19
+ * at the root read back to `/{app}/…` (shared/mount.ts) — names its span.
20
+ * The observer's own requests and the orchestrator's probes are dropped here:
21
+ * the first would observe itself, the second is a heartbeat every few seconds.
22
+ */
23
+ export declare function routedPath(req: IncomingMessage, path: string | undefined): void;
24
+ /**
25
+ * Give a server built elsewhere (the tenant servers) what `createApp` gives
26
+ * its own: a span per request, and the reserved addresses — the
27
+ * orchestrator's probes and the dev observer — answered before its handler.
28
+ * Wraps the handler already registered, so the server's own code is unchanged.
29
+ */
30
+ export declare function platformRequests(server: import('node:http').Server, reserved: (req: IncomingMessage, res: ServerResponse) => boolean): void;
@@ -0,0 +1,224 @@
1
+ import { observing, parseTraceparent, startSpan, tracing, withSpan } from '../../adapters/telemetry/trace.js';
2
+ const METHODS = new Set(['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']);
3
+ /* Every fixed API path the servers answer, as themselves. Anything else under
4
+ /api/ keeps only word-like leading segments: a key never becomes a label. */
5
+ const API = new Set([
6
+ '/api/connections',
7
+ '/api/connections/test',
8
+ '/api/connections/demo',
9
+ '/api/connections/update',
10
+ '/api/connections/remove',
11
+ '/api/connections/save',
12
+ '/api/connections/select',
13
+ '/api/connections/refresh',
14
+ '/api/whoami',
15
+ '/api/app',
16
+ '/api/app/live',
17
+ '/api/schema',
18
+ '/api/ddl',
19
+ '/api/views',
20
+ '/api/queries',
21
+ '/api/layouts',
22
+ '/api/pages',
23
+ '/api/pages/relations',
24
+ '/api/pages/suggested',
25
+ '/api/pages/saved',
26
+ '/api/pages/save',
27
+ '/api/filters',
28
+ '/api/filters/save',
29
+ '/api/agent/tools',
30
+ '/api/agent/call',
31
+ '/api/query',
32
+ '/api/run',
33
+ '/api/breakdown',
34
+ '/api/breakdowns',
35
+ '/api/view/run',
36
+ '/api/view/compile',
37
+ '/api/count',
38
+ '/api/counts',
39
+ '/api/export',
40
+ '/api/references',
41
+ '/api/pages/plan',
42
+ '/api/pages/load',
43
+ '/api/http/operations',
44
+ '/api/http/operation',
45
+ '/api/update',
46
+ '/api/insert',
47
+ '/api/delete',
48
+ '/api/revert',
49
+ '/api/sql',
50
+ '/api/commands/execute',
51
+ '/api/commands/status',
52
+ '/api/commands/prepare',
53
+ '/api/commands/availability',
54
+ '/api/import',
55
+ '/api/file/upload',
56
+ '/api/record',
57
+ '/api/history',
58
+ '/api/inbox',
59
+ '/api/operations/readiness',
60
+ '/api/operations/support',
61
+ ]);
62
+ /** The route template a path is reported under. */
63
+ function routeTemplate(path) {
64
+ if (API.has(path))
65
+ return path;
66
+ if (path === '/api/auth' || path.startsWith('/api/auth/'))
67
+ return '/api/auth/*';
68
+ if (path.startsWith('/api/')) {
69
+ const words = path
70
+ .split('/')
71
+ .slice(2, 4)
72
+ .filter((segment) => /^[a-z][a-z_-]{0,31}$/.test(segment));
73
+ return `/api/${words.length ? `${words.join('/')}/` : ''}*`;
74
+ }
75
+ if (path === '/healthz' || path === '/readyz')
76
+ return path;
77
+ if (path.startsWith('/_mistri/'))
78
+ return '/_mistri/*';
79
+ // A file: the client's modules and assets, Vite's own paths in dev.
80
+ if (/\.[a-z0-9]{1,8}$/i.test(path) || path.startsWith('/@') || path.startsWith('/node_modules/'))
81
+ return '/{asset}';
82
+ return '/{page}';
83
+ }
84
+ /** Local detail is capped per body: enough to read a command's input, never a whole export. */
85
+ const BODY_CAP = 64 * 1024;
86
+ /** Keep what a request sent and was sent back, for the dev observer. */
87
+ function keepExchange(req, res, span) {
88
+ const sent = [];
89
+ let sentSize = 0;
90
+ const push = req.push;
91
+ // The parser hands the body to `push`, whoever reads it and however: tapping here never changes how it flows.
92
+ req.push = function (chunk, encoding) {
93
+ if (chunk && sentSize < BODY_CAP) {
94
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk), encoding);
95
+ sent.push(buffer.subarray(0, BODY_CAP - sentSize));
96
+ sentSize += buffer.length;
97
+ }
98
+ return push.call(this, chunk, encoding);
99
+ };
100
+ const answered = [];
101
+ let answeredSize = 0;
102
+ const keep = (chunk, encoding) => {
103
+ if (!chunk || typeof chunk === 'function' || answeredSize >= BODY_CAP)
104
+ return;
105
+ const buffer = Buffer.isBuffer(chunk)
106
+ ? chunk
107
+ : chunk instanceof Uint8Array
108
+ ? Buffer.from(chunk)
109
+ : Buffer.from(String(chunk), typeof encoding === 'string' ? encoding : 'utf8');
110
+ answered.push(buffer.subarray(0, BODY_CAP - answeredSize));
111
+ answeredSize += buffer.length;
112
+ };
113
+ const write = res.write, end = res.end;
114
+ res.write = function (chunk, ...rest) {
115
+ keep(chunk, rest[0]);
116
+ return write.call(this, chunk, ...rest);
117
+ };
118
+ res.end = function (chunk, ...rest) {
119
+ keep(chunk, rest[0]);
120
+ return end.call(this, chunk, ...rest);
121
+ };
122
+ return () => {
123
+ const type = String(res.getHeader('content-type') ?? '');
124
+ const encoded = res.getHeader('content-encoding');
125
+ const readable = /json|text|javascript|xml|form/i.test(type) && !encoded;
126
+ span.detail(() => ({
127
+ request: {
128
+ method: req.method,
129
+ url: req.url,
130
+ headers: { ...req.headers },
131
+ ...(sentSize ? { body: Buffer.concat(sent).toString('utf8'), bodyBytes: sentSize, truncated: sentSize > BODY_CAP } : {}),
132
+ },
133
+ response: {
134
+ status: res.statusCode,
135
+ headers: res.getHeaders(),
136
+ ...(answeredSize
137
+ ? readable
138
+ ? { body: Buffer.concat(answered).toString('utf8'), bodyBytes: answeredSize, truncated: answeredSize > BODY_CAP }
139
+ : { bodyBytes: answeredSize, body: `(${encoded ? `${encoded}-encoded ` : ''}${type || 'untyped'} body not shown)` }
140
+ : {}),
141
+ },
142
+ }));
143
+ };
144
+ }
145
+ /** Run a request's handling inside its span, ended when the response closes. */
146
+ export function traceRequest(req, res, handle) {
147
+ if (!tracing())
148
+ return handle();
149
+ const method = METHODS.has(req.method ?? '') ? req.method : '_OTHER';
150
+ // Named for now as the browser spelled it; `routedPath` renames it once the address is read inward.
151
+ const route = routeTemplate((req.url ?? '/').split('?')[0]);
152
+ const span = startSpan(`${method} ${route}`, {
153
+ kind: 'server',
154
+ remote: parseTraceparent(req.headers.traceparent, req.headers.tracestate),
155
+ attributes: { 'http.request.method': method, 'http.route': route, 'url.scheme': 'http', 'network.protocol.version': req.httpVersion },
156
+ });
157
+ requests.set(req, { span, method });
158
+ const exchange = observing() ? keepExchange(req, res, span) : undefined;
159
+ if (observing() && !res.headersSent)
160
+ res.setHeader('x-mistri-trace', span.traceId);
161
+ res.once('close', () => {
162
+ const status = res.headersSent ? res.statusCode : undefined;
163
+ if (status !== undefined)
164
+ span.setAttribute('http.response.status_code', status);
165
+ /* A request the browser gave up on — a navigation away, a superseded
166
+ fetch — is not a failure of the server's: said as aborted, apart from errors. */
167
+ if (status === undefined || !res.writableFinished)
168
+ span.setAttribute('mistri.request.aborted', true);
169
+ else if (status >= 500)
170
+ span.fail(String(status));
171
+ exchange?.();
172
+ span.end();
173
+ });
174
+ withSpan(span, handle);
175
+ }
176
+ const requests = new WeakMap();
177
+ const VITE_PATH = /^\/(?:@vite\/|@react-refresh|@fs\/|@id\/|node_modules\/)/;
178
+ /** The App a request was served for, by its id: what the observer lists a request under. */
179
+ export function servedApp(req, appId) {
180
+ if (appId)
181
+ requests.get(req)?.span.setAttribute('mistri.app.id', appId);
182
+ }
183
+ /**
184
+ * The request's address as the routes read it — the base path off, an App
185
+ * at the root read back to `/{app}/…` (shared/mount.ts) — names its span.
186
+ * The observer's own requests and the orchestrator's probes are dropped here:
187
+ * the first would observe itself, the second is a heartbeat every few seconds.
188
+ */
189
+ export function routedPath(req, path) {
190
+ const traced = requests.get(req);
191
+ if (!traced)
192
+ return;
193
+ if (path === undefined) {
194
+ traced.span.rename(`${traced.method} /{unrouted}`);
195
+ traced.span.setAttribute('http.route', '/{unrouted}');
196
+ return;
197
+ }
198
+ if (path.startsWith('/_mistri/') || path === '/healthz' || path === '/readyz') {
199
+ traced.span.discard();
200
+ return;
201
+ }
202
+ /* Vite's own paths in dev (`/@vite/client`, `/@react-refresh`) are files
203
+ as the browser asked for them, whatever an App at the root reads them as. */
204
+ const route = VITE_PATH.test((req.url ?? '/').split('?')[0]) ? '/{asset}' : routeTemplate(path);
205
+ traced.span.rename(`${traced.method} ${route}`);
206
+ traced.span.setAttribute('http.route', route);
207
+ }
208
+ /**
209
+ * Give a server built elsewhere (the tenant servers) what `createApp` gives
210
+ * its own: a span per request, and the reserved addresses — the
211
+ * orchestrator's probes and the dev observer — answered before its handler.
212
+ * Wraps the handler already registered, so the server's own code is unchanged.
213
+ */
214
+ export function platformRequests(server, reserved) {
215
+ const listeners = server.listeners('request');
216
+ server.removeAllListeners('request');
217
+ for (const listener of listeners) {
218
+ server.on('request', (req, res) => traceRequest(req, res, () => {
219
+ routedPath(req, (req.url ?? '/').split('?')[0]);
220
+ if (!reserved(req, res))
221
+ listener.call(server, req, res);
222
+ }));
223
+ }
224
+ }