@tai42/studio-sdk 20.0.0 → 21.0.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 (89) hide show
  1. package/dist/components/components.css +7 -0
  2. package/dist/components/execution-key-picker.js.map +1 -1
  3. package/dist/components/extension-grouping.d.ts +8 -12
  4. package/dist/components/extension-grouping.d.ts.map +1 -1
  5. package/dist/components/extension-grouping.js +12 -15
  6. package/dist/components/extension-grouping.js.map +1 -1
  7. package/dist/components/extension-picker.d.ts +3 -4
  8. package/dist/components/extension-picker.d.ts.map +1 -1
  9. package/dist/components/extension-picker.js +10 -10
  10. package/dist/components/extension-picker.js.map +1 -1
  11. package/dist/components/fleet-report.d.ts +10 -5
  12. package/dist/components/fleet-report.d.ts.map +1 -1
  13. package/dist/components/fleet-report.js +20 -3
  14. package/dist/components/fleet-report.js.map +1 -1
  15. package/dist/components/json-tree-model.d.ts +19 -7
  16. package/dist/components/json-tree-model.d.ts.map +1 -1
  17. package/dist/components/json-tree-model.js +32 -8
  18. package/dist/components/json-tree-model.js.map +1 -1
  19. package/dist/components/json-tree.d.ts +10 -1
  20. package/dist/components/json-tree.d.ts.map +1 -1
  21. package/dist/components/json-tree.js +7 -4
  22. package/dist/components/json-tree.js.map +1 -1
  23. package/dist/components/select.d.ts +6 -0
  24. package/dist/components/select.d.ts.map +1 -1
  25. package/dist/components/select.js +3 -2
  26. package/dist/components/select.js.map +1 -1
  27. package/dist/components/served-media.d.ts +50 -4
  28. package/dist/components/served-media.d.ts.map +1 -1
  29. package/dist/components/served-media.js +69 -19
  30. package/dist/components/served-media.js.map +1 -1
  31. package/dist/env-markers.d.ts +25 -0
  32. package/dist/env-markers.d.ts.map +1 -0
  33. package/dist/env-markers.js +63 -0
  34. package/dist/env-markers.js.map +1 -0
  35. package/dist/hooks/interactions-stream.d.ts.map +1 -1
  36. package/dist/hooks/interactions-stream.js +9 -7
  37. package/dist/hooks/interactions-stream.js.map +1 -1
  38. package/dist/hooks/useApi.d.ts +2264 -912
  39. package/dist/hooks/useApi.d.ts.map +1 -1
  40. package/dist/hooks/useCapabilities.d.ts +5 -9
  41. package/dist/hooks/useCapabilities.d.ts.map +1 -1
  42. package/dist/hooks/useCapabilities.js +8 -33
  43. package/dist/hooks/useCapabilities.js.map +1 -1
  44. package/dist/host.d.ts +2 -0
  45. package/dist/host.d.ts.map +1 -1
  46. package/dist/host.js +8 -0
  47. package/dist/host.js.map +1 -1
  48. package/dist/index.d.ts +8 -4
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +3 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/plugin/coverage.d.ts +14 -0
  53. package/dist/plugin/coverage.d.ts.map +1 -0
  54. package/dist/plugin/coverage.js +14 -0
  55. package/dist/plugin/coverage.js.map +1 -0
  56. package/dist/plugin/registry.d.ts +11 -1
  57. package/dist/plugin/registry.d.ts.map +1 -1
  58. package/dist/plugin/registry.js +33 -4
  59. package/dist/plugin/registry.js.map +1 -1
  60. package/dist/plugin/types.d.ts +43 -1
  61. package/dist/plugin/types.d.ts.map +1 -1
  62. package/dist/state-binding/UpdateRow.d.ts +2 -2
  63. package/dist/state-binding/UpdateRow.js +1 -1
  64. package/dist/state-binding/UpdateRow.js.map +1 -1
  65. package/dist/state-binding/adapter.d.ts +12 -8
  66. package/dist/state-binding/adapter.d.ts.map +1 -1
  67. package/dist/state-binding/adapter.js +30 -13
  68. package/dist/state-binding/adapter.js.map +1 -1
  69. package/package.json +5 -4
  70. package/src/components/components.css +7 -0
  71. package/src/components/execution-key-picker.tsx +1 -1
  72. package/src/components/extension-grouping.ts +22 -22
  73. package/src/components/extension-picker.tsx +13 -14
  74. package/src/components/fleet-report.tsx +66 -7
  75. package/src/components/json-tree-model.ts +36 -8
  76. package/src/components/json-tree.tsx +24 -4
  77. package/src/components/select.tsx +11 -1
  78. package/src/components/served-media.tsx +150 -16
  79. package/src/env-markers.ts +70 -0
  80. package/src/hooks/interactions-stream.ts +9 -7
  81. package/src/hooks/useCapabilities.ts +8 -31
  82. package/src/host.ts +2 -0
  83. package/src/index.ts +16 -2
  84. package/src/plugin/coverage.ts +23 -0
  85. package/src/plugin/registry.ts +58 -3
  86. package/src/plugin/types.ts +45 -1
  87. package/src/state-binding/README.md +10 -7
  88. package/src/state-binding/UpdateRow.tsx +3 -3
  89. package/src/state-binding/adapter.ts +31 -16
