@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,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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|