@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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +105 -0
  3. package/dist/analytics.d.ts +75 -0
  4. package/dist/analytics.d.ts.map +1 -0
  5. package/dist/analytics.js +170 -0
  6. package/dist/analytics.js.map +1 -0
  7. package/dist/audio.d.ts +85 -0
  8. package/dist/audio.d.ts.map +1 -0
  9. package/dist/audio.js +465 -0
  10. package/dist/audio.js.map +1 -0
  11. package/dist/client.d.ts +79 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +251 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/context.d.ts +104 -0
  16. package/dist/context.d.ts.map +1 -0
  17. package/dist/context.js +277 -0
  18. package/dist/context.js.map +1 -0
  19. package/dist/fragments.d.ts +108 -0
  20. package/dist/fragments.d.ts.map +1 -0
  21. package/dist/fragments.js +223 -0
  22. package/dist/fragments.js.map +1 -0
  23. package/dist/index.d.ts +31 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +30 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/protocol.d.ts +70 -0
  28. package/dist/protocol.d.ts.map +1 -0
  29. package/dist/protocol.js +97 -0
  30. package/dist/protocol.js.map +1 -0
  31. package/dist/publishableKey.d.ts +38 -0
  32. package/dist/publishableKey.d.ts.map +1 -0
  33. package/dist/publishableKey.js +69 -0
  34. package/dist/publishableKey.js.map +1 -0
  35. package/dist/safeUrl.d.ts +56 -0
  36. package/dist/safeUrl.d.ts.map +1 -0
  37. package/dist/safeUrl.js +117 -0
  38. package/dist/safeUrl.js.map +1 -0
  39. package/dist/sse.d.ts +51 -0
  40. package/dist/sse.d.ts.map +1 -0
  41. package/dist/sse.js +137 -0
  42. package/dist/sse.js.map +1 -0
  43. package/dist/state.d.ts +321 -0
  44. package/dist/state.d.ts.map +1 -0
  45. package/dist/state.js +594 -0
  46. package/dist/state.js.map +1 -0
  47. package/dist/text.d.ts +10 -0
  48. package/dist/text.d.ts.map +1 -0
  49. package/dist/text.js +29 -0
  50. package/dist/text.js.map +1 -0
  51. package/dist/theme.d.ts +52 -0
  52. package/dist/theme.d.ts.map +1 -0
  53. package/dist/theme.js +88 -0
  54. package/dist/theme.js.map +1 -0
  55. package/dist/trust.d.ts +52 -0
  56. package/dist/trust.d.ts.map +1 -0
  57. package/dist/trust.js +95 -0
  58. package/dist/trust.js.map +1 -0
  59. package/dist/variant.d.ts +117 -0
  60. package/dist/variant.d.ts.map +1 -0
  61. package/dist/variant.js +167 -0
  62. package/dist/variant.js.map +1 -0
  63. package/dist/wire.d.ts +564 -0
  64. package/dist/wire.d.ts.map +1 -0
  65. package/dist/wire.js +133 -0
  66. package/dist/wire.js.map +1 -0
  67. package/package.json +55 -0
@@ -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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"}