@@ -18,15 +18,16 @@ function OptionItem({ option }) {
18
18
  return (_jsxs(RadixSelect.Item, { className: "tai-select-item", value: option.value, disabled: option.disabled, children: [_jsx(RadixSelect.ItemText, { children: option.label }), _jsx(RadixSelect.ItemIndicator, { className: "tai-select-item-indicator", children: _jsx(CheckIcon, {}) })] }));
19
19
  }
20
20
  export function Select(props) {
21
- const { value, defaultValue, onValueChange, placeholder = 'Select…', disabled, name, 'aria-label': ariaLabel, } = props;
21
+ const { value, defaultValue, onValueChange, placeholder = 'Select…', disabled, name, 'aria-label': ariaLabel, 'aria-describedby': ownDescribedBy, } = props;
22
22
  const field = useFieldControl();
23
+ const describedBy = [ownDescribedBy, field['aria-describedby']].filter((id) => id !== undefined);
23
24
  // Untyped JavaScript is the only caller that reaches this. Rendering one list
24
25
  // and dropping the other would lose every entry in the discarded one silently,
25
26
  // and an empty listbox reads as "there is nothing to choose".
26
27
  if ((props.options === undefined) === (props.groups === undefined)) {
27
28
  throw new Error('Select renders exactly one of `options` or `groups`; it was given both, or neither.');
28
29
  }
29
- return (_jsxs(RadixSelect.Root, { value: value, defaultValue: defaultValue, onValueChange: onValueChange, disabled: disabled, name: name, children: [_jsxs(RadixSelect.Trigger, { id: field.id, className: SELECT_TRIGGER_CLASS, "aria-label": field.id === undefined ? ariaLabel : undefined, "aria-describedby": field['aria-describedby'], "aria-invalid": field['aria-invalid'], children: [_jsx(RadixSelect.Value, { placeholder: placeholder }), _jsx(RadixSelect.Icon, { "aria-hidden": "true", children: _jsx(ChevronDownIcon, {}) })] }), _jsx(RadixSelect.Portal, { children: _jsx(RadixSelect.Content, { className: "tai-select-content", position: "popper", sideOffset: 4, children: _jsx(RadixSelect.Viewport, { className: "tai-select-viewport", children: props.groups !== undefined
30
+ return (_jsxs(RadixSelect.Root, { value: value, defaultValue: defaultValue, onValueChange: onValueChange, disabled: disabled, name: name, children: [_jsxs(RadixSelect.Trigger, { id: field.id, className: SELECT_TRIGGER_CLASS, "aria-label": field.id === undefined ? ariaLabel : undefined, "aria-describedby": describedBy.length > 0 ? describedBy.join(' ') : undefined, "aria-invalid": field['aria-invalid'], children: [_jsx(RadixSelect.Value, { placeholder: placeholder }), _jsx(RadixSelect.Icon, { "aria-hidden": "true", children: _jsx(ChevronDownIcon, {}) })] }), _jsx(RadixSelect.Portal, { children: _jsx(RadixSelect.Content, { className: "tai-select-content", position: "popper", sideOffset: 4, children: _jsx(RadixSelect.Viewport, { className: "tai-select-viewport", children: props.groups !== undefined
30
31
  ? props.groups.map((group) => (_jsxs(RadixSelect.Group, { children: [_jsx(RadixSelect.Label, { className: "tai-select-group-label tai-label", children: group.label }), group.options.map((option) => (_jsx(OptionItem, { option: option }, option.value)))] }, group.label)))
31
32
  : props.options.map((option) => _jsx(OptionItem, { option: option }, option.value)) }) }) })] }));
32
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":"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"}
@@ -12,15 +12,26 @@
12
12
  * url is a loud blocked notice, its text React-escaped, never a live attribute.
13
13
  * There is no `dangerouslySetInnerHTML` here.
14
14
  */
15
+ import type { ServedConstants } from '@tai42/api-client';
15
16
  import type { ReactNode } from 'react';
17
+ /**
18
+ * The served-media grammar the contract publishes, read from the injected client
19
+ * (`useApi().constants`): the served route prefix and the stored-media id pattern. Media is
20
+ * stored by reference and served from the API origin at `MEDIA_ROUTE_PREFIX + <id>`; a record
21
+ * carries it as a RELATIVE url of exactly that shape, resolved to the API base at render time
22
+ * ({@link resolveMediaSrc}), not assumed same-origin as the SPA page.
23
+ */
24
+ export type ServedMediaGrammar = {
25
+ readonly [K in keyof Pick<ServedConstants, 'MEDIA_ROUTE_PREFIX' | 'MEDIA_ID_PATTERN'>]: string;
26
+ };
16
27
  /**
17
28
  * Whether `url` is the platform's own served-media reference: a relative
18
- * `MEDIA_ROUTE_PREFIX + <id>` with a well-formed 43-char urlsafe-base64 id. A served
29
+ * `MEDIA_ROUTE_PREFIX + <id>` whose id matches `MEDIA_ID_PATTERN` whole. A served
19
30
  * reference is same-origin to the API base ({@link resolveMediaSrc}) and leaks no page
20
31
  * context on load, so a sink with no per-element referrer control (`<audio>`/`<video>`,
21
32
  * where `referrerPolicy` is not a valid attribute) admits ONLY this form.
22
33
  */
23
- export declare function isServedMediaUrl(url: string): boolean;
34
+ export declare function isServedMediaUrl(url: string, grammar: ServedMediaGrammar): boolean;
24
35
  /**
25
36
  * The media src gate: a media element renders ONLY for an `https:` URL, the
26
37
  * platform's own served-media reference (a relative `MEDIA_ROUTE_PREFIX + <id>`),
@@ -36,7 +47,7 @@ export declare function isServedMediaUrl(url: string): boolean;
36
47
  * item. The gate keys on the reference form; {@link resolveMediaSrc} joins an
37
48
  * admitted reference to the API base for the actual load.
38
49
  */
39
- export declare function isRenderableMediaSrc(url: string, allowDataImage?: boolean): boolean;
50
+ export declare function isRenderableMediaSrc(url: string, grammar: ServedMediaGrammar, allowDataImage?: boolean): boolean;
40
51
  /**
41
52
  * The URL an admitted media element actually loads. An `https:` url is already
42
53
  * absolute and is returned unchanged. A served-media reference is RELATIVE and is
@@ -46,7 +57,7 @@ export declare function isRenderableMediaSrc(url: string, allowDataImage?: boole
46
57
  * relative, which is correct; a configured base's trailing slash is stripped so the
47
58
  * join never double-slashes.
48
59
  */
49
- export declare function resolveMediaSrc(url: string, baseUrl: string): string;
60
+ export declare function resolveMediaSrc(url: string, baseUrl: string, grammar: ServedMediaGrammar): string;
50
61
  export interface MediaImageProps {
51
62
  readonly url: string;
52
63
  readonly caption?: string;
@@ -76,4 +87,39 @@ export interface MediaImageProps {
76
87
  * blocked/failed states in its own presentation.
77
88
  */
78
89
  export declare function MediaImage({ url, caption, altFallback, renderNotice, allowDataImage, }: MediaImageProps): ReactNode;
90
+ export interface MediaDocumentProps {
91
+ readonly url: string;
92
+ /** The download label: the item's filename or caption, or the caller's default. */
93
+ readonly label: string;
94
+ /** Render the notice shown when the url fails the src gate. */
95
+ readonly renderNotice: (url: string) => ReactNode;
96
+ }
97
+ /**
98
+ * One document: a labelled download affordance. The served route sends
99
+ * `Content-Disposition: attachment` for documents, so the anchor `download`-hints and
100
+ * opens in a new tab; `rel="noreferrer"` stops the Studio URL leaking to the media
101
+ * host. A url that fails {@link isRenderableMediaSrc} is the caller's notice, never a
102
+ * live href.
103
+ */
104
+ export declare function MediaDocument({ url, label, renderNotice }: MediaDocumentProps): ReactNode;
105
+ export interface MediaPlayerProps {
106
+ readonly kind: 'audio' | 'video';
107
+ readonly url: string;
108
+ /** The player's accessible label. */
109
+ readonly label: string;
110
+ /**
111
+ * Render the notice shown when no player is displayed: `state` is `'blocked'` when
112
+ * the url is not a served reference and `'failed'` when it fails to LOAD.
113
+ */
114
+ readonly renderNotice: (state: 'blocked' | 'failed', url: string) => ReactNode;
115
+ }
116
+ /**
117
+ * A native `<audio>`/`<video controls>` player. `referrerPolicy` is not a valid
118
+ * attribute on `<audio>`/`<video>`, so a remote load has no per-element referrer
119
+ * control; the player therefore admits ONLY the platform's own served-media reference
120
+ * ({@link isServedMediaUrl}: same-origin, leaking no page URL to a media host), and any
121
+ * other url, a bare `https:` one included, is the caller's notice. The load-failure
122
+ * flag keys on the url that failed so a new url at the same position gets a fresh load.
123
+ */
124
+ export declare function MediaPlayer({ kind, url, label, renderNotice }: MediaPlayerProps): ReactNode;
79
125
  //# sourceMappingURL=served-media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"served-media.d.ts","sourceRoot":"","sources":["../../src/components/served-media.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBtD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,OAAO,CAGjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpE;AAuCD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;IAChF;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,OAAO,EACP,WAA8B,EAC9B,YAAY,EACZ,cAAsB,GACvB,EAAE,eAAe,GAAG,SAAS,CAyC7B"}
1
+ {"version":3,"file":"served-media.d.ts","sourceRoot":"","sources":["../../src/components/served-media.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAOtD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,CAAC,IAAI,MAAM,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,MAAM;CAC/F,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAMlF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,EAC3B,cAAc,UAAQ,GACrB,OAAO,CAOT;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAEjG;AAuCD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;IAChF;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,OAAO,EACP,WAA8B,EAC9B,YAAY,EACZ,cAAsB,GACvB,EAAE,eAAe,GAAG,SAAS,CAyC7B;AAcD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;CACnD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,kBAAkB,GAAG,SAAS,CAkBzF;AAiBD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;CAChF;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAoC3F"}
@@ -3,24 +3,17 @@ import { useState } from 'react';
3
3
  import { useApi } from '../hooks/useApi';
4
4
  import { Badge } from './badge';
5
5
  import { isSafeHttpUrl } from './primitives';
6
- /**
7
- * The served-media route: media is stored by reference and served from the API
8
- * origin at `MEDIA_ROUTE_PREFIX + <id>`, where the id is 43 urlsafe-base64 chars
9
- * (32 random bytes). A record carries it as a RELATIVE url of exactly that shape —
10
- * the platform's own media reference, resolved to the API base at render time
11
- * ({@link resolveMediaSrc}), not assumed same-origin as the SPA page.
12
- */
13
- const MEDIA_ROUTE_PREFIX = '/api/interactions/media/';
14
- const MEDIA_ID = /^[A-Za-z0-9_-]{43}$/;
15
6
  /**
16
7
  * Whether `url` is the platform's own served-media reference: a relative
17
- * `MEDIA_ROUTE_PREFIX + <id>` with a well-formed 43-char urlsafe-base64 id. A served
8
+ * `MEDIA_ROUTE_PREFIX + <id>` whose id matches `MEDIA_ID_PATTERN` whole. A served
18
9
  * reference is same-origin to the API base ({@link resolveMediaSrc}) and leaks no page
19
10
  * context on load, so a sink with no per-element referrer control (`<audio>`/`<video>`,
20
11
  * where `referrerPolicy` is not a valid attribute) admits ONLY this form.
21
12
  */
22
- export function isServedMediaUrl(url) {
23
- return url.startsWith(MEDIA_ROUTE_PREFIX) && MEDIA_ID.test(url.slice(MEDIA_ROUTE_PREFIX.length));
13
+ export function isServedMediaUrl(url, grammar) {
14
+ const prefix = grammar.MEDIA_ROUTE_PREFIX;
15
+ return (url.startsWith(prefix) &&
16
+ new RegExp(`^${grammar.MEDIA_ID_PATTERN}$`).test(url.slice(prefix.length)));
24
17
  }
25
18
  /**
26
19
  * The media src gate: a media element renders ONLY for an `https:` URL, the
@@ -37,9 +30,11 @@ export function isServedMediaUrl(url) {
37
30
  * item. The gate keys on the reference form; {@link resolveMediaSrc} joins an
38
31
  * admitted reference to the API base for the actual load.
39
32
  */
40
- export function isRenderableMediaSrc(url, allowDataImage = false) {
33
+ export function isRenderableMediaSrc(url, grammar, allowDataImage = false) {
41
34
  const isHttpsUrl = isSafeHttpUrl(url) && new URL(url).protocol === 'https:';
42
- return isHttpsUrl || (allowDataImage && url.startsWith('data:image/')) || isServedMediaUrl(url);
35
+ return (isHttpsUrl ||
36
+ (allowDataImage && url.startsWith('data:image/')) ||
37
+ isServedMediaUrl(url, grammar));
43
38
  }
44
39
  /**
45
40
  * The URL an admitted media element actually loads. An `https:` url is already
@@ -50,8 +45,8 @@ export function isRenderableMediaSrc(url, allowDataImage = false) {
50
45
  * relative, which is correct; a configured base's trailing slash is stripped so the
51
46
  * join never double-slashes.
52
47
  */
53
- export function resolveMediaSrc(url, baseUrl) {
54
- return isServedMediaUrl(url) ? `${baseUrl.replace(/\/+$/, '')}${url}` : url;
48
+ export function resolveMediaSrc(url, baseUrl, grammar) {
49
+ return isServedMediaUrl(url, grammar) ? `${baseUrl.replace(/\/+$/, '')}${url}` : url;
55
50
  }
56
51
  // -- styles ------------------------------------------------------------------
57
52
  const itemStyle = {
@@ -96,8 +91,8 @@ export function MediaImage({ url, caption, altFallback = 'Attached image', rende
96
91
  // url rendered at this same position gets a fresh load attempt instead of inheriting
97
92
  // a stale failure notice.
98
93
  const [failedUrl, setFailedUrl] = useState(null);
99
- const { baseUrl } = useApi();
100
- if (!isRenderableMediaSrc(url, allowDataImage)) {
94
+ const { baseUrl, constants } = useApi();
95
+ if (!isRenderableMediaSrc(url, constants, allowDataImage)) {
101
96
  if (renderNotice !== undefined)
102
97
  return renderNotice('blocked', url);
103
98
  return (_jsxs("div", { role: "alert", "data-testid": "media-item-blocked", style: blockedStyle, children: [_jsx(Badge, { variant: "danger", children: "Blocked image" }), _jsx("span", { style: blockedUrlStyle, children: url })] }));
@@ -107,8 +102,63 @@ export function MediaImage({ url, caption, altFallback = 'Attached image', rende
107
102
  return renderNotice('failed', url);
108
103
  return (_jsxs("div", { role: "alert", "data-testid": "media-image-error", style: blockedStyle, children: [_jsx(Badge, { variant: "danger", children: "Image failed to load" }), _jsx("span", { style: blockedUrlStyle, children: url })] }));
109
104
  }
110
- return (_jsxs("div", { style: itemStyle, children: [_jsx("img", { src: resolveMediaSrc(url, baseUrl), alt: caption ?? altFallback, referrerPolicy: "no-referrer", style: imageStyle, onError: () => {
105
+ return (_jsxs("div", { style: itemStyle, children: [_jsx("img", { src: resolveMediaSrc(url, baseUrl, constants), alt: caption ?? altFallback, referrerPolicy: "no-referrer", style: imageStyle, onError: () => {
111
106
  setFailedUrl(url);
112
107
  } }), caption !== undefined ? _jsx("span", { style: captionStyle, children: caption }) : null] }));
113
108
  }
109
+ // -- document item -----------------------------------------------------------
110
+ const chipStyle = {
111
+ display: 'flex',
112
+ alignItems: 'center',
113
+ gap: 'var(--tai-space-2)',
114
+ };
115
+ const labelStyle = {
116
+ wordBreak: 'break-all',
117
+ };
118
+ /**
119
+ * One document: a labelled download affordance. The served route sends
120
+ * `Content-Disposition: attachment` for documents, so the anchor `download`-hints and
121
+ * opens in a new tab; `rel="noreferrer"` stops the Studio URL leaking to the media
122
+ * host. A url that fails {@link isRenderableMediaSrc} is the caller's notice, never a
123
+ * live href.
124
+ */
125
+ export function MediaDocument({ url, label, renderNotice }) {
126
+ const { baseUrl, constants } = useApi();
127
+ if (!isRenderableMediaSrc(url, constants))
128
+ return renderNotice(url);
129
+ return (_jsxs("div", { style: chipStyle, "data-testid": "media-document", children: [_jsx(Badge, { variant: "neutral", children: "Document" }), _jsx("a", { href: resolveMediaSrc(url, baseUrl, constants), target: "_blank", rel: "noreferrer", download: true, title: label, style: labelStyle, children: label })] }));
130
+ }
131
+ // -- audio / video item ------------------------------------------------------
132
+ const audioStyle = {
133
+ width: '100%',
134
+ };
135
+ const videoStyle = {
136
+ maxWidth: '100%',
137
+ maxHeight: '320px',
138
+ width: 'auto',
139
+ height: 'auto',
140
+ borderRadius: 'var(--tai-radius-md)',
141
+ border: '1px solid var(--tai-color-border)',
142
+ };
143
+ /**
144
+ * A native `<audio>`/`<video controls>` player. `referrerPolicy` is not a valid
145
+ * attribute on `<audio>`/`<video>`, so a remote load has no per-element referrer
146
+ * control; the player therefore admits ONLY the platform's own served-media reference
147
+ * ({@link isServedMediaUrl}: same-origin, leaking no page URL to a media host), and any
148
+ * other url, a bare `https:` one included, is the caller's notice. The load-failure
149
+ * flag keys on the url that failed so a new url at the same position gets a fresh load.
150
+ */
151
+ export function MediaPlayer({ kind, url, label, renderNotice }) {
152
+ const [failedUrl, setFailedUrl] = useState(null);
153
+ const { baseUrl, constants } = useApi();
154
+ if (!isServedMediaUrl(url, constants))
155
+ return renderNotice('blocked', url);
156
+ if (failedUrl === url)
157
+ return renderNotice('failed', url);
158
+ const src = resolveMediaSrc(url, baseUrl, constants);
159
+ const onError = () => {
160
+ setFailedUrl(url);
161
+ };
162
+ return (_jsx("div", { style: itemStyle, children: kind === 'audio' ? (_jsx("audio", { controls: true, src: src, "aria-label": label, onError: onError, style: audioStyle, "data-testid": "media-audio" })) : (_jsx("video", { controls: true, src: src, "aria-label": label, onError: onError, style: videoStyle, "data-testid": "media-video" })) }));
163
+ }
114
164
  //# sourceMappingURL=served-media.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"served-media.js","sourceRoot":"","sources":["../../src/components/served-media.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"served-media.js","sourceRoot":"","sources":["../../src/components/served-media.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The `!ENV ${VAR[:default]}` manifest marker grammar the platform reads: a string leaf
3
+ * that begins with the `!ENV ` prefix (the tag and exactly one space) references an
4
+ * environment variable by name, never its value. A variable name carries no `{`, `}` or
5
+ * `:`; an optional `:default` follows it.
6
+ */
7
+ /** The prefix that makes a string leaf an `!ENV` marker. */
8
+ export declare const ENV_MARKER_PREFIX = "!ENV ";
9
+ /** The reference of a single-reference marker leaf. */
10
+ export interface EnvRef {
11
+ readonly key: string;
12
+ /** The `:default` text (without the leading colon); absent for a bare reference. */
13
+ readonly default?: string;
14
+ }
15
+ /** The reference of `value` when it is exactly `!ENV ${KEY}` or `!ENV ${KEY:default}`, else `null`. */
16
+ export declare function parseEnvMarker(value: unknown): EnvRef | null;
17
+ /**
18
+ * The marker referencing `key`, carrying `defaultValue` when given. Throws when
19
+ * {@link parseEnvMarker} would not read the marker back as `(key, defaultValue)`: a name is
20
+ * non-empty and carries no `{`, `}` or `:`; a default is non-empty and carries no `}`.
21
+ */
22
+ export declare function formatEnvMarker(key: string, defaultValue?: string): string;
23
+ /** Every variable name any marker leaf anywhere under `value` references. */
24
+ export declare function collectEnvRefs(value: unknown): Set<string>;
25
+ //# sourceMappingURL=env-markers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-markers.d.ts","sourceRoot":"","sources":["../src/env-markers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAQzC,uDAAuD;AACvD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAO5D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAY1E;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAgB1D"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The `!ENV ${VAR[:default]}` manifest marker grammar the platform reads: a string leaf
3
+ * that begins with the `!ENV ` prefix (the tag and exactly one space) references an
4
+ * environment variable by name, never its value. A variable name carries no `{`, `}` or
5
+ * `:`; an optional `:default` follows it.
6
+ */
7
+ /** The prefix that makes a string leaf an `!ENV` marker. */
8
+ export const ENV_MARKER_PREFIX = '!ENV ';
9
+ /** A leaf that is exactly one reference: group 1 the name, group 2 the optional default. */
10
+ const SINGLE_REF = /^!ENV \$\{([^}{:]+)(?::([^}]+))?\}$/;
11
+ /** Every reference inside a marker leaf's expression. */
12
+ const ANY_REF = /\$\{([^}{:]+)(?::[^}]+)?\}/g;
13
+ /** The reference of `value` when it is exactly `!ENV ${KEY}` or `!ENV ${KEY:default}`, else `null`. */
14
+ export function parseEnvMarker(value) {
15
+ if (typeof value !== 'string')
16
+ return null;
17
+ const match = SINGLE_REF.exec(value);
18
+ if (match === null)
19
+ return null;
20
+ const key = match[1] ?? '';
21
+ const defaultText = match[2];
22
+ return defaultText === undefined ? { key } : { key, default: defaultText };
23
+ }
24
+ /**
25
+ * The marker referencing `key`, carrying `defaultValue` when given. Throws when
26
+ * {@link parseEnvMarker} would not read the marker back as `(key, defaultValue)`: a name is
27
+ * non-empty and carries no `{`, `}` or `:`; a default is non-empty and carries no `}`.
28
+ */
29
+ export function formatEnvMarker(key, defaultValue) {
30
+ const marker = defaultValue === undefined
31
+ ? `${ENV_MARKER_PREFIX}\${${key}}`
32
+ : `${ENV_MARKER_PREFIX}\${${key}:${defaultValue}}`;
33
+ const parsed = parseEnvMarker(marker);
34
+ if (parsed?.key !== key || parsed.default !== defaultValue) {
35
+ throw new Error(`var ${JSON.stringify(key)} with default ${JSON.stringify(defaultValue)} cannot be written as an !ENV marker: a name is non-empty without '{', '}' or ':', a default is non-empty without '}'`);
36
+ }
37
+ return marker;
38
+ }
39
+ /** Every variable name any marker leaf anywhere under `value` references. */
40
+ export function collectEnvRefs(value) {
41
+ const refs = new Set();
42
+ const walk = (node) => {
43
+ if (typeof node === 'string') {
44
+ if (!node.startsWith(ENV_MARKER_PREFIX))
45
+ return;
46
+ for (const match of node.slice(ENV_MARKER_PREFIX.length).matchAll(ANY_REF)) {
47
+ if (match[1] !== undefined)
48
+ refs.add(match[1]);
49
+ }
50
+ }
51
+ else if (Array.isArray(node)) {
52
+ for (const item of node)
53
+ walk(item);
54
+ }
55
+ else if (typeof node === 'object' && node !== null) {
56
+ for (const nested of Object.values(node))
57
+ walk(nested);
58
+ }
59
+ };
60
+ walk(value);
61
+ return refs;
62
+ }
63
+ //# sourceMappingURL=env-markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-markers.js","sourceRoot":"","sources":["../src/env-markers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAEzC,4FAA4F;AAC5F,MAAM,UAAU,GAAG,qCAAqC,CAAC;AAEzD,yDAAyD;AACzD,MAAM,OAAO,GAAG,6BAA6B,CAAC;AAS9C,uGAAuG;AACvG,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,YAAqB;IAChE,MAAM,MAAM,GACV,YAAY,KAAK,SAAS;QACxB,CAAC,CAAC,GAAG,iBAAiB,MAAM,GAAG,GAAG;QAClC,CAAC,CAAC,GAAG,iBAAiB,MAAM,GAAG,IAAI,YAAY,GAAG,CAAC;IACvD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,uHAAuH,CAC/L,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,IAAa,EAAQ,EAAE;QACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBAAE,OAAO;YAChD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3E,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;oBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACrD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"interactions-stream.d.ts","sourceRoot":"","sources":["../../src/hooks/interactions-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAoG7E;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAK9D;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,wBAAgB,YAAY,IAAI,WAAW,CAQ1C;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,GACZ,IAAI,CAGN;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,WAAW,EAAE,GAC3B,IAAI,CAUN;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMzF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAexD;AAED,iFAAiF;AACjF,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAW1F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR"}
1
+ {"version":3,"file":"interactions-stream.d.ts","sourceRoot":"","sources":["../../src/hooks/interactions-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAsG7E;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAK9D;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,wBAAgB,YAAY,IAAI,WAAW,CAQ1C;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,GACZ,IAAI,CAGN;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,WAAW,EAAE,GAC3B,IAAI,CAUN;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMzF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAexD;AAED,iFAAiF;AACjF,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAW1F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR"}
@@ -57,7 +57,7 @@ function requiredFieldsValid(obj) {
57
57
  }
58
58
  /**
59
59
  * The optional fields, each rejected only when PRESENT with the wrong type: an
60
- * absent value stays absent (or takes its schema default on assembly). `media`
60
+ * absent value takes its schema default (`null`, or `false` for `sensitive`) on assembly. `media`
61
61
  * items stay unknown by design — each is validated per item by the renderer.
62
62
  */
63
63
  function optionalFieldsValid(obj) {
@@ -88,12 +88,14 @@ function buildInteraction(obj) {
88
88
  created_at: obj.created_at,
89
89
  timeout_at: obj.timeout_at,
90
90
  sensitive: typeof obj.sensitive === 'boolean' ? obj.sensitive : false,
91
- ...(typeof obj.server_verified === 'boolean' ? { server_verified: obj.server_verified } : {}),
92
- ...(typeof obj.channel === 'string' ? { channel: obj.channel } : {}),
93
- ...(typeof obj.recipient === 'string' ? { recipient: obj.recipient } : {}),
94
- ...(typeof obj.origin === 'string' ? { origin: obj.origin } : {}),
95
- ...(typeof obj.audience === 'string' ? { audience: obj.audience } : {}),
96
- ...(Array.isArray(obj.media) ? { media: obj.media } : {}),
91
+ server_verified: typeof obj.server_verified === 'boolean' ? obj.server_verified : null,
92
+ channel: typeof obj.channel === 'string' ? obj.channel : null,
93
+ recipient: typeof obj.recipient === 'string' ? obj.recipient : null,
94
+ origin: typeof obj.origin === 'string' ? obj.origin : null,
95
+ audience: typeof obj.audience === 'string' ? obj.audience : null,
96
+ // The items stay unvalidated here: the renderer validates each one, so one malformed
97
+ // item is a per-item notice rather than a dropped frame.
98
+ media: Array.isArray(obj.media) ? obj.media : null,
97
99
  };
98
100
  }
99
101
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"interactions-stream.js","sourceRoot":"","sources":["../../src/hooks/interactions-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactions-stream.js","sourceRoot":"","sources":["../../src/hooks/interactions-stream.ts"],"names":[],"mappings":"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"}