@lsdsoftware/janus-client-node 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +2 -2
- package/dist/client.js +6 -8
- package/dist/plugin-handle.d.ts +2 -0
- package/dist/plugin-handle.js +5 -1
- package/dist/session.d.ts +4 -2
- package/dist/session.js +3 -2
- package/dist/types.d.ts +3 -7
- package/dist/util.d.ts +5 -3
- package/package.json +1 -1
- package/src/client.ts +21 -24
- package/src/plugin-handle.ts +17 -2
- package/src/session.ts +19 -7
- package/src/types.ts +3 -7
- package/src/util.ts +4 -4
package/dist/client.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ import { ClientOptions } from "ws";
|
|
|
4
4
|
import { JanusRequest } from "./types.js";
|
|
5
5
|
export declare function createClient(websocketUrl: string, websocketOpts?: ClientOptions | ClientRequestArgs): rxjs.Observable<{
|
|
6
6
|
requestSubject: rxjs.Subject<JanusRequest>;
|
|
7
|
-
send$: rxjs.Observable<
|
|
8
|
-
receive$: rxjs.Observable<unknown
|
|
7
|
+
send$: rxjs.Observable<never>;
|
|
8
|
+
receive$: rxjs.Observable<Record<string, unknown>>;
|
|
9
9
|
close$: rxjs.Observable<import("ws").default.CloseEvent>;
|
|
10
10
|
close: (code?: number, data?: string | Buffer) => void;
|
|
11
11
|
}>;
|
package/dist/client.js
CHANGED
|
@@ -11,13 +11,11 @@ export function createClient(websocketUrl, websocketOpts) {
|
|
|
11
11
|
send$: requestSubject.pipe(rxjs.concatMap(request => {
|
|
12
12
|
const txId = String(Math.random());
|
|
13
13
|
request.message.transaction = txId;
|
|
14
|
-
|
|
14
|
+
conn.send(JSON.stringify(request.message), err => {
|
|
15
15
|
if (err) {
|
|
16
|
-
|
|
17
|
-
subscriber.complete();
|
|
16
|
+
request.reject(err);
|
|
18
17
|
}
|
|
19
18
|
else {
|
|
20
|
-
subscriber.complete();
|
|
21
19
|
pendingTxs.set(txId, response => {
|
|
22
20
|
pendingTxs.delete(txId);
|
|
23
21
|
if (response.janus == 'error') {
|
|
@@ -29,7 +27,8 @@ export function createClient(websocketUrl, websocketOpts) {
|
|
|
29
27
|
}
|
|
30
28
|
});
|
|
31
29
|
}
|
|
32
|
-
})
|
|
30
|
+
});
|
|
31
|
+
return rxjs.EMPTY;
|
|
33
32
|
}), rxjs.share()),
|
|
34
33
|
receive$: conn.message$.pipe(rxjs.concatMap(event => {
|
|
35
34
|
try {
|
|
@@ -50,9 +49,8 @@ export function createClient(websocketUrl, websocketOpts) {
|
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
51
|
catch (err) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return rxjs.of(err);
|
|
52
|
+
console.error('JanusClient receive fail', event.data, err);
|
|
53
|
+
return rxjs.EMPTY;
|
|
56
54
|
}
|
|
57
55
|
}), rxjs.share()),
|
|
58
56
|
close$: conn.close$,
|
package/dist/plugin-handle.d.ts
CHANGED
|
@@ -2,8 +2,10 @@ import * as rxjs from "rxjs";
|
|
|
2
2
|
import { JanusRequest } from "./types.js";
|
|
3
3
|
export declare function createPluginHandle(session: {
|
|
4
4
|
requestSubject: rxjs.Subject<JanusRequest>;
|
|
5
|
+
receive$: rxjs.Observable<Record<string, unknown>>;
|
|
5
6
|
}, plugin: string): rxjs.Observable<{
|
|
6
7
|
requestSubject: rxjs.Subject<JanusRequest>;
|
|
7
8
|
send$: rxjs.Observable<never>;
|
|
9
|
+
receive$: rxjs.Observable<Record<string, unknown>>;
|
|
8
10
|
detach(): void;
|
|
9
11
|
}>;
|
package/dist/plugin-handle.js
CHANGED
|
@@ -28,7 +28,11 @@ export function createPluginHandle(session, plugin) {
|
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
30
|
return rxjs.EMPTY;
|
|
31
|
-
})),
|
|
31
|
+
}), rxjs.share()),
|
|
32
|
+
receive$: session.receive$.pipe(rxjs.filter(message => message.handle_id == handleId), rxjs.map(message => {
|
|
33
|
+
const { data } = message.plugindata;
|
|
34
|
+
return data;
|
|
35
|
+
}), rxjs.share()),
|
|
32
36
|
detach() {
|
|
33
37
|
session.requestSubject.next({
|
|
34
38
|
message: { janus: "detach" },
|
package/dist/session.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as rxjs from "rxjs";
|
|
2
|
-
import {
|
|
2
|
+
import { JanusRequest } from "./types.js";
|
|
3
3
|
export declare function createSession(client: {
|
|
4
4
|
requestSubject: rxjs.Subject<JanusRequest>;
|
|
5
|
+
receive$: rxjs.Observable<Record<string, unknown>>;
|
|
5
6
|
}, { keepAliveInterval }?: {
|
|
6
7
|
keepAliveInterval?: number;
|
|
7
8
|
}): rxjs.Observable<{
|
|
8
9
|
requestSubject: rxjs.Subject<JanusRequest>;
|
|
9
10
|
send$: rxjs.Observable<never>;
|
|
10
|
-
|
|
11
|
+
receive$: rxjs.Observable<Record<string, unknown>>;
|
|
12
|
+
keepAlive$: rxjs.Observable<Error>;
|
|
11
13
|
destroy(): void;
|
|
12
14
|
}>;
|
package/dist/session.js
CHANGED
|
@@ -9,7 +9,8 @@ export function createSession(client, { keepAliveInterval = 45_000 } = {}) {
|
|
|
9
9
|
request.message.session_id = sessionId;
|
|
10
10
|
client.requestSubject.next(request);
|
|
11
11
|
return rxjs.EMPTY;
|
|
12
|
-
})),
|
|
12
|
+
}), rxjs.share()),
|
|
13
|
+
receive$: client.receive$.pipe(rxjs.filter(message => message.session_id == sessionId), rxjs.share()),
|
|
13
14
|
keepAlive$: requestSubject.pipe(rxjs.switchMap(() => rxjs.interval(keepAliveInterval).pipe(rxjs.switchMap(() => new rxjs.Observable(subscriber => client.requestSubject.next({
|
|
14
15
|
message: { janus: "keepalive", session_id: sessionId },
|
|
15
16
|
stacktrace: new Error(),
|
|
@@ -20,7 +21,7 @@ export function createSession(client, { keepAliveInterval = 45_000 } = {}) {
|
|
|
20
21
|
subscriber.next(err);
|
|
21
22
|
subscriber.complete();
|
|
22
23
|
}
|
|
23
|
-
})))))),
|
|
24
|
+
}))))), rxjs.share()),
|
|
24
25
|
destroy() {
|
|
25
26
|
client.requestSubject.next({
|
|
26
27
|
message: { janus: 'destroy' },
|
package/dist/types.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
export type JanusMessage = Record<string, unknown>;
|
|
2
|
-
export type JanusError = Error & {
|
|
3
|
-
code: number;
|
|
4
|
-
};
|
|
5
1
|
export interface JanusRequest {
|
|
6
|
-
readonly message:
|
|
2
|
+
readonly message: Record<string, unknown>;
|
|
7
3
|
readonly stacktrace: Error;
|
|
8
|
-
fulfill(response:
|
|
9
|
-
reject(err:
|
|
4
|
+
fulfill(response: Record<string, unknown>): void;
|
|
5
|
+
reject(err: Error): void;
|
|
10
6
|
}
|
package/dist/util.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as rxjs from "rxjs";
|
|
2
|
-
import {
|
|
3
|
-
export declare function request<T
|
|
4
|
-
export declare function makeJanusError({ stacktrace, message }: JanusRequest, code: number, reason: string):
|
|
2
|
+
import { JanusRequest } from "./types.js";
|
|
3
|
+
export declare function request<T>(requestSubject: rxjs.Subject<JanusRequest>, message: Record<string, unknown>): rxjs.Observable<T>;
|
|
4
|
+
export declare function makeJanusError({ stacktrace, message }: JanusRequest, code: number, reason: string): Error & {
|
|
5
|
+
code: number;
|
|
6
|
+
};
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -3,39 +3,36 @@ import assert from "assert"
|
|
|
3
3
|
import { ClientRequestArgs } from "http"
|
|
4
4
|
import * as rxjs from "rxjs"
|
|
5
5
|
import { ClientOptions } from "ws"
|
|
6
|
-
import {
|
|
6
|
+
import { JanusRequest } from "./types.js"
|
|
7
7
|
import { makeJanusError } from "./util.js"
|
|
8
8
|
|
|
9
9
|
export function createClient(websocketUrl: string, websocketOpts?: ClientOptions | ClientRequestArgs) {
|
|
10
10
|
return connect(websocketUrl, websocketOpts, 'janus-protocol').pipe(
|
|
11
11
|
rxjs.map(conn => {
|
|
12
12
|
const requestSubject = new rxjs.Subject<JanusRequest>()
|
|
13
|
-
const pendingTxs = new Map<unknown, (response:
|
|
13
|
+
const pendingTxs = new Map<unknown, (response: Record<string, unknown>) => void>()
|
|
14
14
|
return {
|
|
15
15
|
requestSubject,
|
|
16
16
|
send$: requestSubject.pipe(
|
|
17
17
|
rxjs.concatMap(request => {
|
|
18
18
|
const txId = String(Math.random())
|
|
19
19
|
request.message.transaction = txId
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
-
)
|
|
20
|
+
conn.send(JSON.stringify(request.message), err => {
|
|
21
|
+
if (err) {
|
|
22
|
+
request.reject(err)
|
|
23
|
+
} else {
|
|
24
|
+
pendingTxs.set(txId, response => {
|
|
25
|
+
pendingTxs.delete(txId)
|
|
26
|
+
if (response.janus == 'error') {
|
|
27
|
+
const { code, reason } = response.error as { code: number, reason: string }
|
|
28
|
+
request.reject(makeJanusError(request, code, reason))
|
|
29
|
+
} else {
|
|
30
|
+
request.fulfill(response)
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
return rxjs.EMPTY
|
|
39
36
|
}),
|
|
40
37
|
rxjs.share()
|
|
41
38
|
),
|
|
@@ -43,7 +40,7 @@ export function createClient(websocketUrl: string, websocketOpts?: ClientOptions
|
|
|
43
40
|
rxjs.concatMap(event => {
|
|
44
41
|
try {
|
|
45
42
|
assert(typeof event.data == 'string')
|
|
46
|
-
const message = JSON.parse(event.data) as
|
|
43
|
+
const message = JSON.parse(event.data) as Record<string, unknown>
|
|
47
44
|
if (message.janus == 'event' && typeof message.transaction == 'undefined') {
|
|
48
45
|
return rxjs.of(message)
|
|
49
46
|
} else {
|
|
@@ -56,8 +53,8 @@ export function createClient(websocketUrl: string, websocketOpts?: ClientOptions
|
|
|
56
53
|
}
|
|
57
54
|
}
|
|
58
55
|
} catch (err) {
|
|
59
|
-
|
|
60
|
-
return rxjs.
|
|
56
|
+
console.error('JanusClient receive fail', event.data, err)
|
|
57
|
+
return rxjs.EMPTY
|
|
61
58
|
}
|
|
62
59
|
}),
|
|
63
60
|
rxjs.share()
|
package/src/plugin-handle.ts
CHANGED
|
@@ -2,7 +2,13 @@ import * as rxjs from "rxjs"
|
|
|
2
2
|
import { JanusRequest } from "./types.js"
|
|
3
3
|
import { makeJanusError, request } from "./util.js"
|
|
4
4
|
|
|
5
|
-
export function createPluginHandle(
|
|
5
|
+
export function createPluginHandle(
|
|
6
|
+
session: {
|
|
7
|
+
requestSubject: rxjs.Subject<JanusRequest>
|
|
8
|
+
receive$: rxjs.Observable<Record<string, unknown>>
|
|
9
|
+
},
|
|
10
|
+
plugin: string
|
|
11
|
+
) {
|
|
6
12
|
return request<{ data: { id: number } }>(session.requestSubject, { janus: "attach", plugin }).pipe(
|
|
7
13
|
rxjs.map(({ data: { id: handleId }}) => {
|
|
8
14
|
const requestSubject = new rxjs.Subject<JanusRequest>()
|
|
@@ -31,7 +37,16 @@ export function createPluginHandle(session: { requestSubject: rxjs.Subject<Janus
|
|
|
31
37
|
}
|
|
32
38
|
})
|
|
33
39
|
return rxjs.EMPTY
|
|
34
|
-
})
|
|
40
|
+
}),
|
|
41
|
+
rxjs.share()
|
|
42
|
+
),
|
|
43
|
+
receive$: session.receive$.pipe(
|
|
44
|
+
rxjs.filter(message => message.handle_id == handleId),
|
|
45
|
+
rxjs.map(message => {
|
|
46
|
+
const { data } = message.plugindata as { data: Record<string, unknown> }
|
|
47
|
+
return data
|
|
48
|
+
}),
|
|
49
|
+
rxjs.share()
|
|
35
50
|
),
|
|
36
51
|
detach() {
|
|
37
52
|
session.requestSubject.next({
|
package/src/session.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import * as rxjs from "rxjs"
|
|
2
|
-
import {
|
|
2
|
+
import { JanusRequest } from "./types.js"
|
|
3
3
|
import { request } from "./util.js"
|
|
4
4
|
|
|
5
|
-
export function createSession(
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export function createSession(
|
|
6
|
+
client: {
|
|
7
|
+
requestSubject: rxjs.Subject<JanusRequest>
|
|
8
|
+
receive$: rxjs.Observable<Record<string, unknown>>
|
|
9
|
+
},
|
|
10
|
+
{ keepAliveInterval = 45_000 }: {
|
|
11
|
+
keepAliveInterval?: number
|
|
12
|
+
} = {}
|
|
13
|
+
) {
|
|
8
14
|
return request<{ data: { id: number } }>(client.requestSubject, { janus: 'create' }).pipe(
|
|
9
15
|
rxjs.map(({ data: { id: sessionId } }) => {
|
|
10
16
|
const requestSubject = new rxjs.Subject<JanusRequest>()
|
|
@@ -15,13 +21,18 @@ export function createSession(client: { requestSubject: rxjs.Subject<JanusReques
|
|
|
15
21
|
request.message.session_id = sessionId
|
|
16
22
|
client.requestSubject.next(request)
|
|
17
23
|
return rxjs.EMPTY
|
|
18
|
-
})
|
|
24
|
+
}),
|
|
25
|
+
rxjs.share()
|
|
26
|
+
),
|
|
27
|
+
receive$: client.receive$.pipe(
|
|
28
|
+
rxjs.filter(message => message.session_id == sessionId),
|
|
29
|
+
rxjs.share()
|
|
19
30
|
),
|
|
20
31
|
keepAlive$: requestSubject.pipe(
|
|
21
32
|
rxjs.switchMap(() =>
|
|
22
33
|
rxjs.interval(keepAliveInterval).pipe(
|
|
23
34
|
rxjs.switchMap(() =>
|
|
24
|
-
new rxjs.Observable<
|
|
35
|
+
new rxjs.Observable<Error>(subscriber =>
|
|
25
36
|
client.requestSubject.next({
|
|
26
37
|
message: { janus: "keepalive", session_id: sessionId },
|
|
27
38
|
stacktrace: new Error(),
|
|
@@ -36,7 +47,8 @@ export function createSession(client: { requestSubject: rxjs.Subject<JanusReques
|
|
|
36
47
|
)
|
|
37
48
|
)
|
|
38
49
|
)
|
|
39
|
-
)
|
|
50
|
+
),
|
|
51
|
+
rxjs.share()
|
|
40
52
|
),
|
|
41
53
|
destroy() {
|
|
42
54
|
client.requestSubject.next({
|
package/src/types.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
export type JanusMessage = Record<string, unknown>
|
|
3
|
-
|
|
4
|
-
export type JanusError = Error & { code: number }
|
|
5
|
-
|
|
6
2
|
export interface JanusRequest {
|
|
7
|
-
readonly message:
|
|
3
|
+
readonly message: Record<string, unknown>
|
|
8
4
|
readonly stacktrace: Error
|
|
9
|
-
fulfill(response:
|
|
10
|
-
reject(err:
|
|
5
|
+
fulfill(response: Record<string, unknown>): void
|
|
6
|
+
reject(err: Error): void
|
|
11
7
|
}
|
package/src/util.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as rxjs from "rxjs"
|
|
2
|
-
import {
|
|
2
|
+
import { JanusRequest } from "./types.js"
|
|
3
3
|
|
|
4
|
-
export function request<T
|
|
4
|
+
export function request<T>(
|
|
5
5
|
requestSubject: rxjs.Subject<JanusRequest>,
|
|
6
|
-
message:
|
|
6
|
+
message: Record<string, unknown>
|
|
7
7
|
) {
|
|
8
8
|
const stacktrace = new Error()
|
|
9
9
|
return new rxjs.Observable<T>(subscriber =>
|
|
@@ -21,7 +21,7 @@ export function request<T extends JanusMessage>(
|
|
|
21
21
|
)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export function makeJanusError({ stacktrace, message }: JanusRequest, code: number, reason: string)
|
|
24
|
+
export function makeJanusError({ stacktrace, message }: JanusRequest, code: number, reason: string) {
|
|
25
25
|
stacktrace.name = 'JanusError'
|
|
26
26
|
stacktrace.cause = message
|
|
27
27
|
stacktrace.message = reason
|