@q9labsai/chalk-client 4.1.16 → 5.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 (195) hide show
  1. package/README.md +99 -40
  2. package/dist/access/grant.d.ts +0 -10
  3. package/dist/access/grant.d.ts.map +1 -1
  4. package/dist/access/manager.d.ts.map +1 -1
  5. package/dist/{chunk-M3S7HNQF.js → chunk-2HJIJVE2.js} +601 -3628
  6. package/dist/{chunk-OKIL2ELF.js → chunk-AVXJ4HQU.js} +154 -50
  7. package/dist/{chunk-E4OK5K6N.js → chunk-CMVO7USN.js} +2 -8
  8. package/dist/{chunk-BD7FRQ67.js → chunk-IPAN4LUZ.js} +1089 -2457
  9. package/dist/{chunk-O7WTAXAY.js → chunk-O2NOZKJP.js} +170 -639
  10. package/dist/client.d.ts +2500 -5206
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/collaboration/types.d.ts +21 -1
  13. package/dist/collaboration/types.d.ts.map +1 -1
  14. package/dist/collaboration/wire.d.ts +8 -1
  15. package/dist/collaboration/wire.d.ts.map +1 -1
  16. package/dist/connection/dependencies.d.ts +8 -13
  17. package/dist/connection/dependencies.d.ts.map +1 -1
  18. package/dist/connection/diagnostics.d.ts +1 -1
  19. package/dist/connection/diagnostics.d.ts.map +1 -1
  20. package/dist/connection/index.d.ts +2 -6
  21. package/dist/connection/index.d.ts.map +1 -1
  22. package/dist/connection/lifecycle.d.ts +4 -1
  23. package/dist/connection/lifecycle.d.ts.map +1 -1
  24. package/dist/connection/media-devices.d.ts +11 -0
  25. package/dist/connection/media-devices.d.ts.map +1 -1
  26. package/dist/connection/production.d.ts +1 -1
  27. package/dist/connection/production.d.ts.map +1 -1
  28. package/dist/connection/types.d.ts +4 -4
  29. package/dist/connection/types.d.ts.map +1 -1
  30. package/dist/effect.d.ts +0 -4
  31. package/dist/effect.d.ts.map +1 -1
  32. package/dist/effect.js +65 -776
  33. package/dist/foreground-deadline.d.ts +9 -0
  34. package/dist/foreground-deadline.d.ts.map +1 -0
  35. package/dist/generated/http-api.d.ts +2561 -5213
  36. package/dist/generated/http-api.d.ts.map +1 -1
  37. package/dist/generated/schemas.d.ts +1919 -6814
  38. package/dist/generated/schemas.d.ts.map +1 -1
  39. package/dist/generated/sync.d.ts +191 -28
  40. package/dist/generated/sync.d.ts.map +1 -1
  41. package/dist/generated/whiteboard-v1.d.ts +0 -7
  42. package/dist/generated/whiteboard-v1.d.ts.map +1 -1
  43. package/dist/index.d.ts +0 -4
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +19 -128
  46. package/dist/media/client.d.ts +6 -5
  47. package/dist/media/client.d.ts.map +1 -1
  48. package/dist/media/index.d.ts +1 -2
  49. package/dist/media/index.d.ts.map +1 -1
  50. package/dist/media/index.js +1 -7
  51. package/dist/media/plane.d.ts +12 -1
  52. package/dist/media/plane.d.ts.map +1 -1
  53. package/dist/media/target.d.ts +4 -2
  54. package/dist/media/target.d.ts.map +1 -1
  55. package/dist/media/tracks.d.ts +2 -2
  56. package/dist/media/tracks.d.ts.map +1 -1
  57. package/dist/media/transport.d.ts.map +1 -1
  58. package/dist/media/types.d.ts +4 -11
  59. package/dist/media/types.d.ts.map +1 -1
  60. package/dist/public-invites/client.d.ts.map +1 -1
  61. package/dist/public-invites/index.d.ts +2 -2
  62. package/dist/public-invites/index.d.ts.map +1 -1
  63. package/dist/public-invites/index.js +2 -5
  64. package/dist/public-invites/types.d.ts +2 -6
  65. package/dist/public-invites/types.d.ts.map +1 -1
  66. package/dist/server/access-refresh.d.cts +5 -0
  67. package/dist/server/access-refresh.d.ts +5 -0
  68. package/dist/server/access-refresh.d.ts.map +1 -1
  69. package/dist/server/client.d.ts.map +1 -1
  70. package/dist/server/index.cjs +22 -117
  71. package/dist/server/index.d.cts +2 -2
  72. package/dist/server/index.d.ts +2 -2
  73. package/dist/server/index.d.ts.map +1 -1
  74. package/dist/server/index.js +19 -114
  75. package/dist/server/types.d.cts +2 -8
  76. package/dist/server/types.d.ts +2 -8
  77. package/dist/server/types.d.ts.map +1 -1
  78. package/dist/space-client/chat-controller-helpers.d.ts.map +1 -1
  79. package/dist/space-client/chat-controller.d.ts +2 -3
  80. package/dist/space-client/chat-controller.d.ts.map +1 -1
  81. package/dist/space-client/controller-effects.d.ts +0 -3
  82. package/dist/space-client/controller-effects.d.ts.map +1 -1
  83. package/dist/space-client/core.d.ts +3 -18
  84. package/dist/space-client/core.d.ts.map +1 -1
  85. package/dist/space-client/core.test.helpers.d.ts +1 -1
  86. package/dist/space-client/core.test.helpers.d.ts.map +1 -1
  87. package/dist/space-client/effect.d.ts +0 -2
  88. package/dist/space-client/effect.d.ts.map +1 -1
  89. package/dist/space-client/index.d.ts +1 -2
  90. package/dist/space-client/index.d.ts.map +1 -1
  91. package/dist/space-client/media-controller.d.ts +4 -4
  92. package/dist/space-client/media-controller.d.ts.map +1 -1
  93. package/dist/space-client/offline-actions-storage.d.ts +18 -3
  94. package/dist/space-client/offline-actions-storage.d.ts.map +1 -1
  95. package/dist/space-client/offline-actions.d.ts +1 -0
  96. package/dist/space-client/offline-actions.d.ts.map +1 -1
  97. package/dist/space-client/participants-controller.d.ts +2 -3
  98. package/dist/space-client/participants-controller.d.ts.map +1 -1
  99. package/dist/space-client/reactions-controller.d.ts +2 -3
  100. package/dist/space-client/reactions-controller.d.ts.map +1 -1
  101. package/dist/space-client/recording-controller.d.ts +2 -3
  102. package/dist/space-client/recording-controller.d.ts.map +1 -1
  103. package/dist/space-client/space-client.d.ts.map +1 -1
  104. package/dist/space-client/store.d.ts.map +1 -1
  105. package/dist/space-client/terminal.test.helpers.d.ts +136 -0
  106. package/dist/space-client/terminal.test.helpers.d.ts.map +1 -0
  107. package/dist/space-client/types.d.ts +17 -8
  108. package/dist/space-client/types.d.ts.map +1 -1
  109. package/dist/sync/index.d.ts +1 -1
  110. package/dist/sync/index.d.ts.map +1 -1
  111. package/dist/sync/index.js +1 -3
  112. package/dist/sync/v1-client.d.ts +5 -3
  113. package/dist/sync/v1-client.d.ts.map +1 -1
  114. package/dist/sync/v1-collaboration-state.d.ts +10 -3
  115. package/dist/sync/v1-collaboration-state.d.ts.map +1 -1
  116. package/dist/sync/v1-types.d.ts +10 -9
  117. package/dist/sync/v1-types.d.ts.map +1 -1
  118. package/dist/webhooks/generated/event-v1.d.cts +10 -2
  119. package/dist/webhooks/generated/event-v1.d.ts +10 -2
  120. package/dist/webhooks/generated/event-v1.d.ts.map +1 -1
  121. package/dist/webhooks/generated/fixtures-v1.d.cts +2 -2
  122. package/dist/webhooks/generated/fixtures-v1.d.ts +2 -2
  123. package/dist/webhooks/index.cjs +10 -2
  124. package/dist/webhooks/index.js +10 -2
  125. package/dist/webhooks/test.cjs +2 -2
  126. package/dist/webhooks/test.js +2 -2
  127. package/dist/whiteboard/file-download-transport.d.ts +8 -0
  128. package/dist/whiteboard/file-download-transport.d.ts.map +1 -0
  129. package/dist/whiteboard/index.d.ts +1 -1
  130. package/dist/whiteboard/index.d.ts.map +1 -1
  131. package/dist/whiteboard/types.d.ts +12 -15
  132. package/dist/whiteboard/types.d.ts.map +1 -1
  133. package/dist/whiteboard/v1-client.d.ts.map +1 -1
  134. package/package.json +4 -16
  135. package/dist/access/episode-diagnostic-credential.d.ts +0 -11
  136. package/dist/access/episode-diagnostic-credential.d.ts.map +0 -1
  137. package/dist/chunk-EWTITNJ3.js +0 -1163
  138. package/dist/chunk-HW5TTZL2.js +0 -99
  139. package/dist/chunk-PBSYXPNJ.js +0 -23
  140. package/dist/chunk-RCDXIDCN.js +0 -33
  141. package/dist/connection/snapshot.d.ts +0 -23
  142. package/dist/connection/snapshot.d.ts.map +0 -1
  143. package/dist/feedback/collector.d.ts +0 -14
  144. package/dist/feedback/collector.d.ts.map +0 -1
  145. package/dist/feedback/context.d.ts +0 -38
  146. package/dist/feedback/context.d.ts.map +0 -1
  147. package/dist/feedback/controller.d.ts +0 -4
  148. package/dist/feedback/controller.d.ts.map +0 -1
  149. package/dist/feedback/index.d.ts +0 -7
  150. package/dist/feedback/index.d.ts.map +0 -1
  151. package/dist/feedback/transport.d.ts +0 -29
  152. package/dist/feedback/transport.d.ts.map +0 -1
  153. package/dist/feedback/types.d.ts +0 -202
  154. package/dist/feedback/types.d.ts.map +0 -1
  155. package/dist/feedback/validation.d.ts +0 -30
  156. package/dist/feedback/validation.d.ts.map +0 -1
  157. package/dist/media/rtk.d.ts +0 -101
  158. package/dist/media/rtk.d.ts.map +0 -1
  159. package/dist/space-client/episode-diagnostic-registry.d.ts +0 -13
  160. package/dist/space-client/episode-diagnostic-registry.d.ts.map +0 -1
  161. package/dist/space-client/episode-diagnostic-render-registry.d.ts +0 -4
  162. package/dist/space-client/episode-diagnostic-render-registry.d.ts.map +0 -1
  163. package/dist/space-client/episode-diagnostic-runtime.d.ts +0 -105
  164. package/dist/space-client/episode-diagnostic-runtime.d.ts.map +0 -1
  165. package/dist/telemetry/attributes.d.ts +0 -7
  166. package/dist/telemetry/attributes.d.ts.map +0 -1
  167. package/dist/telemetry/client.d.ts +0 -44
  168. package/dist/telemetry/client.d.ts.map +0 -1
  169. package/dist/telemetry/delivery.d.ts +0 -107
  170. package/dist/telemetry/delivery.d.ts.map +0 -1
  171. package/dist/telemetry/exporter.d.ts +0 -38
  172. package/dist/telemetry/exporter.d.ts.map +0 -1
  173. package/dist/telemetry/index.d.ts +0 -7
  174. package/dist/telemetry/index.d.ts.map +0 -1
  175. package/dist/telemetry/index.js +0 -50
  176. package/dist/telemetry/journey.d.ts +0 -52
  177. package/dist/telemetry/journey.d.ts.map +0 -1
  178. package/dist/telemetry/random.d.ts +0 -18
  179. package/dist/telemetry/random.d.ts.map +0 -1
  180. package/dist/telemetry/reconnect.d.ts +0 -7
  181. package/dist/telemetry/reconnect.d.ts.map +0 -1
  182. package/dist/telemetry/rtc.d.ts +0 -41
  183. package/dist/telemetry/rtc.d.ts.map +0 -1
  184. package/dist/telemetry/storage.d.ts +0 -22
  185. package/dist/telemetry/storage.d.ts.map +0 -1
  186. package/dist/telemetry/sync.d.ts +0 -10
  187. package/dist/telemetry/sync.d.ts.map +0 -1
  188. package/dist/telemetry/test-support.d.ts +0 -51
  189. package/dist/telemetry/test-support.d.ts.map +0 -1
  190. package/dist/telemetry/trace.d.ts +0 -18
  191. package/dist/telemetry/trace.d.ts.map +0 -1
  192. package/dist/telemetry/types.d.ts +0 -109
  193. package/dist/telemetry/types.d.ts.map +0 -1
  194. package/dist/whiteboard/file-http-transport.d.ts +0 -9
  195. package/dist/whiteboard/file-http-transport.d.ts.map +0 -1
