@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.
- package/README.md +179 -0
- package/dist/adapters/livekit/api/recording.api.d.ts +15 -0
- package/dist/adapters/livekit/api/recording.api.d.ts.map +1 -0
- package/dist/adapters/livekit/api/recording.api.js +61 -0
- package/dist/adapters/livekit/api/recording.api.js.map +1 -0
- package/dist/adapters/livekit/index.d.ts +18 -0
- package/dist/adapters/livekit/index.d.ts.map +1 -0
- package/dist/adapters/livekit/index.js +26 -0
- package/dist/adapters/livekit/index.js.map +1 -0
- package/dist/adapters/livekit/livekit.adapter.d.ts +85 -0
- package/dist/adapters/livekit/livekit.adapter.d.ts.map +1 -0
- package/dist/adapters/livekit/livekit.adapter.js +531 -0
- package/dist/adapters/livekit/livekit.adapter.js.map +1 -0
- package/dist/adapters/livekit/livekit.mapper.d.ts +36 -0
- package/dist/adapters/livekit/livekit.mapper.d.ts.map +1 -0
- package/dist/adapters/livekit/livekit.mapper.js +108 -0
- package/dist/adapters/livekit/livekit.mapper.js.map +1 -0
- package/dist/adapters/livekit/livekit.types.d.ts +22 -0
- package/dist/adapters/livekit/livekit.types.d.ts.map +1 -0
- package/dist/adapters/livekit/livekit.types.js +10 -0
- package/dist/adapters/livekit/livekit.types.js.map +1 -0
- package/dist/adapters/livekit/service-adapters/index.d.ts +4 -0
- package/dist/adapters/livekit/service-adapters/index.d.ts.map +1 -0
- package/dist/adapters/livekit/service-adapters/index.js +4 -0
- package/dist/adapters/livekit/service-adapters/index.js.map +1 -0
- package/dist/adapters/livekit/service-adapters/recording.adapter.d.ts +19 -0
- package/dist/adapters/livekit/service-adapters/recording.adapter.d.ts.map +1 -0
- package/dist/adapters/livekit/service-adapters/recording.adapter.js +30 -0
- package/dist/adapters/livekit/service-adapters/recording.adapter.js.map +1 -0
- package/dist/adapters/livekit/service-adapters/stats.adapter.d.ts +21 -0
- package/dist/adapters/livekit/service-adapters/stats.adapter.d.ts.map +1 -0
- package/dist/adapters/livekit/service-adapters/stats.adapter.js +54 -0
- package/dist/adapters/livekit/service-adapters/stats.adapter.js.map +1 -0
- package/dist/adapters/livekit/service-adapters/track-attachment.adapter.d.ts +79 -0
- package/dist/adapters/livekit/service-adapters/track-attachment.adapter.d.ts.map +1 -0
- package/dist/adapters/livekit/service-adapters/track-attachment.adapter.js +348 -0
- package/dist/adapters/livekit/service-adapters/track-attachment.adapter.js.map +1 -0
- package/dist/adapters/livekit/services/index.d.ts +3 -0
- package/dist/adapters/livekit/services/index.d.ts.map +1 -0
- package/dist/adapters/livekit/services/index.js +3 -0
- package/dist/adapters/livekit/services/index.js.map +1 -0
- package/dist/adapters/livekit/services/recording.service.d.ts +29 -0
- package/dist/adapters/livekit/services/recording.service.d.ts.map +1 -0
- package/dist/adapters/livekit/services/recording.service.js +34 -0
- package/dist/adapters/livekit/services/recording.service.js.map +1 -0
- package/dist/adapters/livekit/services/stats.service.d.ts +24 -0
- package/dist/adapters/livekit/services/stats.service.d.ts.map +1 -0
- package/dist/adapters/livekit/services/stats.service.js +56 -0
- package/dist/adapters/livekit/services/stats.service.js.map +1 -0
- package/dist/core/api/auth.api.d.ts +52 -0
- package/dist/core/api/auth.api.d.ts.map +1 -0
- package/dist/core/api/auth.api.js +59 -0
- package/dist/core/api/auth.api.js.map +1 -0
- package/dist/core/api/http.d.ts +86 -0
- package/dist/core/api/http.d.ts.map +1 -0
- package/dist/core/api/http.js +146 -0
- package/dist/core/api/http.js.map +1 -0
- package/dist/core/errors/error-codes.d.ts +43 -0
- package/dist/core/errors/error-codes.d.ts.map +1 -0
- package/dist/core/errors/error-codes.js +42 -0
- package/dist/core/errors/error-codes.js.map +1 -0
- package/dist/core/errors/vroom.error.d.ts +99 -0
- package/dist/core/errors/vroom.error.d.ts.map +1 -0
- package/dist/core/errors/vroom.error.js +141 -0
- package/dist/core/errors/vroom.error.js.map +1 -0
- package/dist/core/ports/outbound/provider-adapter-factory.port.d.ts +41 -0
- package/dist/core/ports/outbound/provider-adapter-factory.port.d.ts.map +1 -0
- package/dist/core/ports/outbound/provider-adapter-factory.port.js +2 -0
- package/dist/core/ports/outbound/provider-adapter-factory.port.js.map +1 -0
- package/dist/core/ports/outbound/provider-adapter.port.d.ts +130 -0
- package/dist/core/ports/outbound/provider-adapter.port.d.ts.map +1 -0
- package/dist/core/ports/outbound/provider-adapter.port.js +2 -0
- package/dist/core/ports/outbound/provider-adapter.port.js.map +1 -0
- package/dist/core/ports/outbound/recording-adapter.port.d.ts +40 -0
- package/dist/core/ports/outbound/recording-adapter.port.d.ts.map +1 -0
- package/dist/core/ports/outbound/recording-adapter.port.js +2 -0
- package/dist/core/ports/outbound/recording-adapter.port.js.map +1 -0
- package/dist/core/ports/outbound/stats-adapter.port.d.ts +31 -0
- package/dist/core/ports/outbound/stats-adapter.port.d.ts.map +1 -0
- package/dist/core/ports/outbound/stats-adapter.port.js +2 -0
- package/dist/core/ports/outbound/stats-adapter.port.js.map +1 -0
- package/dist/core/ports/outbound/track-attachment-adapter.port.d.ts +86 -0
- package/dist/core/ports/outbound/track-attachment-adapter.port.d.ts.map +1 -0
- package/dist/core/ports/outbound/track-attachment-adapter.port.js +2 -0
- package/dist/core/ports/outbound/track-attachment-adapter.port.js.map +1 -0
- package/dist/core/provider-registry.d.ts +29 -0
- package/dist/core/provider-registry.d.ts.map +1 -0
- package/dist/core/provider-registry.js +45 -0
- package/dist/core/provider-registry.js.map +1 -0
- package/dist/core/services/base.service.d.ts +15 -0
- package/dist/core/services/base.service.d.ts.map +1 -0
- package/dist/core/services/base.service.js +10 -0
- package/dist/core/services/base.service.js.map +1 -0
- package/dist/core/services/recording.service.d.ts +50 -0
- package/dist/core/services/recording.service.d.ts.map +1 -0
- package/dist/core/services/recording.service.js +89 -0
- package/dist/core/services/recording.service.js.map +1 -0
- package/dist/core/services/stats.service.d.ts +32 -0
- package/dist/core/services/stats.service.d.ts.map +1 -0
- package/dist/core/services/stats.service.js +69 -0
- package/dist/core/services/stats.service.js.map +1 -0
- package/dist/core/session.d.ts +142 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +248 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/types/events.types.d.ts +263 -0
- package/dist/core/types/events.types.d.ts.map +1 -0
- package/dist/core/types/events.types.js +76 -0
- package/dist/core/types/events.types.js.map +1 -0
- package/dist/core/types/media.types.d.ts +81 -0
- package/dist/core/types/media.types.d.ts.map +1 -0
- package/dist/core/types/media.types.js +12 -0
- package/dist/core/types/media.types.js.map +1 -0
- package/dist/core/types/participant.types.d.ts +11 -0
- package/dist/core/types/participant.types.d.ts.map +1 -0
- package/dist/core/types/participant.types.js +2 -0
- package/dist/core/types/participant.types.js.map +1 -0
- package/dist/core/types/recording.types.d.ts +60 -0
- package/dist/core/types/recording.types.d.ts.map +1 -0
- package/dist/core/types/recording.types.js +7 -0
- package/dist/core/types/recording.types.js.map +1 -0
- package/dist/core/types/service-adapters.types.d.ts +46 -0
- package/dist/core/types/service-adapters.types.d.ts.map +1 -0
- package/dist/core/types/service-adapters.types.js +2 -0
- package/dist/core/types/service-adapters.types.js.map +1 -0
- package/dist/core/types/session.types.d.ts +57 -0
- package/dist/core/types/session.types.d.ts.map +1 -0
- package/dist/core/types/session.types.js +2 -0
- package/dist/core/types/session.types.js.map +1 -0
- package/dist/core/types/stats.types.d.ts +20 -0
- package/dist/core/types/stats.types.d.ts.map +1 -0
- package/dist/core/types/stats.types.js +7 -0
- package/dist/core/types/stats.types.js.map +1 -0
- package/dist/core/types/token.types.d.ts +82 -0
- package/dist/core/types/token.types.d.ts.map +1 -0
- package/dist/core/types/token.types.js +27 -0
- package/dist/core/types/token.types.js.map +1 -0
- package/dist/core/types/track.types.d.ts +39 -0
- package/dist/core/types/track.types.d.ts.map +1 -0
- package/dist/core/types/track.types.js +9 -0
- package/dist/core/types/track.types.js.map +1 -0
- package/dist/core/types/user.types.d.ts +23 -0
- package/dist/core/types/user.types.d.ts.map +1 -0
- package/dist/core/types/user.types.js +2 -0
- package/dist/core/types/user.types.js.map +1 -0
- package/dist/core/types/vroom.types.d.ts +86 -0
- package/dist/core/types/vroom.types.d.ts.map +1 -0
- package/dist/core/types/vroom.types.js +12 -0
- package/dist/core/types/vroom.types.js.map +1 -0
- package/dist/core/utils/token.d.ts +77 -0
- package/dist/core/utils/token.d.ts.map +1 -0
- package/dist/core/utils/token.js +127 -0
- package/dist/core/utils/token.js.map +1 -0
- package/dist/core/vroom.d.ts +90 -0
- package/dist/core/vroom.d.ts.map +1 -0
- package/dist/core/vroom.js +219 -0
- package/dist/core/vroom.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/react-native.d.ts +21 -0
- package/dist/react-native.d.ts.map +1 -0
- package/dist/react-native.js +32 -0
- package/dist/react-native.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { StatsEvent, } from '../types/stats.types';
|
|
2
|
+
import { BaseService } from './base.service';
|
|
3
|
+
/**
|
|
4
|
+
* Stats service for network quality and RTC statistics.
|
|
5
|
+
*
|
|
6
|
+
* This service has its own event system completely separate from Session events.
|
|
7
|
+
* Use `session.stats.on(StatsEvent.NetworkQuality, ...)` to listen to stats events.
|
|
8
|
+
*/
|
|
9
|
+
export class StatsService extends BaseService {
|
|
10
|
+
constructor(statsAdapter) {
|
|
11
|
+
super();
|
|
12
|
+
this.eventHandlers = new Map();
|
|
13
|
+
this.unsubscribes = [];
|
|
14
|
+
this.statsAdapter = statsAdapter;
|
|
15
|
+
this.setupEventListeners();
|
|
16
|
+
}
|
|
17
|
+
/** Get current network quality. */
|
|
18
|
+
getNetworkQuality() {
|
|
19
|
+
return this.statsAdapter.getNetworkQuality();
|
|
20
|
+
}
|
|
21
|
+
/** Get native RTC stats report. */
|
|
22
|
+
async getStats() {
|
|
23
|
+
return this.statsAdapter.getStats();
|
|
24
|
+
}
|
|
25
|
+
/** Register an event handler for stats events. */
|
|
26
|
+
on(event, handler) {
|
|
27
|
+
if (!this.eventHandlers.has(event)) {
|
|
28
|
+
this.eventHandlers.set(event, new Set());
|
|
29
|
+
}
|
|
30
|
+
this.eventHandlers.get(event).add(handler);
|
|
31
|
+
}
|
|
32
|
+
/** Remove an event handler for stats events. */
|
|
33
|
+
off(event, handler) {
|
|
34
|
+
if (!event) {
|
|
35
|
+
this.eventHandlers.clear();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!handler) {
|
|
39
|
+
this.eventHandlers.delete(event);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.eventHandlers.get(event)?.delete(handler);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Cleanup resources
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
destroy() {
|
|
49
|
+
this.unsubscribes.forEach(unsubscribe => unsubscribe());
|
|
50
|
+
this.unsubscribes = [];
|
|
51
|
+
this.eventHandlers.clear();
|
|
52
|
+
this.statsAdapter.destroy();
|
|
53
|
+
}
|
|
54
|
+
setupEventListeners() {
|
|
55
|
+
// Subscribe to network quality changes from stats adapter
|
|
56
|
+
const unsubscribe = this.statsAdapter.onNetworkQualityChanged((event) => {
|
|
57
|
+
// Emit through service's own event emitter
|
|
58
|
+
this.emit(StatsEvent.NetworkQuality, event);
|
|
59
|
+
});
|
|
60
|
+
this.unsubscribes.push(unsubscribe);
|
|
61
|
+
}
|
|
62
|
+
emit(event, payload) {
|
|
63
|
+
const handlers = this.eventHandlers.get(event);
|
|
64
|
+
if (handlers) {
|
|
65
|
+
handlers.forEach((handler) => handler(payload));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=stats.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.service.js","sourceRoot":"","sources":["../../../src/core/services/stats.service.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,GAGX,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,WAAW;IAK3C,YAAY,YAA0B;QACpC,KAAK,EAAE,CAAA;QAJD,kBAAa,GAAuC,IAAI,GAAG,EAAE,CAAA;QAC7D,iBAAY,GAAmB,EAAE,CAAA;QAIvC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IAED,mCAAmC;IACnC,iBAAiB;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAA;IAC9C,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA;IACrC,CAAC;IAED,kDAAkD;IAClD,EAAE,CAA2B,KAAQ,EAAE,OAAyB;QAC9D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QAC1C,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC;IAED,gDAAgD;IAChD,GAAG,CAA2B,KAAS,EAAE,OAA0B;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;YAC1B,OAAM;QACR,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;QAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;IAEO,mBAAmB;QACzB,0DAA0D;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,EAAE;YACtE,2CAA2C;YAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACrC,CAAC;IAEO,IAAI,CAA2B,KAAQ,EAAE,OAAwC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { ProviderAdapter } from './ports/outbound/provider-adapter.port';
|
|
2
|
+
import type { TrackAttachmentAdapter } from './ports/outbound/track-attachment-adapter.port';
|
|
3
|
+
import type { ConnectParams, SessionState } from './types/session.types';
|
|
4
|
+
import type { Participant } from './types/participant.types';
|
|
5
|
+
import type { Track } from './types/track.types';
|
|
6
|
+
import type { SwitchDeviceOptions, ScreenShareOptions, DeviceKind } from './types/media.types';
|
|
7
|
+
import { type SessionEventName, type EventHandlers } from './types/events.types';
|
|
8
|
+
import { StatsService } from './services/stats.service';
|
|
9
|
+
import { RecordingService } from './services/recording.service';
|
|
10
|
+
type EventHandler<E extends SessionEventName> = NonNullable<EventHandlers[E]>;
|
|
11
|
+
/**
|
|
12
|
+
* Session represents an active RTC connection.
|
|
13
|
+
*
|
|
14
|
+
* Created by `Vroom.connect()`, provides methods for:
|
|
15
|
+
* - Media control (mic, camera, screen share)
|
|
16
|
+
* - Participant management
|
|
17
|
+
* - Event handling
|
|
18
|
+
*/
|
|
19
|
+
export declare class Session {
|
|
20
|
+
private state;
|
|
21
|
+
private adapter;
|
|
22
|
+
private params;
|
|
23
|
+
private services;
|
|
24
|
+
private tokenService;
|
|
25
|
+
private handleConnected;
|
|
26
|
+
private handleDisconnected;
|
|
27
|
+
private handleReconnecting;
|
|
28
|
+
private handleReconnected;
|
|
29
|
+
/** Stats service for network quality and RTC statistics. */
|
|
30
|
+
stats: StatsService;
|
|
31
|
+
/** Recording service for session recording (optional - requires permissions). */
|
|
32
|
+
recording?: RecordingService;
|
|
33
|
+
/**
|
|
34
|
+
* Track attachment adapter for attaching tracks to media elements.
|
|
35
|
+
* Use this instead of setting srcObject directly to ensure proper
|
|
36
|
+
* provider integration (e.g., LiveKit adaptive streaming).
|
|
37
|
+
*/
|
|
38
|
+
trackAttachment: TrackAttachmentAdapter;
|
|
39
|
+
constructor(adapter: ProviderAdapter, params: ConnectParams, sessionToken: string);
|
|
40
|
+
/**
|
|
41
|
+
* Get current session state
|
|
42
|
+
*/
|
|
43
|
+
getState(): SessionState;
|
|
44
|
+
/**
|
|
45
|
+
* Disconnect from session and clean up resources
|
|
46
|
+
*
|
|
47
|
+
* Behavior:
|
|
48
|
+
* 1. Unpublish all local tracks (handled by adapter)
|
|
49
|
+
* 2. Disconnect from session
|
|
50
|
+
* 3. Clean up event listeners (handled by adapter)
|
|
51
|
+
* 4. Update state to "disconnected"
|
|
52
|
+
*
|
|
53
|
+
* Safe to call multiple times - subsequent calls are no-ops.
|
|
54
|
+
*/
|
|
55
|
+
disconnect(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Disable microphone
|
|
58
|
+
* @throws VroomError if operation fails
|
|
59
|
+
*/
|
|
60
|
+
disableMic(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Enable microphone
|
|
63
|
+
* @throws VroomError if operation fails
|
|
64
|
+
*/
|
|
65
|
+
enableMic(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Disable camera
|
|
68
|
+
* @throws VroomError if operation fails
|
|
69
|
+
*/
|
|
70
|
+
disableCamera(): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Enable camera
|
|
73
|
+
* @throws VroomError if operation fails
|
|
74
|
+
*/
|
|
75
|
+
enableCamera(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Switch audio/video input or output device.
|
|
78
|
+
*
|
|
79
|
+
* @param options - Device IDs to switch to
|
|
80
|
+
* @throws VroomError with code `E_MEDIA` if device switch fails
|
|
81
|
+
* @throws VroomError with code `E_UNSUPPORTED_FEATURE` if audioOutputId used on unsupported browser
|
|
82
|
+
*/
|
|
83
|
+
switchDevice(options: SwitchDeviceOptions): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Get currently active device ID for a given kind.
|
|
86
|
+
*
|
|
87
|
+
* @param kind - Device kind to query
|
|
88
|
+
* @returns Device ID or undefined if not set
|
|
89
|
+
*/
|
|
90
|
+
getActiveDevice(kind: DeviceKind): string | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Start screen sharing
|
|
93
|
+
*/
|
|
94
|
+
startScreenShare(_options?: ScreenShareOptions): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Stop screen sharing
|
|
97
|
+
*/
|
|
98
|
+
stopScreenShare(): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Publish a custom track to the session
|
|
101
|
+
* @param track - MediaStreamTrack to publish (audio or video)
|
|
102
|
+
* @returns Published Track object
|
|
103
|
+
*/
|
|
104
|
+
publishTrack(track: MediaStreamTrack): Promise<Track>;
|
|
105
|
+
/**
|
|
106
|
+
* Unpublish a track from the session
|
|
107
|
+
* @param trackId - ID of the track to unpublish
|
|
108
|
+
*/
|
|
109
|
+
unpublishTrack(trackId: string): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Get all participants in the session
|
|
112
|
+
*/
|
|
113
|
+
getParticipants(): Participant[];
|
|
114
|
+
/**
|
|
115
|
+
* Get all tracks in the session
|
|
116
|
+
*/
|
|
117
|
+
getTracks(): Track[];
|
|
118
|
+
/**
|
|
119
|
+
* Register event listener
|
|
120
|
+
*/
|
|
121
|
+
on<E extends SessionEventName>(event: E, handler: EventHandler<E>): this;
|
|
122
|
+
/**
|
|
123
|
+
* Remove event listener
|
|
124
|
+
*/
|
|
125
|
+
off<E extends SessionEventName>(event: E, handler?: EventHandler<E>): this;
|
|
126
|
+
/**
|
|
127
|
+
* Called by Vroom.connect() to initiate connection
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
130
|
+
_connect(token: string, endpoint: string): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Initialize all services based on available adapters and permissions
|
|
133
|
+
* @private
|
|
134
|
+
*/
|
|
135
|
+
private initializeServices;
|
|
136
|
+
/**
|
|
137
|
+
* Setup event handlers from ConnectParams
|
|
138
|
+
*/
|
|
139
|
+
private setupEventHandlers;
|
|
140
|
+
}
|
|
141
|
+
export {};
|
|
142
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { SessionEvent } from './types/events.types';
|
|
2
|
+
import { StatsService } from './services/stats.service';
|
|
3
|
+
import { RecordingService } from './services/recording.service';
|
|
4
|
+
import { TokenService } from './utils/token';
|
|
5
|
+
/**
|
|
6
|
+
* Session represents an active RTC connection.
|
|
7
|
+
*
|
|
8
|
+
* Created by `Vroom.connect()`, provides methods for:
|
|
9
|
+
* - Media control (mic, camera, screen share)
|
|
10
|
+
* - Participant management
|
|
11
|
+
* - Event handling
|
|
12
|
+
*/
|
|
13
|
+
export class Session {
|
|
14
|
+
constructor(adapter, params, sessionToken) {
|
|
15
|
+
this.state = 'idle';
|
|
16
|
+
this.services = []; // Track all services for cleanup
|
|
17
|
+
// State handlers - stored as class properties for proper cleanup
|
|
18
|
+
this.handleConnected = () => {
|
|
19
|
+
this.state = 'connected';
|
|
20
|
+
};
|
|
21
|
+
this.handleDisconnected = (event) => {
|
|
22
|
+
// Use 'ended' for permanent disconnections, 'disconnected' for recoverable ones
|
|
23
|
+
if (event.reason === 'room-deleted' || event.reason === 'participant-removed') {
|
|
24
|
+
this.state = 'ended';
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.state = 'disconnected';
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
this.handleReconnecting = () => {
|
|
31
|
+
this.state = 'reconnecting';
|
|
32
|
+
};
|
|
33
|
+
this.handleReconnected = () => {
|
|
34
|
+
this.state = 'connected';
|
|
35
|
+
};
|
|
36
|
+
this.adapter = adapter;
|
|
37
|
+
this.params = params;
|
|
38
|
+
this.tokenService = new TokenService(sessionToken);
|
|
39
|
+
// Services and event handlers will be initialized in _connect()
|
|
40
|
+
}
|
|
41
|
+
// ============ Lifecycle ============
|
|
42
|
+
/**
|
|
43
|
+
* Get current session state
|
|
44
|
+
*/
|
|
45
|
+
getState() {
|
|
46
|
+
return this.state;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Disconnect from session and clean up resources
|
|
50
|
+
*
|
|
51
|
+
* Behavior:
|
|
52
|
+
* 1. Unpublish all local tracks (handled by adapter)
|
|
53
|
+
* 2. Disconnect from session
|
|
54
|
+
* 3. Clean up event listeners (handled by adapter)
|
|
55
|
+
* 4. Update state to "disconnected"
|
|
56
|
+
*
|
|
57
|
+
* Safe to call multiple times - subsequent calls are no-ops.
|
|
58
|
+
*/
|
|
59
|
+
async disconnect() {
|
|
60
|
+
// Guard against double-disconnect
|
|
61
|
+
if (this.state === 'disconnected' || this.state === 'ended') {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Cleanup all services
|
|
65
|
+
this.services.forEach(service => service.destroy());
|
|
66
|
+
this.services = [];
|
|
67
|
+
// Cleanup track attachment adapter
|
|
68
|
+
this.trackAttachment?.destroy();
|
|
69
|
+
// Disconnect (adapter emits Disconnected event, user handlers receive it)
|
|
70
|
+
await this.adapter.disconnect();
|
|
71
|
+
this.state = 'disconnected';
|
|
72
|
+
// Cleanup internal state handlers AFTER disconnect
|
|
73
|
+
this.adapter.off(SessionEvent.Connected, this.handleConnected);
|
|
74
|
+
this.adapter.off(SessionEvent.Disconnected, this.handleDisconnected);
|
|
75
|
+
this.adapter.off(SessionEvent.Reconnecting, this.handleReconnecting);
|
|
76
|
+
this.adapter.off(SessionEvent.Reconnected, this.handleReconnected);
|
|
77
|
+
}
|
|
78
|
+
// ============ Media Control ============
|
|
79
|
+
/**
|
|
80
|
+
* Disable microphone
|
|
81
|
+
* @throws VroomError if operation fails
|
|
82
|
+
*/
|
|
83
|
+
async disableMic() {
|
|
84
|
+
await this.adapter.muteTrack('audio');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Enable microphone
|
|
88
|
+
* @throws VroomError if operation fails
|
|
89
|
+
*/
|
|
90
|
+
async enableMic() {
|
|
91
|
+
await this.adapter.unmuteTrack('audio');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Disable camera
|
|
95
|
+
* @throws VroomError if operation fails
|
|
96
|
+
*/
|
|
97
|
+
async disableCamera() {
|
|
98
|
+
await this.adapter.muteTrack('video');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Enable camera
|
|
102
|
+
* @throws VroomError if operation fails
|
|
103
|
+
*/
|
|
104
|
+
async enableCamera() {
|
|
105
|
+
await this.adapter.unmuteTrack('video');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Switch audio/video input or output device.
|
|
109
|
+
*
|
|
110
|
+
* @param options - Device IDs to switch to
|
|
111
|
+
* @throws VroomError with code `E_MEDIA` if device switch fails
|
|
112
|
+
* @throws VroomError with code `E_UNSUPPORTED_FEATURE` if audioOutputId used on unsupported browser
|
|
113
|
+
*/
|
|
114
|
+
async switchDevice(options) {
|
|
115
|
+
return this.adapter.switchDevice(options);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get currently active device ID for a given kind.
|
|
119
|
+
*
|
|
120
|
+
* @param kind - Device kind to query
|
|
121
|
+
* @returns Device ID or undefined if not set
|
|
122
|
+
*/
|
|
123
|
+
getActiveDevice(kind) {
|
|
124
|
+
return this.adapter.getActiveDevice(kind);
|
|
125
|
+
}
|
|
126
|
+
// ============ Screen Sharing ============
|
|
127
|
+
/**
|
|
128
|
+
* Start screen sharing
|
|
129
|
+
*/
|
|
130
|
+
async startScreenShare(_options) {
|
|
131
|
+
// TODO: Implement screen sharing
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Stop screen sharing
|
|
135
|
+
*/
|
|
136
|
+
async stopScreenShare() {
|
|
137
|
+
// TODO: Implement screen sharing
|
|
138
|
+
}
|
|
139
|
+
// ============ Track Publishing ============
|
|
140
|
+
/**
|
|
141
|
+
* Publish a custom track to the session
|
|
142
|
+
* @param track - MediaStreamTrack to publish (audio or video)
|
|
143
|
+
* @returns Published Track object
|
|
144
|
+
*/
|
|
145
|
+
async publishTrack(track) {
|
|
146
|
+
return this.adapter.publishTrack(track);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Unpublish a track from the session
|
|
150
|
+
* @param trackId - ID of the track to unpublish
|
|
151
|
+
*/
|
|
152
|
+
async unpublishTrack(trackId) {
|
|
153
|
+
return this.adapter.unpublishTrack(trackId);
|
|
154
|
+
}
|
|
155
|
+
// ============ Participants ============
|
|
156
|
+
/**
|
|
157
|
+
* Get all participants in the session
|
|
158
|
+
*/
|
|
159
|
+
getParticipants() {
|
|
160
|
+
return this.adapter.getParticipants();
|
|
161
|
+
}
|
|
162
|
+
// ============ Tracks ============
|
|
163
|
+
/**
|
|
164
|
+
* Get all tracks in the session
|
|
165
|
+
*/
|
|
166
|
+
getTracks() {
|
|
167
|
+
return this.adapter.getTracks();
|
|
168
|
+
}
|
|
169
|
+
// ============ Events ============
|
|
170
|
+
/**
|
|
171
|
+
* Register event listener
|
|
172
|
+
*/
|
|
173
|
+
on(event, handler) {
|
|
174
|
+
this.adapter.on(event, handler);
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Remove event listener
|
|
179
|
+
*/
|
|
180
|
+
off(event, handler) {
|
|
181
|
+
this.adapter.off(event, handler);
|
|
182
|
+
return this;
|
|
183
|
+
}
|
|
184
|
+
// ============ Internal ============
|
|
185
|
+
/**
|
|
186
|
+
* Called by Vroom.connect() to initiate connection
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
async _connect(token, endpoint) {
|
|
190
|
+
this.state = 'connecting';
|
|
191
|
+
// Register internal state handlers FIRST (before user handlers)
|
|
192
|
+
this.adapter.on(SessionEvent.Connected, this.handleConnected);
|
|
193
|
+
this.adapter.on(SessionEvent.Disconnected, this.handleDisconnected);
|
|
194
|
+
this.adapter.on(SessionEvent.Reconnecting, this.handleReconnecting);
|
|
195
|
+
this.adapter.on(SessionEvent.Reconnected, this.handleReconnected);
|
|
196
|
+
// Register user event handlers AFTER internal handlers
|
|
197
|
+
this.setupEventHandlers();
|
|
198
|
+
await this.adapter.connect({
|
|
199
|
+
roomName: this.params.roomName,
|
|
200
|
+
token,
|
|
201
|
+
endpoint,
|
|
202
|
+
media: this.params.media,
|
|
203
|
+
user: this.params.user,
|
|
204
|
+
});
|
|
205
|
+
// Initialize all services after connection
|
|
206
|
+
this.initializeServices();
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Initialize all services based on available adapters and permissions
|
|
210
|
+
* @private
|
|
211
|
+
*/
|
|
212
|
+
initializeServices() {
|
|
213
|
+
const permissions = this.tokenService.getPermissions();
|
|
214
|
+
const adapters = this.adapter.createServiceAdapters(permissions);
|
|
215
|
+
// Stats (required - always available)
|
|
216
|
+
this.stats = new StatsService(adapters.stats);
|
|
217
|
+
this.services.push(this.stats);
|
|
218
|
+
// Track attachment (required - always available)
|
|
219
|
+
this.trackAttachment = adapters.trackAttachment;
|
|
220
|
+
// Recording (optional - requires "recording" feature + host/moderator role)
|
|
221
|
+
if (adapters.recording) {
|
|
222
|
+
this.recording = new RecordingService(adapters.recording);
|
|
223
|
+
this.services.push(this.recording);
|
|
224
|
+
}
|
|
225
|
+
// Future services will be added here based on permissions:
|
|
226
|
+
// if (adapters.chat) {
|
|
227
|
+
// this.chat = new ChatService(adapters.chat)
|
|
228
|
+
// this.services.push(this.chat)
|
|
229
|
+
// }
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Setup event handlers from ConnectParams
|
|
233
|
+
*/
|
|
234
|
+
setupEventHandlers() {
|
|
235
|
+
const handlers = this.params.eventHandlers;
|
|
236
|
+
if (!handlers)
|
|
237
|
+
return;
|
|
238
|
+
// Register all provided event handlers
|
|
239
|
+
const eventNames = Object.keys(handlers);
|
|
240
|
+
for (const event of eventNames) {
|
|
241
|
+
const handler = handlers[event];
|
|
242
|
+
if (handler) {
|
|
243
|
+
this.adapter.on(event, handler);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|