@grest-ts/http 0.0.47 → 0.0.48

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 (63) hide show
  1. package/README.md +125 -0
  2. package/dist/src/_dedupCheck.js +1 -1
  3. package/dist/src/client/GGHttpSchema.createClient.d.ts +8 -0
  4. package/dist/src/client/GGHttpSchema.createClient.d.ts.map +1 -1
  5. package/dist/src/client/GGHttpSchema.createClient.js +2 -1
  6. package/dist/src/client/GGHttpSchema.createClient.js.map +1 -1
  7. package/dist/src/index-browser.d.ts +2 -0
  8. package/dist/src/index-browser.d.ts.map +1 -1
  9. package/dist/src/index-browser.js +2 -0
  10. package/dist/src/index-browser.js.map +1 -1
  11. package/dist/src/index-node.d.ts +3 -0
  12. package/dist/src/index-node.d.ts.map +1 -1
  13. package/dist/src/index-node.js +3 -0
  14. package/dist/src/index-node.js.map +1 -1
  15. package/dist/src/rpc/GGHttpRouteRPC.d.ts +4 -0
  16. package/dist/src/rpc/GGHttpRouteRPC.d.ts.map +1 -1
  17. package/dist/src/rpc/GGHttpRouteRPC.js +6 -0
  18. package/dist/src/rpc/GGHttpRouteRPC.js.map +1 -1
  19. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.d.ts +1 -0
  20. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.d.ts.map +1 -1
  21. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.js +4 -0
  22. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.js.map +1 -1
  23. package/dist/src/schema/GGHttpSchema.d.ts +13 -0
  24. package/dist/src/schema/GGHttpSchema.d.ts.map +1 -1
  25. package/dist/src/schema/GGHttpSchema.js.map +1 -1
  26. package/dist/src/schema/cookieMiddleware.d.ts +71 -0
  27. package/dist/src/schema/cookieMiddleware.d.ts.map +1 -0
  28. package/dist/src/schema/cookieMiddleware.js +126 -0
  29. package/dist/src/schema/cookieMiddleware.js.map +1 -0
  30. package/dist/src/schema/headerBinding.d.ts +35 -0
  31. package/dist/src/schema/headerBinding.d.ts.map +1 -0
  32. package/dist/src/schema/headerBinding.js +49 -0
  33. package/dist/src/schema/headerBinding.js.map +1 -0
  34. package/dist/src/schema/httpSchema.d.ts +0 -2
  35. package/dist/src/schema/httpSchema.d.ts.map +1 -1
  36. package/dist/src/schema/httpSchema.js +0 -48
  37. package/dist/src/schema/httpSchema.js.map +1 -1
  38. package/dist/src/server/GGHttpSchema.startServer.d.ts.map +1 -1
  39. package/dist/src/server/GGHttpSchema.startServer.js +4 -1
  40. package/dist/src/server/GGHttpSchema.startServer.js.map +1 -1
  41. package/dist/src/server/GGHttpServer.d.ts +29 -0
  42. package/dist/src/server/GGHttpServer.d.ts.map +1 -1
  43. package/dist/src/server/GGHttpServer.js +35 -8
  44. package/dist/src/server/GGHttpServer.js.map +1 -1
  45. package/dist/src/server/applyResponseMiddleware.d.ts +12 -0
  46. package/dist/src/server/applyResponseMiddleware.d.ts.map +1 -0
  47. package/dist/src/server/applyResponseMiddleware.js +25 -0
  48. package/dist/src/server/applyResponseMiddleware.js.map +1 -0
  49. package/dist/tsconfig.publish.tsbuildinfo +1 -1
  50. package/package.json +10 -10
  51. package/src/_dedupCheck.ts +1 -1
  52. package/src/client/GGHttpSchema.createClient.ts +10 -1
  53. package/src/index-browser.ts +2 -0
  54. package/src/index-node.ts +3 -0
  55. package/src/rpc/GGHttpRouteRPC.ts +8 -0
  56. package/src/rpc/RpcResponse/GGRpcResponseBuilder.ts +5 -1
  57. package/src/schema/GGHttpSchema.ts +15 -0
  58. package/src/schema/cookieMiddleware.ts +164 -0
  59. package/src/schema/headerBinding.ts +65 -0
  60. package/src/schema/httpSchema.ts +2 -55
  61. package/src/server/GGHttpSchema.startServer.ts +4 -1
  62. package/src/server/GGHttpServer.ts +57 -8
  63. package/src/server/applyResponseMiddleware.ts +27 -0
package/README.md CHANGED
@@ -478,6 +478,131 @@ httpServer.registerCorsHeaders(['x-custom-header'])
478
478
  httpServer.registerCorsExposeHeaders(['x-custom-response-header'])
