@q9labsai/chalk-client 5.2.6 → 5.3.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.
@@ -1313,6 +1313,7 @@ export declare const WelcomeSnapshotFrameSchema: Schema.Struct<{
1313
1313
  readonly protocol: Schema.Literal<1>;
1314
1314
  readonly participant_id: Schema.String;
1315
1315
  readonly participant_generation: Schema.Number;
1316
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1316
1317
  readonly recovery_id: Schema.String;
1317
1318
  readonly head: Schema.Struct<{
1318
1319
  readonly revision: Schema.Number;
@@ -1361,6 +1362,7 @@ export declare const WelcomeReplayFrameSchema: Schema.Struct<{
1361
1362
  readonly protocol: Schema.Literal<1>;
1362
1363
  readonly participant_id: Schema.String;
1363
1364
  readonly participant_generation: Schema.Number;
1365
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1364
1366
  readonly recovery_id: Schema.String;
1365
1367
  readonly head: Schema.Struct<{
1366
1368
  readonly revision: Schema.Number;
@@ -1379,6 +1381,7 @@ export declare const WelcomeUpToDateFrameSchema: Schema.Struct<{
1379
1381
  readonly protocol: Schema.Literal<1>;
1380
1382
  readonly participant_id: Schema.String;
1381
1383
  readonly participant_generation: Schema.Number;
1384
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1382
1385
  readonly recovery_id: Schema.String;
1383
1386
  readonly head: Schema.Struct<{
1384
1387
  readonly revision: Schema.Number;
@@ -1397,6 +1400,7 @@ export declare const WelcomeTerminalFrameSchema: Schema.Struct<{
1397
1400
  readonly protocol: Schema.Literal<1>;
1398
1401
  readonly participant_id: Schema.String;
1399
1402
  readonly participant_generation: Schema.Number;
1403
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1400
1404
  readonly recovery_id: Schema.String;
1401
1405
  readonly head: Schema.Struct<{
1402
1406
  readonly revision: Schema.Number;
@@ -1416,6 +1420,7 @@ export declare const ExtendedWelcomeSnapshotFrameSchema: Schema.Struct<{
1416
1420
  readonly protocol: Schema.Literal<1>;
1417
1421
  readonly participant_id: Schema.String;
1418
1422
  readonly participant_generation: Schema.Number;
1423
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1419
1424
  readonly recovery_id: Schema.String;
1420
1425
  readonly head: Schema.Struct<{
1421
1426
  readonly revision: Schema.Number;
@@ -1477,6 +1482,7 @@ export declare const ExtendedWelcomeReplayFrameSchema: Schema.Struct<{
1477
1482
  readonly protocol: Schema.Literal<1>;
1478
1483
  readonly participant_id: Schema.String;
1479
1484
  readonly participant_generation: Schema.Number;
1485
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1480
1486
  readonly recovery_id: Schema.String;
1481
1487
  readonly head: Schema.Struct<{
1482
1488
  readonly revision: Schema.Number;
@@ -1508,6 +1514,7 @@ export declare const ExtendedWelcomeUpToDateFrameSchema: Schema.Struct<{
1508
1514
  readonly protocol: Schema.Literal<1>;
1509
1515
  readonly participant_id: Schema.String;
1510
1516
  readonly participant_generation: Schema.Number;
1517
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1511
1518
  readonly recovery_id: Schema.String;
1512
1519
  readonly head: Schema.Struct<{
1513
1520
  readonly revision: Schema.Number;
@@ -1539,6 +1546,7 @@ export declare const ExtendedWelcomeTerminalFrameSchema: Schema.Struct<{
1539
1546
  readonly protocol: Schema.Literal<1>;
1540
1547
  readonly participant_id: Schema.String;
1541
1548
  readonly participant_generation: Schema.Number;
1549
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1542
1550
  readonly recovery_id: Schema.String;
1543
1551
  readonly head: Schema.Struct<{
1544
1552
  readonly revision: Schema.Number;
@@ -1571,6 +1579,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1571
1579
  readonly protocol: Schema.Literal<1>;
1572
1580
  readonly participant_id: Schema.String;
1573
1581
  readonly participant_generation: Schema.Number;
1582
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1574
1583
  readonly recovery_id: Schema.String;
1575
1584
  readonly head: Schema.Struct<{
1576
1585
  readonly revision: Schema.Number;
@@ -1631,6 +1640,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1631
1640
  readonly protocol: Schema.Literal<1>;
1632
1641
  readonly participant_id: Schema.String;
1633
1642
  readonly participant_generation: Schema.Number;
1643
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1634
1644
  readonly recovery_id: Schema.String;
1635
1645
  readonly head: Schema.Struct<{
1636
1646
  readonly revision: Schema.Number;
@@ -1661,6 +1671,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1661
1671
  readonly protocol: Schema.Literal<1>;
1662
1672
  readonly participant_id: Schema.String;
1663
1673
  readonly participant_generation: Schema.Number;
1674
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1664
1675
  readonly recovery_id: Schema.String;
1665
1676
  readonly head: Schema.Struct<{
1666
1677
  readonly revision: Schema.Number;
@@ -1691,6 +1702,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1691
1702
  readonly protocol: Schema.Literal<1>;
1692
1703
  readonly participant_id: Schema.String;
1693
1704
  readonly participant_generation: Schema.Number;
1705
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1694
1706
  readonly recovery_id: Schema.String;
1695
1707
  readonly head: Schema.Struct<{
1696
1708
  readonly revision: Schema.Number;
@@ -1722,6 +1734,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1722
1734
  readonly protocol: Schema.Literal<1>;
1723
1735
  readonly participant_id: Schema.String;
1724
1736
  readonly participant_generation: Schema.Number;
1737
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1725
1738
  readonly recovery_id: Schema.String;
1726
1739
  readonly head: Schema.Struct<{
1727
1740
  readonly revision: Schema.Number;
@@ -1769,6 +1782,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1769
1782
  readonly protocol: Schema.Literal<1>;
1770
1783
  readonly participant_id: Schema.String;
1771
1784
  readonly participant_generation: Schema.Number;
1785
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1772
1786
  readonly recovery_id: Schema.String;
1773
1787
  readonly head: Schema.Struct<{
1774
1788
  readonly revision: Schema.Number;
@@ -1786,6 +1800,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1786
1800
  readonly protocol: Schema.Literal<1>;
1787
1801
  readonly participant_id: Schema.String;
1788
1802
  readonly participant_generation: Schema.Number;
1803
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1789
1804
  readonly recovery_id: Schema.String;
1790
1805
  readonly head: Schema.Struct<{
1791
1806
  readonly revision: Schema.Number;
@@ -1803,6 +1818,7 @@ export declare const WelcomeFrameSchema: Schema.Union<readonly [Schema.Struct<{
1803
1818
  readonly protocol: Schema.Literal<1>;
1804
1819
  readonly participant_id: Schema.String;
1805
1820
  readonly participant_generation: Schema.Number;
1821
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
1806
1822
  readonly recovery_id: Schema.String;
1807
1823
  readonly head: Schema.Struct<{
1808
1824
  readonly revision: Schema.Number;
@@ -2176,6 +2192,9 @@ export declare const PresenceProjectionItemSchema: Schema.Struct<{
2176
2192
  readonly state: Schema.Union<readonly [Schema.Literal<"connected">, Schema.Literal<"disconnected">]>;
2177
2193
  readonly speaking: Schema.Boolean;
2178
2194
  readonly active_speaker: Schema.Boolean;
2195
+ readonly identity_id: Schema.optional<Schema.String>;
2196
+ readonly device_type: Schema.optional<Schema.Literals<readonly ["phone", "tablet", "computer"]>>;
2197
+ readonly admission_revision: Schema.optional<Schema.Number>;
2179
2198
  }>;
2180
2199
  export declare const MediaProjectionSnapshotFrameSchema: Schema.Struct<{
2181
2200
  readonly journey_id: Schema.optional<Schema.String>;
@@ -2205,6 +2224,9 @@ export declare const PresenceProjectionSnapshotFrameSchema: Schema.Struct<{
2205
2224
  readonly state: Schema.Union<readonly [Schema.Literal<"connected">, Schema.Literal<"disconnected">]>;
2206
2225
  readonly speaking: Schema.Boolean;
2207
2226
  readonly active_speaker: Schema.Boolean;
2227
+ readonly identity_id: Schema.optional<Schema.String>;
2228
+ readonly device_type: Schema.optional<Schema.Literals<readonly ["phone", "tablet", "computer"]>>;
2229
+ readonly admission_revision: Schema.optional<Schema.Number>;
2208
2230
  }>>;
2209
2231
  }>;
2210
2232
  export declare const MediaProjectionEventFrameSchema: Schema.Struct<{
@@ -2235,6 +2257,9 @@ export declare const PresenceProjectionEventFrameSchema: Schema.Struct<{
2235
2257
  readonly state: Schema.Union<readonly [Schema.Literal<"connected">, Schema.Literal<"disconnected">]>;
2236
2258
  readonly speaking: Schema.Boolean;
2237
2259
  readonly active_speaker: Schema.Boolean;
2260
+ readonly identity_id: Schema.optional<Schema.String>;
2261
+ readonly device_type: Schema.optional<Schema.Literals<readonly ["phone", "tablet", "computer"]>>;
2262
+ readonly admission_revision: Schema.optional<Schema.Number>;
2238
2263
  }>;
2239
2264
  }>;
2240
2265
  export declare const ProjectionFrameSchema: Schema.Union<readonly [Schema.Struct<{
@@ -2264,6 +2289,9 @@ export declare const ProjectionFrameSchema: Schema.Union<readonly [Schema.Struct
2264
2289
  readonly state: Schema.Union<readonly [Schema.Literal<"connected">, Schema.Literal<"disconnected">]>;
2265
2290
  readonly speaking: Schema.Boolean;
2266
2291
  readonly active_speaker: Schema.Boolean;
2292
+ readonly identity_id: Schema.optional<Schema.String>;
2293
+ readonly device_type: Schema.optional<Schema.Literals<readonly ["phone", "tablet", "computer"]>>;
2294
+ readonly admission_revision: Schema.optional<Schema.Number>;
2267
2295
  }>>;
2268
2296
  }>, Schema.Struct<{
2269
2297
  readonly journey_id: Schema.optional<Schema.String>;
@@ -2292,6 +2320,9 @@ export declare const ProjectionFrameSchema: Schema.Union<readonly [Schema.Struct
2292
2320
  readonly state: Schema.Union<readonly [Schema.Literal<"connected">, Schema.Literal<"disconnected">]>;
2293
2321
  readonly speaking: Schema.Boolean;
2294
2322
  readonly active_speaker: Schema.Boolean;
2323
+ readonly identity_id: Schema.optional<Schema.String>;
2324
+ readonly device_type: Schema.optional<Schema.Literals<readonly ["phone", "tablet", "computer"]>>;
2325
+ readonly admission_revision: Schema.optional<Schema.Number>;
2295
2326
  }>;
2296
2327
  }>]>;
2297
2328
  export declare const LiveTargetOutcomeSchema: Schema.Union<readonly [Schema.Literal<"confirmed">, Schema.Literal<"satisfied">, Schema.Literal<"retryable_failure">, Schema.Literal<"terminal_failure">, Schema.Literal<"ambiguous">]>;
@@ -2984,6 +3015,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
2984
3015
  readonly protocol: Schema.Literal<1>;
2985
3016
  readonly participant_id: Schema.String;
2986
3017
  readonly participant_generation: Schema.Number;
3018
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
2987
3019
  readonly recovery_id: Schema.String;
2988
3020
  readonly head: Schema.Struct<{
2989
3021
  readonly revision: Schema.Number;
@@ -3044,6 +3076,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3044
3076
  readonly protocol: Schema.Literal<1>;
3045
3077
  readonly participant_id: Schema.String;
3046
3078
  readonly participant_generation: Schema.Number;
3079
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
3047
3080
  readonly recovery_id: Schema.String;
3048
3081
  readonly head: Schema.Struct<{
3049
3082
  readonly revision: Schema.Number;
@@ -3074,6 +3107,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3074
3107
  readonly protocol: Schema.Literal<1>;
3075
3108
  readonly participant_id: Schema.String;
3076
3109
  readonly participant_generation: Schema.Number;
3110
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
3077
3111
  readonly recovery_id: Schema.String;
3078
3112
  readonly head: Schema.Struct<{
3079
3113
  readonly revision: Schema.Number;
@@ -3104,6 +3138,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3104
3138
  readonly protocol: Schema.Literal<1>;
3105
3139
  readonly participant_id: Schema.String;
3106
3140
  readonly participant_generation: Schema.Number;
3141
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
3107
3142
  readonly recovery_id: Schema.String;
3108
3143
  readonly head: Schema.Struct<{
3109
3144
  readonly revision: Schema.Number;
@@ -3135,6 +3170,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3135
3170
  readonly protocol: Schema.Literal<1>;
3136
3171
  readonly participant_id: Schema.String;
3137
3172
  readonly participant_generation: Schema.Number;
3173
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
3138
3174
  readonly recovery_id: Schema.String;
3139
3175
  readonly head: Schema.Struct<{
3140
3176
  readonly revision: Schema.Number;
@@ -3182,6 +3218,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3182
3218
  readonly protocol: Schema.Literal<1>;
3183
3219
  readonly participant_id: Schema.String;
3184
3220
  readonly participant_generation: Schema.Number;
3221
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
3185
3222
  readonly recovery_id: Schema.String;
3186
3223
  readonly head: Schema.Struct<{
3187
3224
  readonly revision: Schema.Number;
@@ -3199,6 +3236,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3199
3236
  readonly protocol: Schema.Literal<1>;
3200
3237
  readonly participant_id: Schema.String;
3201
3238
  readonly participant_generation: Schema.Number;
3239
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
3202
3240
  readonly recovery_id: Schema.String;
3203
3241
  readonly head: Schema.Struct<{
3204
3242
  readonly revision: Schema.Number;
@@ -3216,6 +3254,7 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3216
3254
  readonly protocol: Schema.Literal<1>;
3217
3255
  readonly participant_id: Schema.String;
3218
3256
  readonly participant_generation: Schema.Number;
3257
+ readonly participant_identity_id: Schema.optionalKey<Schema.String>;
3219
3258
  readonly recovery_id: Schema.String;
3220
3259
  readonly head: Schema.Struct<{
3221
3260
  readonly revision: Schema.Number;
@@ -3882,6 +3921,9 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3882
3921
  readonly state: Schema.Union<readonly [Schema.Literal<"connected">, Schema.Literal<"disconnected">]>;
3883
3922
  readonly speaking: Schema.Boolean;
3884
3923
  readonly active_speaker: Schema.Boolean;
3924
+ readonly identity_id: Schema.optional<Schema.String>;
3925
+ readonly device_type: Schema.optional<Schema.Literals<readonly ["phone", "tablet", "computer"]>>;
3926
+ readonly admission_revision: Schema.optional<Schema.Number>;
3885
3927
  }>>;
3886
3928
  }>, Schema.Struct<{
3887
3929
  readonly journey_id: Schema.optional<Schema.String>;
@@ -3910,6 +3952,9 @@ export declare const SyncV1ServerFrameSchema: Schema.decodeTo<Schema.Union<reado
3910
3952
  readonly state: Schema.Union<readonly [Schema.Literal<"connected">, Schema.Literal<"disconnected">]>;
3911
3953
  readonly speaking: Schema.Boolean;
3912
3954
  readonly active_speaker: Schema.Boolean;
3955
+ readonly identity_id: Schema.optional<Schema.String>;
3956
+ readonly device_type: Schema.optional<Schema.Literals<readonly ["phone", "tablet", "computer"]>>;
3957
+ readonly admission_revision: Schema.optional<Schema.Number>;
3913
3958
  }>;
3914
3959
  }>]>, Schema.Struct<{
3915
3960
  readonly journey_id: Schema.optional<Schema.String>;
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  createSpaceClient,
16
16
  decodeWhiteboardV1ServerFrame,
17
17
  encodeWhiteboardV1ClientFrame
18
- } from "./chunk-I7Y4HR2P.js";
18
+ } from "./chunk-DHUHTIU7.js";
19
19
  import {
20
20
  CloudflareSFUClient,
21
21
  CloudflareSFUError,
@@ -28,19 +28,19 @@ import {
28
28
  requireSFUDescription,
29
29
  validatePublicationSnapshot,
30
30
  waitFor
31
- } from "./chunk-YIDKETOX.js";
31
+ } from "./chunk-3TGVTP6Z.js";
32
32
  import {
33
33
  createChalkPublicClient,
34
34
  createChalkPublicInviteClient,
35
35
  parseInviteCode
36
- } from "./chunk-WFRTUBN6.js";
36
+ } from "./chunk-O26BHHMI.js";
37
37
  import {
38
38
  ArrivalInvalidHandleError,
39
39
  ArrivalUnavailableError,
40
40
  SpacePublicInviteUnavailableError,
41
41
  parseParsedAccessGrant,
42
42
  requireAccessGrant
43
- } from "./chunk-CJVLTSIO.js";
43
+ } from "./chunk-GOSWSXTH.js";
44
44
  import {
45
45
  AsyncStorageV1PendingTargetStore,
46
46
  InMemoryV1PendingTargetStore,
@@ -69,7 +69,7 @@ import {
69
69
  optimisticV1Control,
70
70
  reactionFromFrame,
71
71
  restoreV1Snapshot
72
- } from "./chunk-5YPQNMJE.js";
72
+ } from "./chunk-XSB2GDRW.js";
73
73
 
74
74
  // src/space-client/reload-rejoin.ts
75
75
  import { Schema } from "effect";
@@ -7,12 +7,12 @@ export declare class CloudflareSFUClient implements ClientMediaPlane {
7
7
  subscribe(listener: () => void): () => void;
8
8
  remotePublicationResumed(publicationId: string): void;
9
9
  remoteParticipantsChanged(participantIds: readonly string[]): void;
10
- remotePublicationsChanged(): void;
10
+ remotePublicationsChanged(publications?: readonly MediaPublication[], projectionState?: "available" | "unavailable"): void;
11
11
  prepareLocalTrack(source: MediaPublicationSource, track: MediaStreamTrack): void;
12
12
  clearPreparedLocalTrack(source: MediaPublicationSource, options?: {
13
13
  readonly stopTrack?: boolean;
14
14
  }): Promise<void>;
15
- start(localMedia: MediaStream): Promise<void>;
15
+ start(localMedia: MediaStream, beforePublish?: () => Promise<MediaStream>): Promise<void>;
16
16
  refreshRemotePublications(): Promise<void>;
17
17
  setLocalPublicationTarget(target: MediaPlaneTarget): Promise<MediaPlaneResult>;
18
18
  pauseLocalCapture(source: "microphone" | "camera"): Promise<void>;
@@ -10,7 +10,7 @@ import {
10
10
  requireSFUDescription,
11
11
  validatePublicationSnapshot,
12
12
  waitFor
13
- } from "../chunk-YIDKETOX.js";
13
+ } from "../chunk-3TGVTP6Z.js";
14
14
  export {
15
15
  CloudflareSFUClient,
16
16
  CloudflareSFUError,
@@ -1,6 +1,6 @@
1
1
  import type { operations } from "../generated/openapi-types";
2
2
  export type MediaConnectionReplacementCause = NonNullable<NonNullable<operations["addCloudflareSFUTracks"]["parameters"]["query"]>["replacement_cause"]>;
3
- export type LocalPublicationRetirementCause = Exclude<MediaConnectionReplacementCause, "local_signaling_failure" | "remote_signaling_failure" | "dormant_connection" | "access_refresh">;
3
+ export type LocalPublicationRetirementCause = Exclude<MediaConnectionReplacementCause, "local_signaling_failure" | "remote_signaling_failure" | "dormant_connection" | "access_refresh" | "receive_stalled">;
4
4
  export type ScreenShareSurface = "monitor" | "window" | "browser";
5
5
  export type ScreenShareOptions = {
6
6
  readonly surface?: ScreenShareSurface;
@@ -27,6 +27,7 @@ export type ConnectionMediaRemoteTrack = Pick<MediaPublication, "participantId"
27
27
  readonly track: MediaStreamTrack;
28
28
  };
29
29
  export type ConnectionMediaSnapshot = {
30
+ readonly receiveStalls?: readonly import("./receive-stall").ReceiveStallObservation[];
30
31
  readonly connection: {
31
32
  readonly phase: ConnectionMediaPhase;
32
33
  readonly peerConnectionState: RTCPeerConnectionState | null;
@@ -62,7 +63,8 @@ export type ClientMediaPlane = {
62
63
  readonly closeForcedLocalPublication?: (source: MediaSource, cause?: LocalPublicationRetirementCause) => Promise<void>;
63
64
  readonly observeLocalPublications: (listener: (publications: readonly MediaPublication[]) => void) => () => void;
64
65
  readonly observeRemotePublications: (listener: (publications: readonly MediaPublication[]) => void) => () => void;
65
- readonly remotePublicationsChanged?: () => void;
66
+ /** Unavailable suspends receive eligibility without withdrawing publication identities. */
67
+ readonly remotePublicationsChanged?: (publications?: readonly MediaPublication[], projectionState?: "available" | "unavailable") => void;
66
68
  readonly remoteParticipantsChanged?: (participantIds: readonly string[]) => void;
67
69
  readonly remotePublicationResumed?: (publicationId: string) => void;
68
70
  };
@@ -0,0 +1,43 @@
1
+ import type { MediaPublication } from "./plane";
2
+ import type { CloudflareSFURemoteTrack } from "./types";
3
+ export declare const RECEIVE_STALL_WINDOW_MS = 7000;
4
+ export declare const RECEIVE_STARTUP_GRACE_MS = 20000;
5
+ export type ReceivePacketSample = {
6
+ readonly publicationId: string;
7
+ readonly trackId: string;
8
+ readonly packets: number;
9
+ };
10
+ /** Only consecutive, timely observations of expected media establish a stall. */
11
+ export declare class ReceiveStallDetector {
12
+ #private;
13
+ forget(publicationId: string): void;
14
+ clear(): void;
15
+ sample(now: number, tracks: readonly ReceivePacketSample[]): {
16
+ readonly stalled: readonly string[];
17
+ readonly advanced: readonly string[];
18
+ readonly resumed: readonly string[];
19
+ };
20
+ }
21
+ export type ReceiveStallObservation = {
22
+ readonly event: "receive_stalled";
23
+ readonly scope: "partial" | "all";
24
+ readonly observedAtMs: number;
25
+ readonly expectedTracks: number;
26
+ readonly stalledTracks: number;
27
+ };
28
+ /** Owns eligibility, pending stalls and the budget across replacement peers. */
29
+ export declare class ReceiveStallRecovery {
30
+ #private;
31
+ get observations(): readonly ReceiveStallObservation[];
32
+ expect(publications: readonly MediaPublication[], participantId: string): void;
33
+ suspend(): void;
34
+ isStalled(publicationId: string): boolean;
35
+ canRebuild(): boolean;
36
+ reserveRebuild(): boolean;
37
+ clear(): void;
38
+ sample(now: number, connection: RTCPeerConnection, report: RTCStatsReport, tracks: Iterable<CloudflareSFURemoteTrack>): {
39
+ readonly stalled: readonly string[];
40
+ readonly advanced: readonly string[];
41
+ readonly newlyStalled: readonly string[];
42
+ };
43
+ }
@@ -77,6 +77,8 @@ export type CloudflareSFUFailureCode = CloudflareSFUErrorCode;
77
77
  export type CloudflareSFUConnectionPhase = "idle" | "connecting" | "live" | "recovering" | "failed" | "stopped";
78
78
  export type CloudflareSFUPhase = CloudflareSFUConnectionPhase;
79
79
  export type CloudflareSFUSnapshot = {
80
+ /** Omitted by media adapters without receive diagnostics; treat as empty. */
81
+ readonly receiveStalls?: readonly import("./receive-stall").ReceiveStallObservation[];
80
82
  readonly connection: {
81
83
  readonly phase: CloudflareSFUConnectionPhase;
82
84
  readonly peerConnectionState: RTCPeerConnectionState | null;
@@ -2,12 +2,12 @@ import {
2
2
  createChalkPublicClient,
3
3
  createChalkPublicInviteClient,
4
4
  parseInviteCode
5
- } from "../chunk-WFRTUBN6.js";
5
+ } from "../chunk-O26BHHMI.js";
6
6
  import {
7
7
  ArrivalInvalidHandleError,
8
8
  ArrivalUnavailableError,
9
9
  SpacePublicInviteUnavailableError
10
- } from "../chunk-CJVLTSIO.js";
10
+ } from "../chunk-GOSWSXTH.js";
11
11
  export {
12
12
  ArrivalInvalidHandleError,
13
13
  ArrivalUnavailableError,
@@ -602,6 +602,7 @@ function participantAdmissionRequest(input) {
602
602
  name: input.name,
603
603
  role: input.role,
604
604
  ...input.identityId === void 0 ? {} : { identity_id: input.identityId },
605
+ ...input.identityExternalId === void 0 ? {} : { identity_external_id: input.identityExternalId },
605
606
  ...input.metadata === void 0 ? {} : { metadata: input.metadata },
606
607
  ...input.participantId === void 0 ? {} : { participant_id: input.participantId }
607
608
  };
@@ -504,6 +504,7 @@ function participantAdmissionRequest(input) {
504
504
  name: input.name,
505
505
  role: input.role,
506
506
  ...input.identityId === void 0 ? {} : { identity_id: input.identityId },
507
+ ...input.identityExternalId === void 0 ? {} : { identity_external_id: input.identityExternalId },
507
508
  ...input.metadata === void 0 ? {} : { metadata: input.metadata },
508
509
  ...input.participantId === void 0 ? {} : { participant_id: input.participantId }
509
510
  };
@@ -104,6 +104,8 @@ export type EpisodeEnd = {
104
104
  readonly status: string;
105
105
  };
106
106
  export type AdmitParticipantInput = {
107
+ /** Stable person key scoped to this tenant. Mutually exclusive with identityId. */
108
+ readonly identityExternalId?: string;
107
109
  readonly identityId?: string;
108
110
  readonly metadata?: unknown;
109
111
  readonly name: string;
@@ -104,6 +104,8 @@ export type EpisodeEnd = {
104
104
  readonly status: string;
105
105
  };
106
106
  export type AdmitParticipantInput = {
107
+ /** Stable person key scoped to this tenant. Mutually exclusive with identityId. */
108
+ readonly identityExternalId?: string;
107
109
  readonly identityId?: string;
108
110
  readonly metadata?: unknown;
109
111
  readonly name: string;
@@ -0,0 +1,6 @@
1
+ import type { Participant } from "./types";
2
+ import type { V1EpisodeSnapshot } from "../sync/v1-types";
3
+ type PersonSeat = Pick<Participant, "participantId" | "identityId">;
4
+ export declare function otherDevices<Seat extends PersonSeat>(participants: readonly Seat[], participantId: string | null, ownIdentityId?: string): readonly Seat[];
5
+ export declare function otherDeviceHasMicrophone(snapshot: V1EpisodeSnapshot, participants: readonly PersonSeat[]): boolean;
6
+ export {};
@@ -77,6 +77,8 @@ export type ConnectionSlice = {
77
77
  };
78
78
  export type SelfSlice = {
79
79
  readonly participantId: string | null;
80
+ /** Verified person association, including before this seat confirms entry. */
81
+ readonly identityId?: string;
80
82
  readonly displayName: string | null;
81
83
  readonly role: string | null;
82
84
  readonly capabilities: readonly Capability[];
@@ -89,6 +91,9 @@ export type ParticipantPresence = {
89
91
  readonly activeSpeaker: boolean;
90
92
  };
91
93
  export type Participant = {
94
+ /** Stable person identity, independent of the per-device participant ID. */
95
+ readonly identityId?: string;
96
+ readonly deviceType?: "phone" | "tablet" | "computer";
92
97
  readonly participantId: string;
93
98
  readonly displayName: string;
94
99
  readonly role: string;
@@ -128,6 +133,7 @@ export type RemoteMedia = {
128
133
  export type IncomingMediaRequest = ChalkIncomingMediaRequest;
129
134
  export type { ScreenShareSurface, ScreenShareOptions, ScreenShareCapture } from "../media/plane";
130
135
  export type MediaSlice = {
136
+ readonly microphoneMutedByOtherDevice?: boolean;
131
137
  readonly devices: {
132
138
  readonly microphones: readonly MediaDevice[];
133
139
  readonly cameras: readonly MediaDevice[];
@@ -22,7 +22,7 @@ import {
22
22
  encodeV1ClientFrame,
23
23
  optimisticV1Control,
24
24
  restoreV1Snapshot
25
- } from "../chunk-5YPQNMJE.js";
25
+ } from "../chunk-XSB2GDRW.js";
26
26
  export {
27
27
  AsyncStorageV1PendingTargetStore,
28
28
  InMemoryV1PendingTargetStore,
@@ -52,6 +52,10 @@ export type V1ControlState = {
52
52
  };
53
53
  export type V1MediaPublication = MediaPublication;
54
54
  export type V1Presence = {
55
+ readonly admissionRevision?: number;
56
+ /** Stable person identity, independent of the per-device participant ID. */
57
+ readonly identityId?: string;
58
+ readonly deviceType?: "phone" | "tablet" | "computer";
55
59
  readonly participantId: string;
56
60
  readonly state: "connected" | "disconnected";
57
61
  readonly speaking: boolean;
@@ -86,6 +90,8 @@ export type V1EpisodeSnapshot = {
86
90
  };
87
91
  readonly participantId: string | null;
88
92
  readonly participantGeneration: number | null;
93
+ /** Verified own-seat identity, available before admission confirmation on negotiated servers. */
94
+ readonly participantIdentityId?: string;
89
95
  readonly control: V1ControlState | null;
90
96
  readonly optimisticControl: V1ControlState | null;
91
97
  readonly media: V1Projection<V1MediaPublication> | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@q9labsai/chalk-client",
3
- "version": "5.2.6",
3
+ "version": "5.3.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -221,6 +221,7 @@
221
221
  "test": "node ../../../scripts/test/run.mjs pnpm exec vitest run",
222
222
  "test:webhooks-package": "pnpm run build && node ./scripts/check-webhook-package.mjs",
223
223
  "test:server-package": "pnpm run build && node ./scripts/check-server-package.mjs",
224
+ "test:receive-stall-sfu": "node ./scripts/real-sfu-receive-stall.mjs",
224
225
  "test:sync-browser": "pnpm run build && node ./scripts/real-browser-sync.mjs",
225
226
  "test:sync-node-restart": "pnpm run build && node ./scripts/real-node-restart-sync.mjs",
226
227
  "check-types": "tsc-rs --project tsconfig.check-types.json --noEmit",