@livekit/rtc-node 0.13.3 → 0.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/data_streams/index.cjs +25 -0
  2. package/dist/data_streams/index.cjs.map +1 -0
  3. package/dist/data_streams/index.d.cts +11 -0
  4. package/dist/data_streams/index.d.ts +11 -0
  5. package/dist/data_streams/index.d.ts.map +1 -0
  6. package/dist/data_streams/index.js +3 -0
  7. package/dist/data_streams/index.js.map +1 -0
  8. package/dist/data_streams/stream_reader.cjs +145 -0
  9. package/dist/data_streams/stream_reader.cjs.map +1 -0
  10. package/dist/data_streams/stream_reader.d.cts +10 -0
  11. package/dist/data_streams/stream_reader.d.ts +10 -0
  12. package/dist/data_streams/stream_reader.d.ts.map +1 -0
  13. package/dist/data_streams/stream_reader.js +120 -0
  14. package/dist/data_streams/stream_reader.js.map +1 -0
  15. package/dist/data_streams/stream_writer.cjs +51 -0
  16. package/dist/data_streams/stream_writer.cjs.map +1 -0
  17. package/dist/data_streams/stream_writer.d.cts +26 -0
  18. package/dist/data_streams/stream_writer.d.ts +26 -0
  19. package/dist/data_streams/stream_writer.d.ts.map +1 -0
  20. package/dist/data_streams/stream_writer.js +26 -0
  21. package/dist/data_streams/stream_writer.js.map +1 -0
  22. package/dist/data_streams/types.cjs +17 -0
  23. package/dist/data_streams/types.cjs.map +1 -0
  24. package/dist/data_streams/types.d.cts +10 -0
  25. package/dist/data_streams/types.d.ts +10 -0
  26. package/dist/data_streams/types.d.ts.map +1 -0
  27. package/dist/data_streams/types.js +1 -0
  28. package/dist/data_streams/types.js.map +1 -0
  29. package/dist/index.cjs +7 -4
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +4 -0
  32. package/dist/index.d.ts +4 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +1 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/log.cjs +42 -0
  37. package/dist/log.cjs.map +1 -0
  38. package/dist/log.d.cts +7 -0
  39. package/dist/log.d.ts +7 -0
  40. package/dist/log.d.ts.map +1 -0
  41. package/dist/log.js +18 -0
  42. package/dist/log.js.map +1 -0
  43. package/dist/napi/native.d.cjs.map +1 -1
  44. package/dist/napi/native.d.ts +5 -5
  45. package/dist/native.d.ts +5 -5
  46. package/dist/participant.cjs +260 -16
  47. package/dist/participant.cjs.map +1 -1
  48. package/dist/participant.d.cts +40 -6
  49. package/dist/participant.d.ts +40 -6
  50. package/dist/participant.d.ts.map +1 -1
  51. package/dist/participant.js +263 -5
  52. package/dist/participant.js.map +1 -1
  53. package/dist/proto/ffi_pb.cjs +14 -3
  54. package/dist/proto/ffi_pb.cjs.map +1 -1
  55. package/dist/proto/ffi_pb.d.cts +81 -7
  56. package/dist/proto/ffi_pb.d.ts +81 -7
  57. package/dist/proto/ffi_pb.d.ts.map +1 -1
  58. package/dist/proto/ffi_pb.js +15 -4
  59. package/dist/proto/ffi_pb.js.map +1 -1
  60. package/dist/proto/room_pb.cjs +488 -30
  61. package/dist/proto/room_pb.cjs.map +1 -1
  62. package/dist/proto/room_pb.d.cts +412 -50
  63. package/dist/proto/room_pb.d.ts +412 -50
  64. package/dist/proto/room_pb.d.ts.map +1 -1
  65. package/dist/proto/room_pb.js +471 -29
  66. package/dist/proto/room_pb.js.map +1 -1
  67. package/dist/proto/video_frame_pb.cjs.map +1 -1
  68. package/dist/proto/video_frame_pb.d.cts +3 -0
  69. package/dist/proto/video_frame_pb.d.ts +3 -0
  70. package/dist/proto/video_frame_pb.d.ts.map +1 -1
  71. package/dist/proto/video_frame_pb.js.map +1 -1
  72. package/dist/room.cjs +121 -0
  73. package/dist/room.cjs.map +1 -1
  74. package/dist/room.d.cts +17 -2
  75. package/dist/room.d.ts +17 -2
  76. package/dist/room.d.ts.map +1 -1
  77. package/dist/room.js +122 -0
  78. package/dist/room.js.map +1 -1
  79. package/dist/types-BWsKf9LP.d.cts +93 -0
  80. package/dist/types-Ca3IVRvo.d.ts +93 -0
  81. package/dist/utils.cjs +51 -0
  82. package/dist/utils.cjs.map +1 -0
  83. package/dist/utils.d.cts +7 -0
  84. package/dist/utils.d.ts +7 -0
  85. package/dist/utils.d.ts.map +1 -0
  86. package/dist/utils.js +25 -0
  87. package/dist/utils.js.map +1 -0
  88. package/dist/version.cjs +1 -1
  89. package/dist/version.cjs.map +1 -1
  90. package/dist/version.d.cts +1 -1
  91. package/dist/version.d.ts +1 -1
  92. package/dist/version.js +1 -1
  93. package/dist/version.js.map +1 -1
  94. package/dist/video_frame.cjs +2 -0
  95. package/dist/video_frame.cjs.map +1 -1
  96. package/dist/video_frame.d.ts.map +1 -1
  97. package/dist/video_frame.js +2 -0
  98. package/dist/video_frame.js.map +1 -1
  99. package/package.json +9 -7
  100. package/src/data_streams/index.ts +7 -0
  101. package/src/data_streams/stream_reader.ts +166 -0
  102. package/src/data_streams/stream_writer.ts +36 -0
  103. package/src/data_streams/types.ts +61 -0
  104. package/src/index.ts +1 -0
  105. package/src/log.ts +25 -0
  106. package/src/napi/native.d.ts +5 -5
  107. package/src/participant.ts +351 -29
  108. package/src/proto/ffi_pb.ts +86 -1
  109. package/src/proto/room_pb.ts +788 -68
  110. package/src/proto/video_frame_pb.ts +3 -0
  111. package/src/room.ts +141 -0
  112. package/src/utils.ts +33 -0
  113. package/src/version.ts +1 -1
  114. package/src/video_frame.ts +2 -0
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var data_streams_exports = {};
17
+ module.exports = __toCommonJS(data_streams_exports);
18
+ __reExport(data_streams_exports, require("./stream_reader.cjs"), module.exports);
19
+ __reExport(data_streams_exports, require("./stream_writer.cjs"), module.exports);
20
+ // Annotate the CommonJS export names for ESM import in node:
21
+ 0 && (module.exports = {
22
+ ...require("./stream_reader.cjs"),
23
+ ...require("./stream_writer.cjs")
24
+ });
25
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data_streams/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './stream_reader.js';\nexport * from './stream_writer.js';\nexport type * from './types.js';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAIA,iCAAc,+BAJd;AAKA,iCAAc,+BALd;","names":[]}
@@ -0,0 +1,11 @@
1
+ export { a as BaseStreamInfo, g as ByteStreamHandler, b as ByteStreamInfo, f as ByteStreamOptions, B as ByteStreamReader, D as DataStreamOptions, S as StreamController, d as TextStreamChunk, h as TextStreamHandler, c as TextStreamInfo, e as TextStreamOptions, T as TextStreamReader } from '../types-BWsKf9LP.cjs';
2
+ export { ByteStreamWriter, TextStreamWriter } from './stream_writer.cjs';
3
+ import '../proto/room_pb.cjs';
4
+ import '@bufbuild/protobuf';
5
+ import '../proto/participant_pb.cjs';
6
+ import '../proto/handle_pb.cjs';
7
+ import '../proto/track_pb.cjs';
8
+ import '../proto/stats_pb.cjs';
9
+ import '../proto/e2ee_pb.cjs';
10
+ import '../proto/video_frame_pb.cjs';
11
+ import 'node:stream/web';
@@ -0,0 +1,11 @@
1
+ export { a as BaseStreamInfo, g as ByteStreamHandler, b as ByteStreamInfo, f as ByteStreamOptions, B as ByteStreamReader, D as DataStreamOptions, S as StreamController, d as TextStreamChunk, h as TextStreamHandler, c as TextStreamInfo, e as TextStreamOptions, T as TextStreamReader } from '../types-Ca3IVRvo.js';
2
+ export { ByteStreamWriter, TextStreamWriter } from './stream_writer.js';
3
+ import '../proto/room_pb.js';
4
+ import '@bufbuild/protobuf';
5
+ import '../proto/participant_pb.js';
6
+ import '../proto/handle_pb.js';
7
+ import '../proto/track_pb.js';
8
+ import '../proto/stats_pb.js';
9
+ import '../proto/e2ee_pb.js';
10
+ import '../proto/video_frame_pb.js';
11
+ import 'node:stream/web';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data_streams/index.ts"],"names":[],"mappings":"AAIA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,mBAAmB,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./stream_reader.js";
2
+ export * from "./stream_writer.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data_streams/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './stream_reader.js';\nexport * from './stream_writer.js';\nexport type * from './types.js';\n"],"mappings":"AAIA,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var stream_reader_exports = {};
20
+ __export(stream_reader_exports, {
21
+ ByteStreamReader: () => ByteStreamReader,
22
+ TextStreamReader: () => TextStreamReader
23
+ });
24
+ module.exports = __toCommonJS(stream_reader_exports);
25
+ var import_log = require("../log.cjs");
26
+ var import_utils = require("../utils.cjs");
27
+ class BaseStreamReader {
28
+ get info() {
29
+ return this._info;
30
+ }
31
+ constructor(info, stream, totalByteSize) {
32
+ this.reader = stream;
33
+ this.totalByteSize = totalByteSize;
34
+ this._info = info;
35
+ this.bytesReceived = 0;
36
+ }
37
+ }
38
+ class ByteStreamReader extends BaseStreamReader {
39
+ handleChunkReceived(chunk) {
40
+ var _a;
41
+ this.bytesReceived += chunk.content.byteLength;
42
+ const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : void 0;
43
+ (_a = this.onProgress) == null ? void 0 : _a.call(this, currentProgress);
44
+ }
45
+ [Symbol.asyncIterator]() {
46
+ const reader = this.reader.getReader();
47
+ return {
48
+ next: async () => {
49
+ try {
50
+ const { done, value } = await reader.read();
51
+ if (done) {
52
+ return { done: true, value: void 0 };
53
+ } else {
54
+ this.handleChunkReceived(value);
55
+ return { done: false, value: value.content };
56
+ }
57
+ } catch (error) {
58
+ import_log.log.error("error processing stream update", error);
59
+ return { done: true, value: void 0 };
60
+ }
61
+ },
62
+ return() {
63
+ reader.releaseLock();
64
+ return { done: true, value: void 0 };
65
+ }
66
+ };
67
+ }
68
+ async readAll() {
69
+ const chunks = /* @__PURE__ */ new Set();
70
+ for await (const chunk of this) {
71
+ chunks.add(chunk);
72
+ }
73
+ return Array.from(chunks);
74
+ }
75
+ }
76
+ class TextStreamReader extends BaseStreamReader {
77
+ /**
78
+ * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string
79
+ * that has been received up to the current point in time.
80
+ */
81
+ constructor(info, stream, totalChunkCount) {
82
+ super(info, stream, totalChunkCount);
83
+ this.receivedChunks = /* @__PURE__ */ new Map();
84
+ }
85
+ handleChunkReceived(chunk) {
86
+ var _a;
87
+ const index = (0, import_utils.bigIntToNumber)(chunk.chunkIndex);
88
+ const previousChunkAtIndex = this.receivedChunks.get(index);
89
+ if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) {
90
+ return;
91
+ }
92
+ this.receivedChunks.set(index, chunk);
93
+ const currentProgress = this.totalByteSize ? this.receivedChunks.size / this.totalByteSize : void 0;
94
+ (_a = this.onProgress) == null ? void 0 : _a.call(this, currentProgress);
95
+ }
96
+ /**
97
+ * Async iterator implementation to allow usage of `for await...of` syntax.
98
+ * Yields structured chunks from the stream.
99
+ *
100
+ */
101
+ [Symbol.asyncIterator]() {
102
+ const reader = this.reader.getReader();
103
+ const decoder = new TextDecoder();
104
+ return {
105
+ next: async () => {
106
+ try {
107
+ const { done, value } = await reader.read();
108
+ if (done) {
109
+ return { done: true, value: void 0 };
110
+ } else {
111
+ this.handleChunkReceived(value);
112
+ return {
113
+ done: false,
114
+ value: {
115
+ index: (0, import_utils.bigIntToNumber)(value.chunkIndex),
116
+ current: decoder.decode(value.content),
117
+ collected: Array.from(this.receivedChunks.values()).sort((a, b) => (0, import_utils.bigIntToNumber)(a.chunkIndex) - (0, import_utils.bigIntToNumber)(b.chunkIndex)).map((chunk) => decoder.decode(chunk.content)).join("")
118
+ }
119
+ };
120
+ }
121
+ } catch (error) {
122
+ import_log.log.error("error processing stream update", error);
123
+ return { done: true, value: void 0 };
124
+ }
125
+ },
126
+ return() {
127
+ reader.releaseLock();
128
+ return { done: true, value: void 0 };
129
+ }
130
+ };
131
+ }
132
+ async readAll() {
133
+ let latestString = "";
134
+ for await (const { collected } of this) {
135
+ latestString = collected;
136
+ }
137
+ return latestString;
138
+ }
139
+ }
140
+ // Annotate the CommonJS export names for ESM import in node:
141
+ 0 && (module.exports = {
142
+ ByteStreamReader,
143
+ TextStreamReader
144
+ });
145
+ //# sourceMappingURL=stream_reader.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data_streams/stream_reader.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { ReadableStream } from 'node:stream/web';\nimport { log } from '../log.js';\nimport type { DataStream_Chunk } from '../proto/room_pb.js';\nimport { bigIntToNumber } from '../utils.js';\nimport type { BaseStreamInfo, ByteStreamInfo, TextStreamChunk, TextStreamInfo } from './types.js';\n\nabstract class BaseStreamReader<T extends BaseStreamInfo> {\n protected reader: ReadableStream<DataStream_Chunk>;\n\n protected totalByteSize?: number;\n\n protected _info: T;\n\n protected bytesReceived: number;\n\n get info() {\n return this._info;\n }\n\n constructor(info: T, stream: ReadableStream<DataStream_Chunk>, totalByteSize?: number) {\n this.reader = stream;\n this.totalByteSize = totalByteSize;\n this._info = info;\n this.bytesReceived = 0;\n }\n\n protected abstract handleChunkReceived(chunk: DataStream_Chunk): void;\n\n onProgress?: (progress: number | undefined) => void;\n\n abstract readAll(): Promise<string | Array<Uint8Array>>;\n}\n\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nexport class ByteStreamReader extends BaseStreamReader<ByteStreamInfo> {\n protected handleChunkReceived(chunk: DataStream_Chunk) {\n this.bytesReceived += chunk.content!.byteLength;\n const currentProgress = this.totalByteSize\n ? this.bytesReceived / this.totalByteSize\n : undefined;\n this.onProgress?.(currentProgress);\n }\n\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n\n return {\n next: async (): Promise<IteratorResult<Uint8Array>> => {\n try {\n const { done, value } = await reader.read();\n if (done) {\n return { done: true, value: undefined as any };\n } else {\n this.handleChunkReceived(value);\n return { done: false, value: value.content! };\n }\n } catch (error) {\n log.error('error processing stream update', error);\n return { done: true, value: undefined };\n }\n },\n\n return(): IteratorResult<Uint8Array> {\n reader.releaseLock();\n return { done: true, value: undefined };\n },\n };\n }\n\n async readAll(): Promise<Array<Uint8Array>> {\n const chunks: Set<Uint8Array> = new Set();\n for await (const chunk of this) {\n chunks.add(chunk);\n }\n return Array.from(chunks);\n }\n}\n\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nexport class TextStreamReader extends BaseStreamReader<TextStreamInfo> {\n private receivedChunks: Map<number, DataStream_Chunk>;\n\n /**\n * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string\n * that has been received up to the current point in time.\n */\n constructor(\n info: TextStreamInfo,\n stream: ReadableStream<DataStream_Chunk>,\n totalChunkCount?: number,\n ) {\n super(info, stream, totalChunkCount);\n this.receivedChunks = new Map();\n }\n\n protected handleChunkReceived(chunk: DataStream_Chunk) {\n const index = bigIntToNumber(chunk.chunkIndex!);\n const previousChunkAtIndex = this.receivedChunks.get(index!);\n if (previousChunkAtIndex && previousChunkAtIndex.version! > chunk.version!) {\n // we have a newer version already, dropping the old one\n return;\n }\n this.receivedChunks.set(index, chunk);\n const currentProgress = this.totalByteSize\n ? this.receivedChunks.size / this.totalByteSize\n : undefined;\n this.onProgress?.(currentProgress);\n }\n\n /**\n * Async iterator implementation to allow usage of `for await...of` syntax.\n * Yields structured chunks from the stream.\n *\n */\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n const decoder = new TextDecoder();\n\n return {\n next: async (): Promise<IteratorResult<TextStreamChunk>> => {\n try {\n const { done, value } = await reader.read();\n if (done) {\n return { done: true, value: undefined };\n } else {\n this.handleChunkReceived(value);\n return {\n done: false,\n value: {\n index: bigIntToNumber(value.chunkIndex)!,\n current: decoder.decode(value.content!),\n collected: Array.from(this.receivedChunks.values())\n .sort((a, b) => bigIntToNumber(a.chunkIndex!) - bigIntToNumber(b.chunkIndex!))\n .map((chunk) => decoder.decode(chunk.content!))\n .join(''),\n },\n };\n }\n } catch (error) {\n log.error('error processing stream update', error);\n return { done: true, value: undefined };\n }\n },\n\n return(): IteratorResult<TextStreamChunk> {\n reader.releaseLock();\n return { done: true, value: undefined };\n },\n };\n }\n\n async readAll(): Promise<string> {\n let latestString: string = '';\n for await (const { collected } of this) {\n latestString = collected;\n }\n return latestString;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,10 @@
1
+ import 'node:stream/web';
2
+ import '../proto/room_pb.cjs';
3
+ export { B as ByteStreamReader, T as TextStreamReader } from '../types-BWsKf9LP.cjs';
4
+ import '@bufbuild/protobuf';
5
+ import '../proto/participant_pb.cjs';
6
+ import '../proto/handle_pb.cjs';
7
+ import '../proto/track_pb.cjs';
8
+ import '../proto/stats_pb.cjs';
9
+ import '../proto/e2ee_pb.cjs';
10
+ import '../proto/video_frame_pb.cjs';
@@ -0,0 +1,10 @@
1
+ import 'node:stream/web';
2
+ import '../proto/room_pb.js';
3
+ export { B as ByteStreamReader, T as TextStreamReader } from '../types-Ca3IVRvo.js';
4
+ import '@bufbuild/protobuf';
5
+ import '../proto/participant_pb.js';
6
+ import '../proto/handle_pb.js';
7
+ import '../proto/track_pb.js';
8
+ import '../proto/stats_pb.js';
9
+ import '../proto/e2ee_pb.js';
10
+ import '../proto/video_frame_pb.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream_reader.d.ts","sourceRoot":"","sources":["../../src/data_streams/stream_reader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElG,uBAAe,gBAAgB,CAAC,CAAC,SAAS,cAAc;IACtD,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAEnD,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEjC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAEnB,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAEhC,IAAI,IAAI,MAEP;gBAEW,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM;IAOrF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAErE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAEpD,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB,CAAC,cAAc,CAAC;IACpE,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB;IAQrD,CAAC,MAAM,CAAC,aAAa,CAAC;oBAIF,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;kBAezC,cAAc,CAAC,UAAU,CAAC;;IAOlC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;CAO5C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB,CAAC,cAAc,CAAC;IACpE,OAAO,CAAC,cAAc,CAAgC;IAEtD;;;OAGG;gBAED,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,EACxC,eAAe,CAAC,EAAE,MAAM;IAM1B,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB;IAcrD;;;;OAIG;IACH,CAAC,MAAM,CAAC,aAAa,CAAC;oBAKF,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;kBAyB9C,cAAc,CAAC,eAAe,CAAC;;IAOvC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAOjC"}
@@ -0,0 +1,120 @@
1
+ import { log } from "../log.js";
2
+ import { bigIntToNumber } from "../utils.js";
3
+ class BaseStreamReader {
4
+ get info() {
5
+ return this._info;
6
+ }
7
+ constructor(info, stream, totalByteSize) {
8
+ this.reader = stream;
9
+ this.totalByteSize = totalByteSize;
10
+ this._info = info;
11
+ this.bytesReceived = 0;
12
+ }
13
+ }
14
+ class ByteStreamReader extends BaseStreamReader {
15
+ handleChunkReceived(chunk) {
16
+ var _a;
17
+ this.bytesReceived += chunk.content.byteLength;
18
+ const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : void 0;
19
+ (_a = this.onProgress) == null ? void 0 : _a.call(this, currentProgress);
20
+ }
21
+ [Symbol.asyncIterator]() {
22
+ const reader = this.reader.getReader();
23
+ return {
24
+ next: async () => {
25
+ try {
26
+ const { done, value } = await reader.read();
27
+ if (done) {
28
+ return { done: true, value: void 0 };
29
+ } else {
30
+ this.handleChunkReceived(value);
31
+ return { done: false, value: value.content };
32
+ }
33
+ } catch (error) {
34
+ log.error("error processing stream update", error);
35
+ return { done: true, value: void 0 };
36
+ }
37
+ },
38
+ return() {
39
+ reader.releaseLock();
40
+ return { done: true, value: void 0 };
41
+ }
42
+ };
43
+ }
44
+ async readAll() {
45
+ const chunks = /* @__PURE__ */ new Set();
46
+ for await (const chunk of this) {
47
+ chunks.add(chunk);
48
+ }
49
+ return Array.from(chunks);
50
+ }
51
+ }
52
+ class TextStreamReader extends BaseStreamReader {
53
+ /**
54
+ * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string
55
+ * that has been received up to the current point in time.
56
+ */
57
+ constructor(info, stream, totalChunkCount) {
58
+ super(info, stream, totalChunkCount);
59
+ this.receivedChunks = /* @__PURE__ */ new Map();
60
+ }
61
+ handleChunkReceived(chunk) {
62
+ var _a;
63
+ const index = bigIntToNumber(chunk.chunkIndex);
64
+ const previousChunkAtIndex = this.receivedChunks.get(index);
65
+ if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) {
66
+ return;
67
+ }
68
+ this.receivedChunks.set(index, chunk);
69
+ const currentProgress = this.totalByteSize ? this.receivedChunks.size / this.totalByteSize : void 0;
70
+ (_a = this.onProgress) == null ? void 0 : _a.call(this, currentProgress);
71
+ }
72
+ /**
73
+ * Async iterator implementation to allow usage of `for await...of` syntax.
74
+ * Yields structured chunks from the stream.
75
+ *
76
+ */
77
+ [Symbol.asyncIterator]() {
78
+ const reader = this.reader.getReader();
79
+ const decoder = new TextDecoder();
80
+ return {
81
+ next: async () => {
82
+ try {
83
+ const { done, value } = await reader.read();
84
+ if (done) {
85
+ return { done: true, value: void 0 };
86
+ } else {
87
+ this.handleChunkReceived(value);
88
+ return {
89
+ done: false,
90
+ value: {
91
+ index: bigIntToNumber(value.chunkIndex),
92
+ current: decoder.decode(value.content),
93
+ collected: Array.from(this.receivedChunks.values()).sort((a, b) => bigIntToNumber(a.chunkIndex) - bigIntToNumber(b.chunkIndex)).map((chunk) => decoder.decode(chunk.content)).join("")
94
+ }
95
+ };
96
+ }
97
+ } catch (error) {
98
+ log.error("error processing stream update", error);
99
+ return { done: true, value: void 0 };
100
+ }
101
+ },
102
+ return() {
103
+ reader.releaseLock();
104
+ return { done: true, value: void 0 };
105
+ }
106
+ };
107
+ }
108
+ async readAll() {
109
+ let latestString = "";
110
+ for await (const { collected } of this) {
111
+ latestString = collected;
112
+ }
113
+ return latestString;
114
+ }
115
+ }
116
+ export {
117
+ ByteStreamReader,
118
+ TextStreamReader
119
+ };
120
+ //# sourceMappingURL=stream_reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data_streams/stream_reader.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { ReadableStream } from 'node:stream/web';\nimport { log } from '../log.js';\nimport type { DataStream_Chunk } from '../proto/room_pb.js';\nimport { bigIntToNumber } from '../utils.js';\nimport type { BaseStreamInfo, ByteStreamInfo, TextStreamChunk, TextStreamInfo } from './types.js';\n\nabstract class BaseStreamReader<T extends BaseStreamInfo> {\n protected reader: ReadableStream<DataStream_Chunk>;\n\n protected totalByteSize?: number;\n\n protected _info: T;\n\n protected bytesReceived: number;\n\n get info() {\n return this._info;\n }\n\n constructor(info: T, stream: ReadableStream<DataStream_Chunk>, totalByteSize?: number) {\n this.reader = stream;\n this.totalByteSize = totalByteSize;\n this._info = info;\n this.bytesReceived = 0;\n }\n\n protected abstract handleChunkReceived(chunk: DataStream_Chunk): void;\n\n onProgress?: (progress: number | undefined) => void;\n\n abstract readAll(): Promise<string | Array<Uint8Array>>;\n}\n\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nexport class ByteStreamReader extends BaseStreamReader<ByteStreamInfo> {\n protected handleChunkReceived(chunk: DataStream_Chunk) {\n this.bytesReceived += chunk.content!.byteLength;\n const currentProgress = this.totalByteSize\n ? this.bytesReceived / this.totalByteSize\n : undefined;\n this.onProgress?.(currentProgress);\n }\n\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n\n return {\n next: async (): Promise<IteratorResult<Uint8Array>> => {\n try {\n const { done, value } = await reader.read();\n if (done) {\n return { done: true, value: undefined as any };\n } else {\n this.handleChunkReceived(value);\n return { done: false, value: value.content! };\n }\n } catch (error) {\n log.error('error processing stream update', error);\n return { done: true, value: undefined };\n }\n },\n\n return(): IteratorResult<Uint8Array> {\n reader.releaseLock();\n return { done: true, value: undefined };\n },\n };\n }\n\n async readAll(): Promise<Array<Uint8Array>> {\n const chunks: Set<Uint8Array> = new Set();\n for await (const chunk of this) {\n chunks.add(chunk);\n }\n return Array.from(chunks);\n }\n}\n\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nexport class TextStreamReader extends BaseStreamReader<TextStreamInfo> {\n private receivedChunks: Map<number, DataStream_Chunk>;\n\n /**\n * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string\n * that has been received up to the current point in time.\n */\n constructor(\n info: TextStreamInfo,\n stream: ReadableStream<DataStream_Chunk>,\n totalChunkCount?: number,\n ) {\n super(info, stream, totalChunkCount);\n this.receivedChunks = new Map();\n }\n\n protected handleChunkReceived(chunk: DataStream_Chunk) {\n const index = bigIntToNumber(chunk.chunkIndex!);\n const previousChunkAtIndex = this.receivedChunks.get(index!);\n if (previousChunkAtIndex && previousChunkAtIndex.version! > chunk.version!) {\n // we have a newer version already, dropping the old one\n return;\n }\n this.receivedChunks.set(index, chunk);\n const currentProgress = this.totalByteSize\n ? this.receivedChunks.size / this.totalByteSize\n : undefined;\n this.onProgress?.(currentProgress);\n }\n\n /**\n * Async iterator implementation to allow usage of `for await...of` syntax.\n * Yields structured chunks from the stream.\n *\n */\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n const decoder = new TextDecoder();\n\n return {\n next: async (): Promise<IteratorResult<TextStreamChunk>> => {\n try {\n const { done, value } = await reader.read();\n if (done) {\n return { done: true, value: undefined };\n } else {\n this.handleChunkReceived(value);\n return {\n done: false,\n value: {\n index: bigIntToNumber(value.chunkIndex)!,\n current: decoder.decode(value.content!),\n collected: Array.from(this.receivedChunks.values())\n .sort((a, b) => bigIntToNumber(a.chunkIndex!) - bigIntToNumber(b.chunkIndex!))\n .map((chunk) => decoder.decode(chunk.content!))\n .join(''),\n },\n };\n }\n } catch (error) {\n log.error('error processing stream update', error);\n return { done: true, value: undefined };\n }\n },\n\n return(): IteratorResult<TextStreamChunk> {\n reader.releaseLock();\n return { done: true, value: undefined };\n },\n };\n }\n\n async readAll(): Promise<string> {\n let latestString: string = '';\n for await (const { collected } of this) {\n latestString = collected;\n }\n return latestString;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var stream_writer_exports = {};
20
+ __export(stream_writer_exports, {
21
+ ByteStreamWriter: () => ByteStreamWriter,
22
+ TextStreamWriter: () => TextStreamWriter
23
+ });
24
+ module.exports = __toCommonJS(stream_writer_exports);
25
+ class BaseStreamWriter {
26
+ constructor(writableStream, info, onClose) {
27
+ this.writableStream = writableStream;
28
+ this.defaultWriter = writableStream.getWriter();
29
+ this.onClose = onClose;
30
+ this.info = info;
31
+ }
32
+ write(chunk, chunkIndex) {
33
+ return this.defaultWriter.write([chunk, chunkIndex]);
34
+ }
35
+ async close() {
36
+ var _a;
37
+ await this.defaultWriter.close();
38
+ this.defaultWriter.releaseLock();
39
+ (_a = this.onClose) == null ? void 0 : _a.call(this);
40
+ }
41
+ }
42
+ class TextStreamWriter extends BaseStreamWriter {
43
+ }
44
+ class ByteStreamWriter extends BaseStreamWriter {
45
+ }
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ ByteStreamWriter,
49
+ TextStreamWriter
50
+ });
51
+ //# sourceMappingURL=stream_writer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data_streams/stream_writer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { WritableStream } from 'node:stream/web';\nimport type { BaseStreamInfo, ByteStreamInfo, TextStreamInfo } from './types.js';\n\nclass BaseStreamWriter<T, InfoType extends BaseStreamInfo> {\n protected writableStream: WritableStream<[T, number?]>;\n\n protected defaultWriter: WritableStreamDefaultWriter<[T, number?]>;\n\n protected onClose?: () => void;\n\n readonly info: InfoType;\n\n constructor(writableStream: WritableStream<[T, number?]>, info: InfoType, onClose?: () => void) {\n this.writableStream = writableStream;\n this.defaultWriter = writableStream.getWriter();\n this.onClose = onClose;\n this.info = info;\n }\n\n write(chunk: T, chunkIndex?: number): Promise<void> {\n return this.defaultWriter.write([chunk, chunkIndex]);\n }\n\n async close() {\n await this.defaultWriter.close();\n this.defaultWriter.releaseLock();\n this.onClose?.();\n }\n}\n\nexport class TextStreamWriter extends BaseStreamWriter<string, TextStreamInfo> {}\n\nexport class ByteStreamWriter extends BaseStreamWriter<Uint8Array, ByteStreamInfo> {}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,MAAM,iBAAqD;AAAA,EASzD,YAAY,gBAA8C,MAAgB,SAAsB;AAC9F,SAAK,iBAAiB;AACtB,SAAK,gBAAgB,eAAe,UAAU;AAC9C,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,OAAU,YAAoC;AAClD,WAAO,KAAK,cAAc,MAAM,CAAC,OAAO,UAAU,CAAC;AAAA,EACrD;AAAA,EAEA,MAAM,QAAQ;AA1BhB;AA2BI,UAAM,KAAK,cAAc,MAAM;AAC/B,SAAK,cAAc,YAAY;AAC/B,eAAK,YAAL;AAAA,EACF;AACF;AAEO,MAAM,yBAAyB,iBAAyC;AAAC;AAEzE,MAAM,yBAAyB,iBAA6C;AAAC;","names":[]}
@@ -0,0 +1,26 @@
1
+ import { a as BaseStreamInfo, c as TextStreamInfo, b as ByteStreamInfo } from '../types-BWsKf9LP.cjs';
2
+ import { WritableStream } from 'node:stream/web';
3
+ import '../proto/room_pb.cjs';
4
+ import '@bufbuild/protobuf';
5
+ import '../proto/participant_pb.cjs';
6
+ import '../proto/handle_pb.cjs';
7
+ import '../proto/track_pb.cjs';
8
+ import '../proto/stats_pb.cjs';
9
+ import '../proto/e2ee_pb.cjs';
10
+ import '../proto/video_frame_pb.cjs';
11
+
12
+ declare class BaseStreamWriter<T, InfoType extends BaseStreamInfo> {
13
+ protected writableStream: WritableStream<[T, number?]>;
14
+ protected defaultWriter: WritableStreamDefaultWriter<[T, number?]>;
15
+ protected onClose?: () => void;
16
+ readonly info: InfoType;
17
+ constructor(writableStream: WritableStream<[T, number?]>, info: InfoType, onClose?: () => void);
18
+ write(chunk: T, chunkIndex?: number): Promise<void>;
19
+ close(): Promise<void>;
20
+ }
21
+ declare class TextStreamWriter extends BaseStreamWriter<string, TextStreamInfo> {
22
+ }
23
+ declare class ByteStreamWriter extends BaseStreamWriter<Uint8Array, ByteStreamInfo> {
24
+ }
25
+
26
+ export { ByteStreamWriter, TextStreamWriter };
@@ -0,0 +1,26 @@
1
+ import { a as BaseStreamInfo, c as TextStreamInfo, b as ByteStreamInfo } from '../types-Ca3IVRvo.js';
2
+ import { WritableStream } from 'node:stream/web';
3
+ import '../proto/room_pb.js';
4
+ import '@bufbuild/protobuf';
5
+ import '../proto/participant_pb.js';
6
+ import '../proto/handle_pb.js';
7
+ import '../proto/track_pb.js';
8
+ import '../proto/stats_pb.js';
9
+ import '../proto/e2ee_pb.js';
10
+ import '../proto/video_frame_pb.js';
11
+
12
+ declare class BaseStreamWriter<T, InfoType extends BaseStreamInfo> {
13
+ protected writableStream: WritableStream<[T, number?]>;
14
+ protected defaultWriter: WritableStreamDefaultWriter<[T, number?]>;
15
+ protected onClose?: () => void;
16
+ readonly info: InfoType;
17
+ constructor(writableStream: WritableStream<[T, number?]>, info: InfoType, onClose?: () => void);
18
+ write(chunk: T, chunkIndex?: number): Promise<void>;
19
+ close(): Promise<void>;
20
+ }
21
+ declare class TextStreamWriter extends BaseStreamWriter<string, TextStreamInfo> {
22
+ }
23
+ declare class ByteStreamWriter extends BaseStreamWriter<Uint8Array, ByteStreamInfo> {
24
+ }
25
+
26
+ export { ByteStreamWriter, TextStreamWriter };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream_writer.d.ts","sourceRoot":"","sources":["../../src/data_streams/stream_writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjF,cAAM,gBAAgB,CAAC,CAAC,EAAE,QAAQ,SAAS,cAAc;IACvD,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEvD,SAAS,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEnE,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAEZ,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI;IAO9F,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,KAAK;CAKZ;AAED,qBAAa,gBAAiB,SAAQ,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC;CAAG;AAEjF,qBAAa,gBAAiB,SAAQ,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC;CAAG"}
@@ -0,0 +1,26 @@
1
+ class BaseStreamWriter {
2
+ constructor(writableStream, info, onClose) {
3
+ this.writableStream = writableStream;
4
+ this.defaultWriter = writableStream.getWriter();
5
+ this.onClose = onClose;
6
+ this.info = info;
7
+ }
8
+ write(chunk, chunkIndex) {
9
+ return this.defaultWriter.write([chunk, chunkIndex]);
10
+ }
11
+ async close() {
12
+ var _a;
13
+ await this.defaultWriter.close();
14
+ this.defaultWriter.releaseLock();
15
+ (_a = this.onClose) == null ? void 0 : _a.call(this);
16
+ }
17
+ }
18
+ class TextStreamWriter extends BaseStreamWriter {
19
+ }
20
+ class ByteStreamWriter extends BaseStreamWriter {
21
+ }
22
+ export {
23
+ ByteStreamWriter,
24
+ TextStreamWriter
25
+ };
26
+ //# sourceMappingURL=stream_writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data_streams/stream_writer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { WritableStream } from 'node:stream/web';\nimport type { BaseStreamInfo, ByteStreamInfo, TextStreamInfo } from './types.js';\n\nclass BaseStreamWriter<T, InfoType extends BaseStreamInfo> {\n protected writableStream: WritableStream<[T, number?]>;\n\n protected defaultWriter: WritableStreamDefaultWriter<[T, number?]>;\n\n protected onClose?: () => void;\n\n readonly info: InfoType;\n\n constructor(writableStream: WritableStream<[T, number?]>, info: InfoType, onClose?: () => void) {\n this.writableStream = writableStream;\n this.defaultWriter = writableStream.getWriter();\n this.onClose = onClose;\n this.info = info;\n }\n\n write(chunk: T, chunkIndex?: number): Promise<void> {\n return this.defaultWriter.write([chunk, chunkIndex]);\n }\n\n async close() {\n await this.defaultWriter.close();\n this.defaultWriter.releaseLock();\n this.onClose?.();\n }\n}\n\nexport class TextStreamWriter extends BaseStreamWriter<string, TextStreamInfo> {}\n\nexport class ByteStreamWriter extends BaseStreamWriter<Uint8Array, ByteStreamInfo> {}\n"],"mappings":"AAMA,MAAM,iBAAqD;AAAA,EASzD,YAAY,gBAA8C,MAAgB,SAAsB;AAC9F,SAAK,iBAAiB;AACtB,SAAK,gBAAgB,eAAe,UAAU;AAC9C,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,OAAU,YAAoC;AAClD,WAAO,KAAK,cAAc,MAAM,CAAC,OAAO,UAAU,CAAC;AAAA,EACrD;AAAA,EAEA,MAAM,QAAQ;AA1BhB;AA2BI,UAAM,KAAK,cAAc,MAAM;AAC/B,SAAK,cAAc,YAAY;AAC/B,eAAK,YAAL;AAAA,EACF;AACF;AAEO,MAAM,yBAAyB,iBAAyC;AAAC;AAEzE,MAAM,yBAAyB,iBAA6C;AAAC;","names":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
17
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data_streams/types.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { DataStream_Chunk, DataStream_Header } from '../proto/room_pb.js';\nimport type { ByteStreamReader, TextStreamReader } from './stream_reader.js';\n\nexport interface StreamController<T extends DataStream_Chunk> {\n header: DataStream_Header;\n controller: ReadableStreamDefaultController<T>;\n startTime: number;\n endTime?: number;\n}\n\nexport interface BaseStreamInfo {\n streamId: string;\n mimeType: string;\n topic: string;\n timestamp: number;\n /** total size in bytes for finite streams and undefined for streams of unknown size */\n totalSize?: number;\n attributes?: Record<string, string>;\n}\n\nexport type ByteStreamInfo = BaseStreamInfo & {\n name: string;\n};\n\nexport type TextStreamInfo = BaseStreamInfo;\n\nexport type TextStreamChunk = {\n index: number;\n current: string;\n collected: string;\n};\n\nexport interface DataStreamOptions {\n topic?: string;\n destinationIdentities?: Array<string>;\n attributes?: Record<string, string>;\n mimeType?: string;\n}\n\nexport interface TextStreamOptions extends DataStreamOptions {\n // replyToMessageId?: string;\n attachments?: [];\n}\n\nexport interface ByteStreamOptions extends DataStreamOptions {\n name?: string;\n onProgress?: (progress: number) => void;\n}\n\nexport type ByteStreamHandler = (\n reader: ByteStreamReader,\n participantInfo: { identity: string },\n) => void;\n\nexport type TextStreamHandler = (\n reader: TextStreamReader,\n participantInfo: { identity: string },\n) => void;\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1,10 @@
1
+ import '../proto/room_pb.cjs';
2
+ export { a as BaseStreamInfo, g as ByteStreamHandler, b as ByteStreamInfo, f as ByteStreamOptions, D as DataStreamOptions, S as StreamController, d as TextStreamChunk, h as TextStreamHandler, c as TextStreamInfo, e as TextStreamOptions } from '../types-BWsKf9LP.cjs';
3
+ import '@bufbuild/protobuf';
4
+ import '../proto/participant_pb.cjs';
5
+ import '../proto/handle_pb.cjs';
6
+ import '../proto/track_pb.cjs';
7
+ import '../proto/stats_pb.cjs';
8
+ import '../proto/e2ee_pb.cjs';
9
+ import '../proto/video_frame_pb.cjs';
10
+ import 'node:stream/web';
@@ -0,0 +1,10 @@
1
+ import '../proto/room_pb.js';
2
+ export { a as BaseStreamInfo, g as ByteStreamHandler, b as ByteStreamInfo, f as ByteStreamOptions, D as DataStreamOptions, S as StreamController, d as TextStreamChunk, h as TextStreamHandler, c as TextStreamInfo, e as TextStreamOptions } from '../types-Ca3IVRvo.js';
3
+ import '@bufbuild/protobuf';
4
+ import '../proto/participant_pb.js';
5
+ import '../proto/handle_pb.js';
6
+ import '../proto/track_pb.js';
7
+ import '../proto/stats_pb.js';
8
+ import '../proto/e2ee_pb.js';
9
+ import '../proto/video_frame_pb.js';
10
+ import 'node:stream/web';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data_streams/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,gBAAgB;IAC1D,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAE1D,WAAW,CAAC,EAAE,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,MAAM,EAAE,gBAAgB,EACxB,eAAe,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,KAClC,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAC9B,MAAM,EAAE,gBAAgB,EACxB,eAAe,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,KAClC,IAAI,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}