@q9labsai/chalk-client 5.2.5 → 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.
@@ -84,6 +84,7 @@ var AccessGrantSchema = Schema.Struct({
84
84
  });
85
85
  var AdmitEpisodeParticipantRequestSchema = Schema.Struct({
86
86
  admission: Schema.optional(Schema.Literals(["policy", "direct"])),
87
+ identity_external_id: Schema.optional(Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256))),
87
88
  identity_id: Schema.optional(UUIDSchema),
88
89
  metadata: Schema.optional(Schema.Unknown),
89
90
  name: Schema.String.check(Schema.isMinLength(1)),
@@ -1109,7 +1110,26 @@ var AddCloudflareSFUTracksPathParamsSchema = Schema.Struct({
1109
1110
  tenant_id: TenantIdSchema
1110
1111
  });
1111
1112
  var AddCloudflareSFUTracksQueryParamsSchema = Schema.Struct({
1112
- allow_partial_remote_tracks: Schema.optional(Schema.Boolean)
1113
+ allow_partial_remote_tracks: Schema.optional(Schema.Boolean),
1114
+ replacement_cause: Schema.optional(
1115
+ Schema.Literals([
1116
+ "user_pause",
1117
+ "moderation_pause",
1118
+ "sync_recovery_loss",
1119
+ "discovery_absent",
1120
+ "capture_cleanup",
1121
+ "consent_revoked",
1122
+ "publish_failure",
1123
+ "enable_failure",
1124
+ "projection_mismatch",
1125
+ "forced_pause",
1126
+ "local_signaling_failure",
1127
+ "remote_signaling_failure",
1128
+ "dormant_connection",
1129
+ "access_refresh",
1130
+ "receive_stalled"
1131
+ ])
1132
+ )
1113
1133
  });
1114
1134
  var AddCloudflareSFUTracksRequestBodySchema = CloudflareSFUTracksRequestSchema;
1115
1135
  var AddCloudflareSFUTracksResponseSchema = CloudflareSFUTracksAPIResponseSchema;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createChalkEffectClient,
3
3
  parseAccessGrant
4
- } from "./chunk-UMAE5GCV.js";
4
+ } from "./chunk-GOSWSXTH.js";
5
5
 
6
6
  // src/public-invites/client.ts
7
7
  import { Effect } from "effect";
@@ -861,7 +861,8 @@ function strictEvent(value) {
861
861
  }
862
862
  function strictProjectionItem(value, stream) {
863
863
  if (stream === "media") return exactObject(value, ["participant_id", "source", "enabled", "publication_id"]);
864
- if (stream === "presence") return exactObject(value, ["participant_id", "state", "speaking", "active_speaker"]);
864
+ if (stream === "presence")
865
+ return isObject(value) && exactObject(value, [...["participant_id", "state", "speaking", "active_speaker"], ...Object.hasOwn(value, "identity_id") ? ["identity_id"] : [], ...Object.hasOwn(value, "device_type") ? ["device_type"] : [], ...Object.hasOwn(value, "admission_revision") ? ["admission_revision"] : []]);
865
866
  return false;
866
867
  }