479
479
  ```
480
480
 
481
+ ## Cookies (httpOnly sessions)
482
+
483
+ An httpOnly session cookie is a value the browser stores and re-sends automatically
484
+ that JavaScript cannot read (so XSS can't steal it). It is **server-minted**: the
485
+ server emits `Set-Cookie`, the browser stores and resends it, and JS never touches it.
486
+
487
+ A cookie is just a **context key bound to the wire** — same feel as an auth context
488
+ key. Define a `GGContextKeyForCookie` (a `GGContextKey` whose value rides as a cookie),
489
+ bind it with `.useCookie(SESSION)` on the schema, and use `.get()` / `.set()` in handlers:
490
+
491
+ ```typescript
492
+ // shared api/
493
+ import {GGRpc, httpSchema, GGContextKeyForCookie} from "@grest-ts/http"
494
+
495
+ // The key's name IS the cookie's wire name. No cookie policy in the shared API.
496
+ export const SESSION = new GGContextKeyForCookie("session")
497
+
498
+ export const AuthApi = httpSchema(AuthContract)
499
+ .useCookie(SESSION)
500
+ .pathPrefix("api/auth")
501
+ .routes({
502
+ login: GGRpc.POST("login").updatesCookie(SESSION), // may write the cookie
503
+ logout: GGRpc.POST("logout").updatesCookie(SESSION), // may write (clear)
504
+ me: GGRpc.GET("me"), // read-only -> no declaration
505
+ })
506
+ ```
507
+
508
+ ```typescript
509
+ export class AuthService {
510
+ login = async (input: LoginRequest): Promise<User> => {
511
+ const {user, token} = await this.verify(input)
512
+ // Write rules live HERE, at the set site. Safe defaults (HttpOnly, Secure,
513
+ // SameSite=Lax, Path=/) are applied; pass only what differs:
514
+ SESSION.set(token, {maxAgeSec: input.remember ? 60*60*24*30 : 60*60})
515
+ return user
516
+ }
517
+ logout = async (): Promise<void> => { SESSION.delete() } // -> Max-Age=0 clear
518
+ me = async (): Promise<User> => this.fromSession(SESSION.get()) // read the cookie
519
+ }
520
+ ```
521
+
522
+ **Read vs write.** Reading is implicit — `SESSION.get()` works on any route the schema
523
+ `.useCookie`-bound (just like an auth context key). **Writing is explicit**: only a
524
+ route that declared `.updatesCookie(SESSION)` may change the cookie. A handler that
525
+ calls `SESSION.set(...)` on a route that *didn't* declare it is a `SERVER_ERROR`
526
+ (logged, change rolled back), so a deep service function can't silently mint or change
527
+ someone's session — the capability is visible at the API boundary. (Auth context needs
528
+ no such gate: the server only *reads* it from the request; a cookie is *produced* by
529
+ the server.)
530
+
531
+ **Emit-on-change.** Within a route that may write, `useCookie` emits `Set-Cookie` only
532
+ when the handler **changes** the key versus what arrived: `set(token)` → `Set-Cookie`;
533
+ `delete()` (or `set(undefined)`) → `Max-Age=0` clear; untouched → nothing (read routes
534
+ don't re-emit, and there's no spurious clear when no cookie arrived).
535
+
536
+ **Write rules live at `.set(value, options)`**, never in the shared API — only the
537
+ cookie's wire name (the key's name, needed to *read* it on every route) is on the
538
+ schema. Options: `httpOnly`, `secure`, `sameSite`, `path`, `domain`, `maxAgeSec`. Safe
539
+ defaults (`HttpOnly`, `Secure`, `SameSite=Lax`, `Path=/`) are applied by the serializer,
540
+ so `set(token)` is safe; pass only deviations. `SameSite=None` forces `Secure`;
541
+ name/path/domain are validated (no CR/LF/`;`). A scoped cookie repeats `path`/`domain`
542
+ on clear so deletion matches:
543
+
544
+ ```typescript
545
+ SESSION.set(token, {path: "/api", domain: ".example.com", sameSite: "none", maxAgeSec: WEEK})
546
+ SESSION.delete({path: "/api", domain: ".example.com"}) // clear must match scope
547
+ ```
548
+
549
+ **Domain scope is a security boundary.** The default is **host-only** (no `Domain`):
550
+ the cookie is sent only to the exact host that set it. `domain: ".example.com"` sends
551
+ it to **every** subdomain, so *any* subdomain — including user-controlled or untrusted
552
+ content — can read it. Never share a parent domain with untrusted subdomains; host
553
+ untrusted/user content on a **separate registrable domain** instead.
554
+
555
+ **Cross-site cookies.** A `SameSite=Lax` cookie is not sent on cross-site requests.
556
+ For a cross-site setup (browser and API on different sites) use `sameSite: "none"` +
557
+ `secure: true` **and** credentialed CORS on the server (below) with an exact-origin
558
+ allowlist — never a wildcard.
559
+
560
+ ### Credentialed CORS (cross-origin cookies)
561
+
562
+ Cross-origin cookie requests require the response to echo the **specific** request
563
+ Origin plus `Access-Control-Allow-Credentials: true` — browsers reject the wildcard
564
+ `*` when credentials are involved. Opt in per server (default off keeps the
565
+ permissive `*`):
566
+
567
+ ```typescript
568
+ new GGHttpServer({
569
+ cors: {
570
+ origins: ["https://app.example.com"], // exact list, or (origin) => boolean
571
+ credentials: true,
572
+ },
573
+ })
574
+ ```
575
+
576
+ Only an allowlisted Origin is echoed (never `*`), with `Vary: Origin`. Never reflect
577
+ an arbitrary origin with credentials — the allowlist is the gate.
578
+
579
+ ### Client: send cookies
580
+
581
+ The browser attaches cross-origin cookies only when the caller opts in:
582
+
583
+ ```typescript
584
+ const client = AuthApi.createClient({url: "https://api.example.com", credentials: "include"})
585
+ ```
586
+
587
+ Same-origin calls and the default need nothing.
588
+
589
+ ### WebSocket cookies
590
+
591
+ First-class WebSocket cookie support (the same `SESSION` key populated from the
592
+ browser's `Cookie` on the WS upgrade, read-only) is planned — see
593
+ `docs/plans/WS_COOKIE_SUPPORT.md`. Until it lands, gate a socket by the session with
594
+ the **ticket pattern**: a cookie-authenticated HTTP endpoint mints a short-lived,
595
+ single-use ticket; the browser opens the socket carrying that ticket on the handshake
596
+ via the existing token transport:
597
+
598
+ ```typescript
599
+ // HTTP: cookie-authenticated endpoint mints a short-lived ticket
600
+ wsTicket = async (): Promise<{ticket: string}> => {
601
+ const session = SESSION.get() // read from the cookie
602
+ return {ticket: await this.mintTicket(session, {ttlSec: 10, singleUse: true})}
603
+ }
604
+ ```
605
+
481
606
  ## HTTP Client
482
607
 
483
608
  ### Creating Clients
@@ -11,7 +11,7 @@
11
11
  const __KEY = Symbol.for("grest-ts:dedup:@grest-ts/http");
12
12
  const __slot = globalThis;
13
13
  const __existing = __slot[__KEY];
14
- const __here = { path: import.meta.url, version: "0.0.47" };
14
+ const __here = { path: import.meta.url, version: "0.0.48" };
15
15
  // Same path + same version means the same physical package is being
16
16
  // re-evaluated by a different ESM runner (e.g. vitest projects share one
17
17
  // process but each project has its own module cache). That isn't a true
@@ -23,11 +23,19 @@ export type GGHttpTransport = (url: string, init: {
23
23
  headers: Record<string, string>;
24
24
  body: string | FormData | undefined;
25
25
  signal: AbortSignal;
26
+ credentials?: "omit" | "same-origin" | "include";
26
27
  }) => Promise<Response>;
27
28
  export interface GGHttpClientConfig {
28
29
  url?: string;
29
30
  timeout?: number;
30
31
  noValidation?: boolean;
32
+ /**
33
+ * Cross-origin credentials mode for the default fetch transport. Default
34
+ * (unset → fetch's "same-origin") is unchanged; pass "include" so the browser
35
+ * attaches/stores cross-origin cookies. Ignored by custom transports unless
36
+ * they read it.
37
+ */
38
+ credentials?: "omit" | "same-origin" | "include";
31
39
  /**
32
40
  * Override the wire-layer call. Defaults to `fetch`. When provided,
33
41
  * service discovery is skipped (the transport is presumed to know how
@@ -1 +1 @@
1
- {"version":3,"file":"GGHttpSchema.createClient.d.ts","sourceRoot":"","sources":["../../../src/client/GGHttpSchema.createClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,uBAAuB,EAAE,gBAAgB,EAA4E,MAAM,kBAAkB,CAAA;AACvK,OAAO,EAAwD,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAI3G,OAAO,QAAQ,wBAAwB,CAAC;IACpC,UAAU,YAAY,CAAC,SAAS,SAAS,uBAAuB,EAAE,QAAQ,GAAG,EAAE;QAC3E,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;KACzE;CACJ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,eAAe,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACF,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACnC,MAAM,EAAE,WAAW,CAAA;CACtB,KACA,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEtB,MAAM,WAAW,kBAAkB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;CAC9B;AASD,wBAAgB,YAAY,CAAC,SAAS,SAAS,uBAAuB,EAAE,QAAQ,EAC5E,UAAU,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,EAC7C,MAAM,CAAC,EAAE,kBAAkB,GAC5B,gBAAgB,CAAC,SAAS,CAAC,CAuF7B"}
1
+ {"version":3,"file":"GGHttpSchema.createClient.d.ts","sourceRoot":"","sources":["../../../src/client/GGHttpSchema.createClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,uBAAuB,EAAE,gBAAgB,EAA4E,MAAM,kBAAkB,CAAA;AACvK,OAAO,EAAwD,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAI3G,OAAO,QAAQ,wBAAwB,CAAC;IACpC,UAAU,YAAY,CAAC,SAAS,SAAS,uBAAuB,EAAE,QAAQ,GAAG,EAAE;QAC3E,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;KACzE;CACJ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,eAAe,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACF,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACnC,MAAM,EAAE,WAAW,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;CACnD,KACA,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEtB,MAAM,WAAW,kBAAkB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;IAChD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;CAC9B;AASD,wBAAgB,YAAY,CAAC,SAAS,SAAS,uBAAuB,EAAE,QAAQ,EAC5E,UAAU,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,EAC7C,MAAM,CAAC,EAAE,kBAAkB,GAC5B,gBAAgB,CAAC,SAAS,CAAC,CAwF7B"}
@@ -52,7 +52,8 @@ export function createClient(httpSchema, config) {
52
52
  method: fetchRequest.method,
53
53
  signal: controller.signal,
54
54
  headers: fetchRequest.headers,
55
- body: fetchRequest.body
55
+ body: fetchRequest.body,
56
+ credentials: config.credentials
56
57
  }).finally(() => clearTimeout(timeoutId));
57
58
  const resData = await wireFormat.parseResponse(wireResponse);
58
59
  // ---------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"GGHttpSchema.createClient.js","sourceRoot":"","sources":["../../../src/client/GGHttpSchema.createClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GGHttpSchema.createClient.js","sourceRoot":"","sources":["../../../src/client/GGHttpSchema.createClient.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import "./_dedupCheck";
2
2
  export * from "./schema/GGHttpSchema";
3
3
  export * from "./schema/httpSchema";
4
+ export * from "./schema/cookieMiddleware";
5
+ export * from "./schema/headerBinding";
4
6
  export * from "./rpc/GGHttpRouteRPC";
5
7
  export * from "./rpc/RpcRequest/GGRpcRequestBuilder";
6
8
  export * from "./rpc/RpcResponse/GGRpcResponseParser";
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,oCAAoC,CAAC;AAGnD,OAAO,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,oCAAoC,CAAC;AAGnD,OAAO,oCAAoC,CAAC"}
@@ -2,6 +2,8 @@ import "./_dedupCheck.js";
2
2
  // API Schema
3
3
  export * from "./schema/GGHttpSchema.js";
4
4
  export * from "./schema/httpSchema.js";
5
+ export * from "./schema/cookieMiddleware.js";
6
+ export * from "./schema/headerBinding.js";
5
7
  export * from "./rpc/GGHttpRouteRPC.js";
6
8
  export * from "./rpc/RpcRequest/GGRpcRequestBuilder.js";
7
9
  export * from "./rpc/RpcResponse/GGRpcResponseParser.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.js","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,aAAa;AACb,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAEtD,SAAS;AACT,cAAc,oCAAoC,CAAC;AAEnD,aAAa;AACb,OAAO,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index-browser.js","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,aAAa;AACb,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAEtD,SAAS;AACT,cAAc,oCAAoC,CAAC;AAEnD,aAAa;AACb,OAAO,oCAAoC,CAAC"}
@@ -4,6 +4,8 @@ export * from "./server/GG_HTTP_REQUEST";
4
4
  export * from "./server/GG_PERMISSIONS";
5
5
  export * from "./schema/GGHttpSchema";
6
6
  export * from "./schema/httpSchema";
7
+ export * from "./schema/cookieMiddleware";
8
+ export * from "./schema/headerBinding";
7
9
  export * from "./rpc/GGHttpRouteRPC";
8
10
  export * from "./rpc/openApiSuccessResponse";
9
11
  export * from "./rpc/openApiHelpers";
@@ -15,6 +17,7 @@ export * from "./server/GGHttp";
15
17
  export * from "./server/GGHttp";
16
18
  export * from "./server/GGHttpServer";
17
19
  export * from "./server/GG_HTTP_SERVER";
20
+ export * from "./server/applyResponseMiddleware";
18
21
  export * from "./client/GGHttpSchema.createClient";
19
22
  export * from "./server/GGHttpSchema.startServer";
20
23
  import "./client/GGHttpSchema.createClient";
@@ -1 +1 @@
1
- {"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAWvB,cAAc,wBAAwB,CAAC;AAGvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAIlD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAWvB,cAAc,wBAAwB,CAAC;AAGvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AAGjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAIlD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mCAAmC,CAAC"}
@@ -15,6 +15,8 @@ export * from "./server/GG_PERMISSIONS.js";
15
15
  // API Schema
16
16
  export * from "./schema/GGHttpSchema.js";
17
17
  export * from "./schema/httpSchema.js";
18
+ export * from "./schema/cookieMiddleware.js";
19
+ export * from "./schema/headerBinding.js";
18
20
  export * from "./rpc/GGHttpRouteRPC.js";
19
21
  export * from "./rpc/openApiSuccessResponse.js";
20
22
  export * from "./rpc/openApiHelpers.js";
@@ -27,6 +29,7 @@ export * from "./server/GGHttp.js";
27
29
  export * from "./server/GGHttp.js";
28
30
  export * from "./server/GGHttpServer.js";
29
31
  export * from "./server/GG_HTTP_SERVER.js";
32
+ export * from "./server/applyResponseMiddleware.js";
30
33
  // Client
31
34
  export * from "./client/GGHttpSchema.createClient.js";
32
35
  export * from "./server/GGHttpSchema.startServer.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index-node.js","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,+EAA+E;AAC/E,OAAO,EAAC,8BAA8B,EAAC,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,8BAA8B,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACtD,YAAY,EAAE,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY;IACvE,YAAY,EAAE,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC,YAAY;CAC9D,CAAC,CAAC,CAAC;AAEJ,UAAU;AACV,cAAc,wBAAwB,CAAC;AAEvC,UAAU;AACV,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,aAAa;AACb,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,uCAAuC,CAAC;AAEtD,+BAA+B;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAExC,SAAS;AACT,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAGlD,aAAa;AACb,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index-node.js","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,+EAA+E;AAC/E,OAAO,EAAC,8BAA8B,EAAC,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,8BAA8B,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACtD,YAAY,EAAE,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY;IACvE,YAAY,EAAE,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC,YAAY;CAC9D,CAAC,CAAC,CAAC;AAEJ,UAAU;AACV,cAAc,wBAAwB,CAAC;AAEvC,UAAU;AACV,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,aAAa;AACb,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,uCAAuC,CAAC;AAEtD,+BAA+B;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AAEjD,SAAS;AACT,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAGlD,aAAa;AACb,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mCAAmC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { HttpMethod } from "@grest-ts/common";
2
2
  import { ClientHttpRouteToRpcTransformClientCodec, ClientHttpRouteToRpcTransformClientConfig, ClientHttpRouteToRpcTransformServerCodec, ClientHttpRouteToRpcTransformServerConfig, GGHttpCodec, GGHttpCodecOpenApiConfig } from "../schema/GGHttpSchema";
3
+ import type { GGContextKey } from "@grest-ts/context";
3
4
  import type { OpenAPIV3_1 } from "openapi-types";
4
5
  import { GGSchema } from "@grest-ts/schema";
5
6
  export type GGRpcServerCodecFactory = (method: HttpMethod, path: string, config: ClientHttpRouteToRpcTransformServerConfig) => ClientHttpRouteToRpcTransformServerCodec;
@@ -23,7 +24,10 @@ declare class GGHttpRpcCodec implements GGHttpCodec {
23
24
  readonly path: string;
24
25
  readonly deprecated: boolean | undefined;
25
26
  readonly responseHeaders: Record<string, GGSchema<string | undefined>>;
27
+ readonly updatesCookies: GGContextKey<string | undefined>[];
26
28
  constructor(method: HttpMethod, path: string, deprecated?: boolean);
29
+ /** Permit this route to set/clear the given cookie context key(s). Reading needs no declaration. */
30
+ updatesCookie(...keys: GGContextKey<string | undefined>[]): this;
27
31
  createForClient(config: ClientHttpRouteToRpcTransformClientConfig): ClientHttpRouteToRpcTransformClientCodec;
28
32
  createForServer(config: ClientHttpRouteToRpcTransformServerConfig): ClientHttpRouteToRpcTransformServerCodec;
29
33
  toOpenApiOperation(config: GGHttpCodecOpenApiConfig): Partial<OpenAPIV3_1.OperationObject>;
@@ -1 +1 @@
1
- {"version":3,"file":"GGHttpRouteRPC.d.ts","sourceRoot":"","sources":["../../../src/rpc/GGHttpRouteRPC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,wCAAwC,EAAE,yCAAyC,EAAE,wCAAwC,EAAE,yCAAyC,EAAE,WAAW,EAAE,wBAAwB,EAAC,MAAM,wBAAwB,CAAA;AAGtP,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAI1C,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,yCAAyC,KAAK,wCAAwC,CAAC;AAIxK,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAErF;AAED,eAAO,MAAM,KAAK;gBACC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;mBACrC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;iBACrC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;gBACrC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;CACvD,CAAA;AAED,cAAM,cAAe,YAAW,WAAW;IAEvC,SAAgB,MAAM,EAAE,UAAU,CAAA;IAClC,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IAC/C,SAAgB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAK;gBAEtE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO;IAM3D,eAAe,CAAC,MAAM,EAAE,yCAAyC,GAAG,wCAAwC;IAO5G,eAAe,CAAC,MAAM,EAAE,yCAAyC,GAAG,wCAAwC;IAK5G,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC;CAoBpG"}
1
+ {"version":3,"file":"GGHttpRouteRPC.d.ts","sourceRoot":"","sources":["../../../src/rpc/GGHttpRouteRPC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,wCAAwC,EAAE,yCAAyC,EAAE,wCAAwC,EAAE,yCAAyC,EAAE,WAAW,EAAE,wBAAwB,EAAC,MAAM,wBAAwB,CAAA;AAGtP,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAI1C,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,yCAAyC,KAAK,wCAAwC,CAAC;AAIxK,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAErF;AAED,eAAO,MAAM,KAAK;gBACC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;mBACrC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;iBACrC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;gBACrC,MAAM,SAAS;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;CACvD,CAAA;AAED,cAAM,cAAe,YAAW,WAAW;IAEvC,SAAgB,MAAM,EAAE,UAAU,CAAA;IAClC,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IAC/C,SAAgB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAK;IAClF,SAAgB,cAAc,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAK;gBAE3D,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO;IAMlE,oGAAoG;IAC7F,aAAa,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI;IAKhE,eAAe,CAAC,MAAM,EAAE,yCAAyC,GAAG,wCAAwC;IAO5G,eAAe,CAAC,MAAM,EAAE,yCAAyC,GAAG,wCAAwC;IAK5G,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC;CAoBpG"}
@@ -17,11 +17,17 @@ class GGHttpRpcCodec {
17
17
  path;
18
18
  deprecated;
19
19
  responseHeaders = {};
20
+ updatesCookies = [];
20
21
  constructor(method, path, deprecated) {
21
22
  this.method = method;
22
23
  this.path = path;
23
24
  this.deprecated = deprecated;
24
25
  }
26
+ /** Permit this route to set/clear the given cookie context key(s). Reading needs no declaration. */
27
+ updatesCookie(...keys) {
28
+ this.updatesCookies.push(...keys);
29
+ return this;
30
+ }
25
31
  createForClient(config) {
26
32
  return {
27
33
  createRequest: new GGRpcRequestBuilder(this.method, this.path, config).createRequest,
@@ -1 +1 @@
1
- {"version":3,"file":"GGHttpRouteRPC.js","sourceRoot":"","sources":["../../../src/rpc/GGHttpRouteRPC.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GGHttpRouteRPC.js","sourceRoot":"","sources":["../../../src/rpc/GGHttpRouteRPC.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { ERROR, GGContractMethod, OK } from "@grest-ts/schema";
3
3
  import { ClientHttpRouteToRpcTransformServerConfig } from "../../schema/GGHttpSchema";
4
4
  export declare class GGRpcResponseBuilder {
5
5
  protected readonly contract: GGContractMethod;
6
+ private readonly apiMiddlewares;
6
7
  constructor(config: ClientHttpRouteToRpcTransformServerConfig);
7
8
  sendResponse: (res: http.ServerResponse, rpcResult: ERROR<string, unknown> | OK<unknown>) => Promise<void>;
8
9
  private makeError;
@@ -1 +1 @@
1
- {"version":3,"file":"GGRpcResponseBuilder.d.ts","sourceRoot":"","sources":["../../../../src/rpc/RpcResponse/GGRpcResponseBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAY,KAAK,EAAsB,gBAAgB,EAAsC,EAAE,EAAC,MAAM,kBAAkB,CAAC;AAChI,OAAO,EAAC,yCAAyC,EAAC,MAAM,2BAA2B,CAAC;AAGpF,qBAAa,oBAAoB;IAE7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;gBAEjC,MAAM,EAAE,yCAAyC;IAItD,YAAY,GAAU,KAAK,IAAI,CAAC,cAAc,EAAE,WAAW,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAmBrH;IAED,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;CA6BvB"}
1
+ {"version":3,"file":"GGRpcResponseBuilder.d.ts","sourceRoot":"","sources":["../../../../src/rpc/RpcResponse/GGRpcResponseBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAY,KAAK,EAAsB,gBAAgB,EAAsC,EAAE,EAAC,MAAM,kBAAkB,CAAC;AAChI,OAAO,EAAC,yCAAyC,EAA4B,MAAM,2BAA2B,CAAC;AAI/G,qBAAa,oBAAoB;IAE7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;gBAEzD,MAAM,EAAE,yCAAyC;IAKtD,YAAY,GAAU,KAAK,IAAI,CAAC,cAAc,EAAE,WAAW,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAoBrH;IAED,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;CA6BvB"}
@@ -1,8 +1,11 @@
1
1
  import { ERROR, GGContractExecutor } from "@grest-ts/schema";
2
+ import { applyResponseMiddleware } from "../../server/applyResponseMiddleware.js";
2
3
  export class GGRpcResponseBuilder {
3
4
  contract;
5
+ apiMiddlewares;
4
6
  constructor(config) {
5
7
  this.contract = config.contract;
8
+ this.apiMiddlewares = config.apiMiddlewares;
6
9
  }
7
10
  sendResponse = async (res, rpcResult) => {
8
11
  let json;
@@ -19,6 +22,7 @@ export class GGRpcResponseBuilder {
19
22
  json = this.makeError(GGContractExecutor.getResponseSchema(this.contract, rpcResult), rpcResult);
20
23
  statusCode = rpcResult.statusCode;
21
24
  }
25
+ applyResponseMiddleware(res, this.apiMiddlewares);
22
26
  res.writeHead(statusCode, {
23
27
  'Content-Type': 'application/json',
24
28
  'Content-Length': Buffer.byteLength(json)
@@ -1 +1 @@
1
- {"version":3,"file":"GGRpcResponseBuilder.js","sourceRoot":"","sources":["../../../../src/rpc/RpcResponse/GGRpcResponseBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GGRpcResponseBuilder.js","sourceRoot":"","sources":["../../../../src/rpc/RpcResponse/GGRpcResponseBuilder.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { ERROR, ERROR_JSON, GGContractApiDefinition, GGContractClass, GGContract
2
2
  import type { HttpMethod } from "@grest-ts/common";
3
3
  import type http from "http";
4
4
  import type { GGHttpServerMiddleware } from "../server/GGHttpSchema.startServer";
5
+ import type { GGContextKey } from "@grest-ts/context";
5
6
  import type { OpenAPIV3_1 } from "openapi-types";
6
7
  export declare class GGHttpSchema<TContract extends GGContractApiDefinition, TContext> {
7
8
  readonly name: string;
@@ -73,6 +74,12 @@ export interface GGHttpCodec {
73
74
  * Use {} if the codec sets no custom response headers.
74
75
  */
75
76
  readonly responseHeaders: Record<string, GGSchema<string | undefined>>;
77
+ /**
78
+ * Cookie context keys this route is permitted to modify (set/clear), declared via
79
+ * GGRpc.*(...).updatesCookie(key). A handler that changes a cookie its route did not
80
+ * declare is a SERVER_ERROR. Reading a cookie needs no declaration.
81
+ */
82
+ readonly updatesCookies?: readonly GGContextKey<string | undefined>[];
76
83
  createForClient(config: ClientHttpRouteToRpcTransformClientConfig): ClientHttpRouteToRpcTransformClientCodec;
77
84
  createForServer(config: ClientHttpRouteToRpcTransformServerConfig): ClientHttpRouteToRpcTransformServerCodec;
78
85
  /**
@@ -106,6 +113,12 @@ export interface GGHttpTransportMiddleware {
106
113
  * Use {} if the middleware sets no custom response headers.
107
114
  */
108
115
  readonly responseHeaders: Record<string, GGSchema<string | undefined>>;
116
+ /**
117
+ * Cookies this middleware reads, mapped to their value schemas. Emitted as `in: cookie`
118
+ * parameters in OpenAPI so cookie-bound inputs are documented. Absent for header/plain
119
+ * middlewares.
120
+ */
121
+ readonly cookieParams?: Record<string, GGSchema<string | undefined>>;
109
122
  /**
110
123
  * Client-side: modify outgoing request (add headers, etc.)
111
124
  */
@@ -1 +1 @@
1
- {"version":3,"file":"GGHttpSchema.d.ts","sourceRoot":"","sources":["../../../src/schema/GGHttpSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GGHttpSchema.d.ts","sourceRoot":"","sources":["../../../src/schema/GGHttpSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,EAAC,MAAM,kBAAkB,CAAC;AAClJ,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE/C,qBAAa,YAAY,CAAC,SAAS,SAAS,uBAAuB,EAAE,QAAQ;IAEzE,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,UAAU,EAAE,MAAM,CAAA;IAClC,SAAgB,cAAc,EAAE,SAAS,yBAAyB,EAAE,CAAA;IACpE,SAAgB,KAAK,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,WAAW,CAAC,CAAA;IAC3D,SAAgB,QAAQ,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAO;gBAG9D,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,CAAC,SAAS,CAAC,EACpC,SAAS,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,WAAW,CAAC,EAC/C,WAAW,GAAE,SAAS,yBAAyB,EAAO;CAW7D;AAMD,MAAM,WAAW,yCAAyC;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAA;CACpD;AAED,MAAM,WAAW,wCAAwC;IACrD,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAClF,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC5F;AAED,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CACvC;AAMD,MAAM,WAAW,yCAAyC;IACtD,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,cAAc,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACrD,iBAAiB,EAAE,SAAS,sBAAsB,EAAE,CAAA;CACvD;AAED,MAAM,WAAW,wCAAwC;IACrD,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7G;AAMD;;;GAGG;AACH;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,eAAe,CAAC;AAE5H,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAC;CACpD;AAGD,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAEvE;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAEtE,eAAe,CAAC,MAAM,EAAE,yCAAyC,GAAG,wCAAwC,CAAA;IAE5G,eAAe,CAAC,MAAM,EAAE,yCAAyC,GAAG,wCAAwC,CAAA;IAE5G;;;;;;;OAOG;IACH,kBAAkB,CAAC,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;CAC9F;AAMD,MAAM,WAAW,yBAAyB;IACtC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAE/D;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAEvE;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAErE;;OAEG;IACH,aAAa,CAAC,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAEzC;;OAEG;IACH,YAAY,CAAC,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,cAAc,CAAC,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;IAE3C;;OAEG;IACH,aAAa,CAAC,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"GGHttpSchema.js","sourceRoot":"","sources":["../../../src/schema/GGHttpSchema.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,YAAY;IAEL,IAAI,CAAQ;IACZ,UAAU,CAAQ;IAClB,cAAc,CAAsC;IACpD,KAAK,CAAsC;IAC3C,QAAQ,GAAsC,IAAI,CAAA;IAElE,YACI,UAAkB,EAClB,QAAoC,EACpC,SAA+C,EAC/C,cAAoD,EAAE;QAEtD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAA;QACjC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;CACJ"}
1
+ {"version":3,"file":"GGHttpSchema.js","sourceRoot":"","sources":["../../../src/schema/GGHttpSchema.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,YAAY;IAEL,IAAI,CAAQ;IACZ,UAAU,CAAQ;IAClB,cAAc,CAAsC;IACpD,KAAK,CAAsC;IAC3C,QAAQ,GAAsC,IAAI,CAAA;IAElE,YACI,UAAkB,EAClB,QAAoC,EACpC,SAA+C,EAC/C,cAAoD,EAAE;QAEtD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAA;QACjC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;CACJ"}
@@ -0,0 +1,71 @@
1
+ import { GGContextKey } from "@grest-ts/context";
2
+ import { type GGSchema } from "@grest-ts/schema";
3
+ import type { GGHttpTransportMiddleware } from "./GGHttpSchema";
4
+ /**
5
+ * Per-request set of context-key names the current route is permitted to write a cookie
6
+ * for (declared via GGRpc.*(...).updatesCookie(key)). Populated by the server route
7
+ * handler; read by setCookie() to reject undeclared cookie writes.
8
+ */
9
+ export declare const GG_COOKIE_WRITES: GGContextKey<Set<string>>;
10
+ /**
11
+ * Cookie write rules — passed to setCookie(key, value, options). They live at the write
12
+ * call site (the handler that mints the cookie), never in the shared API.
13
+ */
14
+ export interface CookieOptions {
15
+ httpOnly?: boolean;
16
+ secure?: boolean;
17
+ sameSite?: "lax" | "strict" | "none";
18
+ path?: string;
19
+ domain?: string;
20
+ maxAgeSec?: number;
21
+ }
22
+ /**
23
+ * Read a single named cookie out of a raw `Cookie` header value. Shared by the HTTP
24
+ * binding (parseRequest) and the WebSocket binding (parseHandshake). A malformed
25
+ * percent-encoding (e.g. "sid=%") must not crash — fall back to the raw value.
26
+ */
27
+ export declare function readCookie(rawCookieHeader: string | undefined, name: string): string | undefined;
28
+ /**
29
+ * Local structural copy of GGWebSocketHandshakeContext (defined in @grest-ts/websocket).
30
+ * http must not import websocket; cookie()'s WS half is typed against this shape and
31
+ * matches GGWebSocketMiddleware structurally at the webSocketSchema.use() call site.
32
+ * `upgradeHeaders` is the real browser upgrade request (carries httpOnly cookies); the
33
+ * in-band `headers` map cannot spoof it.
34
+ */
35
+ interface WsHandshakeContextLike {
36
+ headers: Record<string, string>;
37
+ upgradeHeaders?: Record<string, string>;
38
+ queryArgs: Record<string, string>;
39
+ }
40
+ export interface GGCookieBinding extends GGHttpTransportMiddleware {
41
+ /** The cookie this binding reads, mapped to its value schema — emitted as an `in: cookie` doc param. */
42
+ readonly cookieParams: Record<string, GGSchema<string | undefined>>;
43
+ parseHandshake(ctx: WsHandshakeContextLike): void;
44
+ }
45
+ /**
46
+ * Bind a context key to a cookie, read-only on the wire. Reads ONLY the named cookie —
47
+ * never a header — from the incoming HTTP Cookie (parseRequest) or the real WS upgrade
48
+ * Cookie (parseHandshake), into key.get(). The cookie's wire name defaults to the key's
49
+ * name. To write the cookie, call setCookie(key, …) from a route that declared
50
+ * .updatesCookie(key); the matching binding flushes it as Set-Cookie (HTTP only — a
51
+ * WebSocket has no response to set a cookie on).
52
+ */
53
+ export declare function cookie(key: GGContextKey<string | undefined>, opts?: {
54
+ name?: string;
55
+ schema?: GGSchema<string | undefined>;
56
+ }): GGCookieBinding;
57
+ /**
58
+ * Schedule a Set-Cookie on the response (HTTP only). The value never touches key.get() —
59
+ * inbound reads stay set-once. The route must declare .updatesCookie(key); an undeclared
60
+ * call is invalid usage and throws SERVER_ERROR. The matching cookie() binding serializes
61
+ * the pending write with these options (HttpOnly/Secure/SameSite/Path/Domain/Max-Age).
62
+ */
63
+ export declare function setCookie(key: GGContextKey<string | undefined>, value: string | undefined, options?: CookieOptions): void;
64
+ /**
65
+ * Clear the cookie — schedules a Set-Cookie with Max-Age=0. Pass path/domain to match a
66
+ * scoped cookie (deletion only works when path+domain match what was set). Equivalent to
67
+ * setCookie(key, undefined, options), but reads clearer at logout-style call sites.
68
+ */
69
+ export declare function clearCookie(key: GGContextKey<string | undefined>, options?: CookieOptions): void;
70
+ export {};
71
+ //# sourceMappingURL=cookieMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookieMiddleware.d.ts","sourceRoot":"","sources":["../../../src/schema/cookieMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAgC,KAAK,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAC7E,OAAO,KAAK,EAAgC,yBAAyB,EAAC,MAAM,gBAAgB,CAAA;AAE5F;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,2BAA4F,CAAA;AAEzH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAsBD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAehG;AAYD;;;;;;GAMG;AACH,UAAU,sBAAsB;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,eAAgB,SAAQ,yBAAyB;IAC9D,wGAAwG;IACxG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;IACnE,cAAc,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACpD;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAAC,GAAG,eAAe,CA0B5I;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAiBzH;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAEhG"}