package/README.md CHANGED
@@ -21,14 +21,19 @@ Your backend mints an `AccessGrant` with the server SDK. See the [web quickstart
21
21
  client unchanged: it is an opaque signed envelope, so application code does
22
22
  not construct or inspect it. `getAccess` may resolve with the fetch `Response`
23
23
  that carries the grant or with its decoded JSON; the client validates it and
24
- fails the join on a non-OK response or a malformed body.
24
+ classifies non-OK responses and rejects malformed bodies.
25
25
 
26
26
  ```ts
27
27
  import { createSpaceClient } from "@q9labsai/chalk-client";
28
28
 
29
29
  const client = createSpaceClient({
30
30
  space: "design-review",
31
- getAccess: ({ space, reason }) => fetch(`/api/chalk/spaces/${space}/access?reason=${reason}`),
31
+ getAccess: (request) =>
32
+ fetch("/api/chalk/access", {
33
+ method: "POST",
34
+ headers: { "content-type": "application/json" },
35
+ body: JSON.stringify(request),
36
+ }),
32
37
  });
33
38
 
34
39
  await client.join({
@@ -41,7 +46,13 @@ await client.join({
41
46
  `getAccess` receives `reason: "join" | "refresh" | "retry"`. `Connection`
42
47
  uses it for Entrance freshness, scheduled refresh, wake revalidation, and one
43
48
  refresh-and-retry after an access rejection. Keep the callback available for
44
- the full lifetime of the client.
49
+ the full lifetime of the client. Forward the request unchanged to your backend,
50
+ then pass it as the final `participants.issueAccess` argument alongside the
51
+ server-only state from `getAccessRefreshState`. Chalk selects media replacement
52
+ when recovery needs it and retains healthy media for ordinary refresh and Sync
53
+ recovery. The quickstart shows the endpoint call; no conditional is needed.
54
+
55
+ HTTP 408, 425, 429, and 5xx responses, network failures, and provider timeouts are `access.unavailable` (recoverable). Scheduled refresh retries these failures while retaining the current grant. Other non-OK responses (including 401 and 403) and malformed grants are `access.invalid`. Initial join does not automatically retry unavailable Access: show the failure and let the person check their network and try again. Return the `Response` unchanged so Chalk can classify its status; throwing a generic error for every non-OK response loses that distinction.
45
56
 
46
57
  ## Snapshot store
47
58
 
@@ -85,26 +96,6 @@ client.dispose();
85
96
  `endEpisode` and `extendEpisode` are capability-gated. Use `dispose()` when
86
97
  the client will no longer be used; it releases the Connection and its resources.
87
98
 
88
- ## Feedback
89
-
90
- `SpaceClient.feedback` submits a bug, feature request, or other feedback
91
- report to Chalk with the current safe diagnostic context. `prepare` gives a
92
- form one stable idempotency key and captures evidence before the user sends it.
93
-
94
- ```ts
95
- const feedback = await client.feedback.prepare();
96
-
97
- await feedback.send({
98
- category: "bug",
99
- message: "The camera control stopped responding.",
100
- });
101
- ```
102
-
103
- The transport uses the short-lived Diagnostic Participant credential already
104
- carried by the AccessGrant. That credential is never exposed through the public
105
- Feedback API. Custom screenshot adapters may be passed to `prepare`; a typed
106
- unavailable result is valid and never blocks a text report.
107
-
108
99
  ## Recording and artifact Events
109
100
 
110
101
  Use `client.recording.start()` and `client.recording.stop()` inside an Episode, or set the Space's Automatic Recording policy. There is no REST Recording start/stop operation.
@@ -184,27 +175,35 @@ Events are `participantJoined`, `participantLeft`, `episodeEnded`,
184
175
  stable codes such as `access.invalid`, `episode.ended`, and
185
176
  `chat.payload_invalid`.
186
177
 
187
- ## Journey telemetry
178
+ ### Join capture errors
188
179
 
189
- Client telemetry is opt-in. Start a `space.join` journey when a Participant
190
- joins a Space, pass its `context` to HTTP or Sync boundaries, and flush the
191
- bounded queue when the surface is ready to export:
180
+ `join()` requests the microphone and camera by default. If both work, capture
181
+ still uses one request. If a requested device fails, Chalk tries the requested
182
+ devices separately and enters with the working devices; the unavailable device
183
+ is off. This also applies to the React entrance, including a device that works
184
+ in preview but fails at entry. A capture warning does not reject `join()`.
192
185
 
193
- ```ts
194
- import { createTelemetryClient } from "@q9labsai/chalk-client/telemetry";
186
+ Listen to `client.on("error", ({ error }) => ...)` (React: `onError`) for one
187
+ recoverable warning, also available as `connection.lastError`. Its message names
188
+ the failing device or devices. React displays a dismissible warning after entry.
195
189
 
196
- const telemetry = createTelemetryClient({ enabled: true, baseUrl: "https://api.example.com" });
197
- const journey = telemetry.startJourney({ kind: "space.join" });
198
- const response = await fetch("/api/chalk/spaces/design-review", { headers: journey.headers });
199
- journey.terminal(response.ok ? "succeeded" : "failed");
200
- await telemetry.flush();
201
- ```
190
+ | Capture problem | Public error code |
191
+ | ----------------------------------- | --------------------------------- |
192
+ | Missing microphone, camera, or both | `media.device_not_found` |
193
+ | Busy microphone or camera | `media.device_busy` |
194
+ | Denied microphone, camera, or both | `media.permission_denied` |
195
+ | Unavailable device constraint | `media.device_constraint_invalid` |
196
+ | Other device capture failure | `media.capture_failed` |
197
+
198
+ When both devices fail for different reasons, the warning uses the microphone's
199
+ code and names both devices. Integrations must allow these codes and must not
200
+ treat a recoverable capture warning as failed entry. Participants can enable a
201
+ device later through `client.media` after resolving the problem.
202
202
 
203
- Journey events carry `journey_id`, W3C `traceparent`, and optional
204
- `tracestate`. Attributes and the in-memory timeline are bounded, and the
205
- built-in client observations record aggregate RTC state only: access-grant
206
- contents, Participant identity, Space or Episode identifiers, media payloads,
207
- and request bodies stay out of telemetry.
203
+ Only an unavailable capture API or an insecure browser context fails capture
204
+ as nonrecoverable `environment.unsupported`. Joining with both devices explicitly
205
+ off does not require capture. Access, Sync, or media transport failures can still
206
+ reject `join()` independently of capture.
208
207
 
209
208
  ## Effect entry
210
209
 
@@ -223,3 +222,63 @@ Effect program.
223
222
  capacity, retries, timers, and settlement.
224
223
  - `V1LiveTargetCoordinator` owns self-media target authorization, adapter
225
224
  execution, retries, deadlines, and local target state.
225
+
226
+ ### Whiteboard connection watchdog
227
+
228
+ The whiteboard-v1 client pings every 4 seconds (at most 225 payload bytes/minute
229
+ when quiet). A probe overdue by 2 seconds triggers an immediate confirmation;
230
+ two slow probes replace the socket through normal reconnect and snapshot catch-up.
231
+ The first stalled path is detached within 8 seconds of its last healthy probe
232
+ cycle, plus reconnect/catch-up. Repeated failures delay the next probe cycle by
233
+ 1, 2, then at most 4 seconds, so detection on a new connection stays within
234
+ 12 seconds of welcome, plus catch-up. A minute of timely replies resets back-off.
235
+ These bounds require a visible page and timely JavaScript scheduling. Default
236
+ watchdog timing uses a monotonic clock; an injected clock must also be monotonic. Timer drift
237
+ above 250 ms, hidden/resumed pages (4-second grace), and whiteboard frames received
238
+ within the last 2 seconds suppress slow samples: replay volume is progress, not
239
+ a stuck path. Catch-up time depends on network and board volume and is not bounded.
240
+
241
+ Sync sends one ordered anonymous pong per ping. A missing pong can cause an extra
242
+ replacement; this costs reconnect/catch-up and is intentional. Unsolicited pongs
243
+ are ignored and reset probe evidence. Set `watchdog: false` in
244
+ `ChalkWhiteboardV1ClientOptions` to disable slow-path replacement while retaining
245
+ 4-second keepalives. `onWatchdogReplacement` receives one bounded event per
246
+ replacement: reason, up to two measured round trips, up to two outstanding probe
247
+ ages (not RTT estimates), and the next back-off. Consumer telemetry exceptions do
248
+ not prevent recovery. Subscription stop detaches without waiting for socket close.
249
+
250
+ ### Screen capture source hints
251
+
252
+ ```ts
253
+ await client.media.setScreenShareEnabled(true, { surface: "window" });
254
+ const { capture } = client.getSnapshot().media.screenShare;
255
+ // capture?.surface is the actual picker selection; capture?.label is its label.
256
+ await client.media.setScreenShareEnabled(false);
257
+ ```
258
+
259
+ `surface` accepts `"monitor"`, `"window"`, or `"browser"`. These are browser hints, not filters or guarantees. The browser's picker always decides; unsupported hints do not prevent capture. The call's own tab is excluded where supported, and source switching is enabled. `audio` defaults to `false`; `true` requests capture audio from the browser. The current single-track screen publication remains video-only (captured audio is not published). Missing source settings or labels are reported as `null`.
260
+
261
+ ### Message reactions
262
+
263
+ ```ts
264
+ await client.chat.react({ messageId, emoji: "👏", on: true });
265
+ await client.chat.react({ messageId, emoji: "👏", on: false });
266
+ ```
267
+
268
+ The action sets a desired state, never toggles it. Retrying the same request leaves one membership (or none). Anyone with `sendChat` may react. `CHALK_REACTIONS` exports the fixed 24-emoji set shared with call reactions. Unsupported emoji are rejected. A message has at most 128 reaction memberships across all emoji; adding another returns `overloaded`, while removal remains available.
269
+
270
+ Each message's `reactions` contains `{ emoji, count, participantIds }`; IDs identify who reacted and can be resolved through the participant roster. Old messages/servers may omit the wire fields; the client normalizes them to an empty list and revision `"0"`. New history includes current reactions. Loaded messages update live, and reconnecting reloads their reaction snapshots. Revisions keep delayed broadcasts/history responses from rolling state backward. Actions taken while reconnecting use the same persisted, participant-scoped offline queue as chat messages. They are cleared if the participant or Episode changes and fail if the message has expired. Deleting a message cascades to its reactions under existing retention.
271
+
272
+ Message reactions are stored separately from recording facts and are not rendered or added to recording timelines yet. Recording validators accept all 24 call-reaction emoji.
273
+
274
+ #### Wire compatibility and rollout
275
+
276
+ SpaceClient negotiates `collaboration_v2` for the 24-emoji set and per-message reactions. Deploy the migration and recording validators, then Sync, before deploying this SDK. Sync continues to serve `collaboration_v1` with the original message shape and six call emoji; it never broadcasts the new per-message frames or expanded call emoji to those sockets. Older SDKs therefore keep working against the updated server. The base sync protocol remains v1. Low-level `createV1SyncClient` consumers opt in with `collaboration: { name: "collaboration_v2", chatCursor: { afterSequence: null, retainedFloorSequence: null } }`; the default low-level extension stays v1. `reactToChatMessage(input)` rejects locally unless v2 was negotiated. New SpaceClient versions require the updated Sync server; there is no downgrade of the message-reaction feature.
277
+
278
+ ### Shared tab audio
279
+
280
+ `await client.media.setScreenShareEnabled(true, { surface: "browser", audio: true })` requests tab audio. The browser picker remains authoritative: selecting a window or declining audio still shares video normally. Audio is published separately as `screen_audio`; it starts, stops, and is revoked with the share, never with the microphone. `media.screenShare.hasAudio` reports local live audio; `participants.roster[].media.screenShareHasAudio` reports the remote publication. `media.remote` contains the received track.
281
+
282
+ The sharer keeps local playback (`suppressLocalAudioPlayback: false`). Display audio disables echo cancellation, noise suppression and automatic gain control to preserve music; microphone capture and its processing are unchanged. System audio is excluded to avoid sending the call back to itself. Headphones avoid acoustic doubling through the microphone; local playback cannot be preserved while guaranteeing that loudspeakers never leak into it. Chrome documents [local playback control](https://developer.chrome.com/blog/screen-sharing-improvements-in-chrome-109) and [system-audio feedback](https://developer.chrome.com/docs/web-platform/screen-sharing-controls). [Meet documents the same “Also share tab audio” picker control](https://support.google.com/meet/answer/9308856?hl=en). No public X documentation establishing its echo default was found.
283
+
284
+ Shared tab audio is excluded from recordings until the recording format supports it. React Native display capture behavior is unchanged.
@@ -1,4 +1,3 @@
1
- import { type EpisodeDiagnosticCredential } from "./episode-diagnostic-credential";
2
1
  declare const syncCredentialBrand: unique symbol;
3
2
  declare const mediaCredentialBrand: unique symbol;
4
3
  declare const accessGrantBrand: unique symbol;
@@ -27,21 +26,12 @@ export type ParticipantMediaAccess = {
27
26
  readonly connectionId: string;
28
27
  readonly stunServer: string;
29
28
  };
30
- } | {
31
- readonly token: ParticipantMediaCredential;
32
- readonly expiresAt: string;
33
- readonly provider: "cloudflare_rtk";
34
- readonly clientPayload: {
35
- readonly providerSubject: string;
36
- readonly token: string;
37
- };
38
29
  };
39
30
  export type ParsedAccessGrant = {
40
31
  readonly subject: AccessSubject;
41
32
  readonly episodeStartedAt?: string | null;
42
33
  readonly sync: ParticipantSyncAccess;
43
34
  readonly media: ParticipantMediaAccess;
44
- readonly diagnostics?: EpisodeDiagnosticCredential | null;
45
35
  };
46
36
  /** Opaque signed envelope minted by the server SDK and consumed by SpaceClient. */
47
37
  export type AccessGrant = {
@@ -1 +1 @@
1
- {"version":3,"file":"grant.d.ts","sourceRoot":"","sources":["../../src/access/grant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grant.d.ts","sourceRoot":"","sources":["../../src/access/grant.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,mBAAmB,EAAE,OAAO,MAAM,CAAC;AACjD,OAAO,CAAC,MAAM,oBAAoB,EAAE,OAAO,MAAM,CAAC;AAClD,QAAA,MAAM,gBAAgB,EAAE,OAAO,MAA8B,CAAC;AAC9D,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG;IAC/C,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,YAAY,CAAC;CAC9C,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG;IAChD,QAAQ,CAAC,CAAC,oBAAoB,CAAC,EAAE,aAAa,CAAC;CAChD,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;CACxC,CAAC;AACF,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC;CAC5C,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvF,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;IAC1C,YAAY,OAAO,SAA4B,EAG9C;CACF;AAcD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAUxE;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAE5D;AACD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAmB3E;AACD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAWzF;AACD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAW7E;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAO9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/access/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACxG,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;;;;AAKlG,qBAAa,uBAAwB,SAAQ,6BAA4C;IACvF,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;CAAG;AAEL,MAAM,MAAM,8BAA8B,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;AAC7I,MAAM,MAAM,iCAAiC,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEpF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IACrH,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,sBAAsB,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IACrH,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE,sBAAsB,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IAClK,QAAQ,CAAC,qBAAqB,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IAChG,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,sBAAsB,KAAK,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;IAC9H,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,uBAAuB,CAAC,CAAC;IACjG,QAAQ,CAAC,kCAAkC,EAAE,CAAC,QAAQ,EAAE,iCAAiC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACxH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;;AAEF,qBAAa,uBAAwB,SAAQ,4BAA2G;CAAG;AAY3J;;;GAGG;AACH,eAAO,MAAM,yBAAyB,aAAc,8BAA8B,iFAuC/E,CAAC;AAEJ,eAAO,MAAM,6BAA6B,aAzCU,8BAA8B,iFAyCZ,CAAC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/access/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACxG,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;;;;AAGlG,qBAAa,uBAAwB,SAAQ,6BAA4C;IACvF,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;CAAG;AACL,MAAM,MAAM,8BAA8B,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;AAC7I,MAAM,MAAM,iCAAiC,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AACpF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IACrH,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,sBAAsB,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IACrH,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE,sBAAsB,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IAClK,QAAQ,CAAC,qBAAqB,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IAChG,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,sBAAsB,KAAK,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;IAC9H,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,uBAAuB,CAAC,CAAC;IACjG,QAAQ,CAAC,kCAAkC,EAAE,CAAC,QAAQ,EAAE,iCAAiC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACxH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;;AACF,qBAAa,uBAAwB,SAAQ,4BAA2G;CAAG;AAe3J;;;GAGG;AACH,eAAO,MAAM,yBAAyB,aAAc,8BAA8B,iFAsC/E,CAAC;AACJ,eAAO,MAAM,6BAA6B,aAvCU,8BAA8B,iFAuCZ,CAAC"}