@teamscala/service-boot 0.23.284 → 0.23.286

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 (123) hide show
  1. package/package.json +1006 -1014
  2. package/src/agreement-gate.d.ts +19 -0
  3. package/src/asset-cache-key.d.ts +11 -0
  4. package/src/asset-optimize.d.ts +17 -0
  5. package/src/asset-proxy.d.ts +11 -0
  6. package/src/asset-social-card.d.ts +17 -0
  7. package/src/attach-agreement-magic.d.ts +20 -0
  8. package/src/attach-portal-members.d.ts +23 -0
  9. package/src/attach-proposal-accept.d.ts +26 -0
  10. package/src/attach-proposal-magic.d.ts +18 -0
  11. package/src/attach-transfers-upload.d.ts +27 -0
  12. package/src/auth-gate.d.ts +28 -0
  13. package/src/bind-page-handler.d.ts +18 -0
  14. package/src/build-client-assets/input-hashing.d.ts +25 -0
  15. package/src/build-client-assets/source-candidates.d.ts +27 -0
  16. package/src/build-client-assets.d.ts +50 -0
  17. package/src/compose-page-title.d.ts +41 -0
  18. package/src/content-gate/access.d.ts +15 -0
  19. package/src/content-gate/config-types.d.ts +99 -0
  20. package/src/content-gate/gate.d.ts +13 -0
  21. package/src/content-gate/parse-cookie.d.ts +9 -0
  22. package/src/content-gate/token.d.ts +48 -0
  23. package/src/content-page-floor.d.ts +39 -0
  24. package/src/discover-blocks.d.ts +28 -0
  25. package/src/expand-roster.d.ts +34 -0
  26. package/src/fn-routers/agreement-completion-email.d.ts +14 -0
  27. package/src/fn-routers/agreement-send-router.d.ts +82 -0
  28. package/src/fn-routers/ai-health-router.d.ts +35 -0
  29. package/src/fn-routers/auth-router.d.ts +47 -0
  30. package/src/fn-routers/cache-admin-router.d.ts +57 -0
  31. package/src/fn-routers/chat-session-router.d.ts +219 -0
  32. package/src/fn-routers/email-defaults.d.ts +1 -0
  33. package/src/fn-routers/email-link-ttl.d.ts +1 -0
  34. package/src/fn-routers/index.d.ts +18 -0
  35. package/src/fn-routers/panel-data-router.d.ts +19 -0
  36. package/src/fn-routers/persist-chat-messages.d.ts +36 -0
  37. package/src/fn-routers/plans-router.d.ts +25 -0
  38. package/src/fn-routers/proposal-send-router.d.ts +58 -0
  39. package/src/fn-routers/public-agreement-router.d.ts +281 -0
  40. package/src/fn-routers/public-assessment-router.d.ts +68 -0
  41. package/src/fn-routers/public-gpt-session-router.d.ts +125 -0
  42. package/src/fn-routers/sign-in-flow-router.d.ts +75 -0
  43. package/src/fn-routers/task-sync-dispatch.d.ts +61 -0
  44. package/src/fn-routers/task-sync-router.d.ts +376 -0
  45. package/src/fn-routers/task-sync-router.test.ts +32 -0
  46. package/src/fn-routers/task-sync-router.ts +27 -1
  47. package/src/fn-routers/tasks-router.d.ts +25 -0
  48. package/src/fn-routers/user-preferences-router.d.ts +77 -0
  49. package/src/fn-routers/work-items-router.d.ts +102 -0
  50. package/src/gate-ttls.d.ts +6 -0
  51. package/src/gpt-gate.d.ts +25 -0
  52. package/src/handlers/bun-stable-watch.d.ts +1 -0
  53. package/src/handlers/projects-digest.d.ts +26 -0
  54. package/src/handlers/prune-stale-data.d.ts +30 -0
  55. package/src/handlers/registry-stale-inactive-sweep.d.ts +1 -0
  56. package/src/handlers/scala-tools-currency-watch.d.ts +1 -0
  57. package/src/handlers/scheduled-browser-tests.d.ts +1 -0
  58. package/src/handlers/sweep-event-log.d.ts +1 -0
  59. package/src/handlers/sweep-host-cache.d.ts +1 -0
  60. package/src/handlers/upstream-issue-sync.d.ts +1 -0
  61. package/src/handlers/whatsapp-liveness-logic.d.ts +34 -0
  62. package/src/handlers/whatsapp-liveness.d.ts +4 -0
  63. package/src/hono-error-handler.d.ts +25 -0
  64. package/src/install-harness.d.ts +45 -0
  65. package/src/install-logging.d.ts +34 -0
  66. package/src/load-service-install-row.d.ts +24 -0
  67. package/src/load-service-prisma-client.d.ts +18 -0
  68. package/src/mount-orpc-router.d.ts +15 -0
  69. package/src/mount-server-packages.d.ts +29 -0
  70. package/src/mount.d.ts +9 -0
  71. package/src/mutable-app-ref.d.ts +38 -0
  72. package/src/page-route-shell-types.d.ts +12 -0
  73. package/src/page-server-orpc/audit-revert-router.d.ts +37 -0
  74. package/src/page-server-orpc/hub-mcp-client.d.ts +12 -0
  75. package/src/page-server-orpc/portal-diagnostics-router.d.ts +49 -0
  76. package/src/page-server-orpc/puck-pages-router.d.ts +58 -0
  77. package/src/page-server-orpc/server-client.d.ts +16 -0
  78. package/src/page-server-orpc/templates-router.d.ts +34 -0
  79. package/src/page-server-orpc/user-preferences-router.d.ts +79 -0
  80. package/src/pg-boss-handler-registry.d.ts +25 -0
  81. package/src/pg-boss-mount.d.ts +39 -0
  82. package/src/proposal-authorized-emails.d.ts +28 -0
  83. package/src/proposal-chat-inject.d.ts +17 -0
  84. package/src/proposal-gate.d.ts +18 -0
  85. package/src/read-html-template.d.ts +38 -0
  86. package/src/read-viewport-from-request.d.ts +18 -0
  87. package/src/readiness-gate.d.ts +16 -0
  88. package/src/register-api-routes.d.ts +18 -0
  89. package/src/register-crash-handlers.d.ts +15 -0
  90. package/src/register-page-routes.d.ts +27 -0
  91. package/src/register-page-server-client.d.ts +11 -0
  92. package/src/register-registry-page-route/ai-chat-prefetch.d.ts +13 -0
  93. package/src/register-registry-page-route/graph-cache.d.ts +30 -0
  94. package/src/register-registry-page-route/meta-title.d.ts +2 -0
  95. package/src/register-registry-page-route/proposal-approval-email-token.d.ts +14 -0
  96. package/src/register-registry-page-route/proposal-brand-stamping.d.ts +28 -0
  97. package/src/register-registry-page-route/resolve-page-data.d.ts +1 -0
  98. package/src/register-registry-page-route.d.ts +27 -0
  99. package/src/register-static-assets.d.ts +13 -0
  100. package/src/register-ws-routes.d.ts +28 -0
  101. package/src/resolve-app-base-url.d.ts +13 -0
  102. package/src/resolve-brand-favicon.d.ts +28 -0
  103. package/src/resolve-from-loader-config.d.ts +32 -0
  104. package/src/resolve-service-context.d.ts +17 -0
  105. package/src/resolve-theme-mode.d.ts +42 -0
  106. package/src/resolvers/fetch-org-brand.d.ts +2 -0
  107. package/src/resolvers/portal-route-paths.d.ts +39 -0
  108. package/src/resolvers/website-by-host-map.d.ts +12 -0
  109. package/src/resource-chat-inject.d.ts +46 -0
  110. package/src/resource-not-found.d.ts +60 -0
  111. package/src/run-boot-hook-list.d.ts +19 -0
  112. package/src/run-boot-hooks.d.ts +31 -0
  113. package/src/scala-tools-currency-watchdog.d.ts +10 -0
  114. package/src/security-headers.d.ts +12 -0
  115. package/src/serve/serve.d.ts +46 -0
  116. package/src/server-error-page.d.ts +29 -0
  117. package/src/start-scheduled-jobs.d.ts +18 -0
  118. package/src/two-phase-boot.d.ts +93 -0
  119. package/src/two-phase-boot.ts +3 -0
  120. package/src/types.d.ts +46 -0
  121. package/src/ui-service.d.ts +46 -0
  122. package/src/ui-service.ts +10 -1
  123. package/src/ws-boot-self-test.d.ts +19 -0
package/src/types.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @system service-boot
3
+ * @status handwritten
4
+ * @edit edit directly
5
+ *
6
+ * Shared type definitions for service-boot boot helpers.
7
+ */
8
+ type RendererComponent = (props: Record<string, unknown>) => unknown;
9
+ export interface RendererComponentEntry {
10
+ render: RendererComponent;
11
+ fields?: Record<string, {
12
+ type: string;
13
+ }>;
14
+ /** block_schema.defaults, carried onto the entry by discoverBlocks so
15
+ * buildPuckConfig merges them under authored props at SSR
16
+ * (blocks-fully-programmable). */
17
+ defaultProps?: Record<string, unknown>;
18
+ }
19
+ export interface PageHandlerExtras {
20
+ htmlTemplate: string;
21
+ userId?: string;
22
+ orgId?: string;
23
+ searchParams?: Record<string, string>;
24
+ nonce?: string;
25
+ }
26
+ export type CreatePageHandler = (config: PageHandlerConfig) => (request: Request, extras: PageHandlerExtras) => Promise<Response>;
27
+ export interface PageHandlerConfig {
28
+ components: Record<string, RendererComponentEntry>;
29
+ providers?: string[];
30
+ loadData: (request: Request) => Promise<unknown>;
31
+ renderMode?: "public" | "portals" | "utility";
32
+ /**
33
+ * Owning service slug — used by the page-server render catch to resolve
34
+ * the branded logo on the render-error page. Mirrors service-runtime's
35
+ * PageHandlerConfig.
36
+ */
37
+ serviceSlug?: string;
38
+ /**
39
+ * Redirect a signed-in user's `/` to their org-scoped portal dashboard.
40
+ * Set only for services serving a `/*` catchall page_route (the portal);
41
+ * single-site portal-mode services serve their real page at `/`.
42
+ * Mirrors service-runtime's PageHandlerConfig (1.15.82).
43
+ */
44
+ portalHomeRedirect?: boolean;
45
+ }
46
+ export type { ServiceInstallConfig } from "@teamscala/db/registry/loader/load-service-install-row";
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @system ui-service-boot
3
+ * @status handwritten
4
+ * @edit edit directly
5
+ *
6
+ * Boots a `kind: "ui"` service. Reads the service_install registry row and
7
+ * orchestrates a fixed pipeline of single-purpose stages onto one Hono app
8
+ * served by @teamscala/service-runtime/serve (one Bun.serve in dev and prod).
9
+ */
10
+ import { Hono } from "hono";
11
+ import type { ServiceInstallConfig } from "./load-service-install-row.ts";
12
+ export interface ResolvedBlock {
13
+ slug: string;
14
+ packagePath: string;
15
+ }
16
+ export interface UiServiceBootResult {
17
+ kind: "ui";
18
+ blocks: ResolvedBlock[];
19
+ routes: string[];
20
+ port: number;
21
+ app: Hono;
22
+ }
23
+ /**
24
+ * Page-server symbols injected by the caller. service-boot is tier 4
25
+ * (server) and must not import from tier 2 (`@teamscala/service-runtime`)
26
+ * per `installer-and-runtime` Rule 1. The runtime's bin entrypoint
27
+ * boot pipeline imports these from `page-server/` (same package —
28
+ * legal) and passes them down here.
29
+ */
30
+ export interface PageServerDeps {
31
+ createPageHandler: import("./types.ts").CreatePageHandler;
32
+ }
33
+ /**
34
+ * Boots a UI service using two-phase boot for fast availability.
35
+ *
36
+ * Phase 1 (fast): Build and serve minimal tool-only app (ORPC, data routes,
37
+ * auth gates). This becomes available within ~10s, enabling the MCP tool
38
+ * surface to accept requests immediately after restart.
39
+ *
40
+ * Phase 2 (background): Build full app (pages, hydration) and atomically swap
41
+ * it in. The readiness gate flips to ready after Phase 1, not Phase 2.
42
+ *
43
+ * The interim mitigation (503 + gateway retry + circuit breaker) remains in
44
+ * place and is NOT undone.
45
+ */
46
+ export declare function bootUiService(config: ServiceInstallConfig, serviceSlug: string, deps: PageServerDeps, databaseUrl: string): Promise<UiServiceBootResult>;
package/src/ui-service.ts CHANGED
@@ -103,7 +103,16 @@ export async function bootUiService(
103
103
  // Phase 2: Build full app in background (non-blocking)
104
104
  ;(async () => {
105
105
  try {
106
- const fullAppResult = await buildFullApp(minimalAppResult, deps);
106
+ const PHASE2_TIMEOUT_MS = 120_000;
107
+ const fullAppResult = await Promise.race([
108
+ buildFullApp(minimalAppResult, deps),
109
+ new Promise<never>((_, reject) =>
110
+ setTimeout(
111
+ () => reject(new Error(`buildFullApp timed out after ${PHASE2_TIMEOUT_MS / 1000}s — phase 2 hung silently, see step logs`)),
112
+ PHASE2_TIMEOUT_MS,
113
+ ),
114
+ ),
115
+ ]);
107
116
  const fullBuildTime = Date.now();
108
117
  const fullDuration = fullBuildTime - startTime;
109
118
 
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @system server-boot
3
+ * @status handwritten
4
+ * @edit edit directly
5
+ *
6
+ * Post-listen WebSocket self-test. Runs after serveStart binds the port.
7
+ * For each declared websocket_routes path, opens a synthetic WebSocket
8
+ * connection and asserts 101 upgrade. Non-101 → BootFatalError.
9
+ *
10
+ * This catches the class of bugs where:
11
+ * - WS route registered after ORPC catch-all (order-dependent 404)
12
+ * - fetchWithPeerPort clones the Request on WS upgrade (breaks Bun.upgrade identity)
13
+ * - websocket_routes config row is stale / missing a handler
14
+ *
15
+ * Runs synchronously after serveStart so the boot aborts before the service
16
+ * reports healthy.
17
+ */
18
+ import type { ServiceInstallConfig } from "@teamscala/db/registry/loader/load-service-install-row";
19
+ export declare function runWsBootSelfTest(config: ServiceInstallConfig, serviceSlug: string, port: number): Promise<void>;