867
868
  function strictProjection(value) {
@@ -873,7 +874,13 @@ function strictWelcome(value) {
873
874
  const extension = Array.isArray(value.extensions) && value.extensions.length === 1 ? value.extensions[0] : void 0;
874
875
  const extensionValid = isObject(extension) && ["collaboration_v1", "collaboration_v2"].includes(String(extension.name)) && exactObject(extension, ["name", "capabilities", "participant_capabilities", "chat_head_sequence", "retained_floor_sequence", "read_receipts"]) && Array.isArray(extension.read_receipts);
875
876
  if (Object.hasOwn(value, "entry_confirmation") && value.entry_confirmation !== true) return false;
876
- const fields = [...base, ...extensionValid ? ["extensions"] : [], ...Object.hasOwn(value, "entry_confirmation") ? ["entry_confirmation"] : [], ...Object.hasOwn(value, "entry_generation") ? ["entry_generation"] : []];
877
+ const fields = [
878
+ ...base,
879
+ ...extensionValid ? ["extensions"] : [],
880
+ ...Object.hasOwn(value, "entry_confirmation") ? ["entry_confirmation"] : [],
881
+ ...Object.hasOwn(value, "entry_generation") ? ["entry_generation"] : [],
882
+ ...Object.hasOwn(value, "participant_identity_id") ? ["participant_identity_id"] : []
883
+ ];
877
884
  if (!strictCursor(value.head)) return false;
878
885
  if (value.mode === "snapshot") return exactObjectWithCorrelation(value, [...fields, "snapshot"]) && strictSnapshot(value.snapshot);
879
886
  if (value.mode === "terminal") return exactObjectWithCorrelation(value, [...fields, "reason"]);
@@ -1479,6 +1486,7 @@ var WelcomeBase = {
1479
1486
  protocol: Schema.Literal(1),
1480
1487
  participant_id: UuidSchema,
1481
1488
  participant_generation: PositiveIntegerSchema,
1489
+ participant_identity_id: Schema.optionalKey(UuidSchema),
1482
1490
  recovery_id: UuidSchema,
1483
1491
  head: ControlCursorSchema,
1484
1492
  entry_confirmation: Schema.optionalKey(Schema.Literal(true)),
@@ -1527,9 +1535,15 @@ var CommandIdConflictAckFrameSchema = Schema.Struct({ type: Schema.Literal("ack"
1527
1535
  var MediaProjectionItemSchema = Schema.Struct({ participant_id: UuidSchema, source: Schema.Union([Schema.Literal("microphone"), Schema.Literal("camera"), Schema.Literal("screen")]), enabled: Schema.Boolean, publication_id: Schema.NullOr(boundedUtf8String(256, 1)) }).check(
1528
1536
  Schema.makeFilter((item) => !item.enabled || item.publication_id !== null ? void 0 : { path: [], issue: "enabled requires a publication_id" })
1529
1537
  );
1530
- var PresenceProjectionItemSchema = Schema.Struct({ participant_id: UuidSchema, state: Schema.Union([Schema.Literal("connected"), Schema.Literal("disconnected")]), speaking: Schema.Boolean, active_speaker: Schema.Boolean }).check(
1531
- Schema.makeFilter((item) => item.state !== "disconnected" || !item.speaking && !item.active_speaker ? void 0 : { path: [], issue: "disconnected presence cannot be speaking or active speaker" })
1532
- );
1538
+ var PresenceProjectionItemSchema = Schema.Struct({
1539
+ participant_id: UuidSchema,
1540
+ state: Schema.Union([Schema.Literal("connected"), Schema.Literal("disconnected")]),
1541
+ speaking: Schema.Boolean,
1542
+ active_speaker: Schema.Boolean,
1543
+ identity_id: Schema.optional(UuidSchema),
1544
+ device_type: Schema.optional(Schema.Literals(["phone", "tablet", "computer"])),
1545
+ admission_revision: Schema.optional(PositiveIntegerSchema)
1546
+ }).check(Schema.makeFilter((item) => item.state !== "disconnected" || !item.speaking && !item.active_speaker ? void 0 : { path: [], issue: "disconnected presence cannot be speaking or active speaker" }));
1533
1547
  var MediaProjectionSnapshotFrameSchema = Schema.Struct({
1534
1548
  type: Schema.Literal("projection_snapshot"),
1535
1549
  stream: Schema.Literal("media"),
@@ -3016,6 +3030,7 @@ var V1SyncClient = class {
3016
3030
  #presence = null;
3017
3031
  #participantId = null;
3018
3032
  #participantGeneration = null;
3033
+ #participantIdentityId;
3019
3034
  #entryGeneration = null;
3020
3035
  #recovery = null;
3021
3036
  #snapshotRecoveryRequested = false;
@@ -3136,6 +3151,7 @@ var V1SyncClient = class {
3136
3151
  this.#socket?.close(1e3, "client stopped");
3137
3152
  this.#socket = null;
3138
3153
  this.#phase = { phase: "stopped" };
3154
+ this.#options.mediaPlane?.remotePublicationsChanged?.([], "unavailable");
3139
3155
  this.#rejectEphemeral("client_stopped");
3140
3156
  this.#collaborationState.disconnect("client_stopped");
3141
3157
  this.#localPublications = [];
@@ -3164,6 +3180,7 @@ var V1SyncClient = class {
3164
3180
  },
3165
3181
  participantId: this.#participantId,
3166
3182
  participantGeneration: this.#participantGeneration,
3183
+ participantIdentityId: this.#participantIdentityId,
3167
3184
  control: this.#control,
3168
3185
  optimisticControl,
3169
3186
  media: copyProjection(this.#media),
@@ -3183,6 +3200,7 @@ var V1SyncClient = class {
3183
3200
  return () => this.#mediaPauseListeners.delete(listener);
3184
3201
  }
3185
3202
  #notifyMediaPause(event) {
3203
+ if (event.name === "episode_ended") this.#options.mediaPlane?.remotePublicationsChanged?.([]);
3186
3204
  const source = event.name === "participant_microphone_stopped" ? "microphone" : event.name === "participant_camera_stopped" ? "camera" : event.name === "participant_screen_share_stopped" ? "screen" : null;
3187
3205
  if (source && "participant_id" in event.payload && event.payload.participant_id === this.#participantId) {
3188
3206
  for (const listener of this.#mediaPauseListeners) listener({ source, revision: event.revision });
@@ -3444,6 +3462,7 @@ var V1SyncClient = class {
3444
3462
  const control = this.#requireControl();
3445
3463
  this.#send({ type: "delivery_ack", stream: "control", revision: control.revision, state_digest: control.stateDigest });
3446
3464
  }
3465
+ if (this.#control?.status === "ended" || frame.name === "participant_left" && frame.payload.participant_id === this.#participantId) this.#participantIdentityId = void 0;
3447
3466
  if (frame.name === "participant_left" && frame.payload.participant_id === this.#participantId) {
3448
3467
  this.#phase = { phase: "terminal", terminalReason: frame.payload.reason === "removed" ? "participant_removed" : "participant_inactive" };
3449
3468
  this.#socket?.close(1e3, "participant inactive");
@@ -3534,6 +3553,7 @@ var V1SyncClient = class {
3534
3553
  this.#entryGeneration = frame.entry_generation ?? this.#entryGeneration;
3535
3554
  this.#participantId = frame.participant_id;
3536
3555
  this.#participantGeneration = frame.participant_generation;
3556
+ this.#participantIdentityId = frame.mode === "terminal" ? void 0 : frame.participant_identity_id;
3537
3557
  this.#updateLocalMediaStates();
3538
3558
  if (frame.mode === "terminal") {
3539
3559
  await this.#commandScheduler.settleTerminalRecovery(frame);
@@ -3547,6 +3567,7 @@ var V1SyncClient = class {
3547
3567
  const control = await restoreV1Snapshot(frame.snapshot);
3548
3568
  if (!sameHead(control, frame.head)) throw new V1ReplicaError("snapshot head mismatch");
3549
3569
  this.#control = control;
3570
+ if (control.status === "ended") this.#options.mediaPlane?.remotePublicationsChanged?.([]);
3550
3571
  this.#snapshotRevision = control.revision;
3551
3572
  this.#snapshotRecoveryRequested = false;
3552
3573
  this.#controlHeads.clear();
@@ -3592,7 +3613,7 @@ var V1SyncClient = class {
3592
3613
  previous.find((candidate) => mediaKey(candidate) === mediaKey(item)),
3593
3614
  item
3594
3615
  );
3595
- if (!this.#mediaEnded()) this.#options.mediaPlane?.remotePublicationsChanged?.();
3616
+ if (!this.#mediaEnded()) this.#options.mediaPlane?.remotePublicationsChanged?.(this.#media?.items ?? []);
3596
3617
  } else {
3597
3618
  this.#presence = { projectionId: frame.projection_id, sequence: 0, items: frame.items.map(presenceItem) };
3598
3619
  this.#presenceEventEvidence.clear();
@@ -3611,7 +3632,7 @@ var V1SyncClient = class {
3611
3632
  rememberBoundedEvidence(this.#mediaEventEvidence, frame.sequence, frameSignature(frame), MAX_PROJECTION_EVENT_EVIDENCE);
3612
3633
  this.#notifyRemotePublicationResumed(previous, item);
3613
3634
  if (!this.#mediaEnded() && item.participantId !== this.#participantId && (previous?.enabled !== item.enabled || previous?.publicationId !== item.publicationId)) {
3614
- this.#options.mediaPlane?.remotePublicationsChanged?.();
3635
+ this.#options.mediaPlane?.remotePublicationsChanged?.(this.#media?.items ?? []);
3615
3636
  }
3616
3637
  } else {
3617
3638
  if (this.#acceptProjectionDuplicate(this.#presence, this.#presenceEventEvidence, frame)) return;
@@ -3694,6 +3715,7 @@ var V1SyncClient = class {
3694
3715
  this.#commandScheduler.disconnect();
3695
3716
  this.#media = null;
3696
3717
  this.#presence = null;
3718
+ this.#options.mediaPlane?.remotePublicationsChanged?.([], this.#mediaEnded() ? "available" : "unavailable");
3697
3719
  this.#rejectRequests("disconnected_before_delivery");
3698
3720
  this.#collaborationState.disconnect("disconnected_before_delivery");
3699
3721
  if (!this.#started || this.#phase.phase === "terminal") return;
@@ -3900,7 +3922,7 @@ function mediaItem(item) {
3900
3922
  return { participantId: item.participant_id, source: item.source, enabled: item.enabled, publicationId: item.publication_id };
3901
3923
  }
3902
3924
  function presenceItem(item) {
3903
- return { participantId: item.participant_id, state: item.state, speaking: item.speaking, activeSpeaker: item.active_speaker };
3925
+ return { participantId: item.participant_id, admissionRevision: item.admission_revision, identityId: item.identity_id, deviceType: item.device_type, state: item.state, speaking: item.speaking, activeSpeaker: item.active_speaker };
3904
3926
  }
3905
3927
  function mediaKey(item) {
3906
3928
  return `${item.participantId}:${item.source}`;
@@ -3928,6 +3950,8 @@ function validMediaPublication(publication) {
3928
3950
  }
3929
3951
  function entryUrl(value, generation, confirmation) {
3930
3952
  const url = new URL(value);
3953
+ url.searchParams.set("participant_devices", "1");
3954
+ url.searchParams.set("participant_device_admissions", "2");
3931
3955
  url.searchParams.set("entry_generation", generation === null ? "new" : String(generation));
3932
3956
  if (confirmation) url.searchParams.set("entry_confirmation", "1");
3933
3957
  return url.toString();
package/dist/client.d.ts CHANGED
@@ -23,6 +23,7 @@ export declare const createChalkEffectClient: (options: ChalkEffectClientOptions
23
23
  readonly tenant_id: import("effect/Schema").brand<import("effect/Schema").String, "TenantId">;
24
24
  }>>, import("effect/Schema").toCodecStringTree<import("effect/Schema").Struct<{
25
25
  readonly allow_partial_remote_tracks: import("effect/Schema").optional<import("effect/Schema").Boolean>;
26
+ readonly replacement_cause: import("effect/Schema").optional<import("effect/Schema").Literals<readonly ["user_pause", "moderation_pause", "sync_recovery_loss", "discovery_absent", "capture_cleanup", "consent_revoked", "publish_failure", "enable_failure", "projection_mismatch", "forced_pause", "local_signaling_failure", "remote_signaling_failure", "dormant_connection", "access_refresh", "receive_stalled"]>>;
26
27
  }>>, import("effect/Schema").toCodecJson<import("effect/Schema").Struct<{
27
28
  readonly connection_id: import("effect/Schema").String;
28
29
  readonly session_description: import("effect/Schema").optional<import("effect/Schema").NullOr<import("effect/Schema").Struct<{
@@ -2477,6 +2478,7 @@ export declare const createChalkEffectClient: (options: ChalkEffectClientOptions
2477
2478
  readonly tenant_id: import("effect/Schema").brand<import("effect/Schema").String, "TenantId">;
2478
2479
  }>>, never, import("effect/Schema").toCodecJson<import("effect/Schema").Struct<{
2479
2480
  readonly admission: import("effect/Schema").optional<import("effect/Schema").Literals<readonly ["policy", "direct"]>>;
2481
+ readonly identity_external_id: import("effect/Schema").optional<import("effect/Schema").String>;
2480
2482
  readonly identity_id: import("effect/Schema").optional<import("effect/Schema").brand<import("effect/Schema").String, "UUID">>;
2481
2483
  readonly metadata: import("effect/Schema").optional<import("effect/Schema").Unknown>;
2482
2484
  readonly name: import("effect/Schema").String;
@@ -68,7 +68,8 @@ export type ConnectionSyncClient = V1CollaborationClient & {
68
68
  readonly requestStartCamera: (participantId: string) => Promise<V1DirectedRequestResult>;
69
69
  };
70
70
  export type ConnectionMediaClient = ClientMediaPlane & {
71
- readonly start: (stream: MediaStream) => Promise<void>;
71
+ /** Starts receiving immediately; resolves the optional initial publication policy before sending. */
72
+ readonly start: (stream: MediaStream, beforePublish?: () => Promise<MediaStream>) => Promise<void>;
72
73
  readonly stop: () => void;
73
74
  readonly restart: (input: CloudflareSFUBootstrap | ParticipantMediaAccess) => Promise<void>;
74
75
  readonly prepareLocalTrack: (source: "microphone" | "camera" | "screen" | "screen_audio", track: MediaStreamTrack) => void;
@@ -10,6 +10,6 @@ export declare const makeProductionConnectionPlatformLayer: (options: {
10
10
  readonly syncURL: string;
11
11
  readonly whiteboardURL?: string | null;
12
12
  }) => import("effect/Layer").Layer<import("./dependencies").ConnectionPlatformService, never, never>;
13
- type BoundMediaClient = Pick<ConnectionMediaClient, "setLocalPublicationTarget" | "setLocalSourceIntent" | "closeForcedLocalPublication" | "observeLocalPublications" | "observeRemotePublications" | "remotePublicationsChanged" | "remoteParticipantsChanged" | "remotePublicationResumed" | "start" | "stop" | "prepareLocalTrack" | "clearPreparedLocalTrack" | "getSnapshot" | "subscribe">;
13
+ type BoundMediaClient = Pick<ConnectionMediaClient, "setLocalPublicationTarget" | "pauseLocalCapture" | "setLocalSourceIntent" | "closeForcedLocalPublication" | "observeLocalPublications" | "observeRemotePublications" | "remotePublicationsChanged" | "remoteParticipantsChanged" | "remotePublicationResumed" | "start" | "stop" | "prepareLocalTrack" | "clearPreparedLocalTrack" | "getSnapshot" | "subscribe">;
14
14
  export declare function bindConnectionMediaClient(client: BoundMediaClient, restart: ConnectionMediaClient["restart"]): ConnectionMediaClient;
15
15
  export {};
package/dist/effect.js CHANGED
@@ -17,8 +17,8 @@ import {
17
17
  makeSpaceClientCoreLayer,
18
18
  makeSpaceClientCoreLayerFromServices,
19
19
  makeSpaceStoreLayer
20
- } from "./chunk-BUNSEDXL.js";
21
- import "./chunk-FD25AMLG.js";
20
+ } from "./chunk-DHUHTIU7.js";
21
+ import "./chunk-3TGVTP6Z.js";
22
22
  import {
23
23
  APIKeyListSchema,
24
24
  APIKeyWithSecretSchema,
@@ -841,8 +841,8 @@ import {
841
841
  WhiteboardStorageUnavailableErrorSchema,
842
842
  WhiteboardStorageUnavailableErrorWireSchema,
843
843
  createChalkEffectClient
844
- } from "./chunk-UMAE5GCV.js";
845
- import "./chunk-5YPQNMJE.js";
844
+ } from "./chunk-GOSWSXTH.js";
845
+ import "./chunk-XSB2GDRW.js";
846
846
 
847
847
  // src/space-client/effect.ts
848
848
  import { Context, Effect, Exit, Layer, Scope } from "effect";
@@ -7,6 +7,7 @@ declare const ChalkApi_base: HttpApi.HttpApi<"ChalkApi", HttpApiGroup.HttpApiGro
7
7
  readonly tenant_id: import("effect/Schema").brand<import("effect/Schema").String, "TenantId">;
8
8
  }>>, import("effect/Schema").toCodecStringTree<import("effect/Schema").Struct<{
9
9
  readonly allow_partial_remote_tracks: import("effect/Schema").optional<import("effect/Schema").Boolean>;
10
+ readonly replacement_cause: import("effect/Schema").optional<import("effect/Schema").Literals<readonly ["user_pause", "moderation_pause", "sync_recovery_loss", "discovery_absent", "capture_cleanup", "consent_revoked", "publish_failure", "enable_failure", "projection_mismatch", "forced_pause", "local_signaling_failure", "remote_signaling_failure", "dormant_connection", "access_refresh", "receive_stalled"]>>;
10
11
  }>>, import("effect/Schema").toCodecJson<import("effect/Schema").Struct<{
11
12
  readonly connection_id: import("effect/Schema").String;
12
13
  readonly session_description: import("effect/Schema").optional<import("effect/Schema").NullOr<import("effect/Schema").Struct<{
@@ -2433,6 +2434,7 @@ declare const ChalkApi_base: HttpApi.HttpApi<"ChalkApi", HttpApiGroup.HttpApiGro
2433
2434
  readonly tenant_id: import("effect/Schema").brand<import("effect/Schema").String, "TenantId">;
2434
2435
  }>>, never, import("effect/Schema").toCodecJson<import("effect/Schema").Struct<{
2435
2436
  readonly admission: import("effect/Schema").optional<import("effect/Schema").Literals<readonly ["policy", "direct"]>>;
2437
+ readonly identity_external_id: import("effect/Schema").optional<import("effect/Schema").String>;
2436
2438
  readonly identity_id: import("effect/Schema").optional<import("effect/Schema").brand<import("effect/Schema").String, "UUID">>;
2437
2439
  readonly metadata: import("effect/Schema").optional<import("effect/Schema").Unknown>;
2438
2440
  readonly name: import("effect/Schema").String;
@@ -89,6 +89,7 @@ export declare const AccessGrantSchema: Schema.Struct<{
89
89
  export type AccessGrant = typeof AccessGrantSchema.Type;
90
90
  export declare const AdmitEpisodeParticipantRequestSchema: Schema.Struct<{
91
91
  readonly admission: Schema.optional<Schema.Literals<readonly ["policy", "direct"]>>;
92
+ readonly identity_external_id: Schema.optional<Schema.String>;
92
93
  readonly identity_id: Schema.optional<Schema.brand<Schema.String, "UUID">>;
93
94
  readonly metadata: Schema.optional<Schema.Unknown>;
94
95
  readonly name: Schema.String;
@@ -1358,6 +1359,7 @@ export declare const AddCloudflareSFUTracksPathParamsSchema: Schema.Struct<{
1358
1359
  export type AddCloudflareSFUTracksPathParams = typeof AddCloudflareSFUTracksPathParamsSchema.Type;
1359
1360
  export declare const AddCloudflareSFUTracksQueryParamsSchema: Schema.Struct<{
1360
1361
  readonly allow_partial_remote_tracks: Schema.optional<Schema.Boolean>;
1362
+ readonly replacement_cause: Schema.optional<Schema.Literals<readonly ["user_pause", "moderation_pause", "sync_recovery_loss", "discovery_absent", "capture_cleanup", "consent_revoked", "publish_failure", "enable_failure", "projection_mismatch", "forced_pause", "local_signaling_failure", "remote_signaling_failure", "dormant_connection", "access_refresh", "receive_stalled"]>>;
1361
1363
  }>;
1362
1364
  export type AddCloudflareSFUTracksQueryParams = typeof AddCloudflareSFUTracksQueryParamsSchema.Type;
1363
1365
  export declare const AddCloudflareSFUTracksRequestBodySchema: Schema.Struct<{
@@ -1425,6 +1427,7 @@ export declare const AdmitEpisodeParticipantRequestHeadersSchema: Schema.Struct<
1425
1427
  export type AdmitEpisodeParticipantRequestHeaders = typeof AdmitEpisodeParticipantRequestHeadersSchema.Type;
1426
1428
  export declare const AdmitEpisodeParticipantRequestBodySchema: Schema.Struct<{
1427
1429
  readonly admission: Schema.optional<Schema.Literals<readonly ["policy", "direct"]>>;
1430
+ readonly identity_external_id: Schema.optional<Schema.String>;
1428
1431
  readonly identity_id: Schema.optional<Schema.brand<Schema.String, "UUID">>;
1429
1432
  readonly metadata: Schema.optional<Schema.Unknown>;
1430
1433
  readonly name: Schema.String;
@@ -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-BUNSEDXL.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-FD25AMLG.js";
31
+ } from "./chunk-3TGVTP6Z.js";
32
32
  import {
33
33
  createChalkPublicClient,
34
34
  createChalkPublicInviteClient,
35
35
  parseInviteCode
36
- } from "./chunk-LKNT6XFD.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-UMAE5GCV.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";
@@ -1,4 +1,4 @@
1
- import type { ClientMediaPlane, MediaPlaneResult, MediaPlaneTarget, MediaPublication, MediaPublicationSource } from "./plane";
1
+ import type { ClientMediaPlane, LocalPublicationRetirementCause, MediaPlaneResult, MediaPlaneTarget, MediaPublication, MediaPublicationSource } from "./plane";
2
2
  import type { CloudflareSFUBootstrap, CloudflareSFUClientOptions, CloudflareSFURestartOptions, CloudflareSFUSnapshot } from "./types";
3
3
  export declare class CloudflareSFUClient implements ClientMediaPlane {
4
4
  #private;
@@ -7,16 +7,17 @@ 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
- setLocalSourceIntent(source: MediaPublicationSource, enabled: boolean): Promise<void>;
19
- closeForcedLocalPublication(source: MediaPublicationSource): Promise<void>;
18
+ pauseLocalCapture(source: "microphone" | "camera"): Promise<void>;
19
+ setLocalSourceIntent(source: MediaPublicationSource, enabled: boolean, cause?: LocalPublicationRetirementCause): Promise<void>;
20
+ closeForcedLocalPublication(source: MediaPublicationSource, cause?: LocalPublicationRetirementCause): Promise<void>;
20
21
  observeLocalPublications(listener: (publications: readonly MediaPublication[]) => void): () => void;
21
22
  observeRemotePublications(listener: (publications: readonly MediaPublication[]) => void): () => void;
22
23
  restart(input: CloudflareSFUBootstrap | CloudflareSFURestartOptions): Promise<void>;
@@ -10,7 +10,7 @@ import {
10
10
  requireSFUDescription,
11
11
  validatePublicationSnapshot,
12
12
  waitFor
13
- } from "../chunk-FD25AMLG.js";
13
+ } from "../chunk-3TGVTP6Z.js";
14
14
  export {
15
15
  CloudflareSFUClient,
16
16
  CloudflareSFUError,