@beignet/core 0.0.52 → 0.0.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +116 -2
- package/dist/broadcasting/client.d.ts +38 -0
- package/dist/broadcasting/client.d.ts.map +1 -0
- package/dist/broadcasting/client.js +519 -0
- package/dist/broadcasting/client.js.map +1 -0
- package/dist/broadcasting/index.d.ts +43 -0
- package/dist/broadcasting/index.d.ts.map +1 -0
- package/dist/broadcasting/index.js +87 -0
- package/dist/broadcasting/index.js.map +1 -0
- package/dist/broadcasting/server.d.ts +83 -0
- package/dist/broadcasting/server.d.ts.map +1 -0
- package/dist/broadcasting/server.js +213 -0
- package/dist/broadcasting/server.js.map +1 -0
- package/dist/encryption/index.d.ts +40 -0
- package/dist/encryption/index.d.ts.map +1 -0
- package/dist/encryption/index.js +134 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/notifications/index.d.ts +14 -0
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +17 -0
- package/dist/notifications/index.js.map +1 -1
- package/dist/ports/redaction.d.ts +1 -1
- package/dist/ports/redaction.d.ts.map +1 -1
- package/dist/ports/redaction.js +3 -0
- package/dist/ports/redaction.js.map +1 -1
- package/dist/server/request-executor.d.ts.map +1 -1
- package/dist/server/request-executor.js +13 -0
- package/dist/server/request-executor.js.map +1 -1
- package/dist/server/server.d.ts +4 -2
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +1 -1
- package/dist/server/server.js.map +1 -1
- package/dist/server/use-case-route.d.ts +82 -17
- package/dist/server/use-case-route.d.ts.map +1 -1
- package/dist/server/use-case-route.js +40 -4
- package/dist/server/use-case-route.js.map +1 -1
- package/package.json +17 -1
- package/skills/app-architecture/SKILL.md +48 -1
- package/src/broadcasting/client.ts +714 -0
- package/src/broadcasting/index.ts +173 -0
- package/src/broadcasting/server.ts +352 -0
- package/src/encryption/index.ts +198 -0
- package/src/notifications/index.ts +32 -0
- package/src/ports/redaction.ts +3 -0
- package/src/server/request-executor.ts +19 -0
- package/src/server/server.ts +8 -3
- package/src/server/use-case-route.ts +234 -27
|
@@ -101,18 +101,51 @@ export type UseCaseRouteInputParts<C extends HttpContractConfig> = {
|
|
|
101
101
|
*/
|
|
102
102
|
body: InferBody<C>;
|
|
103
103
|
};
|
|
104
|
+
type SegmentPathParam<Segment extends string> = Segment extends `:${infer Name}` ? Name : Segment extends `[${infer Name}]` ? Name : never;
|
|
105
|
+
type PathParamNames<Path extends string> = string extends Path ? never : Path extends `${infer Segment}/${infer Rest}` ? SegmentPathParam<Segment> | PathParamNames<Rest> : SegmentPathParam<Path>;
|
|
106
|
+
type EmptyBinderInput = Record<never, never>;
|
|
107
|
+
declare const UNMERGEABLE_BINDER_INPUT: unique symbol;
|
|
108
|
+
type UnmergeableBinderInput = {
|
|
109
|
+
readonly [UNMERGEABLE_BINDER_INPUT]: true;
|
|
110
|
+
};
|
|
111
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
112
|
+
type BinderObject<T> = IsAny<T> extends true ? UnmergeableBinderInput : [T] extends [object] ? [Extract<T, readonly unknown[]>] extends [never] ? T : UnmergeableBinderInput : UnmergeableBinderInput;
|
|
113
|
+
type MergeBinderObjects<LowerPrecedence, HigherPrecedence> = [
|
|
114
|
+
BinderObject<LowerPrecedence>
|
|
115
|
+
] extends [UnmergeableBinderInput] ? UnmergeableBinderInput : [BinderObject<HigherPrecedence>] extends [UnmergeableBinderInput] ? UnmergeableBinderInput : Omit<BinderObject<LowerPrecedence>, keyof BinderObject<HigherPrecedence>> & BinderObject<HigherPrecedence>;
|
|
116
|
+
type InferredPathInput<C extends HttpContractConfig> = string extends C["path"] ? UnmergeableBinderInput : [PathParamNames<C["path"]>] extends [never] ? EmptyBinderInput : {
|
|
117
|
+
[K in PathParamNames<C["path"]>]: string;
|
|
118
|
+
};
|
|
119
|
+
type BinderPathInput<C extends HttpContractConfig> = C["pathParams"] extends StandardSchemaV1 ? InferOutput<C["pathParams"]> : InferredPathInput<C>;
|
|
120
|
+
type BinderQueryInput<C extends HttpContractConfig> = C["query"] extends StandardSchemaV1 ? InferOutput<C["query"]> : EmptyBinderInput;
|
|
121
|
+
type BinderBodyInput<C extends HttpContractConfig> = C["body"] extends StandardSchemaV1 ? InferOutput<C["body"]> : EmptyBinderInput;
|
|
122
|
+
type HasPathSchema<C extends HttpContractConfig> = C["pathParams"] extends StandardSchemaV1 ? true : false;
|
|
123
|
+
type HasQuerySchema<C extends HttpContractConfig> = C["query"] extends StandardSchemaV1 ? true : false;
|
|
124
|
+
type HasBodySchema<C extends HttpContractConfig> = C["body"] extends StandardSchemaV1 ? true : false;
|
|
125
|
+
type HasInferredPathInput<C extends HttpContractConfig> = string extends C["path"] ? true : [PathParamNames<C["path"]>] extends [never] ? false : true;
|
|
126
|
+
type MergedBinderInput<C extends HttpContractConfig> = MergeBinderObjects<MergeBinderObjects<BinderQueryInput<C>, BinderBodyInput<C>>, BinderPathInput<C>>;
|
|
127
|
+
/**
|
|
128
|
+
* Input produced when a binder route omits an explicit `input` mapper.
|
|
129
|
+
*
|
|
130
|
+
* A sole declared request schema passes through unchanged when the literal
|
|
131
|
+
* path has no additional inferred parameters. Every other supported default
|
|
132
|
+
* binding merges object inputs with path over body over query precedence.
|
|
133
|
+
*/
|
|
134
|
+
type DefaultBinderRouteInput<C extends HttpContractConfig> = HasPathSchema<C> extends true ? HasQuerySchema<C> extends true ? MergedBinderInput<C> : HasBodySchema<C> extends true ? MergedBinderInput<C> : BinderPathInput<C> : HasQuerySchema<C> extends true ? HasBodySchema<C> extends true ? MergedBinderInput<C> : HasInferredPathInput<C> extends true ? MergedBinderInput<C> : BinderQueryInput<C> : HasBodySchema<C> extends true ? HasInferredPathInput<C> extends true ? MergedBinderInput<C> : BinderBodyInput<C> : BinderPathInput<C>;
|
|
135
|
+
type UseCaseRouteInputMode = "default" | "mapped";
|
|
104
136
|
/**
|
|
105
137
|
* Constraint that checks a use case against the route that binds it.
|
|
106
138
|
*
|
|
107
139
|
* Produces a readable branded mismatch object on the `useCase` property when
|
|
108
|
-
* the use case requires a context the server does not provide,
|
|
109
|
-
* output does not match the contract's declared success response schema
|
|
140
|
+
* the use case requires a context the server does not provide, when its
|
|
141
|
+
* output does not match the contract's declared success response schema, or
|
|
142
|
+
* when the default binder input does not satisfy the use case input.
|
|
110
143
|
*/
|
|
111
|
-
export type UseCaseFitsRoute<Ctx, C extends HttpContractConfig, UC> = [
|
|
112
|
-
Ctx
|
|
113
|
-
] extends [UseCaseRouteCtx<UC>] ? [UseCaseRouteOutput<UC>] extends [
|
|
144
|
+
export type UseCaseFitsRoute<Ctx, C extends HttpContractConfig, UC, InputMode extends UseCaseRouteInputMode = "default"> = [Ctx] extends [UseCaseRouteCtx<UC>] ? [UseCaseRouteOutput<UC>] extends [
|
|
114
145
|
SuccessBodyFromKeys<C["responses"], Success2xxKeys<C["responses"]>>
|
|
115
|
-
] ? unknown : {
|
|
146
|
+
] ? InputMode extends "mapped" ? unknown : [DefaultBinderRouteInput<C>] extends [UseCaseRouteInput<UC>] ? unknown : {
|
|
147
|
+
"~beignetError": "default binder input does not match the use case input; add an input mapper";
|
|
148
|
+
} : {
|
|
116
149
|
"~beignetError": "useCase output does not match the contract's success response schema";
|
|
117
150
|
} : {
|
|
118
151
|
"~beignetError": "useCase requires a context this server does not provide";
|
|
@@ -126,21 +159,30 @@ type UseCaseRouteShape<HandlerCtx, CLike extends ContractLike, C extends HttpCon
|
|
|
126
159
|
* Route-scoped hooks that run after group hooks and before the use case.
|
|
127
160
|
*/
|
|
128
161
|
hooks?: Hooks;
|
|
162
|
+
handle?: never;
|
|
163
|
+
} & ({
|
|
129
164
|
/**
|
|
130
|
-
* Use case bound directly to the contract.
|
|
165
|
+
* Use case bound directly to the contract. The default binder input
|
|
166
|
+
* must satisfy the use case input type.
|
|
131
167
|
*/
|
|
132
168
|
useCase: UC & UseCaseFitsRoute<HandlerCtx, C, UC>;
|
|
169
|
+
input?: never;
|
|
170
|
+
} | {
|
|
171
|
+
/**
|
|
172
|
+
* Use case bound directly to the contract through an explicit input
|
|
173
|
+
* mapper.
|
|
174
|
+
*/
|
|
175
|
+
useCase: UC & UseCaseFitsRoute<HandlerCtx, C, UC, "mapped">;
|
|
133
176
|
/**
|
|
134
177
|
* Map parsed request parts to the use case input.
|
|
135
178
|
*
|
|
136
|
-
* A sole declared path, query, or body schema is passed through
|
|
137
|
-
* when no additional path, query, or object body values are
|
|
138
|
-
* Otherwise `defaultBinderInput` merges query, body, and path
|
|
139
|
-
* wins collisions) and never merges headers.
|
|
179
|
+
* A sole declared path, query, or body schema is passed through
|
|
180
|
+
* unchanged when no additional path, query, or object body values are
|
|
181
|
+
* present. Otherwise `defaultBinderInput` merges query, body, and path
|
|
182
|
+
* objects (path wins collisions) and never merges headers.
|
|
140
183
|
*/
|
|
141
|
-
input
|
|
142
|
-
|
|
143
|
-
} & BinderStatusOption<C>;
|
|
184
|
+
input: (parts: UseCaseRouteInputParts<C>) => UseCaseRouteInput<UC>;
|
|
185
|
+
}) & BinderStatusOption<C>;
|
|
144
186
|
/**
|
|
145
187
|
* Route registration that binds a contract directly to a use case.
|
|
146
188
|
*
|
|
@@ -189,10 +231,14 @@ export type ValidatedRouteInput<Ctx, E> = E extends {
|
|
|
189
231
|
} ? ResolveContract<CL> extends infer C extends HttpContractConfig ? {
|
|
190
232
|
contract: CL;
|
|
191
233
|
hooks?: HooksOf<E>;
|
|
192
|
-
useCase: UC & UseCaseFitsRoute<Ctx & AddedCtxFromHooks<HooksOf<E>>, C, UC>;
|
|
193
|
-
input?: (parts: UseCaseRouteInputParts<C>) => UseCaseRouteInput<UC>;
|
|
194
234
|
handle?: never;
|
|
195
|
-
} &
|
|
235
|
+
} & ({
|
|
236
|
+
useCase: UC & UseCaseFitsRoute<Ctx & AddedCtxFromHooks<HooksOf<E>>, C, UC>;
|
|
237
|
+
input?: never;
|
|
238
|
+
} | {
|
|
239
|
+
useCase: UC & UseCaseFitsRoute<Ctx & AddedCtxFromHooks<HooksOf<E>>, C, UC, "mapped">;
|
|
240
|
+
input: (parts: UseCaseRouteInputParts<C>) => UseCaseRouteInput<UC>;
|
|
241
|
+
}) & BinderStatusOption<C> : unknown : unknown;
|
|
196
242
|
/**
|
|
197
243
|
* Element-wise binder validation for a route input list.
|
|
198
244
|
*/
|
|
@@ -230,6 +276,25 @@ export type RuntimeUseCaseRouteDef = {
|
|
|
230
276
|
}) => unknown;
|
|
231
277
|
status?: number;
|
|
232
278
|
};
|
|
279
|
+
type UseCaseInputValidationFailure = Error & {
|
|
280
|
+
name: "UseCaseValidationError";
|
|
281
|
+
phase: "input";
|
|
282
|
+
useCaseName: string;
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* Internal framework error raised when a type-erased binder route produces an
|
|
286
|
+
* input that the bound use case rejects.
|
|
287
|
+
*/
|
|
288
|
+
export declare class UseCaseRouteInputValidationError extends Error {
|
|
289
|
+
readonly code = "USE_CASE_INPUT_VALIDATION_ERROR";
|
|
290
|
+
readonly contractName: string;
|
|
291
|
+
readonly useCaseName: string;
|
|
292
|
+
constructor(args: {
|
|
293
|
+
contractName: string;
|
|
294
|
+
useCaseName: string;
|
|
295
|
+
cause: UseCaseInputValidationFailure;
|
|
296
|
+
});
|
|
297
|
+
}
|
|
233
298
|
/**
|
|
234
299
|
* Default input mapping for binder routes.
|
|
235
300
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-case-route.d.ts","sourceRoot":"","sources":["../../src/server/use-case-route.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-case-route.d.ts","sourceRoot":"","sources":["../../src/server/use-case-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,29 @@ import { inferSoleSuccessStatus } from "../contracts/index.js";
|
|
|
6
6
|
*/
|
|
7
7
|
const USE_CASE_TRUSTED_RUN_KEY = Symbol.for("beignet.useCase.trustedRun");
|
|
8
8
|
const USE_CASE_OUTPUT_VALIDATED_KEY = Symbol.for("beignet.useCase.outputValidated");
|
|
9
|
+
function isUseCaseInputValidationFailure(error, useCaseName) {
|
|
10
|
+
if (!(error instanceof Error))
|
|
11
|
+
return false;
|
|
12
|
+
const candidate = error;
|
|
13
|
+
return (candidate.name === "UseCaseValidationError" &&
|
|
14
|
+
candidate.phase === "input" &&
|
|
15
|
+
candidate.useCaseName === useCaseName);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Internal framework error raised when a type-erased binder route produces an
|
|
19
|
+
* input that the bound use case rejects.
|
|
20
|
+
*/
|
|
21
|
+
export class UseCaseRouteInputValidationError extends Error {
|
|
22
|
+
code = "USE_CASE_INPUT_VALIDATION_ERROR";
|
|
23
|
+
contractName;
|
|
24
|
+
useCaseName;
|
|
25
|
+
constructor(args) {
|
|
26
|
+
super(`Default binder input for contract "${args.contractName}" does not satisfy use case "${args.useCaseName}". Add an explicit input mapper.`, { cause: args.cause });
|
|
27
|
+
this.name = "UseCaseRouteInputValidationError";
|
|
28
|
+
this.contractName = args.contractName;
|
|
29
|
+
this.useCaseName = args.useCaseName;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
9
32
|
function isPlainObject(value) {
|
|
10
33
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
11
34
|
}
|
|
@@ -93,10 +116,23 @@ export function createUseCaseRouteHandler(contract, def) {
|
|
|
93
116
|
? parts[singleInput.source]
|
|
94
117
|
: defaultBinderInput(parts);
|
|
95
118
|
const run = passSingle && trustedRun ? trustedRun : def.useCase.run;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
119
|
+
try {
|
|
120
|
+
return {
|
|
121
|
+
status,
|
|
122
|
+
body: await run.call(def.useCase, { ctx, input }),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (!def.input &&
|
|
127
|
+
isUseCaseInputValidationFailure(error, def.useCase.name)) {
|
|
128
|
+
throw new UseCaseRouteInputValidationError({
|
|
129
|
+
contractName: contract.name,
|
|
130
|
+
useCaseName: def.useCase.name,
|
|
131
|
+
cause: error,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
100
136
|
};
|
|
101
137
|
return {
|
|
102
138
|
handler,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-case-route.js","sourceRoot":"","sources":["../../src/server/use-case-route.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-case-route.js","sourceRoot":"","sources":["../../src/server/use-case-route.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.54",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Core framework primitives for Beignet",
|
|
6
6
|
"exports": {
|
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"types": "./dist/domain/index.d.ts",
|
|
34
34
|
"default": "./dist/domain/index.js"
|
|
35
35
|
},
|
|
36
|
+
"./encryption": {
|
|
37
|
+
"types": "./dist/encryption/index.d.ts",
|
|
38
|
+
"default": "./dist/encryption/index.js"
|
|
39
|
+
},
|
|
36
40
|
"./errors": {
|
|
37
41
|
"types": "./dist/errors/index.d.ts",
|
|
38
42
|
"default": "./dist/errors/index.js"
|
|
@@ -150,6 +154,18 @@
|
|
|
150
154
|
"types": "./dist/server-only.d.ts",
|
|
151
155
|
"bun": "./src/server-only.ts",
|
|
152
156
|
"default": "./dist/server-only.js"
|
|
157
|
+
},
|
|
158
|
+
"./broadcasting": {
|
|
159
|
+
"types": "./dist/broadcasting/index.d.ts",
|
|
160
|
+
"default": "./dist/broadcasting/index.js"
|
|
161
|
+
},
|
|
162
|
+
"./broadcasting/server": {
|
|
163
|
+
"types": "./dist/broadcasting/server.d.ts",
|
|
164
|
+
"default": "./dist/broadcasting/server.js"
|
|
165
|
+
},
|
|
166
|
+
"./broadcasting/client": {
|
|
167
|
+
"types": "./dist/broadcasting/client.d.ts",
|
|
168
|
+
"default": "./dist/broadcasting/client.js"
|
|
153
169
|
}
|
|
154
170
|
},
|
|
155
171
|
"files": [
|
|
@@ -81,7 +81,10 @@ themselves.
|
|
|
81
81
|
feature data still belongs behind use cases.
|
|
82
82
|
- Server-only React Query prefetch helpers may consume that context for
|
|
83
83
|
hydrated client state. Use them only for direct `{ contract, useCase }` route
|
|
84
|
-
bindings whose
|
|
84
|
+
bindings whose default request input satisfies the use-case input and whose
|
|
85
|
+
use-case output matches the contract success body. When the contract and use
|
|
86
|
+
case use different input shapes or the use case reads validated headers, add
|
|
87
|
+
an explicit route `input` mapper.
|
|
85
88
|
- Server, provider, and infra code may import `@beignet/core/server-only`;
|
|
86
89
|
browser-reachable client helpers may import `@beignet/core/client-only` as
|
|
87
90
|
lint markers when the app uses them.
|
|
@@ -199,6 +202,24 @@ claims that the app explicitly treats as authoritative and current. Keep that
|
|
|
199
202
|
decision behind an app-owned resolver. Never turn caller-supplied tenant IDs or
|
|
200
203
|
unverified session fields directly into `TenantContext`.
|
|
201
204
|
|
|
205
|
+
## Encryption
|
|
206
|
+
|
|
207
|
+
Use `EncryptionPort` from `@beignet/core/encryption` for recoverable server
|
|
208
|
+
secrets. Construct `createEncryption({ key, previousKeys })` in
|
|
209
|
+
`infra/port-wiring.ts` and bind `encryption` in `AppPorts`; workflows call the
|
|
210
|
+
port. Repository adapters may encrypt before writes and decrypt on reads.
|
|
211
|
+
Call `encrypt({ value, context? })` and `decrypt({ value, context? })` with strings;
|
|
212
|
+
context is a stable plain string record derived from the expected purpose,
|
|
213
|
+
authorized tenant, and record. It is authenticated, not authorization.
|
|
214
|
+
|
|
215
|
+
Generate a persistent key once with `beignet encryption key`. Never generate
|
|
216
|
+
keys at startup, expose them to clients, or log plaintext. Keep current and
|
|
217
|
+
previous keys in server secret configuration. For rolling rotation, distribute
|
|
218
|
+
the next key to all readers before switching writes; keep old keys for existing
|
|
219
|
+
records and retained backups. `EncryptionDecryptionError` must fail closed:
|
|
220
|
+
never fall back to plaintext or overwrite unreadable data. See the encryption
|
|
221
|
+
concept page for re-encryption tasks, recovery, and KMS adapter boundaries.
|
|
222
|
+
|
|
202
223
|
## Workflows
|
|
203
224
|
|
|
204
225
|
Feature-owned workflow definitions belong under the feature:
|
|
@@ -382,3 +403,29 @@ bun run typecheck
|
|
|
382
403
|
|
|
383
404
|
Use the app's package manager and scripts. If package-manager shims are not on
|
|
384
405
|
PATH, use local binaries such as `./node_modules/.bin/beignet lint`.
|
|
406
|
+
|
|
407
|
+
## Broadcasting
|
|
408
|
+
|
|
409
|
+
Use `@beignet/core/broadcasting` for browser-safe `defineChannel` contracts in
|
|
410
|
+
`features/<feature>/channels.ts`. Use `@beignet/core/broadcasting/server` for
|
|
411
|
+
`BroadcastPort`, `createBroadcasting<AppContext>()`, explicit authorization
|
|
412
|
+
bindings in `broadcasts.ts`, and the registry in `server/broadcasts.ts`. Bind the
|
|
413
|
+
builders once in `lib/broadcasting.ts`. Recheck current user, tenant, membership,
|
|
414
|
+
and resource access on every connection, including renewal; public channels
|
|
415
|
+
also require an explicit authorization callback.
|
|
416
|
+
|
|
417
|
+
Broadcasts are ephemeral UI hints. Publish after the authoritative write; for
|
|
418
|
+
required attempts, record a publication job through the transaction outbox.
|
|
419
|
+
Inbox writes and publication jobs share one transaction. The existing app-owned
|
|
420
|
+
inbox `channel.ts` is a notification workflow module and may dispatch `tx.jobs`.
|
|
421
|
+
Independent notification channels do not guarantee order. Use
|
|
422
|
+
`defineBroadcastNotificationChannel` for ephemeral notification delivery.
|
|
423
|
+
|
|
424
|
+
Capture `resolveBroadcastOrigin` at the HTTP boundary using authenticated
|
|
425
|
+
principal/tenant/namespace. Pass captured `broadcastOrigin` through jobs and
|
|
426
|
+
publish with `excludeOrigin`; never derive it from worker identity. Keep IDs and
|
|
427
|
+
payloads out of telemetry. Browser clients must refetch on initial readiness and
|
|
428
|
+
reconnect, close on user/workspace changes, and never import server bindings.
|
|
429
|
+
Memory connects one process only; Redis connects replicas/workers and has no
|
|
430
|
+
replay. Keep SSE lifetime at or below 60 seconds and below host duration with
|
|
431
|
+
headroom. Do not start background worker loops in serverless providers.
|