@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,73 @@
1
+ /**
2
+ * A reply held in memory: what a route sends when it answers a request made
3
+ * inside another (recordCompose.ts). The route is the same code an HTTP
4
+ * request reaches — the same grants, row scope and hidden columns — and
5
+ * writes through `send` as ever; only the bytes stop here instead of on a
6
+ * socket. Just enough of ServerResponse for the reply helpers (reply.ts) and
7
+ * the routes that set a header on the way.
8
+ */
9
+ import { EventEmitter } from 'node:events';
10
+ export class CapturedReply extends EventEmitter {
11
+ statusCode = 200;
12
+ headersSent = false;
13
+ writableEnded = false;
14
+ destroyed = false;
15
+ /** No request: nothing is compressed, and the whole reply is one JSON body. */
16
+ req = undefined;
17
+ headers = new Map();
18
+ chunks = [];
19
+ setHeader(name, value) {
20
+ this.headers.set(name.toLowerCase(), value);
21
+ return this;
22
+ }
23
+ getHeader(name) {
24
+ return this.headers.get(name.toLowerCase());
25
+ }
26
+ hasHeader(name) {
27
+ return this.headers.has(name.toLowerCase());
28
+ }
29
+ removeHeader(name) {
30
+ this.headers.delete(name.toLowerCase());
31
+ }
32
+ writeHead(status, headers) {
33
+ this.statusCode = status;
34
+ for (const [name, value] of Object.entries(headers ?? {}))
35
+ if (value !== undefined)
36
+ this.setHeader(name, value);
37
+ this.headersSent = true;
38
+ return this;
39
+ }
40
+ write(chunk) {
41
+ this.chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
42
+ return true;
43
+ }
44
+ end(chunk) {
45
+ if (chunk !== undefined)
46
+ this.write(chunk);
47
+ this.headersSent = true;
48
+ this.writableEnded = true;
49
+ this.emit('finish');
50
+ return this;
51
+ }
52
+ destroy() {
53
+ this.destroyed = true;
54
+ this.emit('close');
55
+ return this;
56
+ }
57
+ /** As the route answered: its status and its JSON, or undefined when it sent nothing. */
58
+ answer() {
59
+ if (!this.writableEnded)
60
+ return undefined;
61
+ const text = Buffer.concat(this.chunks).toString('utf8');
62
+ try {
63
+ return { status: this.statusCode, body: text ? JSON.parse(text) : null };
64
+ }
65
+ catch {
66
+ return undefined;
67
+ }
68
+ }
69
+ /** Typed as the response the routes take. */
70
+ asResponse() {
71
+ return this;
72
+ }
73
+ }
@@ -0,0 +1 @@
1
+ export declare function clockNow(): Date;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The wall clock, unless a test has pinned it: MISTRI_CLOCK holds an
3
+ * instant the browser suite fixes so that "last 90 days" over a database
4
+ * seeded for a known day reads the same on every run, and a stamp an action
5
+ * writes ('now') is the same instant on every run. Never set in use.
6
+ */
7
+ import { productEnv } from '../product.js';
8
+ export function clockNow() {
9
+ const pinned = productEnv('CLOCK');
10
+ if (!pinned)
11
+ return new Date();
12
+ const at = new Date(pinned);
13
+ return Number.isNaN(at.getTime()) ? new Date() : at;
14
+ }
@@ -0,0 +1,4 @@
1
+ import type { RequestContext, ResolvedSource } from './context.js';
2
+ /** The query-string key a request names its source with. */
3
+ export declare function sourceSelector(ctx: Pick<RequestContext, 'appConfigured'>): 'app' | 'conn';
4
+ export declare function resolveConnectionSource(ctx: RequestContext, id: string | null | undefined): Promise<ResolvedSource>;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The source a database browser request reads: the connection it names, or
3
+ * the active one, opened and leased for the request's life. An App's source
4
+ * — its resources, its reader's grants, its row policy — is the App
5
+ * framework's (source.ts), which comes here only for a request no App
6
+ * curates.
7
+ */
8
+ import { HttpError } from './reply.js';
9
+ /** The query-string key a request names its source with. */
10
+ export function sourceSelector(ctx) {
11
+ return ctx.appConfigured ? 'app' : 'conn';
12
+ }
13
+ export async function resolveConnectionSource(ctx, id) {
14
+ const { res, registry } = ctx;
15
+ /* Named but unknown is a 404, not a fallback. Falling back ran the
16
+ request against whatever happened to be active — the right answer to
17
+ the wrong question, and with raw SQL on the same path, the wrong
18
+ database. */
19
+ if (id && !registry.has(id))
20
+ throw new HttpError(404, `No connection called "${id}".`);
21
+ const target = id ?? registry.active;
22
+ if (!target)
23
+ throw new HttpError(409, 'No connection is open.');
24
+ const opened = await registry.open(target);
25
+ const release = registry.lease(target);
26
+ if (res.destroyed)
27
+ release();
28
+ else
29
+ res.once('close', release);
30
+ /* Every answer says which database gave it.
31
+
32
+ Set here rather than added to a dozen `send` calls: this is the one
33
+ place that knows, and a header covers the replies that are arrays and
34
+ the ones that are errors as well as the ones that are objects.
35
+
36
+ It exists to make the guarantee checkable. "The reply came from the
37
+ connection the request named" is the whole of the multi-tab fix, and
38
+ without this it is a claim rather than something a test or a reader can
39
+ verify. */
40
+ res.setHeader('x-mistri-connection', target);
41
+ return {
42
+ adapter: opened.adapter,
43
+ schema: opened.schema,
44
+ connectionId: target,
45
+ publicScope: { connection: target },
46
+ publicDefinition: (definition) => definition,
47
+ };
48
+ }
@@ -0,0 +1,189 @@
1
+ /**
2
+ * What one request carries through the route modules: the parameters
3
+ * `handle` was called with, the copies it takes, and what the auth gate
4
+ * established. Built once per request in handler.ts after the gate; every
5
+ * route module reads it and none writes to it, with the one exception
6
+ * documented on `configPages`.
7
+ */
8
+ import type { AddressMount } from '../../shared/mount.js';
9
+ import type { IncomingMessage, ServerResponse } from 'node:http';
10
+ import type { Adapter } from '../../adapters/adapter.js';
11
+ import type { Registry } from '../connections.js';
12
+ import type { ViewDef } from '../../shared/view.js';
13
+ import type { SavedQuery } from '../../shared/sqlsaved.js';
14
+ import type { PageDef } from '../../shared/page.js';
15
+ import type { ConfigLayout } from '../../shared/recordview.js';
16
+ import type { DatabaseSchema } from '../../shared/schema.js';
17
+ import type { QueryPerson } from '../../shared/query.js';
18
+ import type { ColumnGrant } from '../columnGrants.js';
19
+ import type { RequestDiagnostics } from '../operations/diagnostics.js';
20
+ import type { Bound } from './trust.js';
21
+ /**
22
+ * The App framework's types for what a request carries on its behalf: the
23
+ * Apps it serves, an App's resources and its reader's grants, its commands,
24
+ * its row policy, its job host. The engine's routes pass them along and ask
25
+ * no more of them than the readings below; the App framework registers its
26
+ * own types by declaring this interface's members (http/appContext.ts), as
27
+ * a library registers its types with a router. Unregistered — the engine on
28
+ * its own, or the database browser — each is the engine's reading.
29
+ *
30
+ * @public read by declaration merging, which no import shows
31
+ */
32
+ export interface Register {
33
+ }
34
+ type Registered<Key extends string, Engine> = Register extends {
35
+ readonly [K in Key]: infer T;
36
+ } ? T : Engine;
37
+ /** An App a request may be on (app/apps.ts AppHost): the engine's routes only count them and pass them on. */
38
+ type HostedApp = Registered<'host', object>;
39
+ /** An App's resources (app/appRuntimeResources.ts): the engine asks only which connection a table is in, and its adapter. */
40
+ type SourceResources = Registered<'resources', {
41
+ connectionFor(table: string): string;
42
+ forConnection(connection: string): Adapter;
43
+ }>;
44
+ /** A reader's grants on an App's resources (app/appAccess.ts): the columns, and the fixed actions that admit an update. */
45
+ type SourceAccess = Registered<'access', ColumnGrant & {
46
+ readonly actions?: ReadonlyMap<string, unknown>;
47
+ }>;
48
+ /** Who is asking: the proxy header's answer, then the session's when there is one. */
49
+ /** Who is asking. `name` is the verified session's own name, for a greeting only. */
50
+ export interface Identity {
51
+ id?: string;
52
+ who?: string;
53
+ role?: string;
54
+ name?: string;
55
+ refusal?: string;
56
+ emailVerified?: true;
57
+ /** Open sign-up, email not yet proven: the address names nobody (auth.ts Identity). */
58
+ emailUnproven?: true;
59
+ }
60
+ /** Who a revalidated reply is for (reply.ts sendRevalidated): the verified
61
+ * account, its roles and the name a proxy or session gave it. */
62
+ export declare function principalOf(identity: Identity): string;
63
+ /**
64
+ * A request's target as the browser sent it, base path and all, where the
65
+ * server took the base off (server.ts `routeAddress`): Better Auth routes and
66
+ * mints its links from the whole address.
67
+ */
68
+ export declare const arrivedUrls: WeakMap<IncomingMessage, string>;
69
+ /** What the gate reads: settled before it runs, in handler.ts. */
70
+ export interface GateInput {
71
+ readonly req: IncomingMessage;
72
+ readonly res: ServerResponse;
73
+ readonly path: string;
74
+ readonly bound: Bound;
75
+ readonly appHosts?: HostedApp[];
76
+ /** Where the Apps are served and under what path (shared/mount.ts); `path` is already its inside form. */
77
+ readonly mount: AddressMount;
78
+ readonly commandRequest: boolean;
79
+ /** Answer a business-command request with the failure shape its client reads. */
80
+ readonly commandRefusal: (code: Registered<'refusal', string>) => void;
81
+ }
82
+ /** What the gate establishes when it lets a request through. */
83
+ export interface GateResult {
84
+ readonly identity: Identity;
85
+ /** The one App host that signs people in, when there is one. */
86
+ readonly signedIn?: HostedApp;
87
+ readonly hostingError?: string;
88
+ }
89
+ export interface RequestContext extends GateInput, GateResult {
90
+ readonly url: URL;
91
+ readonly registry: Registry;
92
+ readonly configViews: ViewDef[];
93
+ /** The file this session read its connections from, and writes them back to. */
94
+ readonly configPath?: string;
95
+ readonly configQueries: SavedQuery[];
96
+ /**
97
+ * Mutable, on purpose: `resolveSource` narrows it to the pages an
98
+ * access-controlled App's field grants allow, and handlePost then reads the
99
+ * narrowed list. That was a reassigned local before the split; it is the
100
+ * one field a route writes.
101
+ */
102
+ configPages: PageDef[];
103
+ readonly configLayouts: ConfigLayout[];
104
+ readonly commands?: Registered<'commands', unknown>;
105
+ readonly policy?: Registered<'policy', unknown>;
106
+ /** True, or what to tell a caller, while the row policy is not serving (cli/serve.ts). */
107
+ readonly policyUnavailable: boolean | string;
108
+ readonly diagnostics?: RequestDiagnostics;
109
+ /** The `--jobs` host, when the deployment runs one. */
110
+ readonly jobs?: Registered<'jobs', unknown>;
111
+ /** Whether the browser on this listener is the operator — see `clientTrusted`. */
112
+ readonly trusted: boolean;
113
+ readonly appConfigured: boolean;
114
+ /** The row-policy context this dispatch runs under, when the deployment has one. */
115
+ readonly policyContext?: Registered<'policyContext', unknown>;
116
+ }
117
+ /** A request past the gate, before the row policy's context (handler.ts `door`). */
118
+ export type GatedContext = Omit<RequestContext, 'policyContext'>;
119
+ /**
120
+ * One browser connection or App entry point, resolved for the request in
121
+ * hand. `publicScope` and `publicDefinition` are the reply-shaping half: an
122
+ * App answer names the app, a connection answer names the connection, and a
123
+ * definition's connection — a view's `connection`, a page's `connection` — never
124
+ * leaves an App server.
125
+ */
126
+ export interface ResolvedSource {
127
+ readonly adapter: Adapter;
128
+ readonly schema: DatabaseSchema;
129
+ readonly resources?: SourceResources;
130
+ readonly access?: SourceAccess;
131
+ readonly wholeRowWrites?: ReadonlySet<string>;
132
+ readonly selectedHost?: HostedApp;
133
+ readonly connectionId: string;
134
+ readonly publicScope: {
135
+ appId: string;
136
+ } | {
137
+ connection: string;
138
+ };
139
+ readonly publicDefinition: <T extends {
140
+ connection?: string;
141
+ }>(definition: T) => T;
142
+ /** Who `me` is for this request, through the reader it is given (server/app/appMe.ts). */
143
+ readonly person?: (reader: Adapter) => Promise<QueryPerson>;
144
+ /** This reader's zone, where `ui.timezone` reads one (readerZone.ts); read through `appZone`. */
145
+ readonly zone?: string;
146
+ /** This reader's locale, resolved once (readerLocale.ts `requestLocale`): their words and figures. */
147
+ readonly locale?: string;
148
+ /** Their tenant's own words over the App's (recordMessages.ts), stamped by tenant and content: `localizedApp`'s key. */
149
+ readonly messages?: {
150
+ readonly stamp: string;
151
+ readonly words: Registered<'messages', unknown>;
152
+ };
153
+ }
154
+ /**
155
+ * What a POST route reads: the body, already parsed once, and the source
156
+ * the body named. Built where the body is read (handler.ts `postRoute`), once per reply.
157
+ */
158
+ export interface PostContext {
159
+ readonly res: ServerResponse;
160
+ readonly path: string;
161
+ readonly body: Record<string, unknown>;
162
+ readonly adapter: Adapter;
163
+ readonly schema: DatabaseSchema;
164
+ readonly registry: Registry;
165
+ readonly connection: string;
166
+ readonly configPages: PageDef[];
167
+ readonly appHosts?: HostedApp[];
168
+ /** Who is asking, when a proxy header or a session says; stamped on every journaled write. */
169
+ readonly who?: string;
170
+ /** Their role, when a session says; the write scope may be the role's. */
171
+ readonly role?: string;
172
+ readonly resources?: SourceResources;
173
+ readonly access?: SourceAccess;
174
+ readonly principal?: string;
175
+ /** Whose notices this request reads: the signed-in account's email, where it names someone (signedInAs). */
176
+ readonly recipient?: string;
177
+ readonly wholeRowWrites?: ReadonlySet<string>;
178
+ readonly rowPolicy: boolean;
179
+ readonly appConfigured: boolean;
180
+ /** "Now" for date phrases, in the app's zone — see `appNowFor`. */
181
+ readonly appNow: () => Date;
182
+ /** This reader's zone, where `ui.timezone` reads one (readerZone.ts). */
183
+ readonly zone?: string;
184
+ /** The App the request names, where it names one. */
185
+ readonly appHost?: HostedApp;
186
+ /** Who `me` is in an App's conditions, read through this request's reader (server/app/appMe.ts). */
187
+ readonly me?: () => Promise<QueryPerson>;
188
+ }
189
+ export {};
@@ -0,0 +1,11 @@
1
+ /** Who a revalidated reply is for (reply.ts sendRevalidated): the verified
2
+ * account, its roles and the name a proxy or session gave it. */
3
+ export function principalOf(identity) {
4
+ return JSON.stringify([identity.id ?? null, identity.role ?? null, identity.who ?? null]);
5
+ }
6
+ /**
7
+ * A request's target as the browser sent it, base path and all, where the
8
+ * server took the base off (server.ts `routeAddress`): Better Auth routes and
9
+ * mints its links from the whole address.
10
+ */
11
+ export const arrivedUrls = new WeakMap();
@@ -0,0 +1,15 @@
1
+ /**
2
+ * What a crawler asks a server first — `/robots.txt`, then `/sitemap.xml` —
3
+ * and the shape of the answer: plain text a crawler may keep for an hour, or
4
+ * a refusal it may not keep. A server with no public App answers it here
5
+ * (`closedToCrawlers`): nothing on it is for a search engine. An App's public
6
+ * pages are listed by its sitemap (sitemap.ts), in the same shape.
7
+ */
8
+ import type { IncomingMessage, ServerResponse } from 'node:http';
9
+ export declare const SITEMAP_PATH = "/sitemap.xml";
10
+ export declare const ROBOTS_PATH = "/robots.txt";
11
+ export declare function sendText(req: IncomingMessage, res: ServerResponse, status: number, type: string, body: string): true;
12
+ /** True when `path` is a crawler's question: answered as a GET or HEAD only. */
13
+ export declare function crawlerAsks(req: IncomingMessage, res: ServerResponse, path: string): boolean;
14
+ /** The answer of a server with nothing public: crawl nothing, list nothing. False for any other address. */
15
+ export declare function closedToCrawlers(req: IncomingMessage, res: ServerResponse, path: string): boolean;
@@ -0,0 +1,32 @@
1
+ export const SITEMAP_PATH = '/sitemap.xml';
2
+ export const ROBOTS_PATH = '/robots.txt';
3
+ export function sendText(req, res, status, type, body) {
4
+ res.writeHead(status, {
5
+ 'content-type': `${type}; charset=utf-8`,
6
+ // A crawler asks again within the hour; a new car is in the next answer.
7
+ 'cache-control': status === 200 ? 'public, max-age=3600' : 'no-store',
8
+ 'x-content-type-options': 'nosniff',
9
+ });
10
+ res.end(req.method === 'HEAD' ? undefined : body);
11
+ return true;
12
+ }
13
+ /** True when `path` is a crawler's question: answered as a GET or HEAD only. */
14
+ export function crawlerAsks(req, res, path) {
15
+ if (path !== ROBOTS_PATH && path !== SITEMAP_PATH)
16
+ return false;
17
+ if (req.method !== 'GET' && req.method !== 'HEAD') {
18
+ res.writeHead(405, { allow: 'GET, HEAD', 'cache-control': 'no-store' }).end();
19
+ return true;
20
+ }
21
+ return false;
22
+ }
23
+ /** The answer of a server with nothing public: crawl nothing, list nothing. False for any other address. */
24
+ export function closedToCrawlers(req, res, path) {
25
+ if (path !== ROBOTS_PATH && path !== SITEMAP_PATH)
26
+ return false;
27
+ if (crawlerAsks(req, res, path))
28
+ return true;
29
+ if (path === ROBOTS_PATH)
30
+ return sendText(req, res, 200, 'text/plain', 'User-agent: *\nDisallow: /\n');
31
+ return sendText(req, res, 404, 'text/plain', 'Nothing here is public.\n');
32
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * The data routes both products serve on a resolved source: a POST reads its
3
+ * body once, resolves the source it names and goes to `handlePost` — the
4
+ * page routes, an export, the resource reads (resourceReadHttp.ts), a
5
+ * composed record page, the record writes (recordWrites.ts) — and a GET
6
+ * goes to the reads (readRoutes.ts).
7
+ *
8
+ * What a product decides of them is `DataHooks`, given by its dispatcher:
9
+ * the database browser's (browserHandler.ts) and the App framework's
10
+ * (handler.ts). The hooks are where a product's rules enter, and the only
11
+ * place:
12
+ *
13
+ * - `gates.read`: a reader asking past what they may read (an App's
14
+ * signed-out visitor is asked to sign in); `gates.write`, the write gate
15
+ * every record write passes (the connection's `writable` flag and the
16
+ * reader's grant, in the product's words); `after.write`, what follows a
17
+ * committed write (an App's search document);
18
+ * - `source`: how the source is resolved (an App's resources and its
19
+ * reader's grants, or the connection);
20
+ * - the rest — the routes before and after, an export's grants, a page's
21
+ * anatomy, a composed page's App — each named on the hook.
22
+ */
23
+ import type { ServerResponse } from 'node:http';
24
+ import type { Adapter } from '../../adapters/adapter.js';
25
+ import { type AppReads } from '../resourceReadHttp.js';
26
+ import type { PostContext, RequestContext, ResolvedSource } from './context.js';
27
+ import { type ExportHooks } from './exportRoute.js';
28
+ import { type PageHooks } from './pageRoutes.js';
29
+ import { type ReadHooks } from './readRoutes.js';
30
+ import { type ComposeHooks } from './recordCompose.js';
31
+ import { type RecordHooks } from './recordWrites.js';
32
+ /** What a POST is given beside its body and source, by the product. */
33
+ type PostExtras = Partial<Pick<PostContext, 'appNow' | 'zone' | 'appHost' | 'recipient' | 'me'>>;
34
+ export interface DataHooks {
35
+ /** The source a request names (`null`: none), resolved and leased for the request's life. */
36
+ source(ctx: RequestContext, id: string | null | undefined): Promise<ResolvedSource>;
37
+ readonly gates: {
38
+ /**
39
+ * A reader asking past what they may read — a table their catalog does
40
+ * not hold, or (with `body`) a POST read naming one. True when it was
41
+ * answered; otherwise a GET is refused as a table that does not exist,
42
+ * and a POST goes on to be refused by the route that reads it.
43
+ */
44
+ read?(ctx: RequestContext, source: ResolvedSource, asked: {
45
+ path: string;
46
+ body?: Record<string, unknown>;
47
+ }): boolean;
48
+ readonly write: RecordHooks['gates']['write'];
49
+ };
50
+ readonly after?: RecordHooks['after'];
51
+ readonly rules?: RecordHooks['rules'];
52
+ /** The adapter a POST's reads go through (an App's search-aware reader), into `reply`. */
53
+ reads?(ctx: RequestContext, source: ResolvedSource, adapter: Adapter, reply: ServerResponse): Adapter;
54
+ /** What a POST is told beside its body: "now" in the App's zone, who `me` is, whose notices it reads. */
55
+ extras?(ctx: RequestContext, source: ResolvedSource, reads: Adapter): PostExtras;
56
+ /** A POST the App's pages answer before any route (a free-form page's loaders, its manifest). True when answered. */
57
+ page?(ctx: RequestContext, source: ResolvedSource, body: Record<string, unknown>): Promise<boolean>;
58
+ /** The POST routes before the data routes. True when answered. */
59
+ routes(post: PostContext): Promise<boolean>;
60
+ /** The POST routes after them. True when answered. */
61
+ later(post: PostContext): Promise<boolean>;
62
+ /**
63
+ * What an App's reads are (app/appReads.ts): its unions, its replies
64
+ * without the compiler's output, its failures in its own words, its `me`.
65
+ * Given by the App framework's dispatcher; a request on an App is refused
66
+ * rather than read as the database browser's without it.
67
+ */
68
+ readonly appReads?: AppReads;
69
+ /** The ISO weekday the reads' weeks start on, where the product says. */
70
+ weekStart?(post: PostContext): number;
71
+ readonly exports: ExportHooks;
72
+ readonly pages: PageHooks;
73
+ readonly compose: ComposeHooks;
74
+ readonly read: ReadHooks;
75
+ }
76
+ /**
77
+ * A POST to the API: the body is read once, the connection or App it names
78
+ * is resolved from it, and the routes that take a body (`handlePost`) are
79
+ * given both, as a PostContext built here.
80
+ *
81
+ * Split out because the connection is resolved from the body, which means the
82
+ * body has to be read before dispatch — and a stream can only be read once.
83
+ * Handlers get it already parsed rather than each reaching for the request.
84
+ */
85
+ export declare function postData(ctx: RequestContext, hooks: DataHooks): Promise<void>;
86
+ /** A read of the API, on the source its query names. */
87
+ export declare function getData(ctx: RequestContext, hooks: DataHooks): Promise<void>;
88
+ export {};
@@ -0,0 +1,137 @@
1
+ import { lagTolerantReads, primaryReads } from '../../adapters/replicas.js';
2
+ import { AppAccessDenied } from '../columnGrants.js';
3
+ import { dispatchResourceReadHttp } from '../resourceReadHttp.js';
4
+ import { UNEXPORTED_MOST } from '../../shared/reads.js';
5
+ import { clockNow } from './clock.js';
6
+ import { sourceSelector } from './connectionSource.js';
7
+ import { exportRoute } from './exportRoute.js';
8
+ import { pageRoutes } from './pageRoutes.js';
9
+ import { readRoutes } from './readRoutes.js';
10
+ import { toleratesLag } from './readRouting.js';
11
+ import { COMPOSE_PATH, composeRecordPage } from './recordCompose.js';
12
+ import { recordWriteRoutes } from './recordWrites.js';
13
+ import { FILE_UPLOAD_BODY, FILE_UPLOAD_PATH, httpRead, readJson, send } from './reply.js';
14
+ /**
15
+ * A POST to the API: the body is read once, the connection or App it names
16
+ * is resolved from it, and the routes that take a body (`handlePost`) are
17
+ * given both, as a PostContext built here.
18
+ *
19
+ * Split out because the connection is resolved from the body, which means the
20
+ * body has to be read before dispatch — and a stream can only be read once.
21
+ * Handlers get it already parsed rather than each reaching for the request.
22
+ */
23
+ export async function postData(ctx, hooks) {
24
+ const { res, url, path, identity, appHosts, registry } = ctx;
25
+ const selector = sourceSelector(ctx);
26
+ // POST bodies can name a connection too, and the body is read once and
27
+ // reused by the handler below.
28
+ const body = await readJson(ctx.req, path === FILE_UPLOAD_PATH ? FILE_UPLOAD_BODY : undefined);
29
+ if (ctx.appConfigured && Object.hasOwn(body, 'conn'))
30
+ return send(res, 400, { error: 'Application requests identify an app, not a connection.' });
31
+ if (body[selector] !== undefined && typeof body[selector] !== 'string')
32
+ return send(res, 400, { error: 'Invalid request identity.' });
33
+ const inBody = typeof body[selector] === 'string' ? body[selector] : undefined;
34
+ const inQuery = url.searchParams.get(selector);
35
+ /* Both, and disagreeing, is refused rather than resolved by precedence.
36
+ Either answer runs somebody's statement against a database they did not
37
+ mean, and the request has already told us it is confused about which. */
38
+ if (inBody && inQuery && inBody !== inQuery) {
39
+ return send(res, 400, {
40
+ error: ctx.appConfigured
41
+ ? 'This request names two different applications.'
42
+ : `This request names two connections: "${inQuery}" in the URL and "${inBody}" in the body.`,
43
+ });
44
+ }
45
+ const source = await hooks.source(ctx, inBody ?? inQuery);
46
+ if (res.destroyed)
47
+ return;
48
+ const { adapter, schema, resources, access, wholeRowWrites, connectionId } = source;
49
+ if (hooks.gates.read?.(ctx, source, { path, body }))
50
+ return;
51
+ const appConfigured = Boolean(appHosts?.length);
52
+ /* One POST on this source, into the reply it is given: this request's
53
+ own, or a composed read's part (recordCompose.ts), which is the same
54
+ route with the same grants, row scope and hidden columns. */
55
+ const post = async (reply, asked, given) => {
56
+ if (access && typeof given.table === 'string' && !access.readable.has(given.table))
57
+ throw new AppAccessDenied();
58
+ const reads = hooks.reads?.(ctx, source, adapter, reply) ?? adapter;
59
+ return handlePost({
60
+ res: reply,
61
+ path: asked,
62
+ body: given,
63
+ adapter: reads,
64
+ schema,
65
+ registry,
66
+ connection: connectionId,
67
+ configPages: ctx.configPages,
68
+ appHosts,
69
+ who: identity.who,
70
+ role: identity.role,
71
+ resources,
72
+ access,
73
+ principal: identity.id,
74
+ wholeRowWrites,
75
+ rowPolicy: Boolean(ctx.policyContext),
76
+ appConfigured,
77
+ appNow: clockNow,
78
+ ...hooks.extras?.(ctx, source, reads),
79
+ }, hooks);
80
+ };
81
+ /* A record page, pinned to the primary whole: its related lists are
82
+ asked through the list routes, and a record is where a person looks
83
+ for what they just saved (readRouting.ts). */
84
+ if (path === COMPOSE_PATH)
85
+ return primaryReads(() => composeRecordPage({ ctx, source, body, post, hooks: hooks.compose }));
86
+ if (await hooks.page?.(ctx, source, body))
87
+ return;
88
+ return post(res, path, body);
89
+ }
90
+ /** Everything that takes a body, on its source. */
91
+ async function handlePost(post, hooks) {
92
+ const { res, path, body, adapter: reads, schema, appConfigured, appNow, me } = post;
93
+ if (await hooks.routes(post))
94
+ return;
95
+ if (await pageRoutes(post, hooks.pages))
96
+ return;
97
+ /* A list, a count, a breakdown or an export may be answered by a replica
98
+ (readRouting.ts); every other route reads the primary. */
99
+ const reading = (work) => (toleratesLag(path, body) ? lagTolerantReads(work) : work());
100
+ if (await reading(() => exportRoute(post, hooks.exports)))
101
+ return;
102
+ const exportable = hooks.exports.may(post);
103
+ const weekStart = hooks.weekStart?.(post);
104
+ /* Read as the browser's, an App's reply would carry its SQL and its compiled columns. */
105
+ if (appConfigured && !hooks.appReads)
106
+ throw new Error('An App is read through its own reads (DataHooks.appReads).');
107
+ const readReply = await httpRead(() => reading(() => dispatchResourceReadHttp(path, body, reads, schema, {
108
+ app: appConfigured ? hooks.appReads : undefined,
109
+ now: appNow,
110
+ ...(me ? { me } : {}),
111
+ ...(weekStart === undefined ? {} : { weekStart }),
112
+ // A table this person may not export is read a screen's worth at a time, never a file's.
113
+ rowsMost: (table) => (exportable(table) ? undefined : UNEXPORTED_MOST),
114
+ })));
115
+ if (readReply)
116
+ return send(res, readReply.status, readReply.body);
117
+ if (await recordWriteRoutes(post, hooks))
118
+ return;
119
+ if (await hooks.later(post))
120
+ return;
121
+ return send(res, 404, { error: `No such endpoint: ${path}` });
122
+ }
123
+ /** A read of the API, on the source its query names. */
124
+ export async function getData(ctx, hooks) {
125
+ const source = await hooks.source(ctx, ctx.url.searchParams.get(sourceSelector(ctx)));
126
+ if (ctx.res.destroyed)
127
+ return;
128
+ const table = ctx.url.searchParams.get('table');
129
+ if (source.access && table !== null && !source.access.readable.has(table)) {
130
+ if (hooks.gates.read?.(ctx, source, { path: ctx.path }))
131
+ return;
132
+ throw new AppAccessDenied();
133
+ }
134
+ if (await readRoutes(ctx, source, hooks.read))
135
+ return;
136
+ send(ctx.res, 404, { error: `No such endpoint: ${ctx.path}` });
137
+ }