@spine-event-engine/server 2.0.0-snapshot.26 → 2.0.0-snapshot.28

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 (110) hide show
  1. package/README.md +56 -8
  2. package/REFERENCE.md +151 -39
  3. package/dist/agent/agent-live-ai-runtime.d.ts +1 -1
  4. package/dist/agent/agent-live-ai-runtime.js +1 -1
  5. package/dist/agent/agent-live-budget.d.ts +1 -1
  6. package/dist/agent/agent-live-budget.js +1 -1
  7. package/dist/agent/agent-live-read-runtime.d.ts +1 -1
  8. package/dist/agent/agent-live-read-runtime.js +1 -1
  9. package/dist/browser/browser-admission.d.ts +47 -0
  10. package/dist/browser/browser-admission.d.ts.map +1 -0
  11. package/dist/browser/browser-admission.js +200 -0
  12. package/dist/browser/browser-admission.js.map +1 -0
  13. package/dist/browser/browser-server.d.ts +14 -7
  14. package/dist/browser/browser-server.d.ts.map +1 -1
  15. package/dist/browser/browser-server.js +462 -129
  16. package/dist/browser/browser-server.js.map +1 -1
  17. package/dist/browser/index.d.ts +1 -1
  18. package/dist/browser/index.d.ts.map +1 -1
  19. package/dist/browser/options.d.ts +48 -2
  20. package/dist/browser/options.d.ts.map +1 -1
  21. package/dist/bus/command-bus.d.ts +6 -1
  22. package/dist/bus/command-bus.d.ts.map +1 -1
  23. package/dist/bus/command-bus.js +6 -1
  24. package/dist/bus/command-bus.js.map +1 -1
  25. package/dist/bus/event-bus.d.ts +6 -1
  26. package/dist/bus/event-bus.d.ts.map +1 -1
  27. package/dist/bus/event-bus.js +6 -1
  28. package/dist/bus/event-bus.js.map +1 -1
  29. package/dist/context/bounded-context.d.ts +30 -28
  30. package/dist/context/bounded-context.d.ts.map +1 -1
  31. package/dist/context/bounded-context.js +136 -82
  32. package/dist/context/bounded-context.js.map +1 -1
  33. package/dist/context/entity-inbox.d.ts +12 -17
  34. package/dist/context/entity-inbox.d.ts.map +1 -1
  35. package/dist/context/entity-inbox.js +106 -119
  36. package/dist/context/entity-inbox.js.map +1 -1
  37. package/dist/context/local-inbox-handoff.d.ts +13 -13
  38. package/dist/context/local-inbox-handoff.d.ts.map +1 -1
  39. package/dist/context/local-inbox-handoff.js +60 -32
  40. package/dist/context/local-inbox-handoff.js.map +1 -1
  41. package/dist/context/persistent-tenant-index.d.ts +81 -0
  42. package/dist/context/persistent-tenant-index.d.ts.map +1 -0
  43. package/dist/context/persistent-tenant-index.js +270 -0
  44. package/dist/context/persistent-tenant-index.js.map +1 -0
  45. package/dist/context/projection-handoff.d.ts +9 -9
  46. package/dist/context/projection-handoff.d.ts.map +1 -1
  47. package/dist/context/projection-handoff.js +31 -23
  48. package/dist/context/projection-handoff.js.map +1 -1
  49. package/dist/context/tenant-index.d.ts +7 -6
  50. package/dist/context/tenant-index.d.ts.map +1 -1
  51. package/dist/context/tenant-index.js +2 -188
  52. package/dist/context/tenant-index.js.map +1 -1
  53. package/dist/context/tenant-unknown-error.d.ts +2 -2
  54. package/dist/context/tenant-unknown-error.d.ts.map +1 -1
  55. package/dist/context/tenant-unknown-error.js +4 -1
  56. package/dist/context/tenant-unknown-error.js.map +1 -1
  57. package/dist/delivery/delivery-supervisor.d.ts.map +1 -1
  58. package/dist/delivery/delivery-supervisor.js +12 -3
  59. package/dist/delivery/delivery-supervisor.js.map +1 -1
  60. package/dist/delivery/delivery.d.ts +4 -3
  61. package/dist/delivery/delivery.d.ts.map +1 -1
  62. package/dist/delivery/delivery.js +82 -34
  63. package/dist/delivery/delivery.js.map +1 -1
  64. package/dist/delivery/reception-observation.d.ts +3 -3
  65. package/dist/delivery/reception-observation.js +2 -2
  66. package/dist/index.d.ts +4 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +2 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/repository/command-routing.d.ts +1 -1
  71. package/dist/repository/command-routing.js +1 -1
  72. package/dist/repository/event-routing.d.ts +1 -1
  73. package/dist/repository/event-routing.js +1 -1
  74. package/dist/repository/repository.d.ts +23 -31
  75. package/dist/repository/repository.d.ts.map +1 -1
  76. package/dist/repository/repository.js +244 -218
  77. package/dist/repository/repository.js.map +1 -1
  78. package/dist/repository/state-update-routing.d.ts +1 -1
  79. package/dist/repository/state-update-routing.js +1 -1
  80. package/dist/runtime/signal-publisher.d.ts +23 -8
  81. package/dist/runtime/signal-publisher.d.ts.map +1 -1
  82. package/dist/runtime/signal-publisher.js +11 -8
  83. package/dist/runtime/signal-publisher.js.map +1 -1
  84. package/dist/server/node-coordinator.d.ts.map +1 -1
  85. package/dist/server/node-coordinator.js +220 -54
  86. package/dist/server/node-coordinator.js.map +1 -1
  87. package/dist/server/server-environment.d.ts +6 -5
  88. package/dist/server/server-environment.d.ts.map +1 -1
  89. package/dist/server/server-environment.js +13 -9
  90. package/dist/server/server-environment.js.map +1 -1
  91. package/dist/server/server.js +1 -0
  92. package/dist/server/server.js.map +1 -1
  93. package/dist/services/app-query-execution.js +2 -2
  94. package/dist/services/app-query-execution.js.map +1 -1
  95. package/dist/services/native-operation.d.ts +34 -0
  96. package/dist/services/native-operation.d.ts.map +1 -0
  97. package/dist/services/native-operation.js +77 -0
  98. package/dist/services/native-operation.js.map +1 -0
  99. package/dist/services/spine-services.d.ts +6 -0
  100. package/dist/services/spine-services.d.ts.map +1 -1
  101. package/dist/services/spine-services.js +128 -30
  102. package/dist/services/spine-services.js.map +1 -1
  103. package/dist/services/trusted-reader-ingress.d.ts +23 -5
  104. package/dist/services/trusted-reader-ingress.d.ts.map +1 -1
  105. package/dist/services/trusted-reader-ingress.js +18 -5
  106. package/dist/services/trusted-reader-ingress.js.map +1 -1
  107. package/dist/stand/stand.d.ts +1 -1
  108. package/dist/stand/stand.js +1 -1
  109. package/dist/tsconfig.tsbuildinfo +1 -1
  110. package/package.json +16 -14
@@ -0,0 +1,200 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ /**
15
+ * Immutable startup admission names and raw request inspection for one browser host.
16
+ */
17
+ export class BrowserAdmissionPolicy {
18
+ /**
19
+ * Captured duplicate-sensitive names for the active RPC credential reader.
20
+ */
21
+ reader;
22
+ /**
23
+ * Captured duplicate-sensitive names indexed by exact authentication route path.
24
+ */
25
+ routes;
26
+ #csrfHeaders;
27
+ #selectedCookies;
28
+ /**
29
+ * Stores the validated reader and route names for one listener.
30
+ * @param reader Active RPC credential reader declaration.
31
+ * @param routes Authentication route declarations indexed by exact path.
32
+ */
33
+ constructor(reader, routes) {
34
+ this.reader = reader;
35
+ this.routes = routes;
36
+ const all = [reader, ...routes.values()];
37
+ this.#csrfHeaders = new Set(all.flatMap((value) => value.csrfHeaderNames));
38
+ this.#selectedCookies = new Set(all.flatMap((value) => [...value.credentialCookieNames, ...value.stateCookieNames]));
39
+ }
40
+ /**
41
+ * Validates and copies every declaration before the first asynchronous startup step.
42
+ * @param reader Active RPC credential reader declaration.
43
+ * @param routes Validated route configurations indexed by pathname.
44
+ * @returns One immutable admission policy for startup and requests.
45
+ */
46
+ static create(reader, routes) {
47
+ const copied = new Map();
48
+ for (const [path, route] of routes)
49
+ copied.set(path, AdmissionNames.copy(route.admission));
50
+ return new BrowserAdmissionPolicy(AdmissionNames.copy(reader), copied);
51
+ }
52
+ /**
53
+ * Rejects ambiguous raw headers and returns an immutable duplicate-preserving view.
54
+ * @param request Incoming Node request before WHATWG normalization.
55
+ * @param active Reader or selected route declaration for primary conflict checks.
56
+ * @returns Raw header view or a terminal admission rejection.
57
+ */
58
+ inspect(request, active) {
59
+ const headers = AdmissionNames.raw(request.rawHeaders);
60
+ for (const name of ["authorization", "origin", ...this.#csrfHeaders])
61
+ if ((headers[name]?.length ?? 0) > 1)
62
+ return { kind: "rejected", reason: `repeated ${name}` };
63
+ const cookies = AdmissionNames.cookies(headers.cookie ?? [], this.#selectedCookies);
64
+ if ("reason" in cookies)
65
+ return { kind: "rejected", reason: cookies.reason };
66
+ const primary = active.credentialCookieNames.filter((name) => cookies.present.has(name));
67
+ if (primary.length > 1 || (primary.length > 0 && (headers.authorization?.length ?? 0) > 0))
68
+ return { kind: "rejected", reason: "simultaneous credentials" };
69
+ return { kind: "admitted", headers: AdmissionNames.freeze(headers) };
70
+ }
71
+ }
72
+ /**
73
+ * Internal name validation and raw field selection.
74
+ */
75
+ const AdmissionNames = Object.freeze({
76
+ /**
77
+ * Copies a complete metadata declaration and validates all three required arrays.
78
+ * @param supplied JavaScript or TypeScript caller metadata.
79
+ * @returns Frozen normalized header names and exact cookie names.
80
+ */
81
+ copy(supplied) {
82
+ if (typeof supplied !== "object" || supplied === null)
83
+ throw new Error("Browser credential admission metadata is required.");
84
+ const value = supplied;
85
+ const csrf = AdmissionNames.names(value.csrfHeaderNames, "csrfHeaderNames", true);
86
+ const credential = AdmissionNames.names(value.credentialCookieNames, "credentialCookieNames", false);
87
+ const state = AdmissionNames.names(value.stateCookieNames, "stateCookieNames", false);
88
+ if (credential.some((name) => state.includes(name)))
89
+ throw new Error("Browser credential and state cookie names must be distinct.");
90
+ return Object.freeze({
91
+ csrfHeaderNames: csrf,
92
+ credentialCookieNames: credential,
93
+ stateCookieNames: state,
94
+ });
95
+ },
96
+ /**
97
+ * Validates a complete array without accepting sparse or repeated names.
98
+ * @param supplied Metadata array from a caller.
99
+ * @param label Category used in configuration errors.
100
+ * @param header Whether case-insensitive HTTP header rules apply.
101
+ * @returns Frozen validated names.
102
+ */
103
+ names(supplied, label, header) {
104
+ if (!Array.isArray(supplied))
105
+ throw new Error(`Browser ${label} must be an array.`);
106
+ const names = [];
107
+ for (let index = 0; index < supplied.length; index += 1) {
108
+ if (!(index in supplied))
109
+ throw new Error(`Browser ${label} must not be sparse.`);
110
+ const raw = supplied[index];
111
+ if (typeof raw !== "string" || !/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(raw))
112
+ throw new Error(`Browser ${label} contains an invalid name.`);
113
+ const name = header ? raw.toLowerCase() : raw;
114
+ if (header && ["authorization", "origin", "cookie"].includes(name))
115
+ throw new Error(`Browser ${label} contains a reserved header.`);
116
+ if (names.includes(name))
117
+ throw new Error(`Browser ${label} contains a duplicate name.`);
118
+ names.push(name);
119
+ }
120
+ return Object.freeze(names);
121
+ },
122
+ /**
123
+ * Collects all Node raw header pairs without losing repeated field values.
124
+ * @param pairs Alternating raw header names and values.
125
+ * @returns Lowercase names mapped to original ordered values.
126
+ */
127
+ raw(pairs) {
128
+ const result = Object.create(null);
129
+ for (let index = 0; index < pairs.length; index += 2) {
130
+ const name = pairs[index]?.toLowerCase();
131
+ const value = pairs[index + 1];
132
+ if (name === undefined || value === undefined)
133
+ continue;
134
+ (result[name] ??= []).push(value);
135
+ }
136
+ return result;
137
+ },
138
+ /**
139
+ * Checks raw Cookie pairs before any first-value parser can hide ambiguity.
140
+ * @param fields Original Cookie field values in arrival order.
141
+ * @param selected Names declared by any mounted reader or route.
142
+ * @returns Present selected names or a terminal syntax/duplicate rejection.
143
+ */
144
+ cookies(fields, selected) {
145
+ const present = new Set();
146
+ for (const field of fields) {
147
+ if (AdmissionNames.invalidField(field))
148
+ return { reason: "malformed Cookie field" };
149
+ for (const pair of field.split(";")) {
150
+ const index = pair.indexOf("=");
151
+ if (index <= 0)
152
+ return { reason: "malformed Cookie pair" };
153
+ const name = pair.slice(0, index).trim();
154
+ const value = pair.slice(index + 1).trim();
155
+ if (!AdmissionNames.validPair(name, value))
156
+ return { reason: "malformed Cookie pair" };
157
+ if (!selected.has(name))
158
+ continue;
159
+ if (present.has(name))
160
+ return { reason: "repeated selected Cookie" };
161
+ present.add(name);
162
+ }
163
+ }
164
+ return { present };
165
+ },
166
+ /**
167
+ * Checks a raw Cookie field for controls and comma-combined ambiguity.
168
+ * @param field Original field value.
169
+ * @returns Whether the field contains a forbidden character.
170
+ */
171
+ invalidField(field) {
172
+ for (const character of field) {
173
+ const code = character.charCodeAt(0);
174
+ if (code <= 31 || code === 127 || character === ",")
175
+ return true;
176
+ }
177
+ return false;
178
+ },
179
+ /**
180
+ * Checks one Cookie pair's raw token name and printable value.
181
+ * @param name Cookie name before decoding.
182
+ * @param value Cookie value before decoding.
183
+ * @returns Whether the pair has valid transport syntax.
184
+ */
185
+ validPair(name, value) {
186
+ return /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name) && /^[\x21-\x7e]*$/.test(value);
187
+ },
188
+ /**
189
+ * Creates immutable header fields and ordered value arrays for the selected reader.
190
+ * @param headers Duplicate-preserving mutable request-local collection.
191
+ * @returns Immutable lowercase header view.
192
+ */
193
+ freeze(headers) {
194
+ const result = Object.create(null);
195
+ for (const [name, values] of Object.entries(headers))
196
+ result[name] = values.length === 1 ? (values[0] ?? "") : Object.freeze([...values]);
197
+ return Object.freeze(result);
198
+ },
199
+ });
200
+ //# sourceMappingURL=browser-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-admission.js","sourceRoot":"","sources":["../../src/browser/browser-admission.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  import * as http from "node:http";
2
2
  import type { AddressInfo } from "node:net";
3
3
  import { TransportFacts } from "@spine-event-engine/auth";
4
+ import { type ContextValues } from "@connectrpc/connect";
4
5
  import { Http2SessionManager } from "@connectrpc/connect-node";
5
6
  import { ApplicationNode } from "@spine-event-engine/deployment";
6
7
  import type { RunningServer } from "../server/server.js";
7
8
  import { Server } from "../server/server.js";
8
- import type { BrowserAuthRoute, BrowserServerOptions, StandaloneBrowserServerOptions } from "./options.js";
9
+ import type { BrowserAuthRoute, BrowserCredentialReader, BrowserServerOptions, StandaloneBrowserServerOptions } from "./options.js";
10
+ import { BrowserAdmissionPolicy } from "./browser-admission.js";
9
11
  /**
10
12
  * Holds fully normalized options while a browser listener is being assembled.
11
13
  *
@@ -17,6 +19,9 @@ type BrowserHostOptions = BrowserServerOptions & {
17
19
  readonly readMaxBytes: number;
18
20
  readonly writeMaxBytes: number;
19
21
  readonly production: boolean;
22
+ readonly credentialReader: BrowserCredentialReader;
23
+ readonly admissionPolicy: BrowserAdmissionPolicy;
24
+ readonly authRouteMap: ReadonlyMap<string, BrowserAuthRoute>;
20
25
  readonly dynamicManagerFactory?: (node: ApplicationNode) => Http2SessionManager;
21
26
  };
22
27
  /**
@@ -70,13 +75,14 @@ export declare const browserServerImplementation: Readonly<{
70
75
  */
71
76
  requests(options: BrowserServerOptions): {
72
77
  /**
73
- * Reads a configured cookie credential or a Bearer authorization value.
78
+ * Reads the credential admitted into this Connect call's context values.
74
79
  *
75
- * @param context Incoming request headers; these do not establish authenticated identity.
76
- * @returns The extracted credential, an empty bearer value for rejected cookies, or no credential.
80
+ * @param context Connect context values carrying the reader's result.
81
+ * @returns The admitted credential, or undefined when the reader found none.
77
82
  */
78
83
  credential(context: {
79
84
  readonly requestHeader: Headers;
85
+ readonly values?: ContextValues;
80
86
  }): {
81
87
  readonly kind: "bearer" | "cookie";
82
88
  readonly value: string;
@@ -211,13 +217,14 @@ type BrowserServerTestAccess = Omit<typeof browserServerImplementation, "open" |
211
217
  */
212
218
  requests(options: BrowserServerTestOptions): {
213
219
  /**
214
- * Reads a configured cookie credential or a Bearer authorization value.
220
+ * Reads the credential admitted into this Connect call's context values.
215
221
  *
216
- * @param context Incoming request headers; these do not establish authenticated identity.
217
- * @returns The extracted credential, an empty bearer value for rejected cookies, or no credential.
222
+ * @param context Connect context values carrying the reader's result.
223
+ * @returns The admitted credential, or undefined when the reader found none.
218
224
  */
219
225
  credential(context: {
220
226
  readonly requestHeader: Headers;
227
+ readonly values?: ContextValues;
221
228
  }): {
222
229
  readonly kind: "bearer" | "cookie";
223
230
  readonly value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-server.d.ts","sourceRoot":"","sources":["../../src/browser/browser-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-server.d.ts","sourceRoot":"","sources":["../../src/browser/browser-server.ts"],"names":[],"mappings":"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"}