@sparkletree/core 0.5.0 → 0.6.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/README.md +16 -15
- package/dist/analytics.d.ts +2 -1
- package/dist/analytics.d.ts.map +1 -1
- package/dist/analytics.js.map +1 -1
- package/dist/trust.d.ts +15 -17
- package/dist/trust.d.ts.map +1 -1
- package/dist/trust.js +13 -16
- package/dist/trust.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ impression analytics.
|
|
|
7
7
|
|
|
8
8
|
**Building a React app?** Install
|
|
9
9
|
[`@sparkletree/react`](https://www.npmjs.com/package/@sparkletree/react)
|
|
10
|
-
instead
|
|
10
|
+
instead; it wraps this package. Use `core` directly with Vue, Svelte, Solid,
|
|
11
11
|
or plain DOM.
|
|
12
12
|
|
|
13
13
|
```bash
|
|
@@ -27,7 +27,7 @@ const handle = openStream({
|
|
|
27
27
|
island: "hero",
|
|
28
28
|
},
|
|
29
29
|
// Required. This is what the visitor reads if the network is slow, the
|
|
30
|
-
// campaign is paused, or generation fails
|
|
30
|
+
// campaign is paused, or generation fails, so write it as copy you would
|
|
31
31
|
// ship on its own.
|
|
32
32
|
initial: { headline: "Software that meets the moment" },
|
|
33
33
|
// Set true when that copy is already visible (server-rendered, or carried
|
|
@@ -63,10 +63,10 @@ terminal state; `close()` aborts the request and releases timers.
|
|
|
63
63
|
| `fetchContent` | One-shot fetch of campaign content, for a first-paint fetch of your own. Not used by `openStream`. |
|
|
64
64
|
| `CopyChoreographer`, `COPY_FIELDS`, `COPY_HOLD_MS` | The copy state machine, if you want to drive it yourself. |
|
|
65
65
|
| `SseParser`, `readSseStream` | Server-sent-events parsing, usable standalone. |
|
|
66
|
-
| `decideChrome`, `viewerPrefersStandard`, `setViewerPrefersStandard`, `STANDARD_MODE_KEY` | Whether
|
|
66
|
+
| `decideChrome`, `viewerPrefersStandard`, `setViewerPrefersStandard`, `STANDARD_MODE_KEY` | Whether copy counts as AI-adapted for this viewer (feed an opt-in disclosure mark from it), and the viewer's opt-out. |
|
|
67
67
|
| `applyTheme`, `themeStyle`, `tokenName`, `tokenSource`, `TOKEN_PREFIX` | Theme tokens delivered with the campaign. |
|
|
68
68
|
| `track`, `ImpressionRecorder`, `observeVisibility`, `sessionId` | Impression analytics. |
|
|
69
|
-
| `pageVariants`, `VariantRegistry`, `RESERVATION_TIMEOUT_MS` | Variant pinning
|
|
69
|
+
| `pageVariants`, `VariantRegistry`, `RESERVATION_TIMEOUT_MS` | Variant pinning: one page view sees one variant. |
|
|
70
70
|
| `createClient`, `fetchFragments`, `fragmentSwapPolicy`, `MAX_FRAGMENT_FIELDS`, `MAX_FALLBACK_CHARS` | Fragments: the keys and fallbacks you declare are the request schema. |
|
|
71
71
|
| `mountAudio`, `activePlayer`, `destroyActiveAudio` | Audio playback (no UI). |
|
|
72
72
|
| `buildStreamUrl`, `buildContentUrl`, `negotiatedProtocol`, `PROTOCOL_*`, `SDK_PARAM`, `VARIANT_PARAM` | Protocol plumbing. |
|
|
@@ -74,14 +74,14 @@ terminal state; `close()` aborts the request and releases timers.
|
|
|
74
74
|
## Copy state
|
|
75
75
|
|
|
76
76
|
`state.fields.{greeting,headline,body,cta}` each carry
|
|
77
|
-
`{ text, source, mode, typing, settled }`, already sequenced for display
|
|
77
|
+
`{ text, source, mode, typing, settled }`, already sequenced for display: you
|
|
78
78
|
render `text` and use `typing`/`settled` for presentation only. Alongside them:
|
|
79
79
|
`phase`, `error`, `rewrites`, `contentSource`, `degraded`, `variantId`,
|
|
80
80
|
`held`, `theme`, `layout`, `backgroundImage`, `videoUrl`, `sequence`,
|
|
81
81
|
`ctaStyle`, `ctaAction`, `meta`.
|
|
82
82
|
|
|
83
83
|
`phase` moves `idle → holding? → live → settled | failed`. Nothing throws, and
|
|
84
|
-
no failure blanks copy a visitor is reading
|
|
84
|
+
no failure blanks copy a visitor is reading. The one deliberate blank is
|
|
85
85
|
`holding`, and even that one does not have to move the page: `state.held`
|
|
86
86
|
carries, per field, the copy the hold pulled off the canvas, so a renderer can
|
|
87
87
|
reserve its exact geometry while `text` is `""`. On `failed`, fields that
|
|
@@ -91,15 +91,15 @@ a field the stream opened but never finished is repainted with your whole
|
|
|
91
91
|
|
|
92
92
|
## What the client guarantees
|
|
93
93
|
|
|
94
|
-
1. **A visitor always reads real copy.** Your `initial` text or the stream's
|
|
94
|
+
1. **A visitor always reads real copy.** Your `initial` text or the stream's:
|
|
95
95
|
whatever is on the canvas is something somebody wrote.
|
|
96
96
|
2. **Copy changes once.** A field is rewritten at most one time per
|
|
97
97
|
page view. Copy not yet on screen is held back: the field's `text` goes
|
|
98
98
|
`""` while the canvas waits for the stream and your `initial` text paints
|
|
99
99
|
only if the hold expires first
|
|
100
|
-
(`holdMs`, default `COPY_HOLD_MS`
|
|
100
|
+
(`holdMs`, default `COPY_HOLD_MS` of 2500 ms, restarted once if the stream
|
|
101
101
|
proves it is alive). Render `state.held` invisibly for the duration and the
|
|
102
|
-
space is occupied throughout, so neither exit moves the page
|
|
102
|
+
space is occupied throughout, so neither exit moves the page, which is what
|
|
103
103
|
`@sparkletree/react` does for you. Copy already on screen is never blanked
|
|
104
104
|
and never typed over: deltas aimed at it (`initialIsOnScreen` or
|
|
105
105
|
`serverRendered`) buffer off-canvas and the field changes at most once,
|
|
@@ -107,17 +107,18 @@ a field the stream opened but never finished is repainted with your whole
|
|
|
107
107
|
canvas, and its pacing lives in `@sparkletree/react`'s `StreamText`.
|
|
108
108
|
3. **The server declares how content was produced** (static, cached, or
|
|
109
109
|
generated); the client never guesses from timing.
|
|
110
|
-
4. **
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
4. **The chrome decision is honest.** `decideChrome` returns `marked` for
|
|
111
|
+
generated and cached content, never for static, and never for any
|
|
112
|
+
provenance once the viewer has asked for the standard version. Rendering a
|
|
113
|
+
visible disclosure mark from that decision is the integrator's opt-in.
|
|
113
114
|
|
|
114
115
|
Full documentation:
|
|
115
116
|
[docs.sparkletree.io](https://docs.sparkletree.io/developers/sdk/core/)
|
|
116
117
|
|
|
117
118
|
## Requirements
|
|
118
119
|
|
|
119
|
-
ES2022,
|
|
120
|
-
`AbortController` must exist
|
|
120
|
+
ES2022, ESM only, Node >= 18. `fetch`, `ReadableStream` and
|
|
121
|
+
`AbortController` must exist; inject `fetchImpl` to substitute them. No
|
|
121
122
|
dependencies.
|
|
122
123
|
|
|
123
124
|
There is no `require` export condition, which matters in two places:
|
|
@@ -127,5 +128,5 @@ There is no `require` export condition, which matters in two places:
|
|
|
127
128
|
either way, so this depends on your runtime, not your code.)
|
|
128
129
|
- **In TypeScript**, `moduleResolution: "bundler"` resolves cleanly. So does
|
|
129
130
|
`"node16"`/`"nodenext"` *if your own package.json has `"type": "module"`*.
|
|
130
|
-
Without it you get `TS1479` telling you to use a dynamic import
|
|
131
|
+
Without it you get `TS1479` telling you to use a dynamic import: accurate,
|
|
131
132
|
not a false positive.
|
package/dist/analytics.d.ts
CHANGED
|
@@ -29,7 +29,8 @@ export interface AnalyticsContext {
|
|
|
29
29
|
}
|
|
30
30
|
export interface ImpressionDetail {
|
|
31
31
|
contentSource: ContentSource;
|
|
32
|
-
/** Was the
|
|
32
|
+
/** Was adapted copy on screen (the chrome decision)? Reported so chrome
|
|
33
|
+
* state is measurable; the visible mark itself is the integrator's opt-in. */
|
|
33
34
|
chromeMarked: boolean;
|
|
34
35
|
/** W8 — set when the server served a deterministic winner. */
|
|
35
36
|
degraded?: string | null;
|
package/dist/analytics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B;kFAC8E;IAC9E,YAAY,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD,wBAAgB,SAAS,IAAI,MAAM,CAclC;AAcD,iFAAiF;AACjF,wBAAsB,KAAK,CACzB,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,SAAS,EACpB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACtC,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,KAAK,CAAS;gBAEO,OAAO,EAAE,gBAAgB;IAEtD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,yEAAyE;IACzE,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO;CAW1C;AAED,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,IAAI,EACrB,OAAO,GAAE,iBAAsB,GAC9B,MAAM,IAAI,CA0CZ"}
|
package/dist/analytics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"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"}
|
package/dist/trust.d.ts
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Trust chrome.
|
|
2
|
+
* Trust chrome — the DECISION, not a rendering.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* `decideChrome` says whether a piece of copy counts as adapted for this
|
|
5
|
+
* viewer. Nothing in the SDK renders a visible mark from it by default; the
|
|
6
|
+
* react package exports `InlineMark` for integrators who opt into one, and
|
|
7
|
+
* the impression beacon reports the decision so chrome state stays
|
|
8
|
+
* measurable.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* wire from live generation — so a client marking "everything that came down a
|
|
17
|
-
* stream" would have been labelling stored copy as adapted. Marking static
|
|
18
|
-
* copy as adapted is a worse failure than not marking generated copy, because
|
|
19
|
-
* one under-claims and the other lies.
|
|
10
|
+
* The honesty constraint (the part W5 exists for): `marked` must NOT be true
|
|
11
|
+
* for copy that was merely served. Before content-source signalling, the
|
|
12
|
+
* silent static-fallback path was indistinguishable on the wire from live
|
|
13
|
+
* generation — so a client marking "everything that came down a stream"
|
|
14
|
+
* would have been labelling stored copy as adapted. Claiming static copy is
|
|
15
|
+
* adapted is a worse failure than under-claiming generated copy, because one
|
|
16
|
+
* under-claims and the other lies.
|
|
20
17
|
*/
|
|
21
18
|
import type { ContentSource } from "./wire.js";
|
|
22
19
|
/** Where the viewer's "show me the standard version" preference lives. */
|
|
23
20
|
export declare const STANDARD_MODE_KEY = "st:standard";
|
|
24
21
|
export interface ChromeDecision {
|
|
25
|
-
/**
|
|
22
|
+
/** Does this copy count as adapted for this viewer? (Feed an opt-in
|
|
23
|
+
* disclosure mark, and the impression beacon, from this.) */
|
|
26
24
|
marked: boolean;
|
|
27
25
|
/**
|
|
28
26
|
* Why, in one machine-readable word. Reported on the impression, so the
|
package/dist/trust.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B;iEAC6D;IAC7D,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,kBAAkB,CAAC;CAChE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,aAAa,EAAE,aAAa,EAC5B,qBAAqB,EAAE,OAAO,GAC7B,cAAc,CAKhB;AAwBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAMhE;AAED,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAShF"}
|
package/dist/trust.js
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Trust chrome.
|
|
2
|
+
* Trust chrome — the DECISION, not a rendering.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* `decideChrome` says whether a piece of copy counts as adapted for this
|
|
5
|
+
* viewer. Nothing in the SDK renders a visible mark from it by default; the
|
|
6
|
+
* react package exports `InlineMark` for integrators who opt into one, and
|
|
7
|
+
* the impression beacon reports the decision so chrome state stays
|
|
8
|
+
* measurable.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* wire from live generation — so a client marking "everything that came down a
|
|
17
|
-
* stream" would have been labelling stored copy as adapted. Marking static
|
|
18
|
-
* copy as adapted is a worse failure than not marking generated copy, because
|
|
19
|
-
* one under-claims and the other lies.
|
|
10
|
+
* The honesty constraint (the part W5 exists for): `marked` must NOT be true
|
|
11
|
+
* for copy that was merely served. Before content-source signalling, the
|
|
12
|
+
* silent static-fallback path was indistinguishable on the wire from live
|
|
13
|
+
* generation — so a client marking "everything that came down a stream"
|
|
14
|
+
* would have been labelling stored copy as adapted. Claiming static copy is
|
|
15
|
+
* adapted is a worse failure than under-claiming generated copy, because one
|
|
16
|
+
* under-claims and the other lies.
|
|
20
17
|
*/
|
|
21
18
|
/** Where the viewer's "show me the standard version" preference lives. */
|
|
22
19
|
export const STANDARD_MODE_KEY = "st:standard";
|
package/dist/trust.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAa/C;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,aAA4B,EAC5B,qBAA8B;IAE9B,IAAI,qBAAqB;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAChF,IAAI,aAAa,KAAK,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChF,IAAI,aAAa,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,QAAkB;IACxC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY;YAAE,OAAO,MAAM,CAAC,YAAY,CAAC;QACrF,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAiB;IACrD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,wBAAwB,CAAC,KAAc,EAAE,OAAiB;IACxE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,KAAK;YAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;;YAC5C,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED