@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
package/README.md ADDED
@@ -0,0 +1,179 @@
1
+ # Vroom Client JS
2
+
3
+ Platform-agnostic Core SDK for building real-time communication experiences.
4
+
5
+ ## Features
6
+
7
+ - **Simple API** - Initialize once, connect to rooms with a single call
8
+ - **Auto Token Exchange** - SDK handles authentication automatically
9
+ - **Type-Safe** - Full TypeScript support
10
+ - **Production Ready** - Auto-reconnect and error handling built-in
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install @waitaya.buc/client-js
16
+ ```
17
+
18
+ ### React Native
19
+
20
+ `Vroom.init({ platformInfo })` automatically prepares required RN WebRTC globals on iOS/Android
21
+ via `@waitaya.buc/client-js/react-native` (internally calls LiveKit RN global setup).
22
+
23
+ If needed, you can import mobile-specific helpers from:
24
+
25
+ ```typescript
26
+ import { RTCView, MediaStream, registerWebRTCGlobals } from '@waitaya.buc/client-js/react-native'
27
+ ```
28
+
29
+ #### React Native Dependency Note (v0.x)
30
+
31
+ The current RTC adapter is LiveKit (internal adapter), and React Native native-module autolinking
32
+ can be sensitive in pnpm/workspace setups.
33
+
34
+ For v0.x, RN apps should explicitly install:
35
+
36
+ ```bash
37
+ npm install @livekit/react-native @livekit/react-native-webrtc
38
+ ```
39
+
40
+ This is a first-release stability workaround.
41
+ Planned improvement in next release is to reduce/normalize this explicit LiveKit dependency burden
42
+ for app consumers while preserving Hexagonal adapter boundaries.
43
+
44
+ When consuming published `@waitaya.buc/*` packages from npmjs in a normal app setup, you should not need local workspace path aliases.
45
+ Local alias-heavy Metro setups are mainly for developing unpublished sibling packages in a monorepo/workspace.
46
+
47
+ ## Quick Start
48
+
49
+ ```typescript
50
+ import { Vroom, SessionEvent } from '@waitaya.buc/client-js'
51
+
52
+ // 1. Initialize (once at app startup)
53
+ await Vroom.init({ apiKey: 'your-api-key' })
54
+
55
+ // 2. Connect to room
56
+ const session = await Vroom.connect({
57
+ roomName: 'meeting-123',
58
+ user: { id: 'user-1', displayName: 'Alice', role: 'host' },
59
+ type: 'group',
60
+ media: { audio: true, video: true },
61
+ eventHandlers: {
62
+ [SessionEvent.ParticipantJoined]: ({ participant }) => {
63
+ console.log(`${participant.displayName} joined`)
64
+ },
65
+ [SessionEvent.TrackAdded]: ({ track }) => {
66
+ if (track.mediaStreamTrack) {
67
+ videoElement.srcObject = new MediaStream([track.mediaStreamTrack])
68
+ }
69
+ }
70
+ }
71
+ })
72
+
73
+ // 3. Control media
74
+ session.disableMic()
75
+ session.enableCamera()
76
+
77
+ // 4. Disconnect
78
+ await session.disconnect()
79
+ ```
80
+
81
+ ## API Reference
82
+
83
+ ### Vroom
84
+
85
+ | Method | Description |
86
+ |--------|-------------|
87
+ | `init(config)` | Initialize SDK with API key |
88
+ | `connect(params)` | Connect to room |
89
+ | `reset()` | Reset SDK state |
90
+
91
+ ### Session
92
+
93
+ | Method | Description |
94
+ |--------|-------------|
95
+ | `enableMic()` / `disableMic()` | Toggle microphone |
96
+ | `enableCamera()` / `disableCamera()` | Toggle camera |
97
+ | `switchDevice(options)` | Switch audio/video input or output device |
98
+ | `getActiveDevice(kind)` | Get currently active device ID |
99
+ | `getParticipants()` | Get all participants |
100
+ | `disconnect()` | Disconnect from room |
101
+ | `on(event, handler)` | Add event listener |
102
+
103
+ ### Events
104
+
105
+ | Event | Description |
106
+ |-------|-------------|
107
+ | `SessionEvent.Connected` | Connected to room |
108
+ | `SessionEvent.Disconnected` | Disconnected from room |
109
+ | `SessionEvent.ParticipantJoined` | Participant joined |
110
+ | `SessionEvent.ParticipantLeft` | Participant left |
111
+ | `SessionEvent.TrackAdded` | Track published |
112
+ | `SessionEvent.TrackRemoved` | Track unpublished |
113
+ | `SessionEvent.Error` | Error occurred |
114
+
115
+ ## Error Handling
116
+
117
+ ```typescript
118
+ try {
119
+ await Vroom.connect({ ... })
120
+ } catch (error) {
121
+ if (error.code === 'E_INVALID_API_KEY') {
122
+ // Handle invalid API key
123
+ }
124
+ }
125
+ ```
126
+
127
+ ## Development Status
128
+
129
+ **Implemented:** Core SDK, Media control, Events, Error handling
130
+
131
+ **Planned:** Chat, Recording, Presence, Screen sharing, React hooks
132
+
133
+ ---
134
+
135
+ ## Contributing
136
+
137
+ ### Architecture
138
+
139
+ This SDK uses Hexagonal Architecture (Ports & Adapters):
140
+
141
+ ```
142
+ ┌─────────────────────────────────────────┐
143
+ │ Your App (React, RN, etc.) │
144
+ └────────────────────┬────────────────────┘
145
+
146
+
147
+ ┌─────────────────────────────────────────┐
148
+ │ Core Layer (Vroom, Session) │
149
+ │ - Public API │
150
+ │ - Business logic │
151
+ │ - Types & Errors │
152
+ └────────────────────┬────────────────────┘
153
+ │ ProviderAdapter port
154
+
155
+ ┌─────────────────────────────────────────┐
156
+ │ Adapter Layer │
157
+ │ - LiveKitAdapter │
158
+ │ - (future adapters) │
159
+ └─────────────────────────────────────────┘
160
+ ```
161
+
162
+ ### Folder Structure
163
+
164
+ ```
165
+ src/
166
+ ├── core/ # Public API (Vroom, Session, Types, Errors)
167
+ ├── adapters/ # Provider implementations (internal)
168
+ └── index.ts # Public exports
169
+ ```
170
+
171
+ ### Adding a New Adapter
172
+
173
+ 1. Create `src/adapters/{provider}/`
174
+ 2. Implement `ProviderAdapter` interface
175
+ 3. Add to `Vroom.createAdapter()`
176
+
177
+ ## License
178
+
179
+ MIT
@@ -0,0 +1,15 @@
1
+ import type { ServiceContext } from '../../../core/types/service-adapters.types';
2
+ import type { RecordingStartOptions, RecordingStatus } from '../../../core/types/recording.types';
3
+ /**
4
+ * POST /v1/rtc/recording/start
5
+ */
6
+ export declare function postStartRecording(context: ServiceContext, options?: RecordingStartOptions): Promise<string>;
7
+ /**
8
+ * POST /v1/rtc/recording/stop
9
+ */
10
+ export declare function postStopRecording(context: ServiceContext, recordingId: string): Promise<void>;
11
+ /**
12
+ * GET /v1/rtc/recording/status?id=xxx
13
+ */
14
+ export declare function getRecordingStatus(context: ServiceContext, recordingId: string): Promise<RecordingStatus>;
15
+ //# sourceMappingURL=recording.api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.api.d.ts","sourceRoot":"","sources":["../../../../src/adapters/livekit/api/recording.api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EAChB,MAAM,qCAAqC,CAAA;AA0B5C;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAU1B"}
@@ -0,0 +1,61 @@
1
+ import { RecordingStartError } from '../../../core/errors/vroom.error';
2
+ import { ErrorCodes } from '../../../core/errors/error-codes';
3
+ import { request, requestVoid } from '../../../core/api/http';
4
+ /**
5
+ * Custom error handler for recording endpoints.
6
+ * Handles recording-specific errors: RecordingStart, 409 Conflict
7
+ */
8
+ const recordingErrorHandler = ({ response, code, message }) => {
9
+ if (code === ErrorCodes.E_RECORDING_START) {
10
+ return new RecordingStartError(message);
11
+ }
12
+ if (response.status === 409) {
13
+ return new RecordingStartError('Recording already in progress');
14
+ }
15
+ return null;
16
+ };
17
+ /**
18
+ * POST /v1/rtc/recording/start
19
+ */
20
+ export async function postStartRecording(context, options) {
21
+ const data = await request({
22
+ method: 'POST',
23
+ url: `${context.apiEndpoint}/v1/rtc/recording/start`,
24
+ headers: { Authorization: `Bearer ${context.sessionToken}` },
25
+ body: {
26
+ layout: options?.layout,
27
+ audioOnly: options?.audioOnly,
28
+ resolution: options?.resolution,
29
+ },
30
+ customErrorHandler: recordingErrorHandler,
31
+ errorMessage: 'Failed to start recording',
32
+ });
33
+ return data.recordingId;
34
+ }
35
+ /**
36
+ * POST /v1/rtc/recording/stop
37
+ */
38
+ export async function postStopRecording(context, recordingId) {
39
+ await requestVoid({
40
+ method: 'POST',
41
+ url: `${context.apiEndpoint}/v1/rtc/recording/stop`,
42
+ headers: { Authorization: `Bearer ${context.sessionToken}` },
43
+ body: { recordingId },
44
+ customErrorHandler: recordingErrorHandler,
45
+ errorMessage: 'Failed to stop recording',
46
+ });
47
+ }
48
+ /**
49
+ * GET /v1/rtc/recording/status?id=xxx
50
+ */
51
+ export async function getRecordingStatus(context, recordingId) {
52
+ const params = new URLSearchParams({ id: recordingId });
53
+ return request({
54
+ method: 'GET',
55
+ url: `${context.apiEndpoint}/v1/rtc/recording/status?${params}`,
56
+ headers: { Authorization: `Bearer ${context.sessionToken}` },
57
+ customErrorHandler: recordingErrorHandler,
58
+ errorMessage: 'Failed to get recording status',
59
+ });
60
+ }
61
+ //# sourceMappingURL=recording.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.api.js","sourceRoot":"","sources":["../../../../src/adapters/livekit/api/recording.api.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAA2B,MAAM,wBAAwB,CAAA;AAStF;;;GAGG;AACH,MAAM,qBAAqB,GAAuB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IAChF,IAAI,IAAI,KAAK,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC1C,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,IAAI,mBAAmB,CAAC,+BAA+B,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAyB;QACjD,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,yBAAyB;QACpD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,YAAY,EAAE,EAAE;QAC5D,IAAI,EAAE;YACJ,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,UAAU,EAAE,OAAO,EAAE,UAAU;SAChC;QACD,kBAAkB,EAAE,qBAAqB;QACzC,YAAY,EAAE,2BAA2B;KAC1C,CAAC,CAAA;IAEF,OAAO,IAAI,CAAC,WAAW,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,WAAmB;IAEnB,MAAM,WAAW,CAAC;QAChB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,wBAAwB;QACnD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,YAAY,EAAE,EAAE;QAC5D,IAAI,EAAE,EAAE,WAAW,EAAE;QACrB,kBAAkB,EAAE,qBAAqB;QACzC,YAAY,EAAE,0BAA0B;KACzC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,WAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IAEvD,OAAO,OAAO,CAAkB;QAC9B,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,4BAA4B,MAAM,EAAE;QAC/D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,YAAY,EAAE,EAAE;QAC5D,kBAAkB,EAAE,qBAAqB;QACzC,YAAY,EAAE,gCAAgC;KAC/C,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ProviderAdapterFactory } from '../../core/ports/outbound/provider-adapter-factory.port';
2
+ /**
3
+ * Factory for creating LiveKit adapter instances.
4
+ *
5
+ * Uses lazy import so provider SDK code is loaded only when connect() is called.
6
+ *
7
+ * Flow:
8
+ * 1. This file is imported when @waitaya.buc/client-js loads (auto-registration)
9
+ * 2. Factory is registered but LiveKitAdapter is NOT imported yet
10
+ * 3. When Vroom.connect() is called, factory.create() runs
11
+ * 4. LiveKitAdapter is imported and instantiated
12
+ *
13
+ * Note:
14
+ * React Native globals are prepared in Vroom.init() before connect().
15
+ */
16
+ export declare const LiveKitAdapterFactory: ProviderAdapterFactory;
17
+ export { LiveKitAdapterFactory as default };
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/livekit/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAA;AAIrG;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,EAAE,sBAKnC,CAAA;AAKD,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { Provider } from '../../core/types/vroom.types';
2
+ import { registerProvider } from '../../core/provider-registry';
3
+ /**
4
+ * Factory for creating LiveKit adapter instances.
5
+ *
6
+ * Uses lazy import so provider SDK code is loaded only when connect() is called.
7
+ *
8
+ * Flow:
9
+ * 1. This file is imported when @waitaya.buc/client-js loads (auto-registration)
10
+ * 2. Factory is registered but LiveKitAdapter is NOT imported yet
11
+ * 3. When Vroom.connect() is called, factory.create() runs
12
+ * 4. LiveKitAdapter is imported and instantiated
13
+ *
14
+ * Note:
15
+ * React Native globals are prepared in Vroom.init() before connect().
16
+ */
17
+ export const LiveKitAdapterFactory = {
18
+ create: async (serviceContext, _platform) => {
19
+ const { LiveKitAdapter } = await import('./livekit.adapter');
20
+ return new LiveKitAdapter(serviceContext);
21
+ },
22
+ };
23
+ // Auto-register LiveKit provider when this module is imported
24
+ registerProvider(Provider.LiveKit, LiveKitAdapterFactory);
25
+ export { LiveKitAdapterFactory as default };
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/livekit/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE;QAC1C,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAC5D,OAAO,IAAI,cAAc,CAAC,cAAc,CAAC,CAAA;IAC3C,CAAC;CACF,CAAA;AAED,8DAA8D;AAC9D,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;AAEzD,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,CAAA"}
@@ -0,0 +1,85 @@
1
+ import type { NetworkQuality } from '../../core/types/events.types';
2
+ import type { ProviderAdapter, AdapterConnectOptions, Capability } from '../../core/ports/outbound/provider-adapter.port';
3
+ import type { ServiceAdapters, ServiceContext } from '../../core/types/service-adapters.types';
4
+ import { type SessionPermissions } from '../../core/types/token.types';
5
+ import type { Track } from '../../core/types/track.types';
6
+ import type { SwitchDeviceOptions, DeviceKind } from '../../core/types/media.types';
7
+ import type { Participant } from '../../core/types/participant.types';
8
+ import { type SessionEventName, type EventHandlers } from '../../core/types/events.types';
9
+ import { type LiveKitAdapterConfig } from './livekit.types';
10
+ type EventHandler<E extends SessionEventName> = NonNullable<EventHandlers[E]>;
11
+ export declare class LiveKitAdapter implements ProviderAdapter {
12
+ /** LiveKit Room instance */
13
+ private room;
14
+ /** Event handlers registry */
15
+ private eventHandlers;
16
+ /** Cached participants */
17
+ private participants;
18
+ /** Cached tracks */
19
+ private tracks;
20
+ /** Local participant reference */
21
+ private localParticipant;
22
+ /** Adapter configuration */
23
+ private config;
24
+ /** Service context for backend API calls */
25
+ private serviceContext;
26
+ /** Reconnect attempt counter */
27
+ private reconnectAttempt;
28
+ constructor(serviceContext: ServiceContext, config?: LiveKitAdapterConfig);
29
+ connect(options: AdapterConnectOptions): Promise<void>;
30
+ disconnect(): Promise<void>;
31
+ /**
32
+ * Publish a MediaStreamTrack to the room
33
+ */
34
+ publishTrack(track: MediaStreamTrack): Promise<Track>;
35
+ /**
36
+ * Unpublish a track from the room
37
+ */
38
+ unpublishTrack(trackId: string): Promise<void>;
39
+ muteTrack(kind: 'audio' | 'video'): Promise<void>;
40
+ unmuteTrack(kind: 'audio' | 'video'): Promise<void>;
41
+ switchDevice(options: SwitchDeviceOptions): Promise<void>;
42
+ getActiveDevice(kind: DeviceKind): string | undefined;
43
+ on<E extends SessionEventName>(event: E, handler: EventHandler<E>): void;
44
+ off<E extends SessionEventName>(event: E, handler?: EventHandler<E>): void;
45
+ getStats(): Promise<RTCStatsReport>;
46
+ getNetworkQuality(): NetworkQuality;
47
+ getCapabilities(): Capability[];
48
+ getParticipants(): Participant[];
49
+ getTracks(): Track[];
50
+ createServiceAdapters(permissions: SessionPermissions): ServiceAdapters;
51
+ /**
52
+ * Get event mappings for LiveKit Room events.
53
+ * Defined as a getter to ensure handlers are initialized before access.
54
+ */
55
+ private get roomEventMappings();
56
+ /**
57
+ * Sets up LiveKit event listeners and maps them to SDK events.
58
+ */
59
+ private setupEventListeners;
60
+ /**
61
+ * Removes all LiveKit event listeners to prevent memory leaks.
62
+ */
63
+ private removeEventListeners;
64
+ private handleParticipantConnected;
65
+ private handleParticipantDisconnected;
66
+ private handleTrackSubscribed;
67
+ private handleTrackUnsubscribed;
68
+ private handleLocalTrackPublished;
69
+ private handleLocalTrackUnpublished;
70
+ private handleTrackMuted;
71
+ private handleTrackUnmuted;
72
+ /**
73
+ * Get SDK Participant for a LiveKit participant (local or remote)
74
+ */
75
+ private getParticipantForTrack;
76
+ private handleDisconnected;
77
+ private handleReconnecting;
78
+ private handleReconnected;
79
+ private handleActiveSpeakersChanged;
80
+ private handleActiveDeviceChanged;
81
+ private emit;
82
+ private mapDisconnectReason;
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=livekit.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"livekit.adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/livekit/livekit.adapter.ts"],"names":[],"mappings":"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"}