@knpkv/codecommit-web 0.17.0 → 0.19.0

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.
@@ -1,15 +1,19 @@
1
+ import * as OwnerSession from "@knpkv/browser-pairing/owner-session";
1
2
  import { Config, Deferred, Effect, Layer } from "effect";
2
3
  import * as Stdio from "effect/Stdio";
3
- import { type OwnerSessionSecretsContract } from "./internal/OwnerSessionSecurity.js";
4
- export { makeOwnerSessionSecrets, ownerSessionOrigin, OwnerSessionSecrets, type OwnerSessionSecretsContract, ownerSessionUrl, ownerSessionUrlForOrigin, requireLoopbackHostname, requireLoopbackOrigin } from "./internal/OwnerSessionSecurity.js";
4
+ export { loopbackOrigin, requireLoopbackHostname } from "@knpkv/browser-pairing/owner-session";
5
+ export { makeOwnerSession } from "./internal/OwnerSession.js";
5
6
  export interface CodeCommitServerOptions {
6
7
  readonly hostname?: string;
7
8
  readonly port: number;
8
- readonly ready?: Deferred.Deferred<void>;
9
- readonly security: OwnerSessionSecretsContract;
9
+ /** The origin the printed URL uses; the bound server's own when omitted. */
10
+ readonly publicOrigin?: string;
11
+ /** Completed with the bootstrap URL once the server is listening. */
12
+ readonly ready?: Deferred.Deferred<string>;
13
+ readonly security: OwnerSession.OwnerSessionService;
10
14
  }
11
- export declare const makeServer: (options: CodeCommitServerOptions) => Layer.Layer<never, import("@knpkv/browser-pairing").BrowserPairingError | import("effect/http/HttpServerError").ServeError | import("./internal/OwnerSessionSecurity.js").UnsafeServerHostnameError, import("@knpkv/codecommit-core/ChildEnv.js").HostEnvironment>;
12
- export declare const makeCodeCommitServer: (port: number, security: OwnerSessionSecretsContract) => Layer.Layer<never, import("@knpkv/browser-pairing").BrowserPairingError | import("effect/http/HttpServerError").ServeError | import("./internal/OwnerSessionSecurity.js").UnsafeServerHostnameError, import("@knpkv/codecommit-core/ChildEnv.js").HostEnvironment>;
15
+ export declare const makeServer: (options: CodeCommitServerOptions) => Layer.Layer<never, import("@knpkv/browser-pairing").BrowserPairingError | import("effect/http/HttpServerError").ServeError | OwnerSession.UnsafeLoopbackAddressError, import("@knpkv/codecommit-core/ChildEnv.js").HostEnvironment>;
16
+ export declare const makeCodeCommitServer: (port: number, security: OwnerSession.OwnerSessionService) => Layer.Layer<never, import("@knpkv/browser-pairing").BrowserPairingError | import("effect/http/HttpServerError").ServeError | OwnerSession.UnsafeLoopbackAddressError, import("@knpkv/codecommit-core/ChildEnv.js").HostEnvironment>;
13
17
  export declare const Port: Config.Config<number>;
14
- export declare const CodeCommitServerLive: Effect.Effect<never, import("@knpkv/browser-pairing").BrowserPairingError | import("effect/PlatformError").PlatformError | import("effect/http/HttpServerError").ServeError | import("./internal/OwnerSessionSecurity.js").UnsafeServerHostnameError, import("effect/Crypto").Crypto | import("@knpkv/codecommit-core/ChildEnv.js").HostEnvironment | Stdio.Stdio>;
18
+ export declare const CodeCommitServerLive: Effect.Effect<never, import("@knpkv/browser-pairing").BrowserPairingError | import("@knpkv/browser-pairing").CredentialCookieError | import("effect/PlatformError").PlatformError | import("effect/http/HttpServerError").ServeError | OwnerSession.UnsafeLoopbackAddressError, import("effect/Crypto").Crypto | import("@knpkv/codecommit-core/ChildEnv.js").HostEnvironment | Stdio.Stdio>;
15
19
  //# sourceMappingURL=Server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAS,KAAK,EAAkC,MAAM,QAAQ,CAAA;AAK/F,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAiBrC,OAAO,EAOL,KAAK,2BAA2B,EAEjC,MAAM,oCAAoC,CAAA;AAK3C,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,2BAA2B,EAChC,eAAe,EACf,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,oCAAoC,CAAA;AAqR3C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAA;CAC/C;AAED,eAAO,MAAM,UAAU,YAAa,uBAAuB,uQA8B1D,CAAA;AAED,eAAO,MAAM,oBAAoB,SAAU,MAAM,YAAY,2BAA2B,uQACxD,CAAA;AAEhC,eAAO,MAAM,IAAI,uBAAoD,CAAA;AAqBrE,eAAO,MAAM,oBAAoB,oWAgC/B,CAAA"}
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAA;AAmBpE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAS,KAAK,EAAkC,MAAM,QAAQ,CAAA;AAI/F,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAuBrC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAkN7D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,mBAAmB,CAAA;CACpD;AAED,eAAO,MAAM,UAAU,YAAa,uBAAuB,wOA8B1D,CAAA;AAED,eAAO,MAAM,oBAAoB,SAAU,MAAM,YAAY,YAAY,CAAC,mBAAmB,wOAC7D,CAAA;AAEhC,eAAO,MAAM,IAAI,uBAAoD,CAAA;AAqBrE,eAAO,MAAM,oBAAoB,8XAmC/B,CAAA"}
@@ -1,11 +1,11 @@
1
1
  import { BunFileSystem, BunHttpServer, BunServices } from "@effect/platform-bun";
