@sparkletree/core 0.1.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.
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/dist/analytics.d.ts +75 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +170 -0
- package/dist/analytics.js.map +1 -0
- package/dist/audio.d.ts +85 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +465 -0
- package/dist/audio.js.map +1 -0
- package/dist/client.d.ts +79 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +251 -0
- package/dist/client.js.map +1 -0
- package/dist/context.d.ts +104 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +277 -0
- package/dist/context.js.map +1 -0
- package/dist/fragments.d.ts +108 -0
- package/dist/fragments.d.ts.map +1 -0
- package/dist/fragments.js +223 -0
- package/dist/fragments.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol.d.ts +70 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +97 -0
- package/dist/protocol.js.map +1 -0
- package/dist/publishableKey.d.ts +38 -0
- package/dist/publishableKey.d.ts.map +1 -0
- package/dist/publishableKey.js +69 -0
- package/dist/publishableKey.js.map +1 -0
- package/dist/safeUrl.d.ts +56 -0
- package/dist/safeUrl.d.ts.map +1 -0
- package/dist/safeUrl.js +117 -0
- package/dist/safeUrl.js.map +1 -0
- package/dist/sse.d.ts +51 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +137 -0
- package/dist/sse.js.map +1 -0
- package/dist/state.d.ts +321 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +594 -0
- package/dist/state.js.map +1 -0
- package/dist/text.d.ts +10 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +29 -0
- package/dist/text.js.map +1 -0
- package/dist/theme.d.ts +52 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +88 -0
- package/dist/theme.js.map +1 -0
- package/dist/trust.d.ts +52 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +95 -0
- package/dist/trust.js.map +1 -0
- package/dist/variant.d.ts +117 -0
- package/dist/variant.d.ts.map +1 -0
- package/dist/variant.js +167 -0
- package/dist/variant.js.map +1 -0
- package/dist/wire.d.ts +564 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +133 -0
- package/dist/wire.js.map +1 -0
- package/package.json +55 -0
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copy choreography — the rewrite/settle state machine.
|
|
3
|
+
*
|
|
4
|
+
* This is the part of the SDK that is not a fetch wrapper. The doctrine it
|
|
5
|
+
* implements (Squid V2, shipped 2026-07-23) is three rules:
|
|
6
|
+
*
|
|
7
|
+
* 1. FIRST PAINT IS REAL COPY. Never a skeleton, never an empty frame. The
|
|
8
|
+
* client starts from SSR `/content` or a required `fallback`.
|
|
9
|
+
* 2. COPY CHANGES AT MOST ONCE. Text a reader may already be mid-sentence on
|
|
10
|
+
* is never wiped and retyped. The stream lands as ONE deliberate rewrite.
|
|
11
|
+
* 3. TEXT ON THE WIRE IS TEXT WE CAN SHOW. The first CHUNK takes the canvas,
|
|
12
|
+
* whatever the `*-start` called itself. The delivery `mode` is no longer
|
|
13
|
+
* consulted for hold release — an earlier revision released on
|
|
14
|
+
* `mode: "generate"` and kept holding on `replay`, which re-derived from
|
|
15
|
+
* a label what the arrival of actual text proves directly. A replay's
|
|
16
|
+
* single flush still paints once, because one flush is genuinely what
|
|
17
|
+
* arrived — not because it was held back.
|
|
18
|
+
*
|
|
19
|
+
* The hold is the mechanism that reconciles rules 1 and 2. When the canvas
|
|
20
|
+
* already shows copy the stream is about to replace, that copy is a FALLBACK,
|
|
21
|
+
* not a first draft: showing it and then yanking it is worse than briefly
|
|
22
|
+
* showing the art alone. So the canvas holds blank on the art for a budget —
|
|
23
|
+
* a budget for the STORED FALLBACK, not for the stream: the fallback is
|
|
24
|
+
* allowed on screen only once the stream has failed or run out the budget
|
|
25
|
+
* without delivering. A fast stream types the real copy straight in; a slow
|
|
26
|
+
* one gets the fallback back, and any later copy arrives as the single
|
|
27
|
+
* permitted rewrite.
|
|
28
|
+
*
|
|
29
|
+
* Reference implementation (the iframe shell, which must stay behaviourally
|
|
30
|
+
* identical): `mosaic/services/rendererService.ts`, streamInitialCopyCreative.
|
|
31
|
+
*/
|
|
32
|
+
import { type ContentSource, type CopyMode } from "./wire.js";
|
|
33
|
+
export type CopyField = "greeting" | "headline" | "body" | "cta";
|
|
34
|
+
export declare const COPY_FIELDS: readonly CopyField[];
|
|
35
|
+
/**
|
|
36
|
+
* How long the canvas will hold blank waiting for the stream, once the stream
|
|
37
|
+
* has proven it is alive.
|
|
38
|
+
*
|
|
39
|
+
* Armed against the STREAM, not the mount: the budget is for the connection
|
|
40
|
+
* that was just opened. The shell's earlier clock started before the transport
|
|
41
|
+
* had even connected, so on a slow link it expired mid-connect and painted
|
|
42
|
+
* stored copy that the live copy then overwrote — fallback churn nobody asked
|
|
43
|
+
* for, and a rule-2 violation caused by the timer meant to protect rule 2.
|
|
44
|
+
*/
|
|
45
|
+
export declare const COPY_HOLD_MS = 2500;
|
|
46
|
+
export interface FieldState {
|
|
47
|
+
/** What a consumer should render right now. Never a placeholder. */
|
|
48
|
+
text: string;
|
|
49
|
+
/** Provenance of `text`. `generated` and `cached` may carry the adaptation
|
|
50
|
+
* mark, `static` may not — `decideChrome` is the one place that decides. */
|
|
51
|
+
source: ContentSource;
|
|
52
|
+
/** Declared delivery mode, once the field has opened. */
|
|
53
|
+
mode: CopyMode | null;
|
|
54
|
+
/** True while live deltas are landing — consumers may animate a caret. */
|
|
55
|
+
typing: boolean;
|
|
56
|
+
/** `*-done` seen: `text` is final for this stream. */
|
|
57
|
+
settled: boolean;
|
|
58
|
+
}
|
|
59
|
+
export type Phase =
|
|
60
|
+
/** Nothing started. */
|
|
61
|
+
"idle"
|
|
62
|
+
/** Canvas is deliberately blank, waiting out the budget. */
|
|
63
|
+
| "holding"
|
|
64
|
+
/** Live deltas are landing. */
|
|
65
|
+
| "live"
|
|
66
|
+
/** `done` received. */
|
|
67
|
+
| "settled"
|
|
68
|
+
/** `error`, or the transport failed. Whatever was painted STAYS painted. */
|
|
69
|
+
| "failed";
|
|
70
|
+
export interface CreativeState {
|
|
71
|
+
phase: Phase;
|
|
72
|
+
fields: Record<CopyField, FieldState>;
|
|
73
|
+
theme: {
|
|
74
|
+
colors: Record<string, string>;
|
|
75
|
+
sources: Record<string, string>;
|
|
76
|
+
} | null;
|
|
77
|
+
layout: string | null;
|
|
78
|
+
experienceManifest: unknown;
|
|
79
|
+
backgroundImage: string | null;
|
|
80
|
+
sequence: {
|
|
81
|
+
frames: string[];
|
|
82
|
+
heroIndex: number;
|
|
83
|
+
fps: number;
|
|
84
|
+
} | null;
|
|
85
|
+
videoUrl: string | null;
|
|
86
|
+
ctaStyle: unknown;
|
|
87
|
+
ctaAction: string | null;
|
|
88
|
+
/** Terminal `done.meta`, verbatim. */
|
|
89
|
+
meta: Record<string, unknown> | null;
|
|
90
|
+
/** Strongest provenance this stream declared. Drives trust chrome. */
|
|
91
|
+
contentSource: ContentSource;
|
|
92
|
+
/** W8 — set when the server served a deterministic winner instead. */
|
|
93
|
+
degraded: string | null;
|
|
94
|
+
/** Resolved variant, for pinning subsequent calls in this page view. */
|
|
95
|
+
variantId: string | null;
|
|
96
|
+
/** Human-readable failure, if any. Never blanks painted copy. */
|
|
97
|
+
error: string | null;
|
|
98
|
+
/**
|
|
99
|
+
* Rewrite counter. 0 = still showing first paint. 1 = the stream's single
|
|
100
|
+
* permitted rewrite has landed. Anything above 1 is a doctrine violation
|
|
101
|
+
* and is asserted against in the tests rather than merely hoped for.
|
|
102
|
+
*/
|
|
103
|
+
rewrites: number;
|
|
104
|
+
}
|
|
105
|
+
export interface ChoreographerOptions {
|
|
106
|
+
/**
|
|
107
|
+
* First paint. Real copy from SSR `/content` or the consumer's `fallback`.
|
|
108
|
+
* Required by doctrine — there is no skeleton mode to fall back to.
|
|
109
|
+
*/
|
|
110
|
+
initial?: Partial<Record<CopyField, string>>;
|
|
111
|
+
/**
|
|
112
|
+
* True when the initial copy has been on screen since the page's own first
|
|
113
|
+
* paint (SSR, or carried across a client-side navigation) and is therefore
|
|
114
|
+
* already being read. Such copy is EXEMPT from the hold: blanking text a
|
|
115
|
+
* reader has had in front of them is the very thing the hold exists to
|
|
116
|
+
* prevent, so applying the hold to it would invert the rule.
|
|
117
|
+
*/
|
|
118
|
+
initialIsOnScreen?: boolean;
|
|
119
|
+
holdMs?: number;
|
|
120
|
+
/** Injectable for tests; defaults to the platform timers. */
|
|
121
|
+
setTimeout?: (fn: () => void, ms: number) => unknown;
|
|
122
|
+
clearTimeout?: (handle: unknown) => void;
|
|
123
|
+
}
|
|
124
|
+
type Listener = (state: CreativeState) => void;
|
|
125
|
+
/**
|
|
126
|
+
* Owns one island's copy for one page view. Fed wire events; emits states.
|
|
127
|
+
*
|
|
128
|
+
* Pure with respect to the DOM: it decides WHAT should be on screen and when,
|
|
129
|
+
* and never touches how. That is what lets the same choreography drive React,
|
|
130
|
+
* the iframe shell, and anything else without three copies of these rules.
|
|
131
|
+
*/
|
|
132
|
+
export declare class CopyChoreographer {
|
|
133
|
+
private readonly options;
|
|
134
|
+
private state;
|
|
135
|
+
private listeners;
|
|
136
|
+
private readonly holdMs;
|
|
137
|
+
private readonly setTimer;
|
|
138
|
+
private readonly clearTimer;
|
|
139
|
+
/**
|
|
140
|
+
* Copy pulled off the canvas when the hold armed. Alive until the stream
|
|
141
|
+
* TERMINATES (`done`/`failed`), not merely until the hold releases: any
|
|
142
|
+
* field the stream never delivers is restored from here, because a field
|
|
143
|
+
* the stream never took must end on its fallback — never on the blank the
|
|
144
|
+
* hold itself painted.
|
|
145
|
+
*/
|
|
146
|
+
private heldCopy;
|
|
147
|
+
private holdTimer;
|
|
148
|
+
/**
|
|
149
|
+
* The budget may restart ONCE per hold episode. Without a cap, a server
|
|
150
|
+
* emitting a `*-start` per field would extend the blank window by a full
|
|
151
|
+
* budget per field — proof of life is proof once, and a blank canvas is a
|
|
152
|
+
* cost the visitor pays, so it is not for sale twice.
|
|
153
|
+
*/
|
|
154
|
+
private holdRestarted;
|
|
155
|
+
/** Text accumulated from the wire while the hold is still on. */
|
|
156
|
+
private pending;
|
|
157
|
+
/** True once the machine has committed a change to the first paint. */
|
|
158
|
+
private rewriteCommitted;
|
|
159
|
+
/**
|
|
160
|
+
* Fields whose on-canvas text is restored fallback a reader can see. Live
|
|
161
|
+
* deltas must not type over these — they buffer off-canvas and the field
|
|
162
|
+
* lands ONCE, composed, at its `*-done`. Typing is an entrance for a blank
|
|
163
|
+
* field, never a treatment for text someone is reading.
|
|
164
|
+
*/
|
|
165
|
+
private fallbackOnCanvas;
|
|
166
|
+
/**
|
|
167
|
+
* Fields the stream has closed with a `*-done`, including closes that
|
|
168
|
+
* arrived while the hold was still on and so never reached the canvas at the
|
|
169
|
+
* time. Consulted when the copy finally paints, so `settled` describes the
|
|
170
|
+
* field rather than the route it took.
|
|
171
|
+
*/
|
|
172
|
+
private closed;
|
|
173
|
+
/** Set by dispose(): async completions (image decode) must not patch after it. */
|
|
174
|
+
private disposed;
|
|
175
|
+
constructor(options?: ChoreographerOptions);
|
|
176
|
+
getState(): CreativeState;
|
|
177
|
+
subscribe(listener: Listener): () => void;
|
|
178
|
+
private emit;
|
|
179
|
+
private patch;
|
|
180
|
+
private patchField;
|
|
181
|
+
private hasInitialCopy;
|
|
182
|
+
/**
|
|
183
|
+
* Call when the stream request has been opened.
|
|
184
|
+
*
|
|
185
|
+
* Arms the hold if — and only if — there is fallback copy on the canvas that
|
|
186
|
+
* has NOT already been read. Copy that has been on screen since first paint
|
|
187
|
+
* stays put: it is not a placeholder, and hiding it would be the mid-read
|
|
188
|
+
* wipe this whole machine exists to prevent.
|
|
189
|
+
*/
|
|
190
|
+
streamOpened(): void;
|
|
191
|
+
/**
|
|
192
|
+
* Hold expired without the stream taking the canvas.
|
|
193
|
+
*
|
|
194
|
+
* Prefer whatever the stream actually delivered; the stored copy is the last
|
|
195
|
+
* resort, never a first draft.
|
|
196
|
+
*/
|
|
197
|
+
private onHoldExpired;
|
|
198
|
+
/**
|
|
199
|
+
* The stream is over and the canvas is final.
|
|
200
|
+
*
|
|
201
|
+
* `readSseStream` keeps draining after a terminal event, and the parser's
|
|
202
|
+
* flush can emit a trailing frame, so late copy events are reachable rather
|
|
203
|
+
* than theoretical. Without this guard a post-`failed` chunk left
|
|
204
|
+
* `typing: true` forever — a caret animating on a dead stream — and a
|
|
205
|
+
* post-`done` chunk+done replaced settled text WITHOUT incrementing
|
|
206
|
+
* `rewrites`, so the doctrine counter read 1 while the reader saw two
|
|
207
|
+
* changes. Everything after the terminal event is dropped.
|
|
208
|
+
*/
|
|
209
|
+
private isTerminal;
|
|
210
|
+
private clearHoldTimer;
|
|
211
|
+
/**
|
|
212
|
+
* Hand the canvas to the live stream: what has accumulated paints at once,
|
|
213
|
+
* so the rest can stream in behind it.
|
|
214
|
+
*
|
|
215
|
+
* `restoreUndelivered` distinguishes the two callers. On a chunk-driven
|
|
216
|
+
* release the stream is alive and delivering, so undelivered fields stay
|
|
217
|
+
* blank — typing into a blank canvas is their entrance, and `heldCopy`
|
|
218
|
+
* outlives the hold so `done`/`failed` restore any field the stream never
|
|
219
|
+
* takes. On budget EXPIRY the stream has sputtered: whatever it delivered
|
|
220
|
+
* paints, and every undelivered field gets its fallback back now, because
|
|
221
|
+
* blank is never the resting state the budget is allowed to buy.
|
|
222
|
+
*/
|
|
223
|
+
private releaseHoldToLive;
|
|
224
|
+
/** Budget spent with nothing delivered: the fallback comes back, composed. */
|
|
225
|
+
private restoreHeld;
|
|
226
|
+
/**
|
|
227
|
+
* Record that the first paint has been replaced. Restoring the SAME fallback
|
|
228
|
+
* text is not a rewrite — nothing on screen changed — which is why every
|
|
229
|
+
* caller commits only when STREAM text actually painted, and restoreHeld
|
|
230
|
+
* never commits at all.
|
|
231
|
+
*/
|
|
232
|
+
private commitRewrite;
|
|
233
|
+
/**
|
|
234
|
+
* Terminal honesty pass over provenance.
|
|
235
|
+
*
|
|
236
|
+
* A field still in `fallbackOnCanvas` when the stream ends is showing the
|
|
237
|
+
* customer's AUTHORED text: its buffered deltas never landed. Its `source`
|
|
238
|
+
* still says `generated` because `*-start` declared an intent the stream
|
|
239
|
+
* then failed to deliver — and `StreamText` marks on `field.source`, so
|
|
240
|
+
* leaving it would stamp "adapted for you" on copy nobody adapted.
|
|
241
|
+
*
|
|
242
|
+
* The mark must describe what is on screen, not what the server meant to
|
|
243
|
+
* send. A missing mark on adapted copy under-claims; a mark on authored copy
|
|
244
|
+
* is a false claim, and that is the worse of the two.
|
|
245
|
+
*
|
|
246
|
+
* `fallbackOnCanvas` is NOT the whole set. A chunk-driven release leaves
|
|
247
|
+
* undelivered fields blank — restoring them mid-stream would stage the
|
|
248
|
+
* wipe-and-retype this machine exists to prevent — so they never enter that
|
|
249
|
+
* set, and are instead restored from `heldCopy` by the terminal handlers.
|
|
250
|
+
* That is the likeliest degradation there is: the server opens a field,
|
|
251
|
+
* then times out. Demoting only `fallbackOnCanvas` left exactly that path
|
|
252
|
+
* rendering "adapted for you" over the customer's own sentence.
|
|
253
|
+
*
|
|
254
|
+
* So callers pass the fields they restored, and both sets are demoted.
|
|
255
|
+
*/
|
|
256
|
+
private demoteUndeliveredProvenance;
|
|
257
|
+
/** True once any field on canvas actually carries adapted copy. */
|
|
258
|
+
private hasAdaptedCopyOnCanvas;
|
|
259
|
+
/**
|
|
260
|
+
* A field opened. Proof of life, and provenance — nothing more.
|
|
261
|
+
*
|
|
262
|
+
* The canvas changes hands on the first CHUNK, not here: the delivery mode
|
|
263
|
+
* is recorded on the field but no longer consulted for hold release. All a
|
|
264
|
+
* start does while holding is RESTART the fallback budget, because the
|
|
265
|
+
* stream has just proven it is alive and the old budget was measuring a
|
|
266
|
+
* connection that had not connected yet.
|
|
267
|
+
*/
|
|
268
|
+
copyStart(field: CopyField, mode: CopyMode | null, source: ContentSource): void;
|
|
269
|
+
/**
|
|
270
|
+
* A delta landed. Text on the wire is text we can show: the first chunk
|
|
271
|
+
* takes the canvas away from the pending fallback, whatever the start
|
|
272
|
+
* called itself. While the field shows restored fallback copy a reader can
|
|
273
|
+
* see, deltas still buffer off-canvas — that text changes ONCE, composed,
|
|
274
|
+
* at `*-done`, never delta by delta.
|
|
275
|
+
*/
|
|
276
|
+
copyChunk(field: CopyField, text: string): void;
|
|
277
|
+
/**
|
|
278
|
+
* A field closed. `text` is authoritative — a client that missed chunks can
|
|
279
|
+
* paint this alone, which is what makes chunk loss a cosmetic problem
|
|
280
|
+
* instead of a correctness one.
|
|
281
|
+
*/
|
|
282
|
+
copyDone(field: CopyField, text: string): void;
|
|
283
|
+
themeReady(colors: Record<string, string>, sources: Record<string, string>): void;
|
|
284
|
+
layoutReady(layout: string, manifest?: unknown): void;
|
|
285
|
+
/**
|
|
286
|
+
* Absence of this event means KEEP THE BAKED THEME WASH. It does not mean
|
|
287
|
+
* clear the art layer — the server omits it when there is no creative image,
|
|
288
|
+
* and a client that cleared on absence would blank the hero on exactly the
|
|
289
|
+
* campaigns that never had a picture.
|
|
290
|
+
*
|
|
291
|
+
* The patch waits for the browser to DECODE the image first: consumers
|
|
292
|
+
* render this state directly, and a backgroundImage that lands before
|
|
293
|
+
* pixels exist paints the already-flipped theme against the old (or blank)
|
|
294
|
+
* art — the contrast tear. On failure the patch still lands (the consumer's
|
|
295
|
+
* own loading treatment owns that case); outside a browser it is immediate.
|
|
296
|
+
*/
|
|
297
|
+
backgroundReady(bgImage: string): void;
|
|
298
|
+
sequenceReady(frames: string[], heroIndex: number, fps: number): void;
|
|
299
|
+
videoReady(videoUrl: string): void;
|
|
300
|
+
ctaStyleReady(style: unknown): void;
|
|
301
|
+
ctaReady(text: string, style: unknown, action?: string): void;
|
|
302
|
+
/**
|
|
303
|
+
* Terminal. Anything still held paints now, once, composed — the last
|
|
304
|
+
* chance for the stream's copy to land as a single deliberate change rather
|
|
305
|
+
* than being dropped because the budget happened to outlive the stream.
|
|
306
|
+
*/
|
|
307
|
+
done(meta: Record<string, unknown>): void;
|
|
308
|
+
/**
|
|
309
|
+
* The stream failed.
|
|
310
|
+
*
|
|
311
|
+
* Whatever is painted STAYS painted. An error is never a reason to blank
|
|
312
|
+
* copy a reader is mid-sentence on — the worst honest outcome is that the
|
|
313
|
+
* creative simply stopped adapting, which looks like a normal page.
|
|
314
|
+
*/
|
|
315
|
+
failed(message: string): void;
|
|
316
|
+
/** Release timers. Safe to call twice. */
|
|
317
|
+
dispose(): void;
|
|
318
|
+
private promoteContentSource;
|
|
319
|
+
}
|
|
320
|
+
export {};
|
|
321
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|