@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.
- package/LICENSE +21 -0
- package/README.md +17 -2
- package/dist/adapters/adapter.d.ts +693 -0
- package/dist/adapters/adapter.js +444 -0
- package/dist/adapters/cache/cacheStore.d.ts +75 -0
- package/dist/adapters/cache/cacheStore.js +160 -0
- package/dist/adapters/cache/resp.d.ts +52 -0
- package/dist/adapters/cache/resp.js +237 -0
- package/dist/adapters/commands/canonicalJson.d.ts +19 -0
- package/dist/adapters/commands/canonicalJson.js +154 -0
- package/dist/adapters/connect.d.ts +29 -0
- package/dist/adapters/connect.js +40 -0
- package/dist/adapters/connectionBudget.d.ts +101 -0
- package/dist/adapters/connectionBudget.js +128 -0
- package/dist/adapters/dbLatency.d.ts +35 -0
- package/dist/adapters/dbLatency.js +79 -0
- package/dist/adapters/epochCache.d.ts +50 -0
- package/dist/adapters/epochCache.js +85 -0
- package/dist/adapters/http/egress.d.ts +48 -0
- package/dist/adapters/http/egress.js +175 -0
- package/dist/adapters/http/httpAdapter.d.ts +71 -0
- package/dist/adapters/http/httpAdapter.js +512 -0
- package/dist/adapters/http/httpDescription.d.ts +32 -0
- package/dist/adapters/http/httpDescription.js +246 -0
- package/dist/adapters/http/openapi.d.ts +98 -0
- package/dist/adapters/http/openapi.js +487 -0
- package/dist/adapters/layoutRefusal.d.ts +24 -0
- package/dist/adapters/layoutRefusal.js +35 -0
- package/dist/adapters/net/networkPolicy.d.ts +44 -0
- package/dist/adapters/net/networkPolicy.js +123 -0
- package/dist/adapters/net/untrustedDatabase.d.ts +18 -0
- package/dist/adapters/net/untrustedDatabase.js +120 -0
- package/dist/adapters/poolAdmission.d.ts +43 -0
- package/dist/adapters/poolAdmission.js +184 -0
- package/dist/adapters/poolMetrics.d.ts +121 -0
- package/dist/adapters/poolMetrics.js +185 -0
- package/dist/adapters/postgres.d.ts +436 -0
- package/dist/adapters/postgres.js +1890 -0
- package/dist/adapters/postgresCatalog.d.ts +96 -0
- package/dist/adapters/postgresCatalog.js +387 -0
- package/dist/adapters/postgresCatalogDigest.d.ts +30 -0
- package/dist/adapters/postgresCatalogDigest.js +87 -0
- package/dist/adapters/postgresCatalogRows.d.ts +62 -0
- package/dist/adapters/postgresCatalogRows.js +37 -0
- package/dist/adapters/postgresDates.d.ts +1 -0
- package/dist/adapters/postgresDates.js +39 -0
- package/dist/adapters/postgresMaintenance.d.ts +33 -0
- package/dist/adapters/postgresMaintenance.js +179 -0
- package/dist/adapters/postgresPool.d.ts +255 -0
- package/dist/adapters/postgresPool.js +838 -0
- package/dist/adapters/postgresPooler.d.ts +28 -0
- package/dist/adapters/postgresPooler.js +267 -0
- package/dist/adapters/postgresReadCatalog.d.ts +31 -0
- package/dist/adapters/postgresReadCatalog.js +226 -0
- package/dist/adapters/postgresReadSnapshot.d.ts +46 -0
- package/dist/adapters/postgresReadSnapshot.js +133 -0
- package/dist/adapters/postgresSchemaEpoch.d.ts +24 -0
- package/dist/adapters/postgresSchemaEpoch.js +149 -0
- package/dist/adapters/postgresTransactionHandle.d.ts +173 -0
- package/dist/adapters/postgresTransactionHandle.js +524 -0
- package/dist/adapters/postgresValues.d.ts +30 -0
- package/dist/adapters/postgresValues.js +75 -0
- package/dist/adapters/replicas.d.ts +70 -0
- package/dist/adapters/replicas.js +208 -0
- package/dist/adapters/reservedSql.d.ts +38 -0
- package/dist/adapters/reservedSql.js +264 -0
- package/dist/adapters/rolePrivileges.d.ts +17 -0
- package/dist/adapters/rolePrivileges.js +22 -0
- package/dist/adapters/scoped/keyRows.d.ts +65 -0
- package/dist/adapters/scoped/keyRows.js +173 -0
- package/dist/adapters/scoped/postgresScopeCatalog.d.ts +16 -0
- package/dist/adapters/scoped/postgresScopeCatalog.js +117 -0
- package/dist/adapters/scoped/scopedCommandOperations.d.ts +5 -0
- package/dist/adapters/scoped/scopedCommandOperations.js +48 -0
- package/dist/adapters/scoped/scopedReads.d.ts +20 -0
- package/dist/adapters/scoped/scopedReads.js +174 -0
- package/dist/adapters/scoped/scopedTransaction.d.ts +89 -0
- package/dist/adapters/scoped/scopedTransaction.js +303 -0
- package/dist/adapters/scoped/sqliteScopeCatalog.d.ts +16 -0
- package/dist/adapters/scoped/sqliteScopeCatalog.js +241 -0
- package/dist/adapters/scoped/updateGuard.d.ts +3 -0
- package/dist/adapters/scoped/updateGuard.js +40 -0
- package/dist/adapters/serverSettings.d.ts +45 -0
- package/dist/adapters/serverSettings.js +46 -0
- package/dist/adapters/sqlite.d.ts +262 -0
- package/dist/adapters/sqlite.js +1434 -0
- package/dist/adapters/sqliteCostlyReads.d.ts +33 -0
- package/dist/adapters/sqliteCostlyReads.js +49 -0
- package/dist/adapters/sqliteDecimals.d.ts +22 -0
- package/dist/adapters/sqliteDecimals.js +57 -0
- package/dist/adapters/sqliteHandles.d.ts +43 -0
- package/dist/adapters/sqliteHandles.js +143 -0
- package/dist/adapters/sqliteStatementProcess.d.ts +29 -0
- package/dist/adapters/sqliteStatementProcess.js +131 -0
- package/dist/adapters/statementControl.d.ts +34 -0
- package/dist/adapters/statementControl.js +90 -0
- package/dist/adapters/storeHost.d.ts +130 -0
- package/dist/adapters/storeHost.js +13 -0
- package/dist/adapters/telemetry/drivers.d.ts +21 -0
- package/dist/adapters/telemetry/drivers.js +321 -0
- package/dist/adapters/telemetry/metrics.d.ts +63 -0
- package/dist/adapters/telemetry/metrics.js +122 -0
- package/dist/adapters/telemetry/otlp.d.ts +12 -0
- package/dist/adapters/telemetry/otlp.js +320 -0
- package/dist/adapters/telemetry/otlpEncode.d.ts +48 -0
- package/dist/adapters/telemetry/otlpEncode.js +366 -0
- package/dist/adapters/telemetry/otlpEnv.d.ts +1 -0
- package/dist/adapters/telemetry/otlpEnv.js +12 -0
- package/dist/adapters/telemetry/serverTiming.d.ts +83 -0
- package/dist/adapters/telemetry/serverTiming.js +503 -0
- package/dist/adapters/telemetry/start.d.ts +10 -0
- package/dist/adapters/telemetry/start.js +25 -0
- package/dist/adapters/telemetry/statement.d.ts +16 -0
- package/dist/adapters/telemetry/statement.js +134 -0
- package/dist/adapters/telemetry/trace.d.ts +127 -0
- package/dist/adapters/telemetry/trace.js +295 -0
- package/dist/adapters/writeAhead.d.ts +27 -0
- package/dist/adapters/writeAhead.js +46 -0
- package/dist/adapters/writeAttribution.d.ts +18 -0
- package/dist/adapters/writeAttribution.js +23 -0
- package/dist/adapters/writeCapture.d.ts +73 -0
- package/dist/adapters/writeCapture.js +20 -0
- package/dist/adapters/writeLanes.d.ts +94 -0
- package/dist/adapters/writeLanes.js +232 -0
- package/dist/engine.d.ts +15 -0
- package/dist/engine.js +13 -0
- package/dist/server/auth/credentials.d.ts +61 -0
- package/dist/server/auth/credentials.js +260 -0
- package/dist/server/cacheService.d.ts +50 -0
- package/dist/server/cacheService.js +110 -0
- package/dist/server/cli/args.d.ts +176 -0
- package/dist/server/cli/args.js +342 -0
- package/dist/server/cli/bin.d.ts +5 -0
- package/dist/server/cli/bin.js +66 -0
- package/dist/server/cli/browser.d.ts +15 -0
- package/dist/server/cli/browser.js +37 -0
- package/dist/server/cli/config.d.ts +50 -0
- package/dist/server/cli/config.js +206 -0
- package/dist/server/cli/startup.d.ts +36 -0
- package/dist/server/cli/startup.js +128 -0
- package/dist/server/cli/startupOptions.d.ts +63 -0
- package/dist/server/cli/startupOptions.js +143 -0
- package/dist/server/cli/subcommand.d.ts +28 -0
- package/dist/server/cli/subcommand.js +32 -0
- package/dist/server/cli/usage.d.ts +13 -0
- package/dist/server/cli/usage.js +31 -0
- package/dist/server/clientHttp.d.ts +184 -0
- package/dist/server/clientHttp.js +700 -0
- package/dist/server/clientSurface.d.ts +128 -0
- package/dist/server/clientSurface.js +182 -0
- package/dist/server/columnGrants.d.ts +103 -0
- package/dist/server/columnGrants.js +730 -0
- package/dist/server/compileCache.d.ts +1 -0
- package/dist/server/compileCache.js +30 -0
- package/dist/server/config/locations.d.ts +1 -0
- package/dist/server/config/locations.js +15 -0
- package/dist/server/configPaths.d.ts +7 -0
- package/dist/server/configPaths.js +34 -0
- package/dist/server/configSections.d.ts +64 -0
- package/dist/server/configSections.js +72 -0
- package/dist/server/connectionRedaction.d.ts +30 -0
- package/dist/server/connectionRedaction.js +77 -0
- package/dist/server/connections.d.ts +353 -0
- package/dist/server/connections.js +978 -0
- package/dist/server/constraints.d.ts +82 -0
- package/dist/server/constraints.js +169 -0
- package/dist/server/demo.d.ts +9 -0
- package/dist/server/demo.js +554 -0
- package/dist/server/devclient.d.ts +108 -0
- package/dist/server/devclient.js +361 -0
- package/dist/server/evidence.d.ts +55 -0
- package/dist/server/evidence.js +323 -0
- package/dist/server/hiddenColumns.d.ts +32 -0
- package/dist/server/hiddenColumns.js +238 -0
- package/dist/server/http/baselineHeaders.d.ts +24 -0
- package/dist/server/http/baselineHeaders.js +12 -0
- package/dist/server/http/captured.d.ts +35 -0
- package/dist/server/http/captured.js +73 -0
- package/dist/server/http/clock.d.ts +1 -0
- package/dist/server/http/clock.js +14 -0
- package/dist/server/http/connectionSource.d.ts +4 -0
- package/dist/server/http/connectionSource.js +48 -0
- package/dist/server/http/context.d.ts +189 -0
- package/dist/server/http/context.js +11 -0
- package/dist/server/http/crawlerText.d.ts +15 -0
- package/dist/server/http/crawlerText.js +32 -0
- package/dist/server/http/dataRoutes.d.ts +88 -0
- package/dist/server/http/dataRoutes.js +137 -0
- package/dist/server/http/door.d.ts +57 -0
- package/dist/server/http/door.js +39 -0
- package/dist/server/http/exportRoute.d.ts +15 -0
- package/dist/server/http/exportRoute.js +320 -0
- package/dist/server/http/firstPaint.d.ts +108 -0
- package/dist/server/http/firstPaint.js +262 -0
- package/dist/server/http/httpOperationRoutes.d.ts +11 -0
- package/dist/server/http/httpOperationRoutes.js +50 -0
- package/dist/server/http/pageReads.d.ts +20 -0
- package/dist/server/http/pageReads.js +205 -0
- package/dist/server/http/pageRoutes.d.ts +39 -0
- package/dist/server/http/pageRoutes.js +291 -0
- package/dist/server/http/probes.d.ts +22 -0
- package/dist/server/http/probes.js +27 -0
- package/dist/server/http/rateLimit.d.ts +131 -0
- package/dist/server/http/rateLimit.js +351 -0
- package/dist/server/http/readRoutes.d.ts +9 -0
- package/dist/server/http/readRoutes.js +131 -0
- package/dist/server/http/readRouting.d.ts +20 -0
- package/dist/server/http/readRouting.js +80 -0
- package/dist/server/http/recordCompose.d.ts +67 -0
- package/dist/server/http/recordCompose.js +167 -0
- package/dist/server/http/recordWrites.d.ts +89 -0
- package/dist/server/http/recordWrites.js +298 -0
- package/dist/server/http/refusalReport.d.ts +38 -0
- package/dist/server/http/refusalReport.js +63 -0
- package/dist/server/http/reply.d.ts +130 -0
- package/dist/server/http/reply.js +394 -0
- package/dist/server/http/requestOrigin.d.ts +11 -0
- package/dist/server/http/requestOrigin.js +8 -0
- package/dist/server/http/router.d.ts +45 -0
- package/dist/server/http/router.js +22 -0
- package/dist/server/http/serverCore.d.ts +68 -0
- package/dist/server/http/serverCore.js +177 -0
- package/dist/server/http/traceRequest.d.ts +30 -0
- package/dist/server/http/traceRequest.js +224 -0
- package/dist/server/http/trust.d.ts +261 -0
- package/dist/server/http/trust.js +472 -0
- package/dist/server/http/writeRefusal.d.ts +33 -0
- package/dist/server/http/writeRefusal.js +24 -0
- package/dist/server/httpConnection.d.ts +49 -0
- package/dist/server/httpConnection.js +170 -0
- package/dist/server/impact.d.ts +55 -0
- package/dist/server/impact.js +47 -0
- package/dist/server/journal.d.ts +134 -0
- package/dist/server/journal.js +398 -0
- package/dist/server/keysetReadHttp.d.ts +52 -0
- package/dist/server/keysetReadHttp.js +85 -0
- package/dist/server/layouts.d.ts +49 -0
- package/dist/server/layouts.js +192 -0
- package/dist/server/migrate/cli.d.ts +55 -0
- package/dist/server/migrate/cli.js +517 -0
- package/dist/server/migrate/database.d.ts +37 -0
- package/dist/server/migrate/database.js +247 -0
- package/dist/server/migrate/desired.d.ts +76 -0
- package/dist/server/migrate/desired.js +292 -0
- package/dist/server/migrate/files.d.ts +34 -0
- package/dist/server/migrate/files.js +141 -0
- package/dist/server/migrate/flyway.d.ts +7 -0
- package/dist/server/migrate/flyway.js +69 -0
- package/dist/server/migrate/history.d.ts +70 -0
- package/dist/server/migrate/history.js +211 -0
- package/dist/server/migrate/runner.d.ts +100 -0
- package/dist/server/migrate/runner.js +409 -0
- package/dist/server/migrate/snapshot.d.ts +30 -0
- package/dist/server/migrate/snapshot.js +239 -0
- package/dist/server/migrate/target.d.ts +33 -0
- package/dist/server/migrate/target.js +82 -0
- package/dist/server/openapiDraft.d.ts +25 -0
- package/dist/server/openapiDraft.js +171 -0
- package/dist/server/operations/diagnostics.d.ts +101 -0
- package/dist/server/operations/diagnostics.js +284 -0
- package/dist/server/operations/requestMetrics.d.ts +33 -0
- package/dist/server/operations/requestMetrics.js +94 -0
- package/dist/server/packageVersion.d.ts +1 -0
- package/dist/server/packageVersion.js +11 -0
- package/dist/server/poolConfig.d.ts +34 -0
- package/dist/server/poolConfig.js +114 -0
- package/dist/server/product.d.ts +20 -0
- package/dist/server/product.js +12 -0
- package/dist/server/recordHistoryOperations.d.ts +39 -0
- package/dist/server/recordHistoryOperations.js +43 -0
- package/dist/server/recordWriteOperations.d.ts +111 -0
- package/dist/server/recordWriteOperations.js +329 -0
- package/dist/server/resourceReadHttp.d.ts +81 -0
- package/dist/server/resourceReadHttp.js +606 -0
- package/dist/server/resourceReadOperations.d.ts +147 -0
- package/dist/server/resourceReadOperations.js +452 -0
- package/dist/server/scaffoldMachine.d.ts +54 -0
- package/dist/server/scaffoldMachine.js +184 -0
- package/dist/server/seed/cli.d.ts +20 -0
- package/dist/server/seed/cli.js +164 -0
- package/dist/server/seed/lexicon.d.ts +26 -0
- package/dist/server/seed/lexicon.js +585 -0
- package/dist/server/seed/seed.d.ts +70 -0
- package/dist/server/seed/seed.js +779 -0
- package/dist/server/seed/words.d.ts +21 -0
- package/dist/server/seed/words.js +164 -0
- package/dist/server/serverRequests.d.ts +6 -0
- package/dist/server/serverRequests.js +33 -0
- package/dist/server/serverTimeouts.d.ts +33 -0
- package/dist/server/serverTimeouts.js +32 -0
- package/dist/server/shapeonly.d.ts +32 -0
- package/dist/server/shapeonly.js +110 -0
- package/dist/server/startupWarnings.d.ts +32 -0
- package/dist/server/startupWarnings.js +92 -0
- package/dist/shared/addressParams.d.ts +28 -0
- package/dist/shared/addressParams.js +47 -0
- package/dist/shared/appCards.d.ts +123 -0
- package/dist/shared/appCards.js +385 -0
- package/dist/shared/appComponents.d.ts +177 -0
- package/dist/shared/appComponents.js +422 -0
- package/dist/shared/appDocuments.d.ts +43 -0
- package/dist/shared/appDocuments.js +131 -0
- package/dist/shared/appEmbeds.d.ts +21 -0
- package/dist/shared/appEmbeds.js +24 -0
- package/dist/shared/appIcons.d.ts +28 -0
- package/dist/shared/appIcons.js +223 -0
- package/dist/shared/appLinks.d.ts +17 -0
- package/dist/shared/appLinks.js +124 -0
- package/dist/shared/appListColumns.d.ts +3 -0
- package/dist/shared/appListColumns.js +66 -0
- package/dist/shared/appLocale.d.ts +36 -0
- package/dist/shared/appLocale.js +86 -0
- package/dist/shared/appMessages.d.ts +44 -0
- package/dist/shared/appMessages.js +78 -0
- package/dist/shared/appNoun.d.ts +21 -0
- package/dist/shared/appNoun.js +32 -0
- package/dist/shared/autoBucket.d.ts +98 -0
- package/dist/shared/autoBucket.js +305 -0
- package/dist/shared/autoValues.d.ts +25 -0
- package/dist/shared/autoValues.js +25 -0
- package/dist/shared/breakdown.d.ts +228 -0
- package/dist/shared/breakdown.js +557 -0
- package/dist/shared/breakdowntext.d.ts +41 -0
- package/dist/shared/breakdowntext.js +400 -0
- package/dist/shared/builtInThemes.d.ts +2 -0
- package/dist/shared/builtInThemes.js +771 -0
- package/dist/shared/chartSeparation.d.ts +11 -0
- package/dist/shared/chartSeparation.js +58 -0
- package/dist/shared/clauses.d.ts +22 -0
- package/dist/shared/clauses.js +97 -0
- package/dist/shared/columnCaption.d.ts +16 -0
- package/dist/shared/columnCaption.js +90 -0
- package/dist/shared/commandFieldPath.d.ts +2 -0
- package/dist/shared/commandFieldPath.js +7 -0
- package/dist/shared/commandWire.d.ts +26 -0
- package/dist/shared/commandWire.js +41 -0
- package/dist/shared/computed.d.ts +161 -0
- package/dist/shared/computed.js +378 -0
- package/dist/shared/computedParse.d.ts +13 -0
- package/dist/shared/computedParse.js +278 -0
- package/dist/shared/computedValue.d.ts +47 -0
- package/dist/shared/computedValue.js +191 -0
- package/dist/shared/connection.d.ts +30 -0
- package/dist/shared/connection.js +1 -0
- package/dist/shared/csv.d.ts +20 -0
- package/dist/shared/csv.js +63 -0
- package/dist/shared/dashLayout.d.ts +30 -0
- package/dist/shared/dashLayout.js +132 -0
- package/dist/shared/dashboardAsks.d.ts +93 -0
- package/dist/shared/dashboardAsks.js +129 -0
- package/dist/shared/dashboardTrend.d.ts +20 -0
- package/dist/shared/dashboardTrend.js +50 -0
- package/dist/shared/declaredReferences.d.ts +50 -0
- package/dist/shared/declaredReferences.js +202 -0
- package/dist/shared/definedFields.d.ts +63 -0
- package/dist/shared/definedFields.js +103 -0
- package/dist/shared/definedValues.d.ts +63 -0
- package/dist/shared/definedValues.js +184 -0
- package/dist/shared/displayDefaults.d.ts +135 -0
- package/dist/shared/displayDefaults.js +529 -0
- package/dist/shared/dueDate.d.ts +6 -0
- package/dist/shared/dueDate.js +6 -0
- package/dist/shared/duration.d.ts +4 -0
- package/dist/shared/duration.js +23 -0
- package/dist/shared/fileBounds.d.ts +9 -0
- package/dist/shared/fileBounds.js +9 -0
- package/dist/shared/filter.d.ts +217 -0
- package/dist/shared/filter.js +305 -0
- package/dist/shared/firstPaint.d.ts +24 -0
- package/dist/shared/firstPaint.js +33 -0
- package/dist/shared/form.d.ts +21 -0
- package/dist/shared/form.js +25 -0
- package/dist/shared/formValues.d.ts +104 -0
- package/dist/shared/formValues.js +352 -0
- package/dist/shared/funnel.d.ts +45 -0
- package/dist/shared/funnel.js +108 -0
- package/dist/shared/httpOperations.d.ts +48 -0
- package/dist/shared/httpOperations.js +9 -0
- package/dist/shared/iconGlyphs.d.ts +4 -0
- package/dist/shared/iconGlyphs.js +151 -0
- package/dist/shared/iconWeights.d.ts +3 -0
- package/dist/shared/iconWeights.js +162 -0
- package/dist/shared/imageWidths.d.ts +32 -0
- package/dist/shared/imageWidths.js +38 -0
- package/dist/shared/keysetPage.d.ts +64 -0
- package/dist/shared/keysetPage.js +161 -0
- package/dist/shared/like.d.ts +20 -0
- package/dist/shared/like.js +29 -0
- package/dist/shared/listEmpty.d.ts +12 -0
- package/dist/shared/listEmpty.js +36 -0
- package/dist/shared/listFilters.d.ts +28 -0
- package/dist/shared/listFilters.js +84 -0
- package/dist/shared/listPresentations.d.ts +199 -0
- package/dist/shared/listPresentations.js +7 -0
- package/dist/shared/listQuestion.d.ts +52 -0
- package/dist/shared/listQuestion.js +137 -0
- package/dist/shared/lookPalettes.d.ts +62 -0
- package/dist/shared/lookPalettes.js +306 -0
- package/dist/shared/maskQuoted.d.ts +24 -0
- package/dist/shared/maskQuoted.js +48 -0
- package/dist/shared/mentionLabel.d.ts +19 -0
- package/dist/shared/mentionLabel.js +38 -0
- package/dist/shared/mentionLookup.d.ts +17 -0
- package/dist/shared/mentionLookup.js +64 -0
- package/dist/shared/menuCounts.d.ts +16 -0
- package/dist/shared/menuCounts.js +74 -0
- package/dist/shared/model.d.ts +79 -0
- package/dist/shared/model.js +153 -0
- package/dist/shared/money.d.ts +44 -0
- package/dist/shared/money.js +81 -0
- package/dist/shared/moneyEntry.d.ts +7 -0
- package/dist/shared/moneyEntry.js +27 -0
- package/dist/shared/mount.d.ts +118 -0
- package/dist/shared/mount.js +248 -0
- package/dist/shared/niceTicks.d.ts +26 -0
- package/dist/shared/niceTicks.js +50 -0
- package/dist/shared/order.d.ts +59 -0
- package/dist/shared/order.js +133 -0
- package/dist/shared/page.d.ts +135 -0
- package/dist/shared/page.js +1187 -0
- package/dist/shared/pageAnatomy.d.ts +99 -0
- package/dist/shared/pageAnatomy.js +370 -0
- package/dist/shared/pageConfig.d.ts +25 -0
- package/dist/shared/pageConfig.js +1308 -0
- package/dist/shared/pageEmptyActions.d.ts +12 -0
- package/dist/shared/pageEmptyActions.js +20 -0
- package/dist/shared/pageLayouts.d.ts +72 -0
- package/dist/shared/pageLayouts.js +205 -0
- package/dist/shared/pageModel.d.ts +785 -0
- package/dist/shared/pageModel.js +121 -0
- package/dist/shared/pagePaths.d.ts +180 -0
- package/dist/shared/pagePaths.js +869 -0
- package/dist/shared/pagePlans.d.ts +52 -0
- package/dist/shared/pagePlans.js +108 -0
- package/dist/shared/pageRoutes.d.ts +9 -0
- package/dist/shared/pageRoutes.js +9 -0
- package/dist/shared/query.d.ts +166 -0
- package/dist/shared/query.js +1302 -0
- package/dist/shared/queryDates.d.ts +12 -0
- package/dist/shared/queryDates.js +101 -0
- package/dist/shared/queryOperands.d.ts +99 -0
- package/dist/shared/queryOperands.js +131 -0
- package/dist/shared/reads.d.ts +103 -0
- package/dist/shared/reads.js +154 -0
- package/dist/shared/recordLabel.d.ts +51 -0
- package/dist/shared/recordLabel.js +123 -0
- package/dist/shared/recordReadKeys.d.ts +30 -0
- package/dist/shared/recordReadKeys.js +51 -0
- package/dist/shared/recordReads.d.ts +268 -0
- package/dist/shared/recordReads.js +368 -0
- package/dist/shared/recordview.d.ts +198 -0
- package/dist/shared/recordview.js +356 -0
- package/dist/shared/referenceModel.d.ts +58 -0
- package/dist/shared/referenceModel.js +194 -0
- package/dist/shared/refusal.d.ts +64 -0
- package/dist/shared/refusal.js +144 -0
- package/dist/shared/relatedCreate.d.ts +30 -0
- package/dist/shared/relatedCreate.js +162 -0
- package/dist/shared/resourceHttp.d.ts +464 -0
- package/dist/shared/resourceHttp.js +1 -0
- package/dist/shared/richText.d.ts +85 -0
- package/dist/shared/richText.js +305 -0
- package/dist/shared/rollups.d.ts +143 -0
- package/dist/shared/rollups.js +64 -0
- package/dist/shared/rowScope.d.ts +72 -0
- package/dist/shared/rowScope.js +376 -0
- package/dist/shared/runtimeTables.d.ts +44 -0
- package/dist/shared/runtimeTables.js +79 -0
- package/dist/shared/schema.d.ts +523 -0
- package/dist/shared/schema.js +627 -0
- package/dist/shared/schematext.d.ts +38 -0
- package/dist/shared/schematext.js +101 -0
- package/dist/shared/scopeCatalog.d.ts +29 -0
- package/dist/shared/scopeCatalog.js +468 -0
- package/dist/shared/servedApp.d.ts +681 -0
- package/dist/shared/servedApp.js +45 -0
- package/dist/shared/sessionLease.d.ts +34 -0
- package/dist/shared/sessionLease.js +3 -0
- package/dist/shared/shape.d.ts +55 -0
- package/dist/shared/shape.js +168 -0
- package/dist/shared/slug.d.ts +1 -0
- package/dist/shared/slug.js +12 -0
- package/dist/shared/sortText.d.ts +14 -0
- package/dist/shared/sortText.js +26 -0
- package/dist/shared/sqlRelation.d.ts +4 -0
- package/dist/shared/sqlRelation.js +8 -0
- package/dist/shared/sqlsaved.d.ts +44 -0
- package/dist/shared/sqlsaved.js +63 -0
- package/dist/shared/stitchedPaths.d.ts +27 -0
- package/dist/shared/stitchedPaths.js +38 -0
- package/dist/shared/structuredFilter.d.ts +22 -0
- package/dist/shared/structuredFilter.js +1 -0
- package/dist/shared/subtitlePath.d.ts +20 -0
- package/dist/shared/subtitlePath.js +24 -0
- package/dist/shared/suggest.d.ts +18 -0
- package/dist/shared/suggest.js +59 -0
- package/dist/shared/tableSizing.d.ts +4 -0
- package/dist/shared/tableSizing.js +9 -0
- package/dist/shared/tagLists.d.ts +57 -0
- package/dist/shared/tagLists.js +34 -0
- package/dist/shared/textRules.d.ts +54 -0
- package/dist/shared/textRules.js +133 -0
- package/dist/shared/theme.d.ts +94 -0
- package/dist/shared/theme.js +800 -0
- package/dist/shared/themeColor.d.ts +34 -0
- package/dist/shared/themeColor.js +109 -0
- package/dist/shared/themeFaces.d.ts +30 -0
- package/dist/shared/themeFaces.js +42 -0
- package/dist/shared/themeInk.d.ts +20 -0
- package/dist/shared/themeInk.js +52 -0
- package/dist/shared/themeLooks.d.ts +9 -0
- package/dist/shared/themeLooks.js +572 -0
- package/dist/shared/themeParts.d.ts +26 -0
- package/dist/shared/themeParts.js +71 -0
- package/dist/shared/themePartsCheck.d.ts +21 -0
- package/dist/shared/themePartsCheck.js +91 -0
- package/dist/shared/themePresets.d.ts +85 -0
- package/dist/shared/themePresets.js +139 -0
- package/dist/shared/themeRecipeWords.d.ts +156 -0
- package/dist/shared/themeRecipeWords.js +156 -0
- package/dist/shared/themeRecipes.d.ts +213 -0
- package/dist/shared/themeRecipes.js +234 -0
- package/dist/shared/themeResolve.d.ts +55 -0
- package/dist/shared/themeResolve.js +52 -0
- package/dist/shared/themeTokens.d.ts +107 -0
- package/dist/shared/themeTokens.js +116 -0
- package/dist/shared/themeType.d.ts +38 -0
- package/dist/shared/themeType.js +205 -0
- package/dist/shared/unitWord.d.ts +4 -0
- package/dist/shared/unitWord.js +37 -0
- package/dist/shared/view.d.ts +195 -0
- package/dist/shared/view.js +987 -0
- package/dist/shared/viewLabels.d.ts +47 -0
- package/dist/shared/viewLabels.js +459 -0
- package/dist/shared/viewPaths.d.ts +248 -0
- package/dist/shared/viewPaths.js +294 -0
- package/dist/shared/viewtext.d.ts +57 -0
- package/dist/shared/viewtext.js +282 -0
- package/dist/shared/vocabulary.d.ts +71 -0
- package/dist/shared/vocabulary.js +249 -0
- package/dist/shared/weekStart.d.ts +7 -0
- package/dist/shared/weekStart.js +36 -0
- package/mark.svg +1 -0
- package/package.json +261 -4
- package/schema/model.d.ts +298 -0
- package/schema/theme.d.ts +587 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function compileCacheDirectory(env: NodeJS.ProcessEnv): string | undefined;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the built server keeps V8's compile cache (`module.enableCompileCache`).
|
|
3
|
+
*
|
|
4
|
+
* Under the user's cache directory rather than Node's default of the OS temp
|
|
5
|
+
* directory: the temp directory is emptied on reboot on some systems and is
|
|
6
|
+
* shared on others, and the cache is only worth having if the next start finds
|
|
7
|
+
* it. `NODE_COMPILE_CACHE` names another place, and
|
|
8
|
+
* `NODE_DISABLE_COMPILE_CACHE` turns it off, as they do for Node itself.
|
|
9
|
+
* Entries are keyed by file content and V8 version, so two installed versions
|
|
10
|
+
* never read each other's.
|
|
11
|
+
*/
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { product } from './product.js';
|
|
15
|
+
export function compileCacheDirectory(env) {
|
|
16
|
+
if (env.NODE_DISABLE_COMPILE_CACHE)
|
|
17
|
+
return undefined;
|
|
18
|
+
if (env.NODE_COMPILE_CACHE)
|
|
19
|
+
return env.NODE_COMPILE_CACHE;
|
|
20
|
+
if (env.XDG_CACHE_HOME)
|
|
21
|
+
return join(env.XDG_CACHE_HOME, product(), 'compile');
|
|
22
|
+
let home;
|
|
23
|
+
try {
|
|
24
|
+
home = homedir();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return home ? join(home, '.cache', product(), 'compile') : undefined;
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function configLocations(explicit?: string, env?: NodeJS.ProcessEnv): string[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a config file may live, in order.
|
|
3
|
+
*
|
|
4
|
+
* Project-local first, because a repo that ships a `mistri.json` (`tablewalk.json` for the browser) should win
|
|
5
|
+
* for anyone working in it; the user's own file is the fallback.
|
|
6
|
+
*/
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { configFileName, product } from '../product.js';
|
|
10
|
+
export function configLocations(explicit, env = process.env) {
|
|
11
|
+
if (explicit)
|
|
12
|
+
return [explicit];
|
|
13
|
+
const xdg = env.XDG_CONFIG_HOME || join(homedir(), '.config');
|
|
14
|
+
return [join(process.cwd(), configFileName()), join(process.cwd(), `.${configFileName()}`), join(xdg, product(), 'connections.json')];
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A SQLite target as a config file wrote it, said from that file's folder: `./shop.db`, `sqlite:shop.db` and
|
|
3
|
+
* `file:./shop.db` beside the config open that file wherever tablewalk was started — a check run from an App's folder
|
|
4
|
+
* (`--config ../tablewalk.json`) opened a new, empty `./shop.db` there instead. An absolute path, a server URL and a
|
|
5
|
+
* target with no folder to read it from are left as written.
|
|
6
|
+
*/
|
|
7
|
+
export declare function sqliteTargetFrom(url: string, base: string | undefined): string;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one rule for a path a config file writes: it is the file's folder's. One typed on the command line (--db,
|
|
3
|
+
* --app, --config) is the working directory's, and so is a value from the environment. Kept apart from
|
|
4
|
+
* connections.ts so the testing entry, which copies a config's databases, reads it without the registry.
|
|
5
|
+
*/
|
|
6
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
/**
|
|
9
|
+
* A SQLite target as a config file wrote it, said from that file's folder: `./shop.db`, `sqlite:shop.db` and
|
|
10
|
+
* `file:./shop.db` beside the config open that file wherever tablewalk was started — a check run from an App's folder
|
|
11
|
+
* (`--config ../tablewalk.json`) opened a new, empty `./shop.db` there instead. An absolute path, a server URL and a
|
|
12
|
+
* target with no folder to read it from are left as written.
|
|
13
|
+
*/
|
|
14
|
+
export function sqliteTargetFrom(url, base) {
|
|
15
|
+
if (!base || !url || url === ':memory:' || url.includes('$'))
|
|
16
|
+
return url;
|
|
17
|
+
if (/^file:/i.test(url)) {
|
|
18
|
+
let file;
|
|
19
|
+
try {
|
|
20
|
+
file = /^file:\/\//i.test(url) ? fileURLToPath(url) : decodeURIComponent(url.slice('file:'.length).split('?')[0]);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return url;
|
|
24
|
+
}
|
|
25
|
+
return isAbsolute(file) ? file : resolve(base, file);
|
|
26
|
+
}
|
|
27
|
+
if (/^sqlite:/i.test(url)) {
|
|
28
|
+
const file = url.replace(/^sqlite:(\/\/)?/i, '');
|
|
29
|
+
return !file || file === ':memory:' || isAbsolute(file) ? url : `sqlite:${resolve(base, file)}`;
|
|
30
|
+
}
|
|
31
|
+
if (url.includes('://'))
|
|
32
|
+
return url;
|
|
33
|
+
return isAbsolute(url) ? url : resolve(base, url);
|
|
34
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sections of tablewalk.json beside `connections`.
|
|
3
|
+
*
|
|
4
|
+
* The engine reads `connections`, `hidden`, `pool` and the cache (connections.ts, cacheService.ts). Every other
|
|
5
|
+
* entry a config file lists beside the databases — an email service, an identity provider, a webhook, a search
|
|
6
|
+
* engine — and every other top-level key — `analytics` — belongs to the App framework. Its parsers are a table
|
|
7
|
+
* (serviceConnections.ts) that a main hands to `loadConfig`: the sections a binary owns are the ones it passes, and
|
|
8
|
+
* an entry of a kind it does not pass is refused there. The file stays one file; the engine neither knows those
|
|
9
|
+
* sections' shapes nor imports their parsers.
|
|
10
|
+
*
|
|
11
|
+
* A kind's config type is added to `ServiceKinds` by declaration merging from the module that registers it, so
|
|
12
|
+
* `ServiceConfig` is the union of the kinds the program has, and a reader of `Registry.serviceConfigs()` sees all of
|
|
13
|
+
* them without the engine naming one.
|
|
14
|
+
*/
|
|
15
|
+
/** Kind → the shape of its entry once checked. A registering module adds its own kinds with `declare module`. */
|
|
16
|
+
export interface ServiceKinds {
|
|
17
|
+
}
|
|
18
|
+
export type ServiceKind = keyof ServiceKinds & string;
|
|
19
|
+
export type ServiceConfig = ServiceKinds[keyof ServiceKinds];
|
|
20
|
+
/** How one kind of service entry is read, checked and written back. */
|
|
21
|
+
interface ServiceKindSpec {
|
|
22
|
+
/** Found by its issuer or by this server itself, so its entry may leave out "url". */
|
|
23
|
+
urlless?: boolean;
|
|
24
|
+
/** What a deployment has one of, in a sentence ("email service"): a second entry of the kind is refused. */
|
|
25
|
+
singleton?: string;
|
|
26
|
+
/** The entry, checked. Throws naming the field: a config someone wrote is refused rather than half-read. */
|
|
27
|
+
parse(entry: Record<string, unknown>, path: string): ServiceConfig;
|
|
28
|
+
/** The entry as written, for saving: the references stay references. */
|
|
29
|
+
entry(service: never): Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
/** The sections of a config file a binary owns: its service kinds, the checks across them, its top-level keys. */
|
|
32
|
+
export interface ConfigSections {
|
|
33
|
+
kinds: Readonly<Record<string, ServiceKindSpec>>;
|
|
34
|
+
/** A check across every service the file names, run once they are all read (a scim directory names its providers). */
|
|
35
|
+
checks: ReadonlyArray<(services: readonly ServiceConfig[], path: string) => void>;
|
|
36
|
+
/** Top-level keys of the file other than `connections`; each parser gets the value and the file's path. */
|
|
37
|
+
top: Readonly<Record<string, (value: unknown, path: string) => unknown>>;
|
|
38
|
+
/**
|
|
39
|
+
* What becomes of an entry of a kind these sections do not name. Absent, it is refused. `'keep'` is the
|
|
40
|
+
* database browser's (cli/browserCommands.ts): the one file is shared with the App framework, whose services
|
|
41
|
+
* the browser neither reads nor serves, so their entries are kept as written, unread, and a save writes them
|
|
42
|
+
* back where they were.
|
|
43
|
+
*/
|
|
44
|
+
others?: 'keep';
|
|
45
|
+
}
|
|
46
|
+
/** Sections side by side; the kinds and keys of a later part win, its checks follow. */
|
|
47
|
+
export declare function mergeSections(...parts: ConfigSections[]): ConfigSections;
|
|
48
|
+
/** Whether `sections` keep this entry unread: a kind they do not name, which another reader of the file does. */
|
|
49
|
+
export declare const keptUnread: (sections: ConfigSections, kind: unknown) => boolean;
|
|
50
|
+
export declare const isServiceKind: (sections: ConfigSections, kind: unknown) => kind is ServiceKind;
|
|
51
|
+
/** Whether an entry of this kind is found by something other than a url. */
|
|
52
|
+
export declare const isUrlless: (sections: ConfigSections, kind: unknown) => boolean;
|
|
53
|
+
/** How a refusal names an entry: the file and the connection. */
|
|
54
|
+
export declare const serviceWhere: (entry: Record<string, unknown>, path: string) => string;
|
|
55
|
+
export declare function serviceConnectionOf(sections: ConfigSections, entry: Record<string, unknown>, path: string): ServiceConfig;
|
|
56
|
+
export declare function serviceEntry(sections: ConfigSections, service: ServiceConfig): Record<string, unknown>;
|
|
57
|
+
/** At most one of a singleton kind, then each check. */
|
|
58
|
+
export declare function checkServices(sections: ConfigSections, services: readonly ServiceConfig[], path: string): void;
|
|
59
|
+
/** The top-level keys the file has, parsed. */
|
|
60
|
+
export declare function parseConfigSections(sections: ConfigSections, parsed: unknown, path: string): Record<string, unknown>;
|
|
61
|
+
export declare const SHARED_SERVICE_KEYS: string[];
|
|
62
|
+
/** Refuse a key the kind does not take, and a flag that is not a boolean. */
|
|
63
|
+
export declare function checkServiceKeys(entry: Record<string, unknown>, kind: string, keys: readonly string[], where: string): void;
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sections of tablewalk.json beside `connections`.
|
|
3
|
+
*
|
|
4
|
+
* The engine reads `connections`, `hidden`, `pool` and the cache (connections.ts, cacheService.ts). Every other
|
|
5
|
+
* entry a config file lists beside the databases — an email service, an identity provider, a webhook, a search
|
|
6
|
+
* engine — and every other top-level key — `analytics` — belongs to the App framework. Its parsers are a table
|
|
7
|
+
* (serviceConnections.ts) that a main hands to `loadConfig`: the sections a binary owns are the ones it passes, and
|
|
8
|
+
* an entry of a kind it does not pass is refused there. The file stays one file; the engine neither knows those
|
|
9
|
+
* sections' shapes nor imports their parsers.
|
|
10
|
+
*
|
|
11
|
+
* A kind's config type is added to `ServiceKinds` by declaration merging from the module that registers it, so
|
|
12
|
+
* `ServiceConfig` is the union of the kinds the program has, and a reader of `Registry.serviceConfigs()` sees all of
|
|
13
|
+
* them without the engine naming one.
|
|
14
|
+
*/
|
|
15
|
+
/** Sections side by side; the kinds and keys of a later part win, its checks follow. */
|
|
16
|
+
export function mergeSections(...parts) {
|
|
17
|
+
return {
|
|
18
|
+
kinds: Object.assign({}, ...parts.map((p) => p.kinds)),
|
|
19
|
+
checks: parts.flatMap((p) => p.checks),
|
|
20
|
+
top: Object.assign({}, ...parts.map((p) => p.top)),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Whether `sections` keep this entry unread: a kind they do not name, which another reader of the file does. */
|
|
24
|
+
export const keptUnread = (sections, kind) => sections.others === 'keep' && typeof kind === 'string' && kind !== 'http' && !Object.hasOwn(sections.kinds, kind);
|
|
25
|
+
export const isServiceKind = (sections, kind) => typeof kind === 'string' && Object.hasOwn(sections.kinds, kind);
|
|
26
|
+
/** Whether an entry of this kind is found by something other than a url. */
|
|
27
|
+
export const isUrlless = (sections, kind) => typeof kind === 'string' && sections.kinds[kind]?.urlless === true;
|
|
28
|
+
/** How a refusal names an entry: the file and the connection. */
|
|
29
|
+
export const serviceWhere = (entry, path) => `${path}: connection "${String(entry.name)}"`;
|
|
30
|
+
export function serviceConnectionOf(sections, entry, path) {
|
|
31
|
+
return sections.kinds[entry.kind].parse(entry, path);
|
|
32
|
+
}
|
|
33
|
+
export function serviceEntry(sections, service) {
|
|
34
|
+
return sections.kinds[service.kind].entry(service);
|
|
35
|
+
}
|
|
36
|
+
/** At most one of a singleton kind, then each check. */
|
|
37
|
+
export function checkServices(sections, services, path) {
|
|
38
|
+
for (const [kind, spec] of Object.entries(sections.kinds)) {
|
|
39
|
+
if (!spec.singleton)
|
|
40
|
+
continue;
|
|
41
|
+
const named = services.filter((service) => service.kind === kind);
|
|
42
|
+
if (named.length > 1) {
|
|
43
|
+
throw new Error(`${path} names ${named.length} ${kind} connections (${named.map((c) => `"${c.name}"`).join(', ')}); a deployment has one ${spec.singleton}.`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
for (const check of sections.checks)
|
|
47
|
+
check(services, path);
|
|
48
|
+
}
|
|
49
|
+
/** The top-level keys the file has, parsed. */
|
|
50
|
+
export function parseConfigSections(sections, parsed, path) {
|
|
51
|
+
const out = {};
|
|
52
|
+
for (const [key, parse] of Object.entries(sections.top)) {
|
|
53
|
+
const value = parsed[key];
|
|
54
|
+
if (value !== undefined)
|
|
55
|
+
out[key] = parse(value, path);
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
/* ---- what a plain url-and-auth service (a cache, a search engine) shares ---- */
|
|
60
|
+
export const SHARED_SERVICE_KEYS = ['name', 'kind', 'url', 'auth', 'insecure', 'allowLinkLocal'];
|
|
61
|
+
/** Refuse a key the kind does not take, and a flag that is not a boolean. */
|
|
62
|
+
export function checkServiceKeys(entry, kind, keys, where) {
|
|
63
|
+
const stray = Object.keys(entry).find((key) => !keys.includes(key));
|
|
64
|
+
if (stray) {
|
|
65
|
+
throw new Error(`${where} is a ${kind} connection, which takes no "${stray}". It takes: ${keys.join(', ')}.`);
|
|
66
|
+
}
|
|
67
|
+
for (const flag of ['insecure', 'allowLinkLocal']) {
|
|
68
|
+
if (entry[flag] !== undefined && typeof entry[flag] !== 'boolean') {
|
|
69
|
+
throw new Error(`${where} has "${flag}": ${JSON.stringify(entry[flag])}. It must be true or false, without quotes.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A displayable form of a target with no credential in it.
|
|
3
|
+
*
|
|
4
|
+
* `URL` parses out the password for us; the fallback matters because a
|
|
5
|
+
* malformed URL must not fall through to printing the original string.
|
|
6
|
+
*/
|
|
7
|
+
export declare function redact(url: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Take the credentials out of anything on its way to the browser.
|
|
10
|
+
*
|
|
11
|
+
* `redact` produces the public form of a URL we chose to show. This is for
|
|
12
|
+
* the other direction: text we did not write, going somewhere we did not
|
|
13
|
+
* intend. A driver's failure message quotes what it was handed, and what it
|
|
14
|
+
* was handed is the *resolved* connection string — the one with the password
|
|
15
|
+
* expanded out of the keychain and into it. That message was stored on the
|
|
16
|
+
* entry and served by every `GET /api/connections` from then on.
|
|
17
|
+
*
|
|
18
|
+
* Two passes, because there are two shapes of leak:
|
|
19
|
+
*
|
|
20
|
+
* 1. The whole DSN, echoed. Any `scheme://…` in the text is replaced with
|
|
21
|
+
* its redacted form, so the message keeps saying which host it could not
|
|
22
|
+
* reach — which is the useful half — without the credentials.
|
|
23
|
+
* 2. The password alone, quoted without its URL. Rarer, and caught by
|
|
24
|
+
* sweeping for the literal value.
|
|
25
|
+
*
|
|
26
|
+
* A password shorter than four characters is swept too. It mangles a message
|
|
27
|
+
* that happens to contain those letters, and that is the right trade: a
|
|
28
|
+
* garbled sentence is a nuisance, and a password on screen is not.
|
|
29
|
+
*/
|
|
30
|
+
export declare function scrubSecrets(text: string, ...urls: Array<string | undefined>): string;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A displayable form of a target with no credential in it.
|
|
3
|
+
*
|
|
4
|
+
* `URL` parses out the password for us; the fallback matters because a
|
|
5
|
+
* malformed URL must not fall through to printing the original string.
|
|
6
|
+
*/
|
|
7
|
+
export function redact(url) {
|
|
8
|
+
if (!/^[a-z][\w+.-]*:\/\//i.test(url)) {
|
|
9
|
+
// A bare file path. Show the file name, not the whole tree.
|
|
10
|
+
return url.split('/').pop() || url;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const parsed = new URL(url);
|
|
14
|
+
const user = parsed.username ? `${parsed.username}@` : '';
|
|
15
|
+
const port = parsed.port ? `:${parsed.port}` : '';
|
|
16
|
+
return `${user}${parsed.hostname}${port}${parsed.pathname}`;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return '(connection)';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Take the credentials out of anything on its way to the browser.
|
|
24
|
+
*
|
|
25
|
+
* `redact` produces the public form of a URL we chose to show. This is for
|
|
26
|
+
* the other direction: text we did not write, going somewhere we did not
|
|
27
|
+
* intend. A driver's failure message quotes what it was handed, and what it
|
|
28
|
+
* was handed is the *resolved* connection string — the one with the password
|
|
29
|
+
* expanded out of the keychain and into it. That message was stored on the
|
|
30
|
+
* entry and served by every `GET /api/connections` from then on.
|
|
31
|
+
*
|
|
32
|
+
* Two passes, because there are two shapes of leak:
|
|
33
|
+
*
|
|
34
|
+
* 1. The whole DSN, echoed. Any `scheme://…` in the text is replaced with
|
|
35
|
+
* its redacted form, so the message keeps saying which host it could not
|
|
36
|
+
* reach — which is the useful half — without the credentials.
|
|
37
|
+
* 2. The password alone, quoted without its URL. Rarer, and caught by
|
|
38
|
+
* sweeping for the literal value.
|
|
39
|
+
*
|
|
40
|
+
* A password shorter than four characters is swept too. It mangles a message
|
|
41
|
+
* that happens to contain those letters, and that is the right trade: a
|
|
42
|
+
* garbled sentence is a nuisance, and a password on screen is not.
|
|
43
|
+
*/
|
|
44
|
+
export function scrubSecrets(text, ...urls) {
|
|
45
|
+
let out = text.replace(/\b[a-z][\w+.-]*:\/\/[^\s'"`,)\]]+/gi, (match) => redact(match));
|
|
46
|
+
for (const url of urls) {
|
|
47
|
+
if (!url)
|
|
48
|
+
continue;
|
|
49
|
+
for (const secret of passwordsIn(url)) {
|
|
50
|
+
if (!secret)
|
|
51
|
+
continue;
|
|
52
|
+
out = out.split(secret).join('\u2022\u2022\u2022\u2022');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The password in a URL, in both the spellings it can appear in.
|
|
59
|
+
*
|
|
60
|
+
* `new URL` gives it percent-decoded, and a driver may quote either that or
|
|
61
|
+
* the raw form it was handed. Both are swept.
|
|
62
|
+
*/
|
|
63
|
+
function passwordsIn(url) {
|
|
64
|
+
const found = new Set();
|
|
65
|
+
try {
|
|
66
|
+
const parsed = new URL(url);
|
|
67
|
+
if (parsed.password) {
|
|
68
|
+
found.add(parsed.password);
|
|
69
|
+
found.add(decodeURIComponent(parsed.password));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
/* Not a URL — a file path, or a string with a `${VAR}` still in it. There
|
|
74
|
+
is no password to find, and failing to parse is not an error here. */
|
|
75
|
+
}
|
|
76
|
+
return [...found];
|
|
77
|
+
}
|