2
+ import * as OwnerSession from "@knpkv/browser-pairing/owner-session";
2
3
  import { AwsClient, AwsClientConfig, CacheService, ConfigService, PermissionService, PRService, ReadClient, ReviewClient, SandboxService, StatsService } from "@knpkv/codecommit-core";
3
4
  import { AwsClientGatedLive, InnerAwsClient } from "@knpkv/codecommit-core/AwsClient/AwsClientGated.js";
4
5
  import { AuditLogRepo } from "@knpkv/codecommit-core/PermissionService/AuditLog.js";
5
6
  import { PermissionGateLiveLayer, PermissionGateLiveTag } from "@knpkv/codecommit-core/PermissionService/PermissionGateLive.js";
6
7
  import { Config, Deferred, Effect, Fiber, Layer, Option, Predicate, Ref, Stream } from "effect";
7
- import * as FileSystem from "effect/FileSystem";
8
- import { Etag, FetchHttpClient, HttpPlatform, HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http";
8
+ import { Etag, FetchHttpClient, HttpPlatform, HttpRouter } from "effect/http";
9
9
  import { HttpApiBuilder } from "effect/http-api";
10
10
  import * as Path from "effect/Path";
11
11
  import * as Stdio from "effect/Stdio";
@@ -14,69 +14,13 @@ import { CodeCommitApi } from "./Api.js";
14
14
  import { AccountsLive, AuditLive, ConfigLive, EventsLive, NotificationsLive, PermissionsLive, PrsLive, SandboxLive, StatsLive, SubscriptionsLive } from "./handlers/index.js";
15
15
  import { BackgroundScopeLive } from "./internal/BackgroundScope.js";
16
16
  import { autoRefreshLayer, sandboxStartupLayer } from "./internal/BackgroundWorkers.js";
17
- import { activateOwnerSessionBootstrap, makeOwnerSessionSecrets, ownerSessionAuthLayer, OwnerSessionBootstrapRouter, ownerSessionOrigin, OwnerSessionSecrets, requireLoopbackHostname } from "./internal/OwnerSessionSecurity.js";
17
+ import { makeOwnerSession, ownerSessionAuthLayer } from "./internal/OwnerSession.js";
18
18
  import { InnerCodeCommitReadClient, makePermissionedReadClient } from "./internal/PermissionedReadClient.js";
19
- import { resolveCodeCommitBootstrapUrlForBind } from "./internal/PublicOrigin.js";
19
+ import { resolveCodeCommitPublicOriginForBind } from "./internal/PublicOrigin.js";
20
+ import { staticClient } from "./internal/StaticClient.js";
20
21
  import { makeRelayFindingPublisher, RelayFindingPublisher } from "./review/RelayFindingPublisher.js";
21
- export { makeOwnerSessionSecrets, ownerSessionOrigin, OwnerSessionSecrets, ownerSessionUrl, ownerSessionUrlForOrigin, requireLoopbackHostname, requireLoopbackOrigin } from "./internal/OwnerSessionSecurity.js";
22
- const mimeTypes = {
23
- ".html": "text/html",
24
- ".js": "application/javascript",
25
- ".css": "text/css",
26
- ".json": "application/json",
27
- ".png": "image/png",
28
- ".jpg": "image/jpeg",
29
- ".svg": "image/svg+xml",
30
- ".ico": "image/x-icon",
31
- ".wasm": "application/wasm",
32
- ".map": "application/json",
33
- ".woff2": "font/woff2",
34
- ".ttf": "font/ttf"
35
- };
36
- // Static file serving — async Effect FileSystem, no sync node:fs
37
- const serveStatic = Effect.gen(function* () {
38
- const req = yield* HttpServerRequest.HttpServerRequest;
39
- const fileSystem = yield* FileSystem.FileSystem;
40
- const path = yield* Path.Path;
41
- const url = new URL(req.url, "http://localhost");
42
- let filePath = decodeURIComponent(url.pathname);
43
- // Remove leading slash
44
- if (filePath.startsWith("/")) {
45
- filePath = filePath.slice(1);
46
- }
47
- if (filePath === "") {
48
- filePath = "index.html";
49
- }
50
- const __dirname = yield* path.fromFileUrl(new URL(".", import.meta.url));
51
- const staticDir = path.resolve(__dirname, "../../dist/client");
52
- const fullPath = path.resolve(staticDir, filePath);
53
- // Path traversal guard — resolved path must stay within staticDir
54
- if (!fullPath.startsWith(staticDir)) {
55
- return HttpServerResponse.text("Forbidden", { status: 403 });
56
- }
57
- if (yield* fileSystem.exists(fullPath)) {
58
- const stat = yield* fileSystem.stat(fullPath);
59
- if (stat.type === "File") {
60
- const content = yield* fileSystem.readFile(fullPath);
61
- const ext = path.extname(fullPath);
62
- const contentType = mimeTypes[ext] || "application/octet-stream";
63
- return HttpServerResponse.uint8Array(content, {
64
- status: 200,
65
- headers: { "content-type": contentType }
66
- });
67
- }
68
- }
69
- // SPA Fallback
70
- const index = path.join(staticDir, "index.html");
71
- if (yield* fileSystem.exists(index)) {
72
- const content = yield* fileSystem.readFile(index);
73
- return HttpServerResponse.uint8Array(content, {
74
- status: 200,
75
- headers: { "content-type": "text/html" }
76
- });
77
- }
78
- return HttpServerResponse.text("Not Found", { status: 404 });
79
- });
22
+ export { loopbackOrigin, requireLoopbackHostname } from "@knpkv/browser-pairing/owner-session";
23
+ export { makeOwnerSession } from "./internal/OwnerSession.js";
80
24
  // API handlers layer
81
25
  const HandlersLive = Layer.mergeAll(PrsLive, ConfigLive, AccountsLive, EventsLive, NotificationsLive, SubscriptionsLive, SandboxLive, StatsLive, PermissionsLive, AuditLive).pipe(Layer.provideMerge(BackgroundScopeLive));
82
26
  // Platform dependencies
@@ -127,8 +71,11 @@ const AuditPrune = Layer.effectDiscard(Effect.gen(function* () {
127
71
  }));
128
72
  // API router with handlers — AutoRefresh shares AllServicesLive with handlers
129
73
  const ApiLive = Layer.mergeAll(HttpApiBuilder.layer(CodeCommitApi).pipe(Layer.provide(HandlersLive.pipe(Layer.provide(RelayFindingPublisherLive)))), autoRefreshLayer, AuditPrune, sandboxStartupLayer).pipe(Layer.provide(ownerSessionAuthLayer), Layer.provide(AllServicesLive), Layer.provide(FetchHttpClient.layer));
130
- // Static file router - catches all non-API routes
131
- const StaticRouter = HttpRouter.use((router) => router.add("GET", "/*", serveStatic));
74
+ /** The client `vite build` writes next to the compiled server. */
75
+ const StaticRouter = Layer.unwrap(Effect.gen(function* () {
76
+ const path = yield* Path.Path;
77
+ return staticClient(yield* path.fromFileUrl(new URL("../../dist/client", import.meta.url)));
78
+ }));
132
79
  const AllowedOrigins = Config.String("ALLOWED_ORIGINS").pipe(Config.map((s) => s.split(",")), Config.withDefault(["http://localhost:3000", "http://127.0.0.1:3000"]));
133
80
  // CORS layer via Effect Config — consistent with Port config
134
81
  const CorsLive = Layer.unwrap(Effect.map(AllowedOrigins, (allowedOrigins) => HttpRouter.cors({
@@ -137,22 +84,24 @@ const CorsLive = Layer.unwrap(Effect.map(AllowedOrigins, (allowedOrigins) => Htt
137
84
  allowedHeaders: ["Content-Type", "Authorization", "X-CSRF-Token"]
138
85
  })));
139
86
  // Combined routes with CORS — orDie for remaining service construction errors
140
- const AllRoutes = Layer.mergeAll(ApiLive, OwnerSessionBootstrapRouter, StaticRouter).pipe(Layer.provide(CorsLive), Layer.orDie);
87
+ const AllRoutes = Layer.mergeAll(ApiLive, OwnerSession.BootstrapRouter, StaticRouter).pipe(Layer.provide(CorsLive), Layer.orDie);
141
88
  // HttpPlatform + Etag — required by addHttpApi for OpenAPI/multipart support
142
89
  const HttpPlatformLive = HttpPlatform.layer.pipe(Layer.provide(BunFileSystem.layer));
143
90
  export const makeServer = (options) => {
144
91
  const hostname = options.hostname ?? "127.0.0.1";
145
- return Layer.unwrap(requireLoopbackHostname(hostname).pipe(Effect.map(() => {
92
+ return Layer.unwrap(OwnerSession.requireLoopbackHostname(hostname).pipe(
93
+ // The printed URL carries the bootstrap code, so its origin must be the server or its dev proxy.
94
+ Effect.andThen(OwnerSession.resolvePublicOrigin(options.publicOrigin, options.security.authorityOrigin)), Effect.map((publicOrigin) => {
146
95
  const server = HttpRouter.serve(AllRoutes, {
147
96
  // Coordinate tokens include provider-valid repository names up to 100
148
97
  // characters; keep one bounded segment for the review route.
149
98
  routerConfig: { maxParamLength: coordinateRouterMaxParamLength }
150
99
  }).pipe(
151
100
  // idleTimeout: 0 disables idle detection — required for long-lived SSE connections
152
- Layer.provide(BunHttpServer.layer({ hostname, port: options.port, idleTimeout: 0 })), Layer.provide(Etag.layer), Layer.provide(HttpPlatformLive), Layer.provide(Layer.succeed(OwnerSessionSecrets, options.security)));
153
- return server.pipe(Layer.tap(() => activateOwnerSessionBootstrap(options.security).pipe(Effect.andThen(options.ready === undefined
154
- ? Effect.void
155
- : Deferred.succeed(options.ready, undefined)))));
101
+ Layer.provide(BunHttpServer.layer({ hostname, port: options.port, idleTimeout: 0 })), Layer.provide(Etag.layer), Layer.provide(HttpPlatformLive), Layer.provide(Layer.succeed(OwnerSession.OwnerSession, options.security)));
102
+ return server.pipe(Layer.tap(() =>
103
+ // Minted only once the server is listening, so the printed code is one that can be spent.
104
+ options.security.mintBootstrapCode.pipe(Effect.map((code) => OwnerSession.bootstrapUrl(publicOrigin, code)), Effect.flatMap((url) => options.ready === undefined ? Effect.void : Deferred.succeed(options.ready, url)))));
156
105
  })));
157
106
  };
158
107
  export const makeCodeCommitServer = (port, security) => makeServer({ port, security });
@@ -175,15 +124,16 @@ export const CodeCommitServerLive = Effect.gen(function* () {
175
124
  const publicOriginOverride = yield* PublicOrigin.pipe(Effect.orDie);
176
125
  return yield* Effect.forever(Effect.gen(function* () {
177
126
  const p = yield* Ref.get(portRef);
178
- const directOrigin = ownerSessionOrigin("127.0.0.1", p);
127
+ const directOrigin = OwnerSession.loopbackOrigin("127.0.0.1", p);
179
128
  // Rotate every authority-bearing secret on each bind attempt so a URL
180
129
  // emitted for an occupied port cannot authenticate to a later retry.
181
- const security = yield* makeOwnerSessionSecrets(directOrigin);
182
- const bootstrapUrl = yield* resolveCodeCommitBootstrapUrlForBind(Option.getOrUndefined(publicOriginOverride), requestedPort, p, security);
130
+ const security = yield* makeOwnerSession(directOrigin);
131
+ const publicOrigin = yield* resolveCodeCommitPublicOriginForBind(Option.getOrUndefined(publicOriginOverride), requestedPort, p);
183
132
  const ready = yield* Deferred.make();
184
- const serverFiber = yield* Layer.launch(makeServer({ port: p, ready, security })).pipe(Effect.forkChild({ startImmediately: true }));
185
- yield* Effect.raceFirst(Deferred.await(ready), Fiber.join(serverFiber));
186
- yield* Effect.logInfo(`Authenticated server ready at ${ownerSessionOrigin("127.0.0.1", p)}`);
133
+ const serverFiber = yield* Layer.launch(makeServer({ port: p, publicOrigin, ready, security })).pipe(Effect.forkChild({ startImmediately: true }));
134
+ // The server only ends this race by failing; until it is listening there is no link to print.
135
+ const bootstrapUrl = yield* Effect.raceFirst(Deferred.await(ready), Fiber.join(serverFiber).pipe(Effect.andThen(Effect.never)));
136
+ yield* Effect.logInfo(`Authenticated server ready at ${directOrigin}`);
187
137
  yield* Stream.make(`Authenticated bootstrap URL: ${bootstrapUrl}\n`).pipe(Stream.run(stdio.stdout()));
188
138
  return yield* Fiber.join(serverFiber);
189
139
  }).pipe(updatePortOnConflict(portRef, retriesRef)));
@@ -1 +1 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * CodeCommit web's Owner Session: the shared `@knpkv/browser-pairing/owner-session` policy, with
3
+ * writes.
4
+ *
5
+ * Requests are checked against the bound server's own origin. In development the Vite proxy rewrites
6
+ * Origin to the backend before forwarding (see `tooling/authenticated-dev-proxy.ts`), so the dev
7
+ * origin is only ever advertised, never accepted.
8
+ *
9
+ * @module
10
+ */
11
+ import type { BrowserPairingError, CredentialCookieError } from "@knpkv/browser-pairing";
12
+ import * as OwnerSession from "@knpkv/browser-pairing/owner-session";
13
+ import { type Crypto, Effect, Layer } from "effect";
14
+ import { OwnerSessionAuth } from "../Api.js";
15
+ /** Build the session for a server bound at `authorityOrigin`. Rotate it on every bind attempt. */
16
+ export declare const makeOwnerSession: (authorityOrigin: string) => Effect.Effect<OwnerSession.OwnerSessionService, BrowserPairingError | CredentialCookieError | OwnerSession.UnsafeLoopbackAddressError, Crypto.Crypto>;
17
+ export declare const ownerSessionAuthLayer: Layer.Layer<OwnerSessionAuth, never, OwnerSession.OwnerSession>;
18
+ //# sourceMappingURL=OwnerSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OwnerSession.d.ts","sourceRoot":"","sources":["../../../src/server/internal/OwnerSession.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACxF,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAY,MAAM,QAAQ,CAAA;AAC7D,OAAO,EAAqB,gBAAgB,EAAwB,MAAM,WAAW,CAAA;AAErF,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,oLAe5B,CAAA;AAED,eAAO,MAAM,qBAAqB,iEAgBjC,CAAA"}
@@ -0,0 +1,27 @@
1
+ import * as OwnerSession from "@knpkv/browser-pairing/owner-session";
2
+ import { Effect, Layer, Redacted } from "effect";
3
+ import { ForbiddenApiError, OwnerSessionAuth, UnauthorizedApiError } from "../Api.js";
4
+ /** Build the session for a server bound at `authorityOrigin`. Rotate it on every bind attempt. */
5
+ export const makeOwnerSession = Effect.fn("CodeCommitWeb.makeOwnerSession")(function* (authorityOrigin) {
6
+ return yield* OwnerSession.make({
7
+ authorityOrigin,
8
+ browserOrigin: authorityOrigin,
9
+ cookieName: "cc_owner",
10
+ freshUrlHint: "restart codecommit web for a fresh URL",
11
+ product: "CodeCommit web",
12
+ writes: "csrf"
13
+ });
14
+ });
15
+ export const ownerSessionAuthLayer = Layer.effect(OwnerSessionAuth, Effect.gen(function* () {
16
+ const session = yield* OwnerSession.OwnerSession;
17
+ return OwnerSessionAuth.of({
18
+ ownerCookie: Effect.fn("CodeCommitWeb.ownerCookie")(function* (httpEffect, { credential }) {
19
+ yield* session.authorizeHttp(Redacted.value(credential)).pipe(Effect.catchTags({
20
+ OwnerSessionForbiddenError: ({ message }) => Effect.fail(new ForbiddenApiError({ message })),
21
+ OwnerSessionUnauthorizedError: ({ message }) => Effect.fail(new UnauthorizedApiError({ message }))
22
+ }));
23
+ return yield* httpEffect;
24
+ })
25
+ });
26
+ }));
27
+ //# sourceMappingURL=OwnerSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OwnerSession.js","sourceRoot":"","sources":["../../../src/server/internal/OwnerSession.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAe,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAErF,kGAAkG;AAClG,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CACzE,QAAQ,CAAC,EAAC,eAAuB;IAK/B,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;QAC9B,eAAe;QACf,aAAa,EAAE,eAAe;QAC9B,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,wCAAwC;QACtD,OAAO,EAAE,gBAAgB;QACzB,MAAM,EAAE,MAAM;KACf,CAAC,CAAA;AACJ,CAAC,CACF,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAC/C,gBAAgB,EAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY,CAAA;IAChD,OAAO,gBAAgB,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,EAAE,UAAU,EAAE;YACtF,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAC3D,MAAM,CAAC,SAAS,CAAC;gBACf,0BAA0B,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5F,6BAA6B,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;aACnG,CAAC,CACH,CAAA;YACD,OAAO,KAAK,CAAC,CAAC,UAAU,CAAA;QAC1B,CAAC,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA"}
@@ -1,9 +1,6 @@
1
1
  import { Effect } from "effect";
2
- import { type OwnerSessionSecretsContract } from "./OwnerSessionSecurity.js";
3
2
  /** Resolve the advertised origin for one concrete server bind attempt. */
4
- export declare const resolveCodeCommitPublicOrigin: (configuredOrigin: string | undefined, port: number) => Effect.Effect<string, import("./OwnerSessionSecurity.js").UnsafeServerHostnameError, never>;
5
- /** Resolve the startup origin before constructing the token-bearing bootstrap URL. */
6
- export declare const resolveCodeCommitBootstrapUrl: (configuredOrigin: string | undefined, port: number, secrets: OwnerSessionSecretsContract) => Effect.Effect<string, import("./OwnerSessionSecurity.js").UnsafeServerHostnameError, never>;
3
+ export declare const resolveCodeCommitPublicOrigin: (configuredOrigin: string | undefined, port: number) => Effect.Effect<string, import("@knpkv/browser-pairing/owner-session").UnsafeLoopbackAddressError, never>;
7
4
  /** Keep a retrying backend off the stale Vite proxy port; advertise it directly. */
8
- export declare const resolveCodeCommitBootstrapUrlForBind: (configuredOrigin: string | undefined, requestedPort: number, actualPort: number, secrets: OwnerSessionSecretsContract) => Effect.Effect<string, import("./OwnerSessionSecurity.js").UnsafeServerHostnameError, never>;
5
+ export declare const resolveCodeCommitPublicOriginForBind: (configuredOrigin: string | undefined, requestedPort: number, actualPort: number) => Effect.Effect<string, import("@knpkv/browser-pairing/owner-session").UnsafeLoopbackAddressError, never>;
9
6
  //# sourceMappingURL=PublicOrigin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PublicOrigin.d.ts","sourceRoot":"","sources":["../../../src/server/internal/PublicOrigin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAEL,KAAK,2BAA2B,EAGjC,MAAM,2BAA2B,CAAA;AAElC,0EAA0E;AAC1E,eAAO,MAAM,6BAA6B,qJAIzC,CAAA;AAED,sFAAsF;AACtF,eAAO,MAAM,6BAA6B,2LAKzC,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,oCAAoC,wNAUhD,CAAA"}
1
+ {"version":3,"file":"PublicOrigin.d.ts","sourceRoot":"","sources":["../../../src/server/internal/PublicOrigin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,0EAA0E;AAC1E,eAAO,MAAM,6BAA6B,iKAIzC,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,oCAAoC,8LAKhD,CAAA"}
@@ -1,17 +1,12 @@
1
+ import { loopbackOrigin, resolvePublicOrigin } from "@knpkv/browser-pairing/owner-session";
1
2
  import { Effect } from "effect";
2
- import { ownerSessionOrigin, ownerSessionUrlForOrigin, resolvePublicOrigin } from "./OwnerSessionSecurity.js";
3
3
  /** Resolve the advertised origin for one concrete server bind attempt. */
4
4
  export const resolveCodeCommitPublicOrigin = Effect.fn("CodeCommitServer.resolvePublicOrigin")(function* (configuredOrigin, port) {
5
- return yield* resolvePublicOrigin(configuredOrigin, ownerSessionOrigin("127.0.0.1", port));
6
- });
7
- /** Resolve the startup origin before constructing the token-bearing bootstrap URL. */
8
- export const resolveCodeCommitBootstrapUrl = Effect.fn("CodeCommitServer.resolveBootstrapUrl")(function* (configuredOrigin, port, secrets) {
9
- const publicOrigin = yield* resolveCodeCommitPublicOrigin(configuredOrigin, port);
10
- return ownerSessionUrlForOrigin(publicOrigin, secrets);
5
+ return yield* resolvePublicOrigin(configuredOrigin, loopbackOrigin("127.0.0.1", port));
11
6
  });
12
7
  /** Keep a retrying backend off the stale Vite proxy port; advertise it directly. */
13
- export const resolveCodeCommitBootstrapUrlForBind = Effect.fn("CodeCommitServer.resolveBootstrapUrlForBind")(function* (configuredOrigin, requestedPort, actualPort, secrets) {
8
+ export const resolveCodeCommitPublicOriginForBind = Effect.fn("CodeCommitServer.resolvePublicOriginForBind")(function* (configuredOrigin, requestedPort, actualPort) {
14
9
  const originOverride = requestedPort === actualPort ? configuredOrigin : undefined;
15
- return yield* resolveCodeCommitBootstrapUrl(originOverride, actualPort, secrets);
10
+ return yield* resolveCodeCommitPublicOrigin(originOverride, actualPort);
16
11
  });
17
12
  //# sourceMappingURL=PublicOrigin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PublicOrigin.js","sourceRoot":"","sources":["../../../src/server/internal/PublicOrigin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAElC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAC5F,QAAQ,CAAC,EAAC,gBAAoC,EAAE,IAAY;IAC1D,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAA;AAC5F,CAAC,CACF,CAAA;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAC5F,QAAQ,CAAC,EAAC,gBAAoC,EAAE,IAAY,EAAE,OAAoC;IAChG,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;IACjF,OAAO,wBAAwB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AACxD,CAAC,CACF,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,oCAAoC,GAAG,MAAM,CAAC,EAAE,CAAC,6CAA6C,CAAC,CAC1G,QAAQ,CAAC,EACP,gBAAoC,EACpC,aAAqB,EACrB,UAAkB,EAClB,OAAoC;IAEpC,MAAM,cAAc,GAAG,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAA;IAClF,OAAO,KAAK,CAAC,CAAC,6BAA6B,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AAClF,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"PublicOrigin.js","sourceRoot":"","sources":["../../../src/server/internal/PublicOrigin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAC5F,QAAQ,CAAC,EAAC,gBAAoC,EAAE,IAAY;IAC1D,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAA;AACxF,CAAC,CACF,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,oCAAoC,GAAG,MAAM,CAAC,EAAE,CAAC,6CAA6C,CAAC,CAC1G,QAAQ,CAAC,EAAC,gBAAoC,EAAE,aAAqB,EAAE,UAAkB;IACvF,MAAM,cAAc,GAAG,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAA;IAClF,OAAO,KAAK,CAAC,CAAC,6BAA6B,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;AACzE,CAAC,CACF,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Serves the built client at `root` for every non-API route. Extensionless HTML navigations fall back
3
+ * to `index.html`; `no-cache` makes the browser revalidate, so a rebuilt `index.html` never points at
4
+ * hashed assets that no longer exist.
5
+ */
6
+ export declare const staticClient: (root: string) => import("effect/Layer").Layer<never, import("effect/PlatformError").PlatformError, import("effect/FileSystem").FileSystem | import("effect/http/HttpPlatform").HttpPlatform | import("effect/http/HttpRouter").HttpRouter | import("effect/Path").Path>;
7
+ //# sourceMappingURL=StaticClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticClient.d.ts","sourceRoot":"","sources":["../../../src/server/internal/StaticClient.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,YAAY,SAAU,MAAM,2PAA0E,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { HttpStaticServer } from "effect/http";
2
+ /**
3
+ * Serves the built client at `root` for every non-API route. Extensionless HTML navigations fall back
4
+ * to `index.html`; `no-cache` makes the browser revalidate, so a rebuilt `index.html` never points at
5
+ * hashed assets that no longer exist.
6
+ */
7
+ export const staticClient = (root) => HttpStaticServer.layer({ cacheControl: "no-cache", root, spa: true });
8
+ //# sourceMappingURL=StaticClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticClient.js","sourceRoot":"","sources":["../../../src/server/internal/StaticClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA"}
@@ -1,10 +1,12 @@
1
+ import { NodeCrypto } from "@effect/platform-node";
1
2
  import { describe, expect, it, vi } from "@effect/vitest";
2
- import { CsrfToken, PairingCode, SessionToken } from "@knpkv/browser-pairing/schema";
3
- import { Effect, Redacted, Ref, Result, Schema } from "effect";
3
+ import { bootstrapUrl, loopbackOrigin } from "@knpkv/browser-pairing/owner-session";
4
+ import { PairingCode } from "@knpkv/browser-pairing/schema";
5
+ import { Effect, Redacted, Result, Schema } from "effect";
4
6
  import { IncomingMessage, ServerResponse } from "node:http";
5
7
  import { Socket } from "node:net";
6
8
  import packageJson from "../../package.json" with { type: "json" };
7
- import { authorizeBootstrapRequest, ownerSessionOrigin, ownerSessionUrlForOrigin, requireLoopbackOrigin } from "../server/internal/OwnerSessionSecurity.js";
9
+ import { makeOwnerSession } from "../server/internal/OwnerSession.js";
8
10
  import { authenticatedDevBackendOrigin, authenticatedDevProxyConfig, authenticatedDevProxyOriginDecision, authenticatedDevPublicOrigin, authenticatedDevPublicOriginEnvironment, authenticatedDevServerOptions, makeAuthenticatedDevProxyConfig, setAuthenticatedDevProxyOrigin } from "./authenticated-dev-proxy.js";
9
11
  describe("authenticated development proxy", () => {
10
12
  it("pins Vite to the advertised development port", () => {
@@ -76,23 +78,17 @@ describe("authenticated development proxy", () => {
76
78
  expect(setHeader).toHaveBeenCalledTimes(2);
77
79
  expect(setHeader).toHaveBeenCalledWith("origin", retryOrigin);
78
80
  });
79
- it.effect("accepts a bootstrap request after the proxy origin rewrite", () => Effect.gen(function* () {
80
- const secrets = {
81
- authorityOrigin: yield* requireLoopbackOrigin(ownerSessionOrigin("127.0.0.1", 3000)),
82
- bootstrapAvailable: yield* Ref.make(true),
83
- bootstrapAttemptState: yield* Ref.make({ failedAttempts: 0, inFlight: 0 }),
84
- bootstrapExpiresAtMillis: yield* Ref.make(Number.MAX_SAFE_INTEGER),
85
- bootstrapToken: Redacted.make(Schema.decodeSync(PairingCode)("ab".repeat(32))),
86
- csrfToken: Redacted.make(Schema.decodeSync(CsrfToken)("cd".repeat(32))),
87
- ownerToken: Redacted.make(Schema.decodeSync(SessionToken)("ef".repeat(32)))
88
- };
89
- const result = yield* Effect.result(authorizeBootstrapRequest({
90
- authorization: `Bearer ${Redacted.value(secrets.bootstrapToken)}`,
91
- host: "127.0.0.1:3000",
92
- origin: authenticatedDevBackendOrigin
93
- }, secrets));
94
- expect(Result.isSuccess(result)).toBe(true);
95
- }));
81
+ it.layer(NodeCrypto.layer)("owner session", (it) => {
82
+ it.effect("accepts a bootstrap request after the proxy origin rewrite", () => Effect.gen(function* () {
83
+ const session = yield* makeOwnerSession(loopbackOrigin("127.0.0.1", 3000));
84
+ const code = yield* session.mintBootstrapCode;
85
+ const result = yield* Effect.result(session.authorizeBootstrap({
86
+ authorization: `Bearer ${Redacted.value(code)}`,
87
+ origin: authenticatedDevBackendOrigin
88
+ }));
89
+ expect(Result.isSuccess(result)).toBe(true);
90
+ }));
91
+ });
96
92
  it("advertises the token-bearing bootstrap URL on the Vite origin", () => {
97
93
  expect(packageJson.scripts.dev).toContain(authenticatedDevPublicOriginEnvironment);
98
94
  const predev = packageJson.scripts.predev;
@@ -102,14 +98,12 @@ describe("authenticated development proxy", () => {
102
98
  expect(predev.endsWith("pnpm build")).toBe(true);
103
99
  expect(predev.indexOf("@knpkv/browser-pairing")).toBeLessThan(predev.indexOf("@knpkv/relay-product..."));
104
100
  expect(predev.indexOf("@knpkv/relay-product...")).toBeLessThan(predev.indexOf("@knpkv/review..."));
105
- const url = ownerSessionUrlForOrigin(authenticatedDevPublicOrigin, {
106
- bootstrapToken: Redacted.make(Schema.decodeSync(PairingCode)("ab".repeat(32)))
107
- });
101
+ const url = bootstrapUrl(authenticatedDevPublicOrigin, Redacted.make(Schema.decodeSync(PairingCode)("ab".repeat(32))));
108
102
  expect(url).toBe(`http://localhost:5173/#bootstrap_token=${"ab".repeat(32)}`);
109
103
  expect(url).not.toContain(authenticatedDevBackendOrigin);
110
104
  });
111
105
  it("keeps the configured backend authority separate from the advertised Vite origin", () => {
112
- expect(ownerSessionOrigin("127.0.0.1", 3000)).toBe(`${authenticatedDevBackendOrigin}/`);
106
+ expect(loopbackOrigin("127.0.0.1", 3000)).toBe(authenticatedDevBackendOrigin);
113
107
  expect(authenticatedDevPublicOrigin).not.toBe(authenticatedDevBackendOrigin);
114
108
  expect(setAuthenticatedDevProxyOrigin).toBeTypeOf("function");
115
109
  });
@@ -1 +1 @@
1
- {"version":3,"file":"authenticated-dev-proxy.test.js","sourceRoot":"","sources":["../../src/tooling/authenticated-dev-proxy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authenticated-dev-proxy.test.js","sourceRoot":"","sources":["../../src/tooling/authenticated-dev-proxy.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knpkv/codecommit-web",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "description": "Web server and frontend for CodeCommit PR browser",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -37,13 +37,13 @@
37
37
  "tailwind-merge": "^3.7.0",
38
38
  "tailwindcss": "^4.3.3",
39
39
  "tw-animate-css": "^1.4.0",
40
- "@knpkv/ai-claude": "^0.4.0",
41
- "@knpkv/ai-codex": "^0.5.0",
42
- "@knpkv/relay-product": "^0.2.0",
40
+ "@knpkv/ai-claude": "^0.4.1",
41
+ "@knpkv/ai-codex": "^0.5.1",
42
+ "@knpkv/browser-pairing": "^0.3.0",
43
43
  "@knpkv/codecommit-core": "^0.17.0",
44
+ "@knpkv/relay-product": "^0.2.0",
44
45
  "@knpkv/review": "^0.3.0",
45
- "@knpkv/browser-pairing": "^0.2.0",
46
- "@knpkv/rly": "^0.6.0"
46
+ "@knpkv/rly": "^0.6.1"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@effect/vitest": "4.0.0",
@@ -1,57 +0,0 @@
1
- import type { CsrfToken, PairingCode, SessionToken } from "@knpkv/browser-pairing/schema";
2
- import { Context, Effect, Layer, Redacted, Ref, Schema } from "effect";
3
- import { HttpRouter } from "effect/http";
4
- import { ForbiddenApiError, OwnerSessionAuth, UnauthorizedApiError } from "../Api.js";
5
- export interface OwnerSessionSecretsContract {
6
- /** Validated server authority used for origin checks; request Host is never authoritative. */
7
- readonly authorityOrigin: string;
8
- readonly bootstrapAvailable: Ref.Ref<boolean>;
9
- readonly bootstrapAttemptState: Ref.Ref<BootstrapAttemptState>;
10
- readonly bootstrapExpiresAtMillis: Ref.Ref<number | undefined>;
11
- readonly bootstrapToken: Redacted.Redacted<PairingCode>;
12
- readonly csrfToken: Redacted.Redacted<CsrfToken>;
13
- readonly ownerToken: Redacted.Redacted<SessionToken>;
14
- }
15
- export interface BootstrapAttemptState {
16
- readonly failedAttempts: number;
17
- readonly inFlight: number;
18
- }
19
- declare const OwnerSessionSecrets_base: Context.ServiceClass<OwnerSessionSecrets, "@knpkv/codecommit-web/OwnerSessionSecrets", OwnerSessionSecretsContract>;
20
- export declare class OwnerSessionSecrets extends OwnerSessionSecrets_base {
21
- }
22
- declare const UnsafeServerHostnameError_base: Schema.Class<UnsafeServerHostnameError, Schema.TaggedStruct<"UnsafeServerHostnameError", {
23
- readonly hostname: Schema.String;
24
- readonly message: Schema.String;
25
- }>, import("effect/Cause").YieldableError>;
26
- export declare class UnsafeServerHostnameError extends UnsafeServerHostnameError_base {
27
- }
28
- export declare const isLoopbackHostname: (hostname: string) => boolean;
29
- export declare const requireLoopbackHostname: (hostname: string) => Effect.Effect<string, UnsafeServerHostnameError, never>;
30
- export declare const makeOwnerSessionSecrets: (authorityOrigin: string) => Effect.Effect<OwnerSessionSecretsContract, import("@knpkv/browser-pairing").BrowserPairingError | UnsafeServerHostnameError, import("effect/Crypto").Crypto>;
31
- export declare const activateOwnerSessionBootstrap: (secrets: OwnerSessionSecretsContract) => Effect.Effect<void, import("@knpkv/browser-pairing").BrowserPairingError, never>;
32
- export declare const ownerSessionOrigin: (hostname: string, port: number) => string;
33
- export declare const ownerSessionUrl: (hostname: string, port: number, secrets: OwnerSessionSecretsContract) => string;
34
- export declare const ownerSessionUrlForOrigin: (origin: string, secrets: Pick<OwnerSessionSecretsContract, "bootstrapToken">) => string;
35
- export declare const requireLoopbackOrigin: (origin: string) => Effect.Effect<string, UnsafeServerHostnameError, never>;
36
- /** Validate the advertised origin against either the bound server or the supported Vite proxy. */
37
- export declare const requireSupportedPublicOrigin: (origin: string, authorityOrigin: string) => Effect.Effect<string, UnsafeServerHostnameError, never>;
38
- export declare const resolvePublicOrigin: (configuredOrigin: string | undefined, authorityOrigin: string) => Effect.Effect<string, UnsafeServerHostnameError, never>;
39
- export declare const ownerSessionCookie: (secrets: Pick<OwnerSessionSecretsContract, "ownerToken">) => string;
40
- interface OwnerRequestAuthorization {
41
- readonly credential: string;
42
- readonly csrfToken: string | undefined;
43
- readonly host: string | undefined;
44
- readonly method: string;
45
- readonly origin: string | undefined;
46
- }
47
- export declare const authorizeOwnerRequest: (request: OwnerRequestAuthorization, secrets: OwnerSessionSecretsContract) => Effect.Effect<undefined, ForbiddenApiError | UnauthorizedApiError, never>;
48
- interface BootstrapAuthorization {
49
- readonly authorization: string | undefined;
50
- readonly host: string | undefined;
51
- readonly origin: string | undefined;
52
- }
53
- export declare const authorizeBootstrapRequest: (request: BootstrapAuthorization, secrets: OwnerSessionSecretsContract) => Effect.Effect<undefined, ForbiddenApiError | UnauthorizedApiError, never>;
54
- export declare const ownerSessionAuthLayer: Layer.Layer<OwnerSessionAuth, never, OwnerSessionSecrets>;
55
- export declare const OwnerSessionBootstrapRouter: Layer.Layer<never, never, HttpRouter.HttpRouter | HttpRouter.Request<"Error", import("effect/http/HttpBody").HttpBodyError> | HttpRouter.Request<"Requires", OwnerSessionSecrets>>;
56
- export {};
57
- //# sourceMappingURL=OwnerSessionSecurity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OwnerSessionSecurity.d.ts","sourceRoot":"","sources":["../../../src/server/internal/OwnerSessionSecurity.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,EAAS,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAyC,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAErF,MAAM,WAAW,2BAA2B;IAC1C,8FAA8F;IAC9F,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC7C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAC9D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9D,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACvD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAChD,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;;AAED,qBAAa,mBAAoB,SAAQ,wBAGO;CAAG;;;;;AAEnD,qBAAa,yBAA0B,SAAQ,8BAG9C;CAAG;AAOJ,eAAO,MAAM,kBAAkB,aAAc,MAAM,KAAG,OAC8C,CAAA;AAEpG,eAAO,MAAM,uBAAuB,+EAUnC,CAAA;AAED,eAAO,MAAM,uBAAuB,2LAoBnC,CAAA;AAED,eAAO,MAAM,6BAA6B,4HAMzC,CAAA;AAED,eAAO,MAAM,kBAAkB,aAAc,MAAM,QAAQ,MAAM,KAAG,MAGnE,CAAA;AAED,eAAO,MAAM,eAAe,aAChB,MAAM,QACV,MAAM,WACH,2BAA2B,KACnC,MAA+E,CAAA;AAElF,eAAO,MAAM,wBAAwB,WAC3B,MAAM,WACL,IAAI,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,KAC3D,MAGF,CAAA;AAED,eAAO,MAAM,qBAAqB,6EAwBjC,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,4BAA4B,sGAexC,CAAA;AAED,eAAO,MAAM,mBAAmB,4HAM/B,CAAA;AAED,eAAO,MAAM,kBAAkB,YACpB,IAAI,CAAC,2BAA2B,EAAE,YAAY,CAAC,KACvD,MAOC,CAAA;AAEJ,UAAU,yBAAyB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAED,eAAO,MAAM,qBAAqB,yJAuBjC,CAAA;AAED,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAED,eAAO,MAAM,yBAAyB,sJAoErC,CAAA;AAED,eAAO,MAAM,qBAAqB,2DAuBjC,CAAA;AAED,eAAO,MAAM,2BAA2B,oLA+BvC,CAAA"}