@dobuki/hello-worker 1.0.14 → 1.0.16

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.
@@ -1,10 +1,11 @@
1
1
  import { EnterRoom } from "./signal-room";
2
2
  import { SigType, SigPayload } from "./webrtc-peer-collector";
3
- export declare function enterWorld({ uid, logLine, enterRoomFunction, autoLeaveUsers, workerUrl, }: {
3
+ export declare function enterWorld({ uid, appId, logLine, enterRoomFunction, peerlessUserExpiration, workerUrl, }: {
4
4
  uid?: string;
5
+ appId: string;
5
6
  logLine?: (direction: string, obj?: any) => void;
6
7
  enterRoomFunction?: EnterRoom<SigType, SigPayload>;
7
- autoLeaveUsers?: boolean;
8
+ peerlessUserExpiration?: number;
8
9
  workerUrl?: URL;
9
10
  }): {
10
11
  userId: string;
@@ -12,7 +13,7 @@ export declare function enterWorld({ uid, logLine, enterRoomFunction, autoLeaveU
12
13
  enterRoom: ({ room, host }: {
13
14
  room: string;
14
15
  host: string;
15
- }) => void;
16
+ }) => Promise<void>;
16
17
  exitRoom: ({ room, host }: {
17
18
  room: string;
18
19
  host: string;
@@ -21,8 +22,8 @@ export declare function enterWorld({ uid, logLine, enterRoomFunction, autoLeaveU
21
22
  getUsers: () => string[];
22
23
  addMessageListener: (listener: (data: any, from: string) => void) => () => void;
23
24
  removeMessageListener: (listener: (data: any, from: string) => void) => void;
24
- addUserListener: (listener: (userId: string) => void) => () => void;
25
- removeUserListener: (listener: (userId: string) => void) => void;
25
+ addUserListener: (listener: (user: string, action: "join" | "leave", users: string[]) => void) => () => void;
26
+ removeUserListener: (listener: (user: string, action: "join" | "leave", users: string[]) => void) => void;
26
27
  end(): void;
27
28
  };
28
29
  //# sourceMappingURL=enter-world.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enter-world.d.ts","sourceRoot":"","sources":["../src/browser/enter-world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,UAAU,EAA0B,MAAM,yBAAyB,CAAC;AAEtF,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,OAAuB,EAAE,iBAA6B,EAAE,cAAsB,EAAE,SAAS,GAC/F,EAAE;IACD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;;iBAkDqB,GAAG,WAAW,MAAM;;;;;;;;;;;mCAWF,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;sCAJ9B,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;gCAevC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;mCAJrB,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;;EAgC/D"}
1
+ {"version":3,"file":"enter-world.d.ts","sourceRoot":"","sources":["../src/browser/enter-world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,UAAU,EAA0B,MAAM,yBAAyB,CAAC;AAEtF,wBAAgB,UAAU,CAAC,EACzB,GAAG,EAAE,KAAK,EAAE,OAAuB,EAAE,iBAA6B,EAAE,sBAAsB,EAAE,SAAS,GACtG,EAAE;IACD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;;iBAkDqB,GAAG,WAAW,MAAM;;;;;;;;;;;mCAWF,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;sCAJ9B,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI;;;;EA8B3E"}
@@ -6,16 +6,20 @@ export interface IPeer<T extends string = string, P = any> {
6
6
  /**
7
7
  * enterRoom connects to the signaling room via WebSocket.
8
8
  */
9
- export declare function enterRoom<T extends string, P = any>({ userId, room, host, onOpen, onClose, onError, logLine, onPeerJoined, onPeerLeft, onMessage, }: {
9
+ export declare function enterRoom<T extends string, P = any>({ userId, appId, room, host, onOpen, onClose, onError, logLine, onPeerJoined, onPeerLeft, onMessage, }: {
10
10
  userId: string;
11
+ appId: string;
11
12
  room: string;
12
13
  host: string;
13
14
  onOpen?: () => void;
14
15
  onClose?: () => void;
15
16
  onError?: () => void;
16
17
  logLine?: (direction: string, obj?: any) => void;
17
- onPeerJoined(user: IPeer<T, P>): void;
18
- onPeerLeft(userId: IPeer["userId"], peerId: IPeer["peerId"]): void;
18
+ onPeerJoined(users: IPeer<T, P>[]): void;
19
+ onPeerLeft(users: {
20
+ userId: string;
21
+ peerId: string;
22
+ }[]): void;
19
23
  onMessage(type: T, payload: P, from: IPeer<T, P>): void;
20
24
  }): {
21
25
  exitRoom: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"signal-room.d.ts","sourceRoot":"","sources":["../../src/browser/impl/signal-room.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EACjD,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,GACZ,EAAE;IACC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAI,IAAI,CAAC;IACvC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAI,IAAI,CAAC;IACpE,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAI,IAAI,CAAC;CAC5D,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAuE3B"}
1
+ {"version":3,"file":"signal-room.d.ts","sourceRoot":"","sources":["../../src/browser/impl/signal-room.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EACjD,MAAM,EACN,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,GACZ,EAAE;IACC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAI,IAAI,CAAC;IAC1C,UAAU,CAAC,KAAK,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,GAAI,IAAI,CAAC;IAC7D,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAI,IAAI,CAAC;CAC5D,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAuF3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/sample/index.ts"],"names":[],"mappings":"AAuBA,wBAAgB,QAAQ,SAEvB;AAED,wBAAgB,WAAW,eAkC1B;AAED,wBAAgB,UAAU,eAiGzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/sample/index.ts"],"names":[],"mappings":"AAuBA,wBAAgB,QAAQ,SAEvB;AAED,wBAAgB,WAAW,eAoC1B;AAED,wBAAgB,UAAU,eAoHzB"}
@@ -1,13 +1,17 @@
1
1
  import type { IPeer } from "./impl/signal-room.js";
2
- export declare function enterRoom<T extends string, P = any>({ userId, room, host, onOpen, onClose, onError, onPeerJoined, onPeerLeft, onMessage, logLine, workerUrl, }: {
2
+ export declare function enterRoom<T extends string, P = any>({ userId, appId, room, host, onOpen, onClose, onError, onPeerJoined, onPeerLeft, onMessage, logLine, workerUrl, }: {
3
3
  userId: string;
4
+ appId: string;
4
5
  room: string;
5
6
  host: string;
6
7
  onOpen?: () => void;
7
8
  onClose?: () => void;
8
9
  onError?: () => void;
9
- onPeerJoined: (user: IPeer<T, P>) => void;
10
- onPeerLeft: (userId: string, peerId: string) => void;
10
+ onPeerJoined: (users: IPeer<T, P>[]) => void;
11
+ onPeerLeft: (users: {
12
+ userId: string;
13
+ peerId: string;
14
+ }[]) => void;
11
15
  onMessage: (type: T, payload: P, from: IPeer<T, P>) => void;
12
16
  logLine?: (direction: string, obj?: any) => void;
13
17
  workerUrl?: URL;
@@ -1 +1 @@
1
- {"version":3,"file":"signal-room.d.ts","sourceRoot":"","sources":["../src/browser/signal-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EACnD,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAGjD,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAuD3B;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"signal-room.d.ts","sourceRoot":"","sources":["../src/browser/signal-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EACnD,MAAM,EACN,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,EACT,OAAO,EACP,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IAC7C,UAAU,EAAE,CAAC,KAAK,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,KAAK,IAAI,CAAC;IAChE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAGjD,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAwD3B;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -6,12 +6,16 @@ export type RoomEvent<T extends string = string, P = any> = {
6
6
  kind: "error";
7
7
  } | {
8
8
  kind: "peer-joined";
9
- userId: string;
10
- peerId: string;
9
+ users: {
10
+ userId: string;
11
+ peerId: string;
12
+ }[];
11
13
  } | {
12
14
  kind: "peer-left";
13
- userId: string;
14
- peerId: string;
15
+ users: {
16
+ userId: string;
17
+ peerId: string;
18
+ }[];
15
19
  } | {
16
20
  kind: "message";
17
21
  type: T;
@@ -1 +1 @@
1
- {"version":3,"file":"signal-room.worker.d.ts","sourceRoot":"","sources":["../src/browser/signal-room.worker.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG,IACpD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"signal-room.worker.d.ts","sourceRoot":"","sources":["../src/browser/signal-room.worker.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG,IACpD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- function h({userId:N,room:z,host:Q,onOpen:q,onClose:A,onError:G,logLine:X,onPeerJoined:F,onPeerLeft:J,onMessage:M}){let v="wss://"+Q+"/room/"+z+"?userId="+encodeURIComponent(N),B=new WebSocket(v),$=!1;function U(Y,k,H){if($)return!1;let D={type:Y,to:k,payload:H};return B.send(JSON.stringify(D)),X?.("\uD83D\uDC64 ➡️ \uD83D\uDDA5️",D),!0}function W(Y){let k;try{k=JSON.parse(Y.data)}catch{X?.("⚠️ ERROR",{error:"invalid-json"});return}if(X?.("\uD83D\uDDA5️ ➡️ \uD83D\uDC64",k),k.type==="peer-joined"&&k.peerId&&k.userId){let{userId:H,peerId:D}=k;F({userId:H,peerId:D,receive:(Z,_)=>{return U(Z,D,_)}});return}if(k.type==="peer-left"&&k.peerId&&k.userId){let{userId:H,peerId:D}=k;J(H,D);return}if(k.peerId&&k.userId){let{userId:H,peerId:D}=k;M(k.type,k.payload,{userId:H,peerId:D,receive:(Z,_)=>{return U(Z,D,_)}})}}if(B.addEventListener("message",W),q)B.addEventListener("open",q);if(A)B.addEventListener("close",A);if(G)B.addEventListener("error",G);return{exitRoom:()=>{if($=!0,B.close(),B.removeEventListener("message",W),q)B.removeEventListener("open",q);if(A)B.removeEventListener("close",A);if(G)B.removeEventListener("error",G)}}}var V=null,T=new Map;function K(N){self.postMessage(N)}self.addEventListener("message",(N)=>{let z=N.data;if(console.debug("[signal-room.worker] received command",z),z.cmd==="enter"){V?.(),V=null,T.clear(),V=h({userId:z.userId,room:z.room,host:z.host,onOpen:()=>K({kind:"open"}),onClose:()=>K({kind:"close"}),onError:()=>K({kind:"error"}),logLine:(q,A)=>{console.debug(`[signal-room.worker] ${q}`,A),K({kind:"log",direction:q,obj:A})},onPeerJoined:(q)=>{T.set(q.peerId,q.receive),K({kind:"peer-joined",userId:q.userId,peerId:q.peerId})},onPeerLeft:(q,A)=>{T.delete(A),K({kind:"peer-left",userId:q,peerId:A})},onMessage:(q,A,G)=>{T.set(G.peerId,G.receive),K({kind:"message",type:q,payload:A,fromUserId:G.userId,fromPeerId:G.peerId})}}).exitRoom;return}if(z.cmd==="send"){let Q=T.get(z.toPeerId);if(Q)Q(z.type,z.payload);return}if(z.cmd==="exit"){V?.(),self.close();return}});
1
+ function R({userId:T,appId:z,room:V,host:B,onOpen:q,onClose:A,onError:Z,logLine:W,onPeerJoined:b,onPeerLeft:v,onMessage:x}){let C=`wss://${B}/room/${z}/${V}?userId=${encodeURIComponent(T)}`,D=new WebSocket(C),L=T,_=new Map,h=!1;function F(X,k,N){if(h)return!1;let H={type:X,to:k,payload:N};return D.send(JSON.stringify(H)),W?.("\uD83D\uDC64 ➡️ \uD83D\uDDA5️",H),!0}function J(X){let k=[],N=[],H=new Set;if(X.forEach(({userId:K,peerId:G})=>{if(K===L)return;if(!_.has(G)){let U={userId:K,peerId:G,receive:(O,S)=>F(O,G,S)};_.set(G,U),k.push(U)}H.add(G)}),_.values().forEach(({peerId:K,userId:G})=>{if(!H.has(K))_.delete(K),N.push({peerId:K,userId:G})}),k.length)b(k);if(N.length)v(N)}function M(X){let k;try{k=JSON.parse(X.data)}catch{W?.("⚠️ ERROR",{error:"invalid-json"});return}if(W?.("\uD83D\uDDA5️ ➡️ \uD83D\uDC64",k),k.type==="peer-joined"){J(k.users);return}if(k.type==="peer-left"){J(k.users);return}if(k.peerId&&k.userId){let{userId:N,peerId:H}=k;x(k.type,k.payload,{userId:N,peerId:H,receive:(K,G)=>F(K,H,G)})}}if(D.addEventListener("message",M),q)D.addEventListener("open",q);if(A)D.addEventListener("close",A);if(Z)D.addEventListener("error",Z);return{exitRoom:()=>{if(h=!0,D.close(),D.removeEventListener("message",M),q)D.removeEventListener("open",q);if(A)D.removeEventListener("close",A);if(Z)D.removeEventListener("error",Z)}}}var $=null,Y=new Map;function Q(T){self.postMessage(T)}self.addEventListener("message",(T)=>{let z=T.data;if(console.debug("[signal-room.worker] received command",z),z.cmd==="enter"){$?.(),$=null,Y.clear(),$=R({userId:z.userId,appId:z.appId,room:z.room,host:z.host,onOpen:()=>Q({kind:"open"}),onClose:()=>Q({kind:"close"}),onError:()=>Q({kind:"error"}),logLine:(B,q)=>{console.debug(`[signal-room.worker] ${B}`,q),Q({kind:"log",direction:B,obj:q})},onPeerJoined:(B)=>{B.forEach(({peerId:q,receive:A})=>Y.set(q,A)),Q({kind:"peer-joined",users:B.map(({userId:q,peerId:A})=>({userId:q,peerId:A}))})},onPeerLeft:(B)=>{B.forEach(({peerId:q})=>Y.delete(q)),Q({kind:"peer-left",users:B})},onMessage:(B,q,A)=>{Y.set(A.peerId,A.receive),Q({kind:"message",type:B,payload:q,fromUserId:A.userId,fromPeerId:A.peerId})}}).exitRoom;return}if(z.cmd==="send"){let V=Y.get(z.toPeerId);if(V)V(z.type,z.payload);return}if(z.cmd==="exit"){$?.(),self.close();return}});
2
2
 
3
- //# debugId=471744D4D65F41ED64756E2164756E21
3
+ //# debugId=5465A5D210652A5664756E2164756E21
4
4
  //# sourceMappingURL=signal-room.worker.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/browser/impl/signal-room.ts", "../src/browser/signal-room.worker.ts"],
4
4
  "sourcesContent": [
5
- "export interface IPeer<T extends string = string, P = any> {\n userId: string;\n peerId: string;\n receive(type: T, payload: P): boolean;\n}\n\n/**\n * enterRoom connects to the signaling room via WebSocket.\n */\nexport function enterRoom<T extends string, P = any>({\n userId,\n room,\n host,\n onOpen,\n onClose,\n onError,\n logLine,\n onPeerJoined,\n onPeerLeft,\n onMessage,\n}: {\n userId: string;\n room: string;\n host: string;\n onOpen?: () => void;\n onClose?: () => void;\n onError?: () => void;\n logLine?: (direction: string, obj?: any) => void;\n onPeerJoined(user: IPeer<T, P>) : void;\n onPeerLeft(userId: IPeer[\"userId\"], peerId: IPeer[\"peerId\"]) : void;\n onMessage(type: T, payload: P, from: IPeer<T, P>) : void;\n}): { exitRoom: () => void } {\n const wsUrl = \"wss://\" + host + \"/room/\" + room + \"?userId=\" + encodeURIComponent(userId);\n const ws = new WebSocket(wsUrl);\n\n let exited = false;\n function send(type: T, toPeerId: string, payload: P) {\n if (exited) return false;\n const obj = { type, to: toPeerId, payload };\n ws.send(JSON.stringify(obj));\n logLine?.(\"👤 ➡️ 🖥️\", obj);\n return true;\n }\n\n function onmessage(e: MessageEvent) {\n let msg: {\n type: T;\n peerId: string;\n userId: string;\n payload: P;\n };\n try { msg = JSON.parse(e.data); }\n catch {\n logLine?.(\"⚠️ ERROR\", { error: \"invalid-json\" });\n return;\n }\n\n logLine?.(\"🖥️ ➡️ 👤\", msg);\n\n // Existing client greets newcomers\n if (msg.type === \"peer-joined\" && msg.peerId && msg.userId) {\n const { userId, peerId } = msg;\n onPeerJoined({\n userId,\n peerId,\n receive: (type: T, payload: P) => {\n return send(type, peerId, payload);\n },\n });\n return;\n }\n if (msg.type === \"peer-left\" && msg.peerId && msg.userId) {\n const { userId, peerId } = msg;\n onPeerLeft(userId, peerId);\n return;\n }\n if (msg.peerId && msg.userId) {\n const { userId, peerId } = msg;\n onMessage(msg.type, msg.payload, {\n userId,\n peerId,\n receive: (type: T, payload: P) => {\n return send(type, peerId, payload);\n },\n });\n }\n };\n\n ws.addEventListener(\"message\", onmessage);\n if (onOpen) ws.addEventListener(\"open\", onOpen);\n if (onClose) ws.addEventListener(\"close\", onClose);\n if (onError) ws.addEventListener(\"error\", onError);\n return {\n exitRoom: () => {\n exited = true;\n ws.close();\n ws.removeEventListener(\"message\", onmessage);\n if (onOpen) ws.removeEventListener(\"open\", onOpen);\n if (onClose) ws.removeEventListener(\"close\", onClose);\n if (onError) ws.removeEventListener(\"error\", onError);\n },\n };\n}\n",
6
- "/// <reference lib=\"webworker\" />\n\nimport { enterRoom, type IPeer } from \"./impl/signal-room.js\";\n\nexport type RoomEvent<T extends string = string, P = any> =\n | { kind: \"open\" }\n | { kind: \"close\" }\n | { kind: \"error\" }\n | { kind: \"peer-joined\"; userId: string; peerId: string }\n | { kind: \"peer-left\"; userId: string; peerId: string }\n | { kind: \"message\"; type: T; payload: P; fromUserId: string; fromPeerId: string }\n | { kind: \"log\"; direction: string; obj?: any };\n\ntype WorkerCommand<T extends string = string, P = any> =\n | { cmd: \"enter\"; userId: string; room: string; host: string }\n | { cmd: \"exit\" }\n | { cmd: \"send\"; toPeerId: string; type: T; payload: P };\n\nlet exitRoom: (() => void) | null = null;\n\n// Map from userId -> a function to send to that peer (comes from IUser.receive)\nconst peerSend = new Map<string, (type: any, payload: any) => boolean>();\n\nfunction emit<T extends string, P>(ev: RoomEvent<T, P>) {\n (self as DedicatedWorkerGlobalScope).postMessage(ev);\n}\n\nself.addEventListener(\"message\", (e: MessageEvent<WorkerCommand>) => {\n const msg = e.data;\n console.debug(\"[signal-room.worker] received command\", msg);\n\n if (msg.cmd === \"enter\") {\n // If re-entering, clean up first\n exitRoom?.();\n exitRoom = null;\n peerSend.clear();\n\n const result = enterRoom({\n userId: msg.userId,\n room: msg.room,\n host: msg.host,\n onOpen: () => emit({ kind: \"open\" }),\n onClose: () => emit({ kind: \"close\" }),\n onError: () => emit({ kind: \"error\" }),\n logLine: (direction: string, obj?: any) => {\n console.debug(`[signal-room.worker] ${direction}`, obj);\n emit({ kind: \"log\", direction, obj });\n },\n onPeerJoined: (user: IPeer) => {\n // Save the ability to send to this peer\n peerSend.set(user.peerId, user.receive);\n emit({ kind: \"peer-joined\", userId: user.userId, peerId: user.peerId });\n },\n onPeerLeft: (userId: string, peerId: string) => {\n peerSend.delete(peerId);\n emit({ kind: \"peer-left\", userId, peerId });\n },\n onMessage: (type: any, payload: any, from: IPeer) => {\n // We can also learn peerSend via onMessage in case join events vary\n peerSend.set(from.peerId, from.receive);\n emit({ kind: \"message\", type, payload, fromUserId: from.userId, fromPeerId: from.peerId });\n },\n });\n\n exitRoom = result.exitRoom;\n return;\n }\n\n if (msg.cmd === \"send\") {\n const sendFn = peerSend.get(msg.toPeerId);\n if (sendFn) sendFn(msg.type, msg.payload);\n return;\n }\n\n if (msg.cmd === \"exit\") {\n exitRoom?.();\n self.close();\n return;\n }\n});\n"
5
+ "export interface IPeer<T extends string = string, P = any> {\n userId: string;\n peerId: string;\n receive(type: T, payload: P): boolean;\n}\n\n/**\n * enterRoom connects to the signaling room via WebSocket.\n */\nexport function enterRoom<T extends string, P = any>({\n userId,\n appId,\n room,\n host,\n onOpen,\n onClose,\n onError,\n logLine,\n onPeerJoined,\n onPeerLeft,\n onMessage,\n}: {\n userId: string;\n appId: string;\n room: string;\n host: string;\n onOpen?: () => void;\n onClose?: () => void;\n onError?: () => void;\n logLine?: (direction: string, obj?: any) => void;\n onPeerJoined(users: IPeer<T, P>[]) : void;\n onPeerLeft(users: {userId: string, peerId: string}[]) : void;\n onMessage(type: T, payload: P, from: IPeer<T, P>) : void;\n}): { exitRoom: () => void } {\n const wsUrl = `wss://${host}/room/${appId}/${room}?userId=${encodeURIComponent(userId)}`;\n const ws = new WebSocket(wsUrl);\n const selfUserId = userId;\n\n const peers = new Map<string, IPeer<T, P>>();\n let exited = false;\n function send(type: T, toPeerId: string, payload: P) {\n if (exited) return false;\n const obj = { type, to: toPeerId, payload };\n ws.send(JSON.stringify(obj));\n logLine?.(\"👤 ➡️ 🖥️\", obj);\n return true;\n }\n\n function updatePeers(updatedUsers: { peerId: string; userId: string }[]) {\n const joined: IPeer<T,P>[] = [];\n const left: Omit<IPeer<T,P>, \"receive\">[] = [];\n const updatedPeerSet = new Set<string>();\n updatedUsers.forEach(({ userId, peerId }) => {\n if (userId === selfUserId) return;\n if (!peers.has(peerId)) {\n const newPeer = { userId, peerId, receive: (type: T, payload: P) => send(type, peerId, payload)};\n peers.set(peerId, newPeer);\n joined.push(newPeer);\n }\n updatedPeerSet.add(peerId);\n });\n peers.values().forEach(({ peerId, userId }) => {\n if (!updatedPeerSet.has(peerId)) {\n peers.delete(peerId);\n left.push({ peerId, userId });\n }\n });\n if (joined.length) onPeerJoined(joined);\n if (left.length) onPeerLeft(left);\n }\n\n function onmessage(e: MessageEvent) {\n let msg: {\n type: T;\n peerId: string;\n userId: string;\n users: { peerId: string, userId: string }[],\n payload: P;\n };\n try { msg = JSON.parse(e.data); }\n catch {\n logLine?.(\"⚠️ ERROR\", { error: \"invalid-json\" });\n return;\n }\n\n logLine?.(\"🖥️ ➡️ 👤\", msg);\n\n // Existing client greets newcomers\n if (msg.type === \"peer-joined\") {\n updatePeers(msg.users);\n return;\n }\n if (msg.type === \"peer-left\") {\n updatePeers(msg.users);\n return;\n }\n if (msg.peerId && msg.userId) {\n const { userId, peerId } = msg;\n onMessage(msg.type, msg.payload, {\n userId,\n peerId,\n receive: (type: T, payload: P) => send(type, peerId, payload),\n });\n }\n };\n\n ws.addEventListener(\"message\", onmessage);\n if (onOpen) ws.addEventListener(\"open\", onOpen);\n if (onClose) ws.addEventListener(\"close\", onClose);\n if (onError) ws.addEventListener(\"error\", onError);\n return {\n exitRoom: () => {\n exited = true;\n ws.close();\n ws.removeEventListener(\"message\", onmessage);\n if (onOpen) ws.removeEventListener(\"open\", onOpen);\n if (onClose) ws.removeEventListener(\"close\", onClose);\n if (onError) ws.removeEventListener(\"error\", onError);\n },\n };\n}\n",
6
+ "/// <reference lib=\"webworker\" />\n\nimport { enterRoom, type IPeer } from \"./impl/signal-room.js\";\n\nexport type RoomEvent<T extends string = string, P = any> =\n | { kind: \"open\" }\n | { kind: \"close\" }\n | { kind: \"error\" }\n | { kind: \"peer-joined\"; users: {userId: string, peerId: string}[] }\n | { kind: \"peer-left\"; users: {userId: string, peerId: string}[] }\n | { kind: \"message\"; type: T; payload: P; fromUserId: string; fromPeerId: string }\n | { kind: \"log\"; direction: string; obj?: any };\n\ntype WorkerCommand<T extends string = string, P = any> =\n | { cmd: \"enter\"; userId: string; appId: string; room: string; host: string }\n | { cmd: \"exit\" }\n | { cmd: \"send\"; toPeerId: string; type: T; payload: P };\n\nlet exitRoom: (() => void) | null = null;\n\n// Map from userId -> a function to send to that peer (comes from IUser.receive)\nconst peerSend = new Map<string, (type: any, payload: any) => boolean>();\n\nfunction emit<T extends string, P>(ev: RoomEvent<T, P>) {\n (self as DedicatedWorkerGlobalScope).postMessage(ev);\n}\n\nself.addEventListener(\"message\", (e: MessageEvent<WorkerCommand>) => {\n const msg = e.data;\n console.debug(\"[signal-room.worker] received command\", msg);\n\n if (msg.cmd === \"enter\") {\n // If re-entering, clean up first\n exitRoom?.();\n exitRoom = null;\n peerSend.clear();\n\n const result = enterRoom({\n userId: msg.userId,\n appId: msg.appId,\n room: msg.room,\n host: msg.host,\n onOpen: () => emit({ kind: \"open\" }),\n onClose: () => emit({ kind: \"close\" }),\n onError: () => emit({ kind: \"error\" }),\n logLine: (direction: string, obj?: any) => {\n console.debug(`[signal-room.worker] ${direction}`, obj);\n emit({ kind: \"log\", direction, obj });\n },\n onPeerJoined: (users: IPeer[]) => {\n // Save the ability to send to this peer\n users.forEach(({ peerId, receive }) => peerSend.set(peerId, receive));\n emit({ kind: \"peer-joined\", users: users.map(({ userId, peerId }) => ({ userId, peerId })) });\n },\n onPeerLeft: (users: {userId: string, peerId: string}[]) => {\n users.forEach(({ peerId }) => peerSend.delete(peerId));\n emit({ kind: \"peer-left\", users });\n },\n onMessage: (type: any, payload: any, from: IPeer) => {\n // We can also learn peerSend via onMessage in case join events vary\n peerSend.set(from.peerId, from.receive);\n emit({ kind: \"message\", type, payload, fromUserId: from.userId, fromPeerId: from.peerId });\n },\n });\n\n exitRoom = result.exitRoom;\n return;\n }\n\n if (msg.cmd === \"send\") {\n const sendFn = peerSend.get(msg.toPeerId);\n if (sendFn) sendFn(msg.type, msg.payload);\n return;\n }\n\n if (msg.cmd === \"exit\") {\n exitRoom?.();\n self.close();\n return;\n }\n});\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "471744D4D65F41ED64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "5465A5D210652A5664756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,14 +1,16 @@
1
1
  import { EnterRoom } from "./signal-room";
2
2
  export type SigType = "offer" | "answer" | "ice";
3
3
  export type SigPayload = RTCSessionDescriptionInit | RTCIceCandidateInit;
4
- export declare function collectPeerConnections({ userId, receivePeerConnection, leaveUserWithoutPeer, rtcConfig, enterRoomFunction: enterRoom, logLine, onLeaveUser, workerUrl, }: {
4
+ type UserListener = (user: string, action: "join" | "leave", users: string[]) => void;
5
+ export declare function collectPeerConnections({ userId, appId, receivePeerConnection, peerlessUserExpiration, rtcConfig, enterRoomFunction: enterRoom, logLine, onLeaveUser, workerUrl, }: {
5
6
  userId: string;
7
+ appId: string;
6
8
  rtcConfig?: RTCConfiguration;
7
9
  enterRoomFunction?: EnterRoom<SigType, SigPayload>;
8
10
  onLeaveUser?: (userId: string) => void;
9
11
  logLine?: (direction: string, obj?: any) => void;
10
12
  workerUrl?: URL;
11
- leaveUserWithoutPeer?: boolean;
13
+ peerlessUserExpiration?: number;
12
14
  receivePeerConnection(connection: {
13
15
  pc: RTCPeerConnection;
14
16
  userId: string;
@@ -18,17 +20,21 @@ export declare function collectPeerConnections({ userId, receivePeerConnection,
18
20
  enterRoom: ({ room, host }: {
19
21
  room: string;
20
22
  host: string;
21
- }) => void;
23
+ }) => Promise<void>;
22
24
  exitRoom: ({ room, host }: {
23
25
  room: string;
24
26
  host: string;
25
27
  }) => void;
26
28
  leaveUser: (userId: string) => void;
27
- getUsers(): string[];
29
+ getUsers: () => string[];
30
+ addUserListener: (listener: UserListener) => () => void;
31
+ removeUserListener: (listener: UserListener) => void;
28
32
  getRooms(): {
29
33
  room: string;
30
34
  host: string;
31
35
  exitRoom: () => void;
32
36
  }[];
37
+ end(): void;
33
38
  };
39
+ export {};
34
40
  //# sourceMappingURL=webrtc-peer-collector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-peer-collector.d.ts","sourceRoot":"","sources":["../src/browser/webrtc-peer-collector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG,yBAAyB,GAAG,mBAAmB,CAAC;AAgBzE,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,qBAAqB,EACrB,oBAA4B,EAC5B,SAAsE,EACtE,iBAAiB,EAAE,SAA8B,EACjD,OAAuB,EACvB,WAAW,EACX,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,UAAU,EAAE;QAAE,EAAE,EAAE,iBAAiB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACxG;gCAoEgC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE;+BAThC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE;wBA1BlC,MAAM;;;cAwBY,MAAM;cAAQ,MAAM;kBAAY,MAAM,IAAI;;EAyGxF"}
1
+ {"version":3,"file":"webrtc-peer-collector.d.ts","sourceRoot":"","sources":["../src/browser/webrtc-peer-collector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG,yBAAyB,GAAG,mBAAmB,CAAC;AAczE,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAKpF,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,KAAK,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAsE,EACtE,iBAAiB,EAAE,SAA8B,EACjD,OAAuB,EACvB,WAAW,EACX,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,UAAU,EAAE;QAAE,EAAE,EAAE,iBAAiB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACxG;gCAgFgC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE;+BAThC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE;wBA3BlC,MAAM;;gCAqIE,YAAY;mCAJT,YAAY;;cAxGL,MAAM;cAAQ,MAAM;kBAAY,MAAM,IAAI;;;EAoIxF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dobuki/hello-worker",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",