@waitaya.buc/client-js 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +179 -0
  2. package/dist/adapters/livekit/api/recording.api.d.ts +15 -0
  3. package/dist/adapters/livekit/api/recording.api.d.ts.map +1 -0
  4. package/dist/adapters/livekit/api/recording.api.js +61 -0
  5. package/dist/adapters/livekit/api/recording.api.js.map +1 -0
  6. package/dist/adapters/livekit/index.d.ts +18 -0
  7. package/dist/adapters/livekit/index.d.ts.map +1 -0
  8. package/dist/adapters/livekit/index.js +26 -0
  9. package/dist/adapters/livekit/index.js.map +1 -0
  10. package/dist/adapters/livekit/livekit.adapter.d.ts +85 -0
  11. package/dist/adapters/livekit/livekit.adapter.d.ts.map +1 -0
  12. package/dist/adapters/livekit/livekit.adapter.js +531 -0
  13. package/dist/adapters/livekit/livekit.adapter.js.map +1 -0
  14. package/dist/adapters/livekit/livekit.mapper.d.ts +36 -0
  15. package/dist/adapters/livekit/livekit.mapper.d.ts.map +1 -0
  16. package/dist/adapters/livekit/livekit.mapper.js +108 -0
  17. package/dist/adapters/livekit/livekit.mapper.js.map +1 -0
  18. package/dist/adapters/livekit/livekit.types.d.ts +22 -0
  19. package/dist/adapters/livekit/livekit.types.d.ts.map +1 -0
  20. package/dist/adapters/livekit/livekit.types.js +10 -0
  21. package/dist/adapters/livekit/livekit.types.js.map +1 -0
  22. package/dist/adapters/livekit/service-adapters/index.d.ts +4 -0
  23. package/dist/adapters/livekit/service-adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/livekit/service-adapters/index.js +4 -0
  25. package/dist/adapters/livekit/service-adapters/index.js.map +1 -0
  26. package/dist/adapters/livekit/service-adapters/recording.adapter.d.ts +19 -0
  27. package/dist/adapters/livekit/service-adapters/recording.adapter.d.ts.map +1 -0
  28. package/dist/adapters/livekit/service-adapters/recording.adapter.js +30 -0
  29. package/dist/adapters/livekit/service-adapters/recording.adapter.js.map +1 -0
  30. package/dist/adapters/livekit/service-adapters/stats.adapter.d.ts +21 -0
  31. package/dist/adapters/livekit/service-adapters/stats.adapter.d.ts.map +1 -0
  32. package/dist/adapters/livekit/service-adapters/stats.adapter.js +54 -0
  33. package/dist/adapters/livekit/service-adapters/stats.adapter.js.map +1 -0
  34. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.d.ts +79 -0
  35. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.d.ts.map +1 -0
  36. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.js +348 -0
  37. package/dist/adapters/livekit/service-adapters/track-attachment.adapter.js.map +1 -0
  38. package/dist/adapters/livekit/services/index.d.ts +3 -0
  39. package/dist/adapters/livekit/services/index.d.ts.map +1 -0
  40. package/dist/adapters/livekit/services/index.js +3 -0
  41. package/dist/adapters/livekit/services/index.js.map +1 -0
  42. package/dist/adapters/livekit/services/recording.service.d.ts +29 -0
  43. package/dist/adapters/livekit/services/recording.service.d.ts.map +1 -0
  44. package/dist/adapters/livekit/services/recording.service.js +34 -0
  45. package/dist/adapters/livekit/services/recording.service.js.map +1 -0
  46. package/dist/adapters/livekit/services/stats.service.d.ts +24 -0
  47. package/dist/adapters/livekit/services/stats.service.d.ts.map +1 -0
  48. package/dist/adapters/livekit/services/stats.service.js +56 -0
  49. package/dist/adapters/livekit/services/stats.service.js.map +1 -0
  50. package/dist/core/api/auth.api.d.ts +52 -0
  51. package/dist/core/api/auth.api.d.ts.map +1 -0
  52. package/dist/core/api/auth.api.js +59 -0
  53. package/dist/core/api/auth.api.js.map +1 -0
  54. package/dist/core/api/http.d.ts +86 -0
  55. package/dist/core/api/http.d.ts.map +1 -0
  56. package/dist/core/api/http.js +146 -0
  57. package/dist/core/api/http.js.map +1 -0
  58. package/dist/core/errors/error-codes.d.ts +43 -0
  59. package/dist/core/errors/error-codes.d.ts.map +1 -0
  60. package/dist/core/errors/error-codes.js +42 -0
  61. package/dist/core/errors/error-codes.js.map +1 -0
  62. package/dist/core/errors/vroom.error.d.ts +99 -0
  63. package/dist/core/errors/vroom.error.d.ts.map +1 -0
  64. package/dist/core/errors/vroom.error.js +141 -0
  65. package/dist/core/errors/vroom.error.js.map +1 -0
  66. package/dist/core/ports/outbound/provider-adapter-factory.port.d.ts +41 -0
  67. package/dist/core/ports/outbound/provider-adapter-factory.port.d.ts.map +1 -0
  68. package/dist/core/ports/outbound/provider-adapter-factory.port.js +2 -0
  69. package/dist/core/ports/outbound/provider-adapter-factory.port.js.map +1 -0
  70. package/dist/core/ports/outbound/provider-adapter.port.d.ts +130 -0
  71. package/dist/core/ports/outbound/provider-adapter.port.d.ts.map +1 -0
  72. package/dist/core/ports/outbound/provider-adapter.port.js +2 -0
  73. package/dist/core/ports/outbound/provider-adapter.port.js.map +1 -0
  74. package/dist/core/ports/outbound/recording-adapter.port.d.ts +40 -0
  75. package/dist/core/ports/outbound/recording-adapter.port.d.ts.map +1 -0
  76. package/dist/core/ports/outbound/recording-adapter.port.js +2 -0
  77. package/dist/core/ports/outbound/recording-adapter.port.js.map +1 -0
  78. package/dist/core/ports/outbound/stats-adapter.port.d.ts +31 -0
  79. package/dist/core/ports/outbound/stats-adapter.port.d.ts.map +1 -0
  80. package/dist/core/ports/outbound/stats-adapter.port.js +2 -0
  81. package/dist/core/ports/outbound/stats-adapter.port.js.map +1 -0
  82. package/dist/core/ports/outbound/track-attachment-adapter.port.d.ts +86 -0
  83. package/dist/core/ports/outbound/track-attachment-adapter.port.d.ts.map +1 -0
  84. package/dist/core/ports/outbound/track-attachment-adapter.port.js +2 -0
  85. package/dist/core/ports/outbound/track-attachment-adapter.port.js.map +1 -0
  86. package/dist/core/provider-registry.d.ts +29 -0
  87. package/dist/core/provider-registry.d.ts.map +1 -0
  88. package/dist/core/provider-registry.js +45 -0
  89. package/dist/core/provider-registry.js.map +1 -0
  90. package/dist/core/services/base.service.d.ts +15 -0
  91. package/dist/core/services/base.service.d.ts.map +1 -0
  92. package/dist/core/services/base.service.js +10 -0
  93. package/dist/core/services/base.service.js.map +1 -0
  94. package/dist/core/services/recording.service.d.ts +50 -0
  95. package/dist/core/services/recording.service.d.ts.map +1 -0
  96. package/dist/core/services/recording.service.js +89 -0
  97. package/dist/core/services/recording.service.js.map +1 -0
  98. package/dist/core/services/stats.service.d.ts +32 -0
  99. package/dist/core/services/stats.service.d.ts.map +1 -0
  100. package/dist/core/services/stats.service.js +69 -0
  101. package/dist/core/services/stats.service.js.map +1 -0
  102. package/dist/core/session.d.ts +142 -0
  103. package/dist/core/session.d.ts.map +1 -0
  104. package/dist/core/session.js +248 -0
  105. package/dist/core/session.js.map +1 -0
  106. package/dist/core/types/events.types.d.ts +263 -0
  107. package/dist/core/types/events.types.d.ts.map +1 -0
  108. package/dist/core/types/events.types.js +76 -0
  109. package/dist/core/types/events.types.js.map +1 -0
  110. package/dist/core/types/media.types.d.ts +81 -0
  111. package/dist/core/types/media.types.d.ts.map +1 -0
  112. package/dist/core/types/media.types.js +12 -0
  113. package/dist/core/types/media.types.js.map +1 -0
  114. package/dist/core/types/participant.types.d.ts +11 -0
  115. package/dist/core/types/participant.types.d.ts.map +1 -0
  116. package/dist/core/types/participant.types.js +2 -0
  117. package/dist/core/types/participant.types.js.map +1 -0
  118. package/dist/core/types/recording.types.d.ts +60 -0
  119. package/dist/core/types/recording.types.d.ts.map +1 -0
  120. package/dist/core/types/recording.types.js +7 -0
  121. package/dist/core/types/recording.types.js.map +1 -0
  122. package/dist/core/types/service-adapters.types.d.ts +46 -0
  123. package/dist/core/types/service-adapters.types.d.ts.map +1 -0
  124. package/dist/core/types/service-adapters.types.js +2 -0
  125. package/dist/core/types/service-adapters.types.js.map +1 -0
  126. package/dist/core/types/session.types.d.ts +57 -0
  127. package/dist/core/types/session.types.d.ts.map +1 -0
  128. package/dist/core/types/session.types.js +2 -0
  129. package/dist/core/types/session.types.js.map +1 -0
  130. package/dist/core/types/stats.types.d.ts +20 -0
  131. package/dist/core/types/stats.types.d.ts.map +1 -0
  132. package/dist/core/types/stats.types.js +7 -0
  133. package/dist/core/types/stats.types.js.map +1 -0
  134. package/dist/core/types/token.types.d.ts +82 -0
  135. package/dist/core/types/token.types.d.ts.map +1 -0
  136. package/dist/core/types/token.types.js +27 -0
  137. package/dist/core/types/token.types.js.map +1 -0
  138. package/dist/core/types/track.types.d.ts +39 -0
  139. package/dist/core/types/track.types.d.ts.map +1 -0
  140. package/dist/core/types/track.types.js +9 -0
  141. package/dist/core/types/track.types.js.map +1 -0
  142. package/dist/core/types/user.types.d.ts +23 -0
  143. package/dist/core/types/user.types.d.ts.map +1 -0
  144. package/dist/core/types/user.types.js +2 -0
  145. package/dist/core/types/user.types.js.map +1 -0
  146. package/dist/core/types/vroom.types.d.ts +86 -0
  147. package/dist/core/types/vroom.types.d.ts.map +1 -0
  148. package/dist/core/types/vroom.types.js +12 -0
  149. package/dist/core/types/vroom.types.js.map +1 -0
  150. package/dist/core/utils/token.d.ts +77 -0
  151. package/dist/core/utils/token.d.ts.map +1 -0
  152. package/dist/core/utils/token.js +127 -0
  153. package/dist/core/utils/token.js.map +1 -0
  154. package/dist/core/vroom.d.ts +90 -0
  155. package/dist/core/vroom.d.ts.map +1 -0
  156. package/dist/core/vroom.js +219 -0
  157. package/dist/core/vroom.js.map +1 -0
  158. package/dist/index.d.ts +25 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +17 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/react-native.d.ts +21 -0
  163. package/dist/react-native.d.ts.map +1 -0
  164. package/dist/react-native.js +32 -0
  165. package/dist/react-native.js.map +1 -0
  166. package/package.json +50 -0
@@ -0,0 +1,108 @@
1
+ import { ConnectionQuality, LocalParticipant, Track as LKTrack, } from 'livekit-client';
2
+ /**
3
+ * Stateless mapper for converting LiveKit types to SDK types.
4
+ */
5
+ export class LiveKitMapper {
6
+ /**
7
+ * Converts a LiveKit Participant to SDK Participant.
8
+ */
9
+ static toParticipant(lkParticipant) {
10
+ const isLocal = lkParticipant instanceof LocalParticipant;
11
+ const role = LiveKitMapper.extractRole(lkParticipant.metadata);
12
+ return {
13
+ id: lkParticipant.identity,
14
+ displayName: lkParticipant.name?.trim() || lkParticipant.identity,
15
+ role,
16
+ isLocal,
17
+ joinedAt: lkParticipant.joinedAt?.getTime() ?? Date.now(),
18
+ metadata: LiveKitMapper.parseMetadata(lkParticipant.metadata),
19
+ };
20
+ }
21
+ /**
22
+ * Converts a LiveKit TrackPublication to SDK Track.
23
+ */
24
+ static toTrack(publication, participant) {
25
+ return {
26
+ id: publication.trackSid,
27
+ kind: LiveKitMapper.toTrackKind(publication.source),
28
+ enabled: !publication.isMuted,
29
+ muted: publication.isMuted,
30
+ participant,
31
+ mediaStreamTrack: publication.track?.mediaStreamTrack,
32
+ };
33
+ }
34
+ /**
35
+ * Converts a LiveKit Track.Source to SDK TrackKind.
36
+ */
37
+ static toTrackKind(source) {
38
+ switch (source) {
39
+ case LKTrack.Source.Microphone:
40
+ return 'audio';
41
+ case LKTrack.Source.Camera:
42
+ return 'video';
43
+ case LKTrack.Source.ScreenShare:
44
+ case LKTrack.Source.ScreenShareAudio:
45
+ return 'screen';
46
+ default:
47
+ return 'video'; // default fallback
48
+ }
49
+ }
50
+ /**
51
+ * Converts a LiveKit ConnectionQuality to SDK NetworkQuality.
52
+ */
53
+ static toNetworkQuality(quality) {
54
+ switch (quality) {
55
+ case ConnectionQuality.Excellent:
56
+ return 'excellent';
57
+ case ConnectionQuality.Good:
58
+ return 'good';
59
+ case ConnectionQuality.Poor:
60
+ return 'poor';
61
+ case ConnectionQuality.Lost:
62
+ return 'bad';
63
+ case ConnectionQuality.Unknown:
64
+ default:
65
+ return 'unknown';
66
+ }
67
+ }
68
+ static extractRole(metadata) {
69
+ if (!metadata)
70
+ return 'member';
71
+ try {
72
+ const parsed = JSON.parse(metadata);
73
+ if (parsed.role &&
74
+ ['host', 'moderator', 'member', 'viewer'].includes(parsed.role)) {
75
+ return parsed.role;
76
+ }
77
+ }
78
+ catch {
79
+ // Invalid JSON, fall through to default
80
+ }
81
+ return 'member';
82
+ }
83
+ static parseMetadata(metadata) {
84
+ if (!metadata)
85
+ return undefined;
86
+ try {
87
+ return JSON.parse(metadata);
88
+ }
89
+ catch {
90
+ return { raw: metadata };
91
+ }
92
+ }
93
+ /**
94
+ * Converts a Web API MediaDeviceKind to SDK DeviceKind.
95
+ *
96
+ * @param kind - MediaDeviceKind from LiveKit/Web API
97
+ * @returns SDK DeviceKind or null if unknown kind
98
+ */
99
+ static toDeviceKind(kind) {
100
+ const mapping = {
101
+ audioinput: 'audioinput',
102
+ videoinput: 'videoinput',
103
+ audiooutput: 'audiooutput',
104
+ };
105
+ return mapping[kind] ?? null;
106
+ }
107
+ }
108
+ //# sourceMappingURL=livekit.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"livekit.mapper.js","sourceRoot":"","sources":["../../../src/adapters/livekit/livekit.mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * LiveKit adapter configuration options
3
+ *
4
+ * Note: We don't re-export LiveKit types (Room, Participant, Track, etc.)
5
+ * because they're only used internally within this adapter.
6
+ * Import directly from 'livekit-client' when needed.
7
+ */
8
+ export interface LiveKitAdapterConfig {
9
+ /** Enable adaptive streaming (default: true) */
10
+ adaptiveStream?: boolean;
11
+ /** Enable dynacast for bandwidth optimization (default: true) */
12
+ dynacast?: boolean;
13
+ /** Enable simulcast for video (default: true) */
14
+ simulcast?: boolean;
15
+ /** Stop tracks when muted instead of just disabling (default: false) */
16
+ stopMicTrackOnMute?: boolean;
17
+ }
18
+ /**
19
+ * Default LiveKit adapter configuration
20
+ */
21
+ export declare const DEFAULT_LIVEKIT_CONFIG: Required<LiveKitAdapterConfig>;
22
+ //# sourceMappingURL=livekit.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"livekit.types.d.ts","sourceRoot":"","sources":["../../../src/adapters/livekit/livekit.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,oBAAoB,CAKjE,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Default LiveKit adapter configuration
3
+ */
4
+ export const DEFAULT_LIVEKIT_CONFIG = {
5
+ adaptiveStream: true,
6
+ dynacast: true,
7
+ simulcast: true,
8
+ stopMicTrackOnMute: false,
9
+ };
10
+ //# sourceMappingURL=livekit.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"livekit.types.js","sourceRoot":"","sources":["../../../src/adapters/livekit/livekit.types.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,IAAI;IACf,kBAAkB,EAAE,KAAK;CAC1B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { LiveKitStatsAdapter } from './stats.adapter';
2
+ export { LiveKitRecordingAdapter } from './recording.adapter';
3
+ export { LiveKitTrackAttachmentAdapter } from './track-attachment.adapter';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/livekit/service-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { LiveKitStatsAdapter } from './stats.adapter';
2
+ export { LiveKitRecordingAdapter } from './recording.adapter';
3
+ export { LiveKitTrackAttachmentAdapter } from './track-attachment.adapter';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/livekit/service-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,19 @@
1
+ import type { RecordingAdapter } from '../../../core/ports/outbound/recording-adapter.port';
2
+ import type { ServiceContext } from '../../../core/types/service-adapters.types';
3
+ import type { RecordingStartOptions, RecordingStatus, RecordingStatusEvent } from '../../../core/types/recording.types';
4
+ /**
5
+ * LiveKit implementation of RecordingAdapter.
6
+ *
7
+ * Makes HTTP calls to Vroom backend for recording operations.
8
+ * Recording is a server-side operation, not a LiveKit Room feature.
9
+ */
10
+ export declare class LiveKitRecordingAdapter implements RecordingAdapter {
11
+ private serviceContext;
12
+ constructor(serviceContext: ServiceContext);
13
+ start(options?: RecordingStartOptions): Promise<string>;
14
+ stop(recordingId: string): Promise<void>;
15
+ getStatus(recordingId: string): Promise<RecordingStatus>;
16
+ onStatusChanged(_callback: (event: RecordingStatusEvent) => void): () => void;
17
+ destroy(): void;
18
+ }
19
+ //# sourceMappingURL=recording.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/livekit/service-adapters/recording.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACrB,MAAM,qCAAqC,CAAA;AAO5C;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,OAAO,CAAC,cAAc,CAAgB;gBAE1B,cAAc,EAAE,cAAc;IAIpC,KAAK,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAM9D,eAAe,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,IAAI;IAI7E,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,30 @@
1
+ import { startRecording, stopRecording, getRecordingStatus, } from '../services/recording.service';
2
+ /**
3
+ * LiveKit implementation of RecordingAdapter.
4
+ *
5
+ * Makes HTTP calls to Vroom backend for recording operations.
6
+ * Recording is a server-side operation, not a LiveKit Room feature.
7
+ */
8
+ export class LiveKitRecordingAdapter {
9
+ constructor(serviceContext) {
10
+ this.serviceContext = serviceContext;
11
+ }
12
+ async start(options) {
13
+ return startRecording(this.serviceContext, options);
14
+ }
15
+ async stop(recordingId) {
16
+ return stopRecording(this.serviceContext, recordingId);
17
+ }
18
+ async getStatus(recordingId) {
19
+ return getRecordingStatus(this.serviceContext, recordingId);
20
+ }
21
+ // TODO: Implement real-time status updates when backend WebSocket is available
22
+ // Currently not in spec - client should poll getStatus() if needed
23
+ onStatusChanged(_callback) {
24
+ return () => { };
25
+ }
26
+ destroy() {
27
+ // No cleanup needed - stateless HTTP calls
28
+ }
29
+ }
30
+ //# sourceMappingURL=recording.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.adapter.js","sourceRoot":"","sources":["../../../../src/adapters/livekit/service-adapters/recording.adapter.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,cAAc,EACd,aAAa,EACb,kBAAkB,GACnB,MAAM,+BAA+B,CAAA;AAEtC;;;;;GAKG;AACH,MAAM,OAAO,uBAAuB;IAGlC,YAAY,cAA8B;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA+B;QACzC,OAAO,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAmB;QAC5B,OAAO,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,WAAmB;QACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IAC7D,CAAC;IAED,+EAA+E;IAC/E,mEAAmE;IACnE,eAAe,CAAC,SAAgD;QAC9D,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACjB,CAAC;IAED,OAAO;QACL,2CAA2C;IAC7C,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { Room } from 'livekit-client';
2
+ import type { StatsAdapter } from '../../../core/ports/outbound/stats-adapter.port';
3
+ import type { NetworkQuality, NetworkQualityEvent } from '../../../core/types/events.types';
4
+ /**
5
+ * LiveKit implementation of StatsAdapter.
6
+ *
7
+ * Subscribes to LiveKit Room events directly and provides stats functionality
8
+ * to StatsService without going through ProviderAdapter.
9
+ */
10
+ export declare class LiveKitStatsAdapter implements StatsAdapter {
11
+ private room;
12
+ private callbacks;
13
+ constructor(room: Room);
14
+ getNetworkQuality(): NetworkQuality;
15
+ getStats(): Promise<RTCStatsReport>;
16
+ onNetworkQualityChanged(callback: (event: NetworkQualityEvent) => void): () => void;
17
+ destroy(): void;
18
+ private setupEventListeners;
19
+ private handleConnectionQualityChanged;
20
+ }
21
+ //# sourceMappingURL=stats.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/livekit/service-adapters/stats.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAgC,MAAM,gBAAgB,CAAA;AAGxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAA;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAI3F;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,SAAS,CAAuD;gBAE5D,IAAI,EAAE,IAAI;IAKtB,iBAAiB,IAAI,cAAc;IAI7B,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAIzC,uBAAuB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,MAAM,IAAI;IASnF,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,8BAA8B,CAcrC;CACF"}
@@ -0,0 +1,54 @@
1
+ import { RoomEvent } from 'livekit-client';
2
+ import { LiveKitMapper } from '../livekit.mapper';
3
+ import { getStats, getNetworkQuality } from '../services/stats.service';
4
+ /**
5
+ * LiveKit implementation of StatsAdapter.
6
+ *
7
+ * Subscribes to LiveKit Room events directly and provides stats functionality
8
+ * to StatsService without going through ProviderAdapter.
9
+ */
10
+ export class LiveKitStatsAdapter {
11
+ constructor(room) {
12
+ this.room = null;
13
+ this.callbacks = new Set();
14
+ this.handleConnectionQualityChanged = (quality, participant) => {
15
+ // Only emit for local participant
16
+ if (participant === this.room?.localParticipant) {
17
+ const event = {
18
+ quality: LiveKitMapper.toNetworkQuality(quality),
19
+ timestamp: Date.now(),
20
+ };
21
+ // Notify all callbacks
22
+ this.callbacks.forEach((callback) => callback(event));
23
+ }
24
+ };
25
+ this.room = room;
26
+ this.setupEventListeners();
27
+ }
28
+ getNetworkQuality() {
29
+ return getNetworkQuality(this.room);
30
+ }
31
+ async getStats() {
32
+ return getStats(this.room);
33
+ }
34
+ onNetworkQualityChanged(callback) {
35
+ this.callbacks.add(callback);
36
+ // Return unsubscribe function
37
+ return () => {
38
+ this.callbacks.delete(callback);
39
+ };
40
+ }
41
+ destroy() {
42
+ if (this.room) {
43
+ this.room.off(RoomEvent.ConnectionQualityChanged, this.handleConnectionQualityChanged);
44
+ }
45
+ this.callbacks.clear();
46
+ this.room = null;
47
+ }
48
+ setupEventListeners() {
49
+ if (!this.room)
50
+ return;
51
+ this.room.on(RoomEvent.ConnectionQualityChanged, this.handleConnectionQualityChanged);
52
+ }
53
+ }
54
+ //# sourceMappingURL=stats.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.adapter.js","sourceRoot":"","sources":["../../../../src/adapters/livekit/service-adapters/stats.adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAI1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAEvE;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAI9B,YAAY,IAAU;QAHd,SAAI,GAAgB,IAAI,CAAA;QACxB,cAAS,GAA8C,IAAI,GAAG,EAAE,CAAA;QAsChE,mCAA8B,GAAG,CACvC,OAAmD,EACnD,WAA0B,EACpB,EAAE;YACR,kCAAkC;YAClC,IAAI,WAAW,KAAK,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAwB;oBACjC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC;oBAChD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAA;gBAED,uBAAuB;gBACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;YACvD,CAAC;QACH,CAAC,CAAA;QAjDC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IAED,iBAAiB;QACf,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,uBAAuB,CAAC,QAA8C;QACpE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAE5B,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC,CAAA;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAA;QACxF,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAM;QAEtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,wBAAwB,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAA;IACvF,CAAC;CAiBF"}
@@ -0,0 +1,79 @@
1
+ import { type Room } from 'livekit-client';
2
+ import type { TrackAttachmentAdapter } from '../../../core/ports/outbound/track-attachment-adapter.port';
3
+ /**
4
+ * LiveKit implementation of TrackAttachmentAdapter.
5
+ *
6
+ * Uses LiveKit's track.attach() method to properly attach tracks to elements.
7
+ * This is necessary because LiveKit uses adaptive streaming that requires
8
+ * knowing which elements are displaying tracks for proper frame delivery.
9
+ *
10
+ * Features:
11
+ * - Automatic pending queue: If attach() is called before track is subscribed,
12
+ * the request is queued and automatically fulfilled when track becomes available.
13
+ * - Handles race conditions between TrackAdded event and actual track subscription.
14
+ * - React Native support via registerTrackView/unregisterTrackView methods.
15
+ */
16
+ export declare class LiveKitTrackAttachmentAdapter implements TrackAttachmentAdapter {
17
+ private room;
18
+ /** Pending attachments waiting for tracks to be subscribed (Web) */
19
+ private pendingAttachments;
20
+ /** Pending view registrations waiting for tracks to be subscribed (Mobile) */
21
+ private pendingViews;
22
+ /** Active view registrations (Mobile) */
23
+ private activeViews;
24
+ /** ElementInfo instances for each view (Mobile) - Map<trackId, Map<viewId, ElementInfo>> */
25
+ private elementInfos;
26
+ /** Cleanup functions for event listeners */
27
+ private cleanupFns;
28
+ constructor(room: Room);
29
+ attach(trackId: string, element: HTMLMediaElement): void;
30
+ detach(trackId: string, element?: HTMLMediaElement): void;
31
+ registerTrackView(trackId: string, viewId: string, options?: {
32
+ width?: number;
33
+ height?: number;
34
+ visible?: boolean;
35
+ onReady?: (streamUrl: string) => void;
36
+ }): string | null;
37
+ unregisterTrackView(trackId: string, viewId?: string): void;
38
+ updateTrackViewLayout(trackId: string, viewId: string, width: number, height: number): void;
39
+ updateTrackViewVisibility(trackId: string, viewId: string, visible: boolean): void;
40
+ destroy(): void;
41
+ /**
42
+ * Setup event listeners for track lifecycle management.
43
+ * - TrackSubscribed: Fulfill pending attachment requests (Web) and pending view registrations (Mobile)
44
+ * - TrackUnsubscribed: Cleanup pending requests that will never arrive
45
+ */
46
+ private setupEventListeners;
47
+ /**
48
+ * Find LiveKit Track by track SID from all participants
49
+ */
50
+ private findLiveKitTrack;
51
+ /**
52
+ * Add a view to the active views set for a track
53
+ */
54
+ private addActiveView;
55
+ /**
56
+ * Setup adaptive streaming observation for a track view.
57
+ *
58
+ * For RemoteVideoTrack with adaptive streaming enabled, this creates an ElementInfo
59
+ * and calls observeElementInfo() to tell LiveKit that a view is displaying the track.
60
+ * This is critical for adaptive streaming to work on mobile platforms.
61
+ *
62
+ * @see https://github.com/livekit/client-sdk-react-native
63
+ */
64
+ private observeTrackIfNeeded;
65
+ /**
66
+ * Stop observing a track view for adaptive streaming.
67
+ */
68
+ private stopObservingTrack;
69
+ /**
70
+ * Get stream URL from a LiveKit track for mobile video views.
71
+ *
72
+ * Uses MediaStream.toURL() which is the correct approach for React Native.
73
+ * LiveKit's official @livekit/react-native also uses this method.
74
+ *
75
+ * @see https://github.com/livekit/client-sdk-react-native
76
+ */
77
+ private getStreamUrl;
78
+ }
79
+ //# sourceMappingURL=track-attachment.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-attachment.adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/livekit/service-adapters/track-attachment.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,EAKV,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4DAA4D,CAAA;AAwExG;;;;;;;;;;;;GAYG;AACH,qBAAa,6BAA8B,YAAW,sBAAsB;IAC1E,OAAO,CAAC,IAAI,CAAM;IAClB,oEAAoE;IACpE,OAAO,CAAC,kBAAkB,CAAgD;IAC1E,8EAA8E;IAC9E,OAAO,CAAC,YAAY,CAAmD;IACvE,yCAAyC;IACzC,OAAO,CAAC,WAAW,CAAsC;IACzD,4FAA4F;IAC5F,OAAO,CAAC,YAAY,CAA6D;IACjF,4CAA4C;IAC5C,OAAO,CAAC,UAAU,CAAwB;gBAE9B,IAAI,EAAE,IAAI;IAKtB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAaxD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;IA0BzD,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;KACtC,GACA,MAAM,GAAG,IAAI;IAyBhB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA+B3D,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI;IAOP,yBAAyB,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,IAAI;IAOP,OAAO,IAAI,IAAI;IAsBf;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA8D3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAiC5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;CAWrB"}