@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,21 @@
1
+ /**
2
+ * The words `tablewalk seed` makes rows from. Small on purpose: enough that
3
+ * forty customers do not share a name, few enough to read in one sitting, and
4
+ * no dependency to install (`npx tablewalk` has no build step). Every name is
5
+ * made up; every address is example.com, which no mail ever reaches; every
6
+ * phone number is in 555-01xx, the range kept for fiction.
7
+ */
8
+ export declare const FIRST: string[];
9
+ export declare const LAST: string[];
10
+ export declare const COMPANY_FIRST: string[];
11
+ export declare const COMPANY_LAST: string[];
12
+ export declare const COMPANY_SUFFIX: string[];
13
+ export declare const CITIES: string[];
14
+ export declare const STATES: string[];
15
+ export declare const STREETS: string[];
16
+ export declare const THING_ADJ: string[];
17
+ export declare const THING: string[];
18
+ export declare const MAKES: string[];
19
+ export declare const MODELS: string[];
20
+ export declare const COLORS: string[];
21
+ export declare const PRIORITY_WEIGHT: Record<string, number>;
@@ -0,0 +1,164 @@
1
+ /**
2
+ * The words `tablewalk seed` makes rows from. Small on purpose: enough that
3
+ * forty customers do not share a name, few enough to read in one sitting, and
4
+ * no dependency to install (`npx tablewalk` has no build step). Every name is
5
+ * made up; every address is example.com, which no mail ever reaches; every
6
+ * phone number is in 555-01xx, the range kept for fiction.
7
+ */
8
+ export const FIRST = [
9
+ 'Ada',
10
+ 'Amara',
11
+ 'Ben',
12
+ 'Carmen',
13
+ 'Chen',
14
+ 'Dana',
15
+ 'Diego',
16
+ 'Elena',
17
+ 'Eli',
18
+ 'Farah',
19
+ 'Grace',
20
+ 'Hana',
21
+ 'Ivan',
22
+ 'Jade',
23
+ 'Jonah',
24
+ 'Kai',
25
+ 'Lena',
26
+ 'Leo',
27
+ 'Maya',
28
+ 'Marcus',
29
+ 'Nadia',
30
+ 'Noah',
31
+ 'Omar',
32
+ 'Priya',
33
+ 'Quinn',
34
+ 'Rosa',
35
+ 'Sam',
36
+ 'Sofia',
37
+ 'Tariq',
38
+ 'Tess',
39
+ 'Uma',
40
+ 'Victor',
41
+ 'Wren',
42
+ 'Yusuf',
43
+ 'Zoe',
44
+ 'Ruth',
45
+ 'Owen',
46
+ 'Iris',
47
+ 'Hugo',
48
+ 'Mei',
49
+ ];
50
+ export const LAST = [
51
+ 'Abbott',
52
+ 'Alvarez',
53
+ 'Bennett',
54
+ 'Brooks',
55
+ 'Castillo',
56
+ 'Chandler',
57
+ 'Dawson',
58
+ 'Delgado',
59
+ 'Ellis',
60
+ 'Fischer',
61
+ 'Foster',
62
+ 'Garcia',
63
+ 'Hale',
64
+ 'Hayes',
65
+ 'Ibarra',
66
+ 'Jensen',
67
+ 'Kaur',
68
+ 'Keller',
69
+ 'Lam',
70
+ 'Larsen',
71
+ 'Mendez',
72
+ 'Morgan',
73
+ 'Nakamura',
74
+ 'Novak',
75
+ 'Okafor',
76
+ 'Ortega',
77
+ 'Patel',
78
+ 'Price',
79
+ 'Quinlan',
80
+ 'Reyes',
81
+ 'Rossi',
82
+ 'Santos',
83
+ 'Shaw',
84
+ 'Tanaka',
85
+ 'Turner',
86
+ 'Underwood',
87
+ 'Vance',
88
+ 'Walsh',
89
+ 'Webb',
90
+ 'Young',
91
+ ];
92
+ /* A company is two of these and a suffix: Harbor Supply Co., Northwind Labs. */
93
+ export const COMPANY_FIRST = [
94
+ 'Harbor',
95
+ 'Northwind',
96
+ 'Bluebird',
97
+ 'Cedar',
98
+ 'Copper',
99
+ 'Granite',
100
+ 'Juniper',
101
+ 'Lakeside',
102
+ 'Maple',
103
+ 'Meridian',
104
+ 'Oakline',
105
+ 'Pinecrest',
106
+ 'Redwood',
107
+ 'Riverbend',
108
+ 'Silverline',
109
+ 'Summit',
110
+ 'Sunrise',
111
+ 'Tidewater',
112
+ 'Westfield',
113
+ 'Willow',
114
+ ];
115
+ export const COMPANY_LAST = ['Supply', 'Labs', 'Works', 'Partners', 'Group', 'Logistics', 'Studio', 'Foods', 'Health', 'Systems'];
116
+ export const COMPANY_SUFFIX = ['Co.', 'Inc.', 'LLC', ''];
117
+ export const CITIES = [
118
+ 'Springfield',
119
+ 'Riverton',
120
+ 'Fairview',
121
+ 'Greenville',
122
+ 'Madison',
123
+ 'Franklin',
124
+ 'Clinton',
125
+ 'Georgetown',
126
+ 'Salem',
127
+ 'Arlington',
128
+ 'Ashland',
129
+ 'Oxford',
130
+ 'Milton',
131
+ 'Dover',
132
+ 'Hudson',
133
+ ];
134
+ export const STATES = ['CA', 'NY', 'TX', 'WA', 'OR', 'IL', 'MA', 'CO', 'GA', 'NC'];
135
+ export const STREETS = ['Main St', 'Oak Ave', 'Maple Dr', 'Cedar Ln', 'Park Rd', 'Elm St', 'Lake View', 'Hill St', 'Pine Ct', 'Mill Rd'];
136
+ /* Things: a part, a product, an item — "Compact filter", "Heavy-duty bracket". */
137
+ export const THING_ADJ = ['Standard', 'Compact', 'Heavy-duty', 'Premium', 'Basic', 'Pro', 'Classic', 'Light', 'Large', 'Small'];
138
+ export const THING = [
139
+ 'bracket',
140
+ 'cable',
141
+ 'filter',
142
+ 'seal',
143
+ 'bearing',
144
+ 'valve',
145
+ 'panel',
146
+ 'sensor',
147
+ 'tire',
148
+ 'chain',
149
+ 'belt',
150
+ 'lamp',
151
+ 'clamp',
152
+ 'hose',
153
+ 'pad set',
154
+ 'kit',
155
+ 'mount',
156
+ 'switch',
157
+ 'spring',
158
+ 'grip',
159
+ ];
160
+ /* A make and a model, for something people own and bring in: Halden Ridge 3. */
161
+ export const MAKES = ['Halden', 'Corvo', 'Brightline', 'Marlowe', 'Ostra', 'Vantor', 'Kestrel', 'Larkspur'];
162
+ export const MODELS = ['Ridge', 'Tempo', 'Atlas', 'Drift', 'Summit', 'Metro', 'Trail', 'Vista', 'Comet', 'Arc'];
163
+ export const COLORS = ['Black', 'White', 'Red', 'Blue', 'Green', 'Silver', 'Orange', 'Gray', 'Yellow', 'Teal'];
164
+ export const PRIORITY_WEIGHT = { low: 3, normal: 5, medium: 5, high: 2, urgent: 1, critical: 1 };
@@ -0,0 +1,6 @@
1
+ /** Mark a request, or a write's values, as the server's own. */
2
+ export declare function serverRequest<T extends object>(request: T): T;
3
+ /** Whether a request — or a write's `values`, which an upload's file columns are marked on — is the server's own. */
4
+ export declare function isServerRequest(request: unknown): boolean;
5
+ /** A layer that copies a request (a tenant lease's captured data) carries the server's mark to its copy. */
6
+ export declare function carryServerRequest<T>(from: unknown, to: T): T;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The requests the server builds for its own work on a file (http/fileRows.ts,
3
+ * an upload's values, files/fileStorage.ts placeFile): the only ones that may
4
+ * name an `internal` column — a file's object and hash — which the access
5
+ * guard (app/appAccess.ts resourceChecks) refuses to every other request, read or
6
+ * write. A WeakSet of the objects themselves, so nothing that arrives as data —
7
+ * JSON, a copy, a request rebuilt from one — is ever in it.
8
+ */
9
+ const serverRequests = new WeakSet();
10
+ /** Mark a request, or a write's values, as the server's own. */
11
+ export function serverRequest(request) {
12
+ serverRequests.add(request);
13
+ return request;
14
+ }
15
+ /** Whether a request — or a write's `values`, which an upload's file columns are marked on — is the server's own. */
16
+ export function isServerRequest(request) {
17
+ if (typeof request !== 'object' || request === null)
18
+ return false;
19
+ if (serverRequests.has(request))
20
+ return true;
21
+ const values = request.values;
22
+ return typeof values === 'object' && values !== null && serverRequests.has(values);
23
+ }
24
+ /** A layer that copies a request (a tenant lease's captured data) carries the server's mark to its copy. */
25
+ export function carryServerRequest(from, to) {
26
+ if (isServerRequest(from) && typeof to === 'object' && to !== null) {
27
+ serverRequests.add(to);
28
+ const values = to.values;
29
+ if (typeof values === 'object' && values !== null)
30
+ serverRequests.add(values);
31
+ }
32
+ return to;
33
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The timeouts every tablewalk HTTP server sets, in one place.
3
+ *
4
+ * Keep-alive outlives the idle timeouts of the proxies tablewalk is deployed
5
+ * behind: nginx and cloud load balancers hold an idle upstream connection
6
+ * for about a minute. At Node's five-second default the server closed a
7
+ * pooled socket just as a proxy or client reused it, and that request failed
8
+ * with a reset. The headers timeout stays above keep-alive, as Node requires,
9
+ * and still bounds a client that sends its headers slowly; the request
10
+ * timeout bounds a whole body. A socket that takes over a minute for its
11
+ * headers, or ten for its body, is not a browser on this tool: cheap where
12
+ * the server is loopback, the whole defence where someone bound it wider.
13
+ *
14
+ * The long keep-alive has a cost at shutdown. `close()` drops the sockets idle
15
+ * at that moment, but a response still being written when it ran finishes
16
+ * with `Connection: keep-alive`, and its socket then idles for the full
17
+ * sixty-five seconds while `close()` waits on it — a browser left open on the
18
+ * page held a stopping server for a minute. So once `close()` has run, the
19
+ * idle sockets are swept again every quarter second until the server has
20
+ * closed. A sweep rather than a `request` listener: the tenant and flag
21
+ * servers wrap the one listener a server has, and refuse a second.
22
+ *
23
+ * Node counts a socket that has not sent a byte as busy, not idle, so the
24
+ * sweep closes those too: a browser opens a spare connection ahead of a
25
+ * request it may never make, and holds it about ten seconds before giving up,
26
+ * which held a stopping suite past a test's whole timeout. One silent for a
27
+ * second has asked nothing, so nothing is lost; a younger one may be a
28
+ * request still on its way, and is left to send it.
29
+ */
30
+ import type { Server } from 'node:http';
31
+ export declare const KEEP_ALIVE_TIMEOUT_MS = 65000;
32
+ export declare const HEADERS_TIMEOUT_MS = 66000;
33
+ export declare function applyServerTimeouts(server: Server): Server;
@@ -0,0 +1,32 @@
1
+ export const KEEP_ALIVE_TIMEOUT_MS = 65_000;
2
+ export const HEADERS_TIMEOUT_MS = 66_000;
3
+ const REQUEST_TIMEOUT_MS = 600_000;
4
+ const CLOSE_SWEEP_MS = 250;
5
+ const SILENT_MS = 1_000;
6
+ export function applyServerTimeouts(server) {
7
+ server.keepAliveTimeout = KEEP_ALIVE_TIMEOUT_MS;
8
+ server.headersTimeout = HEADERS_TIMEOUT_MS;
9
+ server.requestTimeout = REQUEST_TIMEOUT_MS;
10
+ /* Each socket by when it connected: one silent past a second is a spare, not a request still on its way. */
11
+ const sockets = new Map();
12
+ server.on('connection', (socket) => {
13
+ sockets.set(socket, Date.now());
14
+ socket.once('close', () => sockets.delete(socket));
15
+ });
16
+ const close = server.close;
17
+ server.close = function closeAndSweep(callback) {
18
+ const unused = () => {
19
+ for (const [socket, connected] of sockets)
20
+ if (socket.bytesRead === 0 && Date.now() - connected > SILENT_MS)
21
+ socket.destroy();
22
+ };
23
+ const sweep = setInterval(() => {
24
+ server.closeIdleConnections();
25
+ unused();
26
+ }, CLOSE_SWEEP_MS);
27
+ sweep.unref();
28
+ server.once('close', () => clearInterval(sweep));
29
+ return close.call(this, callback);
30
+ };
31
+ return server;
32
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A connection that hands out shape and never rows.
3
+ *
4
+ * The README's boundary — "rows entering an agent's context leave the
5
+ * machine, so point it at development databases" — was a sentence asking to
6
+ * be believed. `"rows": false` makes it a property of the connection: the
7
+ * catalog, the counts, the lint and the plans still answer, and every path
8
+ * that would return a value from a row refuses.
9
+ *
10
+ * Enforced by wrapping the adapter rather than by checking at each endpoint.
11
+ * There are eight endpoints and fifteen tools today and there will be more,
12
+ * and a rule spelled out in eighteen places is a rule with a hole in it. The
13
+ * wrapper is the choke point every read already goes through, so a feature
14
+ * added later inherits the boundary instead of having to remember it.
15
+ *
16
+ * What still answers is deliberate: shape is what an agent is here for. Which
17
+ * tables exist, what points at what, how many rows there are, how much of a
18
+ * column is null, what a statement's plan looks like. What it cannot have is
19
+ * a value out of a row — including the ones `profile` reports, since a
20
+ * minimum, a maximum and the most common values are row content however
21
+ * aggregated.
22
+ */
23
+ import { type Adapter } from '../adapters/adapter.js';
24
+ /**
25
+ * The same adapter with every row-returning method refused.
26
+ *
27
+ * Methods are copied rather than proxied through a Proxy so that the optional
28
+ * ones stay honestly absent: an adapter with no `runSql` must still look like
29
+ * an adapter with no `runSql`, or callers that check for it before offering
30
+ * SQL start offering it and failing.
31
+ */
32
+ export declare function shapeOnly(adapter: Adapter, name: string): Adapter;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * A connection that hands out shape and never rows.
3
+ *
4
+ * The README's boundary — "rows entering an agent's context leave the
5
+ * machine, so point it at development databases" — was a sentence asking to
6
+ * be believed. `"rows": false` makes it a property of the connection: the
7
+ * catalog, the counts, the lint and the plans still answer, and every path
8
+ * that would return a value from a row refuses.
9
+ *
10
+ * Enforced by wrapping the adapter rather than by checking at each endpoint.
11
+ * There are eight endpoints and fifteen tools today and there will be more,
12
+ * and a rule spelled out in eighteen places is a rule with a hole in it. The
13
+ * wrapper is the choke point every read already goes through, so a feature
14
+ * added later inherits the boundary instead of having to remember it.
15
+ *
16
+ * What still answers is deliberate: shape is what an agent is here for. Which
17
+ * tables exist, what points at what, how many rows there are, how much of a
18
+ * column is null, what a statement's plan looks like. What it cannot have is
19
+ * a value out of a row — including the ones `profile` reports, since a
20
+ * minimum, a maximum and the most common values are row content however
21
+ * aggregated.
22
+ */
23
+ import { Refusal } from '../adapters/adapter.js';
24
+ import { configFileName } from './product.js';
25
+ const why = (name, what) => new Refusal(`"${name}" is shape-only: ${what} would return data out of its rows. ` +
26
+ 'The catalog, row counts, null fractions, plans and lint still answer. ' +
27
+ `Remove "rows": false from its entry in your ${configFileName()} to read rows from it.`);
28
+ /**
29
+ * The same adapter with every row-returning method refused.
30
+ *
31
+ * Methods are copied rather than proxied through a Proxy so that the optional
32
+ * ones stay honestly absent: an adapter with no `runSql` must still look like
33
+ * an adapter with no `runSql`, or callers that check for it before offering
34
+ * SQL start offering it and failing.
35
+ */
36
+ export function shapeOnly(adapter, name) {
37
+ const wrapped = Object.create(Object.getPrototypeOf(adapter));
38
+ Object.assign(wrapped, adapter);
39
+ /* Bound to the original: the copies above are the original's methods, and
40
+ calling them on `wrapped` would work by accident on a plain object and
41
+ break on a class instance holding private state. */
42
+ const from = (key) => {
43
+ const method = adapter[key];
44
+ return typeof method === 'function' ? method.bind(adapter) : undefined;
45
+ };
46
+ wrapped.introspect = from('introspect');
47
+ wrapped.close = from('close');
48
+ wrapped.count = from('count');
49
+ /* Pool meters are counts and durations about connections, never a value
50
+ out of a row; bound like the rest, so they read the original's pools. */
51
+ if (adapter.poolStats)
52
+ wrapped.poolStats = from('poolStats');
53
+ wrapped.query = () => {
54
+ throw why(name, 'reading rows');
55
+ };
56
+ if (adapter.runSql)
57
+ wrapped.runSql = () => {
58
+ throw why(name, 'running SQL');
59
+ };
60
+ if (adapter.runView)
61
+ wrapped.runView = () => {
62
+ throw why(name, 'running a view');
63
+ };
64
+ if (adapter.countView)
65
+ wrapped.countView = from('countView');
66
+ if (adapter.insert)
67
+ wrapped.insert = () => {
68
+ throw why(name, 'inserting');
69
+ };
70
+ if (adapter.update)
71
+ wrapped.update = () => {
72
+ throw why(name, 'updating');
73
+ };
74
+ if (adapter.remove)
75
+ wrapped.remove = () => {
76
+ throw why(name, 'deleting');
77
+ };
78
+ /* A transaction hands out `insert` and `remove` of its own, from inside the
79
+ adapter, where the refusals above cannot reach them. Refused whole. */
80
+ if (adapter.transaction)
81
+ wrapped.transaction = () => {
82
+ throw why(name, 'writing');
83
+ };
84
+ /* A breakdown's group keys *are* row values — `by status` answers with the
85
+ statuses. The counts beside them would be safe and are not worth the
86
+ surface: an answer with its labels blanked is not an answer. Counting the
87
+ groups is a cardinality fact and stays, for the same reason `profile`
88
+ keeps its distinct count. */
89
+ if (adapter.runBreakdown)
90
+ wrapped.runBreakdown = () => {
91
+ throw why(name, 'grouping rows');
92
+ };
93
+ if (adapter.countBreakdown)
94
+ wrapped.countBreakdown = from('countBreakdown');
95
+ /* Profile keeps the numbers and loses the values. "52% null, 4,100
96
+ distinct" is the fact that decides a LEFT join and carries nothing out
97
+ of any row; a minimum, a maximum and the most common values carry rows. */
98
+ if (adapter.profile) {
99
+ const profile = from('profile');
100
+ wrapped.profile = async (table, limits) => {
101
+ const result = await profile(table, limits);
102
+ return {
103
+ ...result,
104
+ columns: result.columns.map(({ min, max, common, ...rest }) => rest),
105
+ redacted: 'Values withheld: this connection is shape-only.',
106
+ };
107
+ };
108
+ }
109
+ return wrapped;
110
+ }
@@ -0,0 +1,32 @@
1
+ type EmitWarning = typeof process.emitWarning;
2
+ /** Installed once, before anything imports `node:sqlite`. */
3
+ export declare function quietSqliteExperimentalWarning(target?: {
4
+ emitWarning: EmitWarning;
5
+ }): void;
6
+ /**
7
+ * The oldest Node a start accepts: the major `engines` names in package.json, and the one CI, the image and the
8
+ * desktop app run. npm only warns on `engines`, and `npx` not even that, so on an older Node the first anyone heard
9
+ * was a missing export or a syntax error from somewhere inside the server. One line before any of it is loaded says
10
+ * what is wrong instead.
11
+ */
12
+ export declare const NODE_FLOOR = 24;
13
+ /** What a start on `version` (process.versions.node) prints before it refuses, or undefined when it is new enough. */
14
+ export declare function oldNodeRefusal(version?: string): string | undefined;
15
+ /** Print `line` once per process, however many Apps or handlers reach it. */
16
+ export declare function warnOnce(key: string, line: string, write?: (line: string) => void): void;
17
+ /**
18
+ * Sign-in served beyond this machine at an `http:` public address: the session cookies are marked Secure only when
19
+ * the address the server answers to is https, so here they never are, and a browser sends them over plain http too.
20
+ * Said when the operator has chosen to serve it anyway (`--insecure-http-sign-in`); otherwise it is refused
21
+ * (`insecureSignInRefusal`).
22
+ */
23
+ export declare function insecureCookieWarning(publicUrl: string, listenHost: string): string | undefined;
24
+ /** What a start with sign-in on that same condition is refused with: passwords would cross the network in the clear. */
25
+ export declare function insecureSignInRefusal(publicUrl: string, listenHost: string): string | undefined;
26
+ /** The one line a served App writes when a reset was requested and nothing can send it: no link, no token, no address. */
27
+ export declare const resetWithoutMailLog: () => string;
28
+ /** A served App that offers password reset (MISTRI_AUTH_RESET=log) with no email service: the offer cannot be kept. */
29
+ export declare const RESET_WITHOUT_MAIL_WARNING: string;
30
+ /** A fetch-style host that names no client: every visitor is one address to the sign-in and form rate limits. */
31
+ export declare const SHARED_RATE_LIMIT_WARNING: string;
32
+ export {};
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Node's ExperimentalWarning for `node:sqlite`, kept off a start's output.
3
+ *
4
+ * tablewalk opens `node:sqlite` whatever the connections are — its own stores
5
+ * (sign-in, API tokens, a tenant's journal) are SQLite files — so the Node
6
+ * releases that still call the module experimental printed "SQLite is an
7
+ * experimental feature" on every start, above a config that names only
8
+ * PostgreSQL. It is a note about Node's API to whoever chose to use it, and
9
+ * that is this package, which pins the Node versions it supports: the person
10
+ * running tablewalk can do nothing with it. Only that one warning is dropped;
11
+ * every other goes out as Node would send it.
12
+ */
13
+ import { envName, product } from './product.js';
14
+ const isSqliteExperimental = (warning, type) => {
15
+ const name = warning instanceof Error ? warning.name : typeof type === 'string' ? type : type?.type;
16
+ const message = warning instanceof Error ? warning.message : String(warning);
17
+ return name === 'ExperimentalWarning' && /\bSQLite\b/i.test(message);
18
+ };
19
+ /** Installed once, before anything imports `node:sqlite`. */
20
+ export function quietSqliteExperimentalWarning(target = process) {
21
+ const emit = target.emitWarning;
22
+ target.emitWarning = function emitWarning(warning, ...rest) {
23
+ if (isSqliteExperimental(warning, rest[0]))
24
+ return;
25
+ return emit.call(this ?? target, warning, ...rest);
26
+ };
27
+ }
28
+ /**
29
+ * The oldest Node a start accepts: the major `engines` names in package.json, and the one CI, the image and the
30
+ * desktop app run. npm only warns on `engines`, and `npx` not even that, so on an older Node the first anyone heard
31
+ * was a missing export or a syntax error from somewhere inside the server. One line before any of it is loaded says
32
+ * what is wrong instead.
33
+ */
34
+ export const NODE_FLOOR = 24;
35
+ /** What a start on `version` (process.versions.node) prints before it refuses, or undefined when it is new enough. */
36
+ export function oldNodeRefusal(version = process.versions.node) {
37
+ if (Number(version.split('.')[0]) >= NODE_FLOOR)
38
+ return undefined;
39
+ return `${product()} needs Node ${NODE_FLOOR} or newer; this is Node ${version}. Install Node ${NODE_FLOOR} (https://nodejs.org) and run it again.`;
40
+ }
41
+ const said = new Set();
42
+ /** Print `line` once per process, however many Apps or handlers reach it. */
43
+ export function warnOnce(key, line, write = console.warn) {
44
+ if (said.has(key))
45
+ return;
46
+ said.add(key);
47
+ write(`${product()}: warning: ${line}`);
48
+ }
49
+ const LOOPBACK = /^(localhost|127\.\d+\.\d+\.\d+|::1|\[::1\])$/i;
50
+ /** The public address when sign-in is served beyond this machine at an `http:` one, else undefined. */
51
+ function insecureOrigin(publicUrl, listenHost) {
52
+ let url;
53
+ try {
54
+ url = new URL(publicUrl);
55
+ }
56
+ catch {
57
+ return undefined;
58
+ }
59
+ if (url.protocol !== 'http:' || (LOOPBACK.test(listenHost) && LOOPBACK.test(url.hostname)))
60
+ return undefined;
61
+ return url.origin;
62
+ }
63
+ /**
64
+ * Sign-in served beyond this machine at an `http:` public address: the session cookies are marked Secure only when
65
+ * the address the server answers to is https, so here they never are, and a browser sends them over plain http too.
66
+ * Said when the operator has chosen to serve it anyway (`--insecure-http-sign-in`); otherwise it is refused
67
+ * (`insecureSignInRefusal`).
68
+ */
69
+ export function insecureCookieWarning(publicUrl, listenHost) {
70
+ const origin = insecureOrigin(publicUrl, listenHost);
71
+ if (!origin)
72
+ return undefined;
73
+ return (`sign-in is served beyond this machine at ${origin}, an http address, so its session cookies are never marked Secure. ` +
74
+ `Serve it behind a TLS proxy and set its public address (${envName('PUBLIC_URL')}) to the proxy's https address.`);
75
+ }
76
+ /** What a start with sign-in on that same condition is refused with: passwords would cross the network in the clear. */
77
+ export function insecureSignInRefusal(publicUrl, listenHost) {
78
+ const origin = insecureOrigin(publicUrl, listenHost);
79
+ if (!origin)
80
+ return undefined;
81
+ return (`sign-in would be served beyond this machine at ${origin}, an http address: passwords and session cookies would cross the network in the clear. ` +
82
+ `Set the public address (${envName('PUBLIC_URL')}) to the https address of a TLS proxy in front, or listen on loopback (--host 127.0.0.1) behind it. ` +
83
+ `To serve it over plain http anyway, pass --insecure-http-sign-in (${envName('INSECURE_HTTP_SIGN_IN')}=1).`);
84
+ }
85
+ /** The one line a served App writes when a reset was requested and nothing can send it: no link, no token, no address. */
86
+ export const resetWithoutMailLog = () => `${product()}: a password reset was requested but no mail transport is configured, so nothing was sent.`;
87
+ /** A served App that offers password reset (MISTRI_AUTH_RESET=log) with no email service: the offer cannot be kept. */
88
+ export const RESET_WITHOUT_MAIL_WARNING = 'password reset is offered (MISTRI_AUTH_RESET=log) but no email service is configured, so a reset request sends nothing and ' +
89
+ 'the link is never written to the log outside `mistri dev`. Name an email service in the config file, or unset MISTRI_AUTH_RESET.';
90
+ /** A fetch-style host that names no client: every visitor is one address to the sign-in and form rate limits. */
91
+ export const SHARED_RATE_LIMIT_WARNING = 'the fetch handler was called without a clientAddress, so every visitor shares one sign-in rate limit and lockout. ' +
92
+ "Pass the visitor's address as the second argument: tw.fetch(request, { clientAddress }).";
@@ -0,0 +1,28 @@
1
+ /** A tab label's existing address spelling; shared without client state. */
2
+ export declare function tabSlug(label: string): string;
3
+ /** A tab's word in an address: the App's own language's, whatever language its label is said in. */
4
+ export declare const tabKey: (tab: {
5
+ label: string;
6
+ slug?: string;
7
+ }) => string;
8
+ /** A record tab's word in an address: a section group's name, a related list's title. */
9
+ export declare function tabWord(token: string): string;
10
+ /** Whether a tab token is the one an address's word names. */
11
+ export declare const tabMatches: (token: string, asked: string | undefined) => boolean;
12
+ export declare function addressFilterValue(raw: string): {
13
+ kind: 'values';
14
+ values: string[];
15
+ } | {
16
+ kind: 'range';
17
+ min?: string;
18
+ max?: string;
19
+ } | undefined;
20
+ /** Undefined means the whole sort is outside this grammar. Preserve the
21
+ * browser's existing identifier spelling, duplicate fields and ordering;
22
+ * an API consumer must apply its own declared-field and ambiguity checks. */
23
+ export declare function addressSortValue(raw: string): {
24
+ field: string;
25
+ descending: boolean;
26
+ }[] | undefined;
27
+ /** All time, said where a dashboard opens on a window of its own (`window: 'last 30 days'`): `?period=all-time`. */
28
+ export declare const ALL_TIME = "all-time";
@@ -0,0 +1,47 @@
1
+ /** Data-only lexical pieces of the existing browser list address grammar.
2
+ * These helpers do not authorize fields, coerce schema values or validate an
3
+ * API request. Callers own parameter uniqueness, limits and refusal policy.
4
+ * Numeric lexemes remain text so large integers are never rounded here. */
5
+ import { slug as slugOf } from './slug.js';
6
+ /** A tab label's existing address spelling; shared without client state. */
7
+ export function tabSlug(label) {
8
+ return label
9
+ .toLowerCase()
10
+ .normalize('NFKD')
11
+ .replace(/[^a-z0-9]+/g, '-')
12
+ .replace(/^-+|-+$/g, '');
13
+ }
14
+ /** A tab's word in an address: the App's own language's, whatever language its label is said in. */
15
+ export const tabKey = (tab) => tab.slug ?? tabSlug(tab.label);
16
+ /** A record tab's word in an address: a section group's name, a related list's title. */
17
+ export function tabWord(token) {
18
+ if (token.startsWith('tab:'))
19
+ return slugOf(token.slice(4), token);
20
+ if (token.startsWith('section:'))
21
+ return `section-${token.slice(8)}`;
22
+ return slugOf(token, token);
23
+ }
24
+ /** Whether a tab token is the one an address's word names. */
25
+ export const tabMatches = (token, asked) => asked !== undefined && (token === asked || tabWord(token) === asked);
26
+ export function addressFilterValue(raw) {
27
+ if (!raw.trim())
28
+ return undefined;
29
+ const range = /^(-?\d+(?:\.\d+)?)?\.\.(-?\d+(?:\.\d+)?)?$/.exec(raw.trim());
30
+ if (range && (range[1] || range[2]))
31
+ return { kind: 'range', ...(range[1] ? { min: range[1] } : {}), ...(range[2] ? { max: range[2] } : {}) };
32
+ const values = raw
33
+ .split(',')
34
+ .map((value) => value.trim())
35
+ .filter(Boolean);
36
+ return values.length ? { kind: 'values', values } : undefined;
37
+ }
38
+ /** Undefined means the whole sort is outside this grammar. Preserve the
39
+ * browser's existing identifier spelling, duplicate fields and ordering;
40
+ * an API consumer must apply its own declared-field and ambiguity checks. */
41
+ export function addressSortValue(raw) {
42
+ if (!/^-?[A-Za-z_][\w.]*(,-?[A-Za-z_][\w.]*)*$/.test(raw))
43
+ return undefined;
44
+ return raw.split(',').map((field) => ({ field: field.startsWith('-') ? field.slice(1) : field, descending: field.startsWith('-') }));
45
+ }
46
+ /** All time, said where a dashboard opens on a window of its own (`window: 'last 30 days'`): `?period=all-time`. */
47
+ export const ALL_TIME = 'all-time';