@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.
- package/README.md +99 -40
- package/dist/access/grant.d.ts +0 -10
- package/dist/access/grant.d.ts.map +1 -1
- package/dist/access/manager.d.ts.map +1 -1
- package/dist/{chunk-M3S7HNQF.js → chunk-2HJIJVE2.js} +601 -3628
- package/dist/{chunk-OKIL2ELF.js → chunk-AVXJ4HQU.js} +154 -50
- package/dist/{chunk-E4OK5K6N.js → chunk-CMVO7USN.js} +2 -8
- package/dist/{chunk-BD7FRQ67.js → chunk-IPAN4LUZ.js} +1089 -2457
- package/dist/{chunk-O7WTAXAY.js → chunk-O2NOZKJP.js} +170 -639
- package/dist/client.d.ts +2500 -5206
- package/dist/client.d.ts.map +1 -1
- package/dist/collaboration/types.d.ts +21 -1
- package/dist/collaboration/types.d.ts.map +1 -1
- package/dist/collaboration/wire.d.ts +8 -1
- package/dist/collaboration/wire.d.ts.map +1 -1
- package/dist/connection/dependencies.d.ts +8 -13
- package/dist/connection/dependencies.d.ts.map +1 -1
- package/dist/connection/diagnostics.d.ts +1 -1
- package/dist/connection/diagnostics.d.ts.map +1 -1
- package/dist/connection/index.d.ts +2 -6
- package/dist/connection/index.d.ts.map +1 -1
- package/dist/connection/lifecycle.d.ts +4 -1
- package/dist/connection/lifecycle.d.ts.map +1 -1
- package/dist/connection/media-devices.d.ts +11 -0
- package/dist/connection/media-devices.d.ts.map +1 -1
- package/dist/connection/production.d.ts +1 -1
- package/dist/connection/production.d.ts.map +1 -1
- package/dist/connection/types.d.ts +4 -4
- package/dist/connection/types.d.ts.map +1 -1
- package/dist/effect.d.ts +0 -4
- package/dist/effect.d.ts.map +1 -1
- package/dist/effect.js +65 -776
- package/dist/foreground-deadline.d.ts +9 -0
- package/dist/foreground-deadline.d.ts.map +1 -0
- package/dist/generated/http-api.d.ts +2561 -5213
- package/dist/generated/http-api.d.ts.map +1 -1
- package/dist/generated/schemas.d.ts +1919 -6814
- package/dist/generated/schemas.d.ts.map +1 -1
- package/dist/generated/sync.d.ts +191 -28
- package/dist/generated/sync.d.ts.map +1 -1
- package/dist/generated/whiteboard-v1.d.ts +0 -7
- package/dist/generated/whiteboard-v1.d.ts.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -128
- package/dist/media/client.d.ts +6 -5
- package/dist/media/client.d.ts.map +1 -1
- package/dist/media/index.d.ts +1 -2
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +1 -7
- package/dist/media/plane.d.ts +12 -1
- package/dist/media/plane.d.ts.map +1 -1
- package/dist/media/target.d.ts +4 -2
- package/dist/media/target.d.ts.map +1 -1
- package/dist/media/tracks.d.ts +2 -2
- package/dist/media/tracks.d.ts.map +1 -1
- package/dist/media/transport.d.ts.map +1 -1
- package/dist/media/types.d.ts +4 -11
- package/dist/media/types.d.ts.map +1 -1
- package/dist/public-invites/client.d.ts.map +1 -1
- package/dist/public-invites/index.d.ts +2 -2
- package/dist/public-invites/index.d.ts.map +1 -1
- package/dist/public-invites/index.js +2 -5
- package/dist/public-invites/types.d.ts +2 -6
- package/dist/public-invites/types.d.ts.map +1 -1
- package/dist/server/access-refresh.d.cts +5 -0
- package/dist/server/access-refresh.d.ts +5 -0
- package/dist/server/access-refresh.d.ts.map +1 -1
- package/dist/server/client.d.ts.map +1 -1
- package/dist/server/index.cjs +22 -117
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +19 -114
- package/dist/server/types.d.cts +2 -8
- package/dist/server/types.d.ts +2 -8
- package/dist/server/types.d.ts.map +1 -1
- package/dist/space-client/chat-controller-helpers.d.ts.map +1 -1
- package/dist/space-client/chat-controller.d.ts +2 -3
- package/dist/space-client/chat-controller.d.ts.map +1 -1
- package/dist/space-client/controller-effects.d.ts +0 -3
- package/dist/space-client/controller-effects.d.ts.map +1 -1
- package/dist/space-client/core.d.ts +3 -18
- package/dist/space-client/core.d.ts.map +1 -1
- package/dist/space-client/core.test.helpers.d.ts +1 -1
- package/dist/space-client/core.test.helpers.d.ts.map +1 -1
- package/dist/space-client/effect.d.ts +0 -2
- package/dist/space-client/effect.d.ts.map +1 -1
- package/dist/space-client/index.d.ts +1 -2
- package/dist/space-client/index.d.ts.map +1 -1
- package/dist/space-client/media-controller.d.ts +4 -4
- package/dist/space-client/media-controller.d.ts.map +1 -1
- package/dist/space-client/offline-actions-storage.d.ts +18 -3
- package/dist/space-client/offline-actions-storage.d.ts.map +1 -1
- package/dist/space-client/offline-actions.d.ts +1 -0
- package/dist/space-client/offline-actions.d.ts.map +1 -1
- package/dist/space-client/participants-controller.d.ts +2 -3
- package/dist/space-client/participants-controller.d.ts.map +1 -1
- package/dist/space-client/reactions-controller.d.ts +2 -3
- package/dist/space-client/reactions-controller.d.ts.map +1 -1
- package/dist/space-client/recording-controller.d.ts +2 -3
- package/dist/space-client/recording-controller.d.ts.map +1 -1
- package/dist/space-client/space-client.d.ts.map +1 -1
- package/dist/space-client/store.d.ts.map +1 -1
- package/dist/space-client/terminal.test.helpers.d.ts +136 -0
- package/dist/space-client/terminal.test.helpers.d.ts.map +1 -0
- package/dist/space-client/types.d.ts +17 -8
- package/dist/space-client/types.d.ts.map +1 -1
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -3
- package/dist/sync/v1-client.d.ts +5 -3
- package/dist/sync/v1-client.d.ts.map +1 -1
- package/dist/sync/v1-collaboration-state.d.ts +10 -3
- package/dist/sync/v1-collaboration-state.d.ts.map +1 -1
- package/dist/sync/v1-types.d.ts +10 -9
- package/dist/sync/v1-types.d.ts.map +1 -1
- package/dist/webhooks/generated/event-v1.d.cts +10 -2
- package/dist/webhooks/generated/event-v1.d.ts +10 -2
- package/dist/webhooks/generated/event-v1.d.ts.map +1 -1
- package/dist/webhooks/generated/fixtures-v1.d.cts +2 -2
- package/dist/webhooks/generated/fixtures-v1.d.ts +2 -2
- package/dist/webhooks/index.cjs +10 -2
- package/dist/webhooks/index.js +10 -2
- package/dist/webhooks/test.cjs +2 -2
- package/dist/webhooks/test.js +2 -2
- package/dist/whiteboard/file-download-transport.d.ts +8 -0
- package/dist/whiteboard/file-download-transport.d.ts.map +1 -0
- package/dist/whiteboard/index.d.ts +1 -1
- package/dist/whiteboard/index.d.ts.map +1 -1
- package/dist/whiteboard/types.d.ts +12 -15
- package/dist/whiteboard/types.d.ts.map +1 -1
- package/dist/whiteboard/v1-client.d.ts.map +1 -1
- package/package.json +4 -16
- package/dist/access/episode-diagnostic-credential.d.ts +0 -11
- package/dist/access/episode-diagnostic-credential.d.ts.map +0 -1
- package/dist/chunk-EWTITNJ3.js +0 -1163
- package/dist/chunk-HW5TTZL2.js +0 -99
- package/dist/chunk-PBSYXPNJ.js +0 -23
- package/dist/chunk-RCDXIDCN.js +0 -33
- package/dist/connection/snapshot.d.ts +0 -23
- package/dist/connection/snapshot.d.ts.map +0 -1
- package/dist/feedback/collector.d.ts +0 -14
- package/dist/feedback/collector.d.ts.map +0 -1
- package/dist/feedback/context.d.ts +0 -38
- package/dist/feedback/context.d.ts.map +0 -1
- package/dist/feedback/controller.d.ts +0 -4
- package/dist/feedback/controller.d.ts.map +0 -1
- package/dist/feedback/index.d.ts +0 -7
- package/dist/feedback/index.d.ts.map +0 -1
- package/dist/feedback/transport.d.ts +0 -29
- package/dist/feedback/transport.d.ts.map +0 -1
- package/dist/feedback/types.d.ts +0 -202
- package/dist/feedback/types.d.ts.map +0 -1
- package/dist/feedback/validation.d.ts +0 -30
- package/dist/feedback/validation.d.ts.map +0 -1
- package/dist/media/rtk.d.ts +0 -101
- package/dist/media/rtk.d.ts.map +0 -1
- package/dist/space-client/episode-diagnostic-registry.d.ts +0 -13
- package/dist/space-client/episode-diagnostic-registry.d.ts.map +0 -1
- package/dist/space-client/episode-diagnostic-render-registry.d.ts +0 -4
- package/dist/space-client/episode-diagnostic-render-registry.d.ts.map +0 -1
- package/dist/space-client/episode-diagnostic-runtime.d.ts +0 -105
- package/dist/space-client/episode-diagnostic-runtime.d.ts.map +0 -1
- package/dist/telemetry/attributes.d.ts +0 -7
- package/dist/telemetry/attributes.d.ts.map +0 -1
- package/dist/telemetry/client.d.ts +0 -44
- package/dist/telemetry/client.d.ts.map +0 -1
- package/dist/telemetry/delivery.d.ts +0 -107
- package/dist/telemetry/delivery.d.ts.map +0 -1
- package/dist/telemetry/exporter.d.ts +0 -38
- package/dist/telemetry/exporter.d.ts.map +0 -1
- package/dist/telemetry/index.d.ts +0 -7
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/index.js +0 -50
- package/dist/telemetry/journey.d.ts +0 -52
- package/dist/telemetry/journey.d.ts.map +0 -1
- package/dist/telemetry/random.d.ts +0 -18
- package/dist/telemetry/random.d.ts.map +0 -1
- package/dist/telemetry/reconnect.d.ts +0 -7
- package/dist/telemetry/reconnect.d.ts.map +0 -1
- package/dist/telemetry/rtc.d.ts +0 -41
- package/dist/telemetry/rtc.d.ts.map +0 -1
- package/dist/telemetry/storage.d.ts +0 -22
- package/dist/telemetry/storage.d.ts.map +0 -1
- package/dist/telemetry/sync.d.ts +0 -10
- package/dist/telemetry/sync.d.ts.map +0 -1
- package/dist/telemetry/test-support.d.ts +0 -51
- package/dist/telemetry/test-support.d.ts.map +0 -1
- package/dist/telemetry/trace.d.ts +0 -18
- package/dist/telemetry/trace.d.ts.map +0 -1
- package/dist/telemetry/types.d.ts +0 -109
- package/dist/telemetry/types.d.ts.map +0 -1
- package/dist/whiteboard/file-http-transport.d.ts +0 -9
- 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
|
-
|
|
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: (
|
|
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
|
-
|
|
178
|
+
### Join capture errors
|
|
188
179
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
|
|
194
|
-
|
|
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
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
204
|
-
`
|
|
205
|
-
|
|
206
|
-
|
|
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.
|
package/dist/access/grant.d.ts
CHANGED
|
@@ -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":"
|
|
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;;;;
|
|
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"}
|