@lsdsoftware/janus-client-node 1.0.2 → 1.0.3

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 CHANGED
@@ -1,11 +1,11 @@
1
1
  import { ClientRequestArgs } from "http";
2
2
  import * as rxjs from "rxjs";
3
3
  import { ClientOptions } from "ws";
4
- import { JanusRequest } from "./types.js";
4
+ import { JanusMessage, 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<Error>;
8
- receive$: rxjs.Observable<unknown>;
7
+ send$: rxjs.Observable<never>;
8
+ receive$: rxjs.Observable<JanusMessage>;
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
- return new rxjs.Observable(subscriber => conn.send(JSON.stringify(request.message), err => {
14
+ conn.send(JSON.stringify(request.message), err => {
15
15
  if (err) {
16
- subscriber.next(err);
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
- if (err instanceof Error)
54
- err.cause = event.data;
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$,
@@ -1,9 +1,11 @@
1
1
  import * as rxjs from "rxjs";
2
- import { JanusRequest } from "./types.js";
2
+ import { JanusMessage, JanusRequest } from "./types.js";
3
3
  export declare function createPluginHandle(session: {
4
4
  requestSubject: rxjs.Subject<JanusRequest>;
5
+ receive$: rxjs.Observable<JanusMessage>;
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
  }>;
@@ -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 { JanusError, JanusRequest } from "./types.js";
2
+ import { JanusMessage, JanusRequest } from "./types.js";
3
3
  export declare function createSession(client: {
4
4
  requestSubject: rxjs.Subject<JanusRequest>;
5
+ receive$: rxjs.Observable<JanusMessage>;
5
6
  }, { keepAliveInterval }?: {
6
7
  keepAliveInterval?: number;
7
8
  }): rxjs.Observable<{
8
9
  requestSubject: rxjs.Subject<JanusRequest>;
9
10
  send$: rxjs.Observable<never>;
10
- keepAlive$: rxjs.Observable<JanusError>;
11
+ receive$: rxjs.Observable<JanusMessage>;
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,7 @@
1
1
  export type JanusMessage = Record<string, unknown>;
2
- export type JanusError = Error & {
3
- code: number;
4
- };
5
2
  export interface JanusRequest {
6
3
  readonly message: JanusMessage;
7
4
  readonly stacktrace: Error;
8
5
  fulfill(response: JanusMessage): void;
9
- reject(err: JanusError): void;
6
+ reject(err: Error): void;
10
7
  }
package/dist/util.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import * as rxjs from "rxjs";
2
- import { JanusError, JanusMessage, JanusRequest } from "./types.js";
2
+ import { JanusMessage, JanusRequest } from "./types.js";
3
3
  export declare function request<T extends JanusMessage>(requestSubject: rxjs.Subject<JanusRequest>, message: JanusMessage): rxjs.Observable<T>;
4
- export declare function makeJanusError({ stacktrace, message }: JanusRequest, code: number, reason: string): JanusError;
4
+ export declare function makeJanusError({ stacktrace, message }: JanusRequest, code: number, reason: string): Error & {
5
+ code: number;
6
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lsdsoftware/janus-client-node",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Janus WebSocket client for Node, built on RxJS observables",
5
5
  "keywords": [
6
6
  "janus",
package/src/client.ts CHANGED
@@ -17,25 +17,22 @@ export function createClient(websocketUrl: string, websocketOpts?: ClientOptions
17
17
  rxjs.concatMap(request => {
18
18
  const txId = String(Math.random())
19
19
  request.message.transaction = txId
20
- return new rxjs.Observable<Error>(subscriber =>
21
- conn.send(JSON.stringify(request.message), err => {
22
- if (err) {
23
- subscriber.next(err)
24
- subscriber.complete()
25
- } else {
26
- subscriber.complete()
27
- pendingTxs.set(txId, response => {
28
- pendingTxs.delete(txId)
29
- if (response.janus == 'error') {
30
- const { code, reason } = response.error as { code: number, reason: string }
31
- request.reject(makeJanusError(request, code, reason))
32
- } else {
33
- request.fulfill(response)
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
  ),
@@ -56,8 +53,8 @@ export function createClient(websocketUrl: string, websocketOpts?: ClientOptions
56
53
  }
57
54
  }
58
55
  } catch (err) {
59
- if (err instanceof Error) err.cause = event.data
60
- return rxjs.of(err)
56
+ console.error('JanusClient receive fail', event.data, err)
57
+ return rxjs.EMPTY
61
58
  }
62
59
  }),
63
60
  rxjs.share()
@@ -1,8 +1,14 @@
1
1
  import * as rxjs from "rxjs"
2
- import { JanusRequest } from "./types.js"
2
+ import { JanusMessage, JanusRequest } from "./types.js"
3
3
  import { makeJanusError, request } from "./util.js"
4
4
 
5
- export function createPluginHandle(session: { requestSubject: rxjs.Subject<JanusRequest> }, plugin: string) {
5
+ export function createPluginHandle(
6
+ session: {
7
+ requestSubject: rxjs.Subject<JanusRequest>
8
+ receive$: rxjs.Observable<JanusMessage>
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 { JanusError, JanusRequest } from "./types.js"
2
+ import { JanusMessage, JanusRequest } from "./types.js"
3
3
  import { request } from "./util.js"
4
4
 
5
- export function createSession(client: { requestSubject: rxjs.Subject<JanusRequest> }, { keepAliveInterval = 45_000 }: {
6
- keepAliveInterval?: number
7
- } = {}) {
5
+ export function createSession(
6
+ client: {
7
+ requestSubject: rxjs.Subject<JanusRequest>
8
+ receive$: rxjs.Observable<JanusMessage>
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<JanusError>(subscriber =>
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,9 @@
1
1
 
2
2
  export type JanusMessage = Record<string, unknown>
3
3
 
4
- export type JanusError = Error & { code: number }
5
-
6
4
  export interface JanusRequest {
7
5
  readonly message: JanusMessage
8
6
  readonly stacktrace: Error
9
7
  fulfill(response: JanusMessage): void
10
- reject(err: JanusError): void
8
+ reject(err: Error): void
11
9
  }
package/src/util.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as rxjs from "rxjs"
2
- import { JanusError, JanusMessage, JanusRequest } from "./types.js"
2
+ import { JanusMessage, JanusRequest } from "./types.js"
3
3
 
4
4
  export function request<T extends JanusMessage>(
5
5
  requestSubject: rxjs.Subject<JanusRequest>,
@@ -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): JanusError {
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