@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.
- package/package.json +1006 -1014
- package/src/agreement-gate.d.ts +19 -0
- package/src/asset-cache-key.d.ts +11 -0
- package/src/asset-optimize.d.ts +17 -0
- package/src/asset-proxy.d.ts +11 -0
- package/src/asset-social-card.d.ts +17 -0
- package/src/attach-agreement-magic.d.ts +20 -0
- package/src/attach-portal-members.d.ts +23 -0
- package/src/attach-proposal-accept.d.ts +26 -0
- package/src/attach-proposal-magic.d.ts +18 -0
- package/src/attach-transfers-upload.d.ts +27 -0
- package/src/auth-gate.d.ts +28 -0
- package/src/bind-page-handler.d.ts +18 -0
- package/src/build-client-assets/input-hashing.d.ts +25 -0
- package/src/build-client-assets/source-candidates.d.ts +27 -0
- package/src/build-client-assets.d.ts +50 -0
- package/src/compose-page-title.d.ts +41 -0
- package/src/content-gate/access.d.ts +15 -0
- package/src/content-gate/config-types.d.ts +99 -0
- package/src/content-gate/gate.d.ts +13 -0
- package/src/content-gate/parse-cookie.d.ts +9 -0
- package/src/content-gate/token.d.ts +48 -0
- package/src/content-page-floor.d.ts +39 -0
- package/src/discover-blocks.d.ts +28 -0
- package/src/expand-roster.d.ts +34 -0
- package/src/fn-routers/agreement-completion-email.d.ts +14 -0
- package/src/fn-routers/agreement-send-router.d.ts +82 -0
- package/src/fn-routers/ai-health-router.d.ts +35 -0
- package/src/fn-routers/auth-router.d.ts +47 -0
- package/src/fn-routers/cache-admin-router.d.ts +57 -0
- package/src/fn-routers/chat-session-router.d.ts +219 -0
- package/src/fn-routers/email-defaults.d.ts +1 -0
- package/src/fn-routers/email-link-ttl.d.ts +1 -0
- package/src/fn-routers/index.d.ts +18 -0
- package/src/fn-routers/panel-data-router.d.ts +19 -0
- package/src/fn-routers/persist-chat-messages.d.ts +36 -0
- package/src/fn-routers/plans-router.d.ts +25 -0
- package/src/fn-routers/proposal-send-router.d.ts +58 -0
- package/src/fn-routers/public-agreement-router.d.ts +281 -0
- package/src/fn-routers/public-assessment-router.d.ts +68 -0
- package/src/fn-routers/public-gpt-session-router.d.ts +125 -0
- package/src/fn-routers/sign-in-flow-router.d.ts +75 -0
- package/src/fn-routers/task-sync-dispatch.d.ts +61 -0
- package/src/fn-routers/task-sync-router.d.ts +376 -0
- package/src/fn-routers/task-sync-router.test.ts +32 -0
- package/src/fn-routers/task-sync-router.ts +27 -1
- package/src/fn-routers/tasks-router.d.ts +25 -0
- package/src/fn-routers/user-preferences-router.d.ts +77 -0
- package/src/fn-routers/work-items-router.d.ts +102 -0
- package/src/gate-ttls.d.ts +6 -0
- package/src/gpt-gate.d.ts +25 -0
- package/src/handlers/bun-stable-watch.d.ts +1 -0
- package/src/handlers/projects-digest.d.ts +26 -0
- package/src/handlers/prune-stale-data.d.ts +30 -0
- package/src/handlers/registry-stale-inactive-sweep.d.ts +1 -0
- package/src/handlers/scala-tools-currency-watch.d.ts +1 -0
- package/src/handlers/scheduled-browser-tests.d.ts +1 -0
- package/src/handlers/sweep-event-log.d.ts +1 -0
- package/src/handlers/sweep-host-cache.d.ts +1 -0
- package/src/handlers/upstream-issue-sync.d.ts +1 -0
- package/src/handlers/whatsapp-liveness-logic.d.ts +34 -0
- package/src/handlers/whatsapp-liveness.d.ts +4 -0
- package/src/hono-error-handler.d.ts +25 -0
- package/src/install-harness.d.ts +45 -0
- package/src/install-logging.d.ts +34 -0
- package/src/load-service-install-row.d.ts +24 -0
- package/src/load-service-prisma-client.d.ts +18 -0
- package/src/mount-orpc-router.d.ts +15 -0
- package/src/mount-server-packages.d.ts +29 -0
- package/src/mount.d.ts +9 -0
- package/src/mutable-app-ref.d.ts +38 -0
- package/src/page-route-shell-types.d.ts +12 -0
- package/src/page-server-orpc/audit-revert-router.d.ts +37 -0
- package/src/page-server-orpc/hub-mcp-client.d.ts +12 -0
- package/src/page-server-orpc/portal-diagnostics-router.d.ts +49 -0
- package/src/page-server-orpc/puck-pages-router.d.ts +58 -0
- package/src/page-server-orpc/server-client.d.ts +16 -0
- package/src/page-server-orpc/templates-router.d.ts +34 -0
- package/src/page-server-orpc/user-preferences-router.d.ts +79 -0
- package/src/pg-boss-handler-registry.d.ts +25 -0
- package/src/pg-boss-mount.d.ts +39 -0
- package/src/proposal-authorized-emails.d.ts +28 -0
- package/src/proposal-chat-inject.d.ts +17 -0
- package/src/proposal-gate.d.ts +18 -0
- package/src/read-html-template.d.ts +38 -0
- package/src/read-viewport-from-request.d.ts +18 -0
- package/src/readiness-gate.d.ts +16 -0
- package/src/register-api-routes.d.ts +18 -0
- package/src/register-crash-handlers.d.ts +15 -0
- package/src/register-page-routes.d.ts +27 -0
- package/src/register-page-server-client.d.ts +11 -0
- package/src/register-registry-page-route/ai-chat-prefetch.d.ts +13 -0
- package/src/register-registry-page-route/graph-cache.d.ts +30 -0
- package/src/register-registry-page-route/meta-title.d.ts +2 -0
- package/src/register-registry-page-route/proposal-approval-email-token.d.ts +14 -0
- package/src/register-registry-page-route/proposal-brand-stamping.d.ts +28 -0
- package/src/register-registry-page-route/resolve-page-data.d.ts +1 -0
- package/src/register-registry-page-route.d.ts +27 -0
- package/src/register-static-assets.d.ts +13 -0
- package/src/register-ws-routes.d.ts +28 -0
- package/src/resolve-app-base-url.d.ts +13 -0
- package/src/resolve-brand-favicon.d.ts +28 -0
- package/src/resolve-from-loader-config.d.ts +32 -0
- package/src/resolve-service-context.d.ts +17 -0
- package/src/resolve-theme-mode.d.ts +42 -0
- package/src/resolvers/fetch-org-brand.d.ts +2 -0
- package/src/resolvers/portal-route-paths.d.ts +39 -0
- package/src/resolvers/website-by-host-map.d.ts +12 -0
- package/src/resource-chat-inject.d.ts +46 -0
- package/src/resource-not-found.d.ts +60 -0
- package/src/run-boot-hook-list.d.ts +19 -0
- package/src/run-boot-hooks.d.ts +31 -0
- package/src/scala-tools-currency-watchdog.d.ts +10 -0
- package/src/security-headers.d.ts +12 -0
- package/src/serve/serve.d.ts +46 -0
- package/src/server-error-page.d.ts +29 -0
- package/src/start-scheduled-jobs.d.ts +18 -0
- package/src/two-phase-boot.d.ts +93 -0
- package/src/two-phase-boot.ts +3 -0
- package/src/types.d.ts +46 -0
- package/src/ui-service.d.ts +46 -0
- package/src/ui-service.ts +10 -1
- 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
|
|
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>;
|