@ooneex/pub-sub 0.0.16 → 0.0.18

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/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { EContainerScope } from "@ooneex/container";
2
2
  import { ScalarType } from "@ooneex/types";
3
+ import { ServerWebSocket } from "bun";
3
4
  type PubSubMessageHandlerType<Data extends Record<string, ScalarType> = Record<string, ScalarType>> = (context: {
4
5
  data: Data;
5
6
  channel: string;
@@ -32,28 +33,36 @@ interface IPubSub<Data extends Record<string, ScalarType> = Record<string, Scala
32
33
  channel: string;
33
34
  key?: string;
34
35
  }) => Promise<void> | void;
35
- publish: (data: Data, key?: string) => Promise<void> | void;
36
- subscribe: () => Promise<void> | void;
37
- unsubscribe: () => Promise<void> | void;
38
- unsubscribeAll: () => Promise<void> | void;
36
+ publish: (data: Data, options?: {
37
+ ws?: ServerWebSocket;
38
+ key?: string;
39
+ }) => Promise<void> | void;
40
+ subscribe: (ws?: ServerWebSocket) => Promise<void> | void;
41
+ unsubscribe: (ws?: ServerWebSocket) => Promise<void> | void;
42
+ unsubscribeAll: (ws?: ServerWebSocket) => Promise<void> | void;
39
43
  }
40
44
  type PubSubClassType = new (...args: any[]) => IPubSub;
41
45
  declare const decorator: {
42
46
  pubSub: (scope?: EContainerScope) => (target: PubSubClassType) => void;
43
47
  };
44
48
  import { ScalarType as ScalarType2 } from "@ooneex/types";
49
+ import { ServerWebSocket as ServerWebSocket2 } from "bun";
45
50
  declare abstract class PubSub<Data extends Record<string, ScalarType2> = Record<string, ScalarType2>> implements IPubSub<Data> {
46
51
  protected readonly client: IPubSubClient<Data>;
52
+ protected ws: ServerWebSocket2 | undefined;
47
53
  constructor(client: IPubSubClient<Data>);
48
54
  abstract handler(context: {
49
55
  data: Data;
50
56
  channel: string;
51
57
  key?: string;
52
58
  }): Promise<void> | void;
53
- publish(data: Data, key?: string): Promise<void>;
54
- subscribe(): Promise<void>;
55
- unsubscribe(): Promise<void>;
56
- unsubscribeAll(): Promise<void>;
59
+ publish(data: Data, options?: {
60
+ ws?: ServerWebSocket2;
61
+ key?: string;
62
+ }): Promise<void>;
63
+ subscribe(ws?: ServerWebSocket2): Promise<void>;
64
+ unsubscribe(ws?: ServerWebSocket2): Promise<void>;
65
+ unsubscribeAll(ws?: ServerWebSocket2): Promise<void>;
57
66
  }
58
67
  import { Exception } from "@ooneex/exception";
59
68
  declare class PubSubException extends Exception {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- var b=function(e,t,i,n){var o=arguments.length,s=o<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,i):n,a;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")s=Reflect.decorate(e,t,i,n);else for(var u=e.length-1;u>=0;u--)if(a=e[u])s=(o<3?a(s):o>3?a(t,i,s):a(t,i))||s;return o>3&&s&&Object.defineProperty(t,i,s),s};var l=(e,t)=>{if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(e,t)};import{container as p,EContainerScope as d}from"@ooneex/container";var m={pubSub:(e=d.Singleton)=>{return(t)=>{p.add(t,e),p.get(t).subscribe()}}};class h{client;constructor(e){this.client=e}async publish(e,t){await this.client.publish({channel:await this.getChannel(),data:e,...t!==void 0&&{key:t}})}async subscribe(){await this.client.subscribe(await this.getChannel(),this.handler.bind(this))}async unsubscribe(){await this.client.unsubscribe(await this.getChannel())}async unsubscribeAll(){await this.client.unsubscribeAll()}}import{Exception as S}from"@ooneex/exception";import{HttpStatus as y}from"@ooneex/http-status";class r extends S{constructor(e,t={}){super(e,{status:y.Code.InternalServerError,data:t});this.name="PubSubException"}}import{injectable as P}from"@ooneex/container";class c{client;subscriber=null;constructor(e={}){let t=e.connectionString||Bun.env.PUBSUB_REDIS_URL;if(!t)throw new r("Redis connection string is required. Please provide a connection string either through the constructor options or set the PUBSUB_REDIS_URL environment variable.");let{connectionString:i,...n}=e,s={...{connectionTimeout:1e4,idleTimeout:30000,autoReconnect:!0,maxRetries:3,enableOfflineQueue:!0,enableAutoPipelining:!0},...n};this.client=new Bun.RedisClient(t,s)}async connect(){if(!this.client.connected)await this.client.connect()}async connectSubscriber(){if(!this.subscriber)this.subscriber=await this.client.duplicate();if(!this.subscriber.connected)await this.subscriber.connect()}async publish(e){try{await this.connect();let t=JSON.stringify(e.data);await this.client.publish(e.channel,t)}catch(t){throw new r(`Failed to publish message to channel "${e.channel}": ${t}`)}finally{this.client.close()}}async subscribe(e,t){try{await this.connectSubscriber(),await this.subscriber?.subscribe(e,(i,n)=>{let o=JSON.parse(i);t({data:o,channel:n})})}catch(i){throw new r(`Failed to subscribe to channel "${e}": ${i}`)}}async unsubscribe(e){try{if(!this.subscriber)return;await this.subscriber.unsubscribe(e)}catch(t){throw new r(`Failed to unsubscribe from channel "${e}": ${t}`)}}async unsubscribeAll(){try{if(!this.subscriber)return;await this.subscriber.unsubscribe()}catch(e){throw new r(`Failed to unsubscribe from all channels: ${e}`)}}}c=b([P(),l("design:paramtypes",[typeof RedisPubSubOptionsType==="undefined"?Object:RedisPubSubOptionsType])],c);export{m as decorator,c as RedisPubSub,r as PubSubException,h as PubSub};
2
+ var u=function(e,t,i,s){var c=arguments.length,r=c<3?t:s===null?s=Object.getOwnPropertyDescriptor(t,i):s,o;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(e,t,i,s);else for(var b=e.length-1;b>=0;b--)if(o=e[b])r=(c<3?o(r):c>3?o(t,i,r):o(t,i))||r;return c>3&&r&&Object.defineProperty(t,i,r),r};var l=(e,t)=>{if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(e,t)};import{container as p,EContainerScope as d}from"@ooneex/container";var S={pubSub:(e=d.Singleton)=>{return(t)=>{p.add(t,e),p.get(t).subscribe()}}};class h{client;ws;constructor(e){this.client=e}async publish(e,t){this.ws=t?.ws,await this.client.publish({channel:await this.getChannel(),data:e,...t?.key!==void 0&&{key:t.key}})}async subscribe(e){this.ws=e,await this.client.subscribe(await this.getChannel(),this.handler.bind(this))}async unsubscribe(e){this.ws=e,await this.client.unsubscribe(await this.getChannel())}async unsubscribeAll(e){this.ws=e,await this.client.unsubscribeAll()}}import{Exception as m}from"@ooneex/exception";import{HttpStatus as y}from"@ooneex/http-status";class n extends m{constructor(e,t={}){super(e,{status:y.Code.InternalServerError,data:t});this.name="PubSubException"}}import{injectable as P}from"@ooneex/container";class a{client;subscriber=null;constructor(e={}){let t=e.connectionString||Bun.env.PUBSUB_REDIS_URL;if(!t)throw new n("Redis connection string is required. Please provide a connection string either through the constructor options or set the PUBSUB_REDIS_URL environment variable.");let{connectionString:i,...s}=e,r={...{connectionTimeout:1e4,idleTimeout:30000,autoReconnect:!0,maxRetries:3,enableOfflineQueue:!0,enableAutoPipelining:!0},...s};this.client=new Bun.RedisClient(t,r)}async connect(){if(!this.client.connected)await this.client.connect()}async connectSubscriber(){if(!this.subscriber)this.subscriber=await this.client.duplicate();if(!this.subscriber.connected)await this.subscriber.connect()}async publish(e){try{await this.connect();let t=JSON.stringify(e.data);await this.client.publish(e.channel,t)}catch(t){throw new n(`Failed to publish message to channel "${e.channel}": ${t}`)}finally{this.client.close()}}async subscribe(e,t){try{await this.connectSubscriber(),await this.subscriber?.subscribe(e,(i,s)=>{let c=JSON.parse(i);t({data:c,channel:s})})}catch(i){throw new n(`Failed to subscribe to channel "${e}": ${i}`)}}async unsubscribe(e){try{if(!this.subscriber)return;await this.subscriber.unsubscribe(e)}catch(t){throw new n(`Failed to unsubscribe from channel "${e}": ${t}`)}}async unsubscribeAll(){try{if(!this.subscriber)return;await this.subscriber.unsubscribe()}catch(e){throw new n(`Failed to unsubscribe from all channels: ${e}`)}}}a=u([P(),l("design:paramtypes",[typeof RedisPubSubOptionsType==="undefined"?Object:RedisPubSubOptionsType])],a);export{S as decorator,a as RedisPubSub,n as PubSubException,h as PubSub};
3
3
 
4
- //# debugId=71EA4C698ED7AF9C64756E2164756E21
4
+ //# debugId=4F3417BC1E80EAE564756E2164756E21
package/dist/index.js.map CHANGED
@@ -3,11 +3,11 @@
3
3
  "sources": ["src/decorators.ts", "src/PubSub.ts", "src/PubSubException.ts", "src/RedisPubSubClient.ts"],
4
4
  "sourcesContent": [
5
5
  "import { container, EContainerScope } from \"@ooneex/container\";\nimport type { IPubSub, PubSubClassType } from \"./types\";\n\nexport const decorator = {\n pubSub: (scope: EContainerScope = EContainerScope.Singleton) => {\n return (target: PubSubClassType): void => {\n container.add(target, scope);\n const pubsub = container.get<IPubSub>(target);\n pubsub.subscribe();\n };\n },\n};\n",
6
- "import type { ScalarType } from \"@ooneex/types\";\nimport type { IPubSub, IPubSubClient } from \"./types\";\n\nexport abstract class PubSub<Data extends Record<string, ScalarType> = Record<string, ScalarType>>\n implements IPubSub<Data>\n{\n constructor(protected readonly client: IPubSubClient<Data>) {}\n\n public abstract getChannel(): string | Promise<string>;\n public abstract handler(context: { data: Data; channel: string; key?: string }): Promise<void> | void;\n\n public async publish(data: Data, key?: string): Promise<void> {\n await this.client.publish({\n channel: await this.getChannel(),\n data,\n ...(key !== undefined && { key }),\n });\n }\n\n public async subscribe(): Promise<void> {\n await this.client.subscribe(await this.getChannel(), this.handler.bind(this));\n }\n\n public async unsubscribe(): Promise<void> {\n await this.client.unsubscribe(await this.getChannel());\n }\n\n public async unsubscribeAll(): Promise<void> {\n await this.client.unsubscribeAll();\n }\n}\n",
6
+ "import type { ScalarType } from \"@ooneex/types\";\nimport type { ServerWebSocket } from \"bun\";\nimport type { IPubSub, IPubSubClient } from \"./types\";\n\nexport abstract class PubSub<Data extends Record<string, ScalarType> = Record<string, ScalarType>>\n implements IPubSub<Data>\n{\n protected ws: ServerWebSocket | undefined;\n\n constructor(protected readonly client: IPubSubClient<Data>) {}\n\n public abstract getChannel(): string | Promise<string>;\n public abstract handler(context: { data: Data; channel: string; key?: string }): Promise<void> | void;\n\n public async publish(data: Data, options?: { ws?: ServerWebSocket; key?: string }): Promise<void> {\n this.ws = options?.ws;\n await this.client.publish({\n channel: await this.getChannel(),\n data,\n ...(options?.key !== undefined && { key: options.key }),\n });\n }\n\n public async subscribe(ws?: ServerWebSocket): Promise<void> {\n this.ws = ws;\n await this.client.subscribe(await this.getChannel(), this.handler.bind(this));\n }\n\n public async unsubscribe(ws?: ServerWebSocket): Promise<void> {\n this.ws = ws;\n await this.client.unsubscribe(await this.getChannel());\n }\n\n public async unsubscribeAll(ws?: ServerWebSocket): Promise<void> {\n this.ws = ws;\n await this.client.unsubscribeAll();\n }\n}\n",
7
7
  "import { Exception } from \"@ooneex/exception\";\nimport { HttpStatus } from \"@ooneex/http-status\";\n\nexport class PubSubException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.InternalServerError,\n data,\n });\n this.name = \"PubSubException\";\n }\n}\n",
8
8
  "import { injectable } from \"@ooneex/container\";\nimport type { ScalarType } from \"@ooneex/types\";\nimport { PubSubException } from \"./PubSubException\";\nimport type { IPubSubClient, PubSubMessageHandlerType, RedisPubSubOptionsType } from \"./types\";\n\n@injectable()\nexport class RedisPubSubClient<Data extends Record<string, ScalarType>> implements IPubSubClient<Data> {\n private client: Bun.RedisClient;\n private subscriber: Bun.RedisClient | null = null;\n\n constructor(options: RedisPubSubOptionsType = {}) {\n const connectionString = options.connectionString || Bun.env.PUBSUB_REDIS_URL;\n\n if (!connectionString) {\n throw new PubSubException(\n \"Redis connection string is required. Please provide a connection string either through the constructor options or set the PUBSUB_REDIS_URL environment variable.\",\n );\n }\n\n const { connectionString: _, ...userOptions } = options;\n\n const defaultOptions = {\n connectionTimeout: 10_000,\n idleTimeout: 30_000,\n autoReconnect: true,\n maxRetries: 3,\n enableOfflineQueue: true,\n enableAutoPipelining: true,\n };\n\n const clientOptions = { ...defaultOptions, ...userOptions };\n\n this.client = new Bun.RedisClient(connectionString, clientOptions);\n }\n\n private async connect(): Promise<void> {\n if (!this.client.connected) {\n await this.client.connect();\n }\n }\n\n private async connectSubscriber(): Promise<void> {\n if (!this.subscriber) {\n this.subscriber = await this.client.duplicate();\n }\n\n if (!this.subscriber.connected) {\n await this.subscriber.connect();\n }\n }\n\n public async publish(config: { channel: string; data: Data; key?: string }): Promise<void> {\n try {\n await this.connect();\n const message = JSON.stringify(config.data);\n await this.client.publish(config.channel, message);\n } catch (error) {\n throw new PubSubException(`Failed to publish message to channel \"${config.channel}\": ${error}`);\n } finally {\n this.client.close();\n }\n }\n\n public async subscribe(channel: string, handler: PubSubMessageHandlerType<Data>): Promise<void> {\n try {\n await this.connectSubscriber();\n await this.subscriber?.subscribe(channel, (message: string, ch: string) => {\n const data = JSON.parse(message) as Data;\n handler({ data, channel: ch });\n });\n } catch (error) {\n throw new PubSubException(`Failed to subscribe to channel \"${channel}\": ${error}`);\n }\n }\n\n public async unsubscribe(channel: string): Promise<void> {\n try {\n if (!this.subscriber) {\n return;\n }\n\n await this.subscriber.unsubscribe(channel);\n } catch (error) {\n throw new PubSubException(`Failed to unsubscribe from channel \"${channel}\": ${error}`);\n }\n }\n\n public async unsubscribeAll(): Promise<void> {\n try {\n if (!this.subscriber) {\n return;\n }\n\n await this.subscriber.unsubscribe();\n } catch (error) {\n throw new PubSubException(`Failed to unsubscribe from all channels: ${error}`);\n }\n }\n}\n"
9
9
  ],
10
- "mappings": ";ybAAA,oBAAS,qBAAW,0BAGb,IAAM,EAAY,CACvB,OAAQ,CAAC,EAAyB,EAAgB,YAAc,CAC9D,MAAO,CAAC,IAAkC,CACxC,EAAU,IAAI,EAAQ,CAAK,EACZ,EAAU,IAAa,CAAM,EACrC,UAAU,GAGvB,ECRO,MAAe,CAEtB,CACiC,OAA/B,WAAW,CAAoB,EAA6B,CAA7B,mBAKlB,QAAO,CAAC,EAAY,EAA6B,CAC5D,MAAM,KAAK,OAAO,QAAQ,CACxB,QAAS,MAAM,KAAK,WAAW,EAC/B,UACI,IAAQ,QAAa,CAAE,KAAI,CACjC,CAAC,OAGU,UAAS,EAAkB,CACtC,MAAM,KAAK,OAAO,UAAU,MAAM,KAAK,WAAW,EAAG,KAAK,QAAQ,KAAK,IAAI,CAAC,OAGjE,YAAW,EAAkB,CACxC,MAAM,KAAK,OAAO,YAAY,MAAM,KAAK,WAAW,CAAC,OAG1C,eAAc,EAAkB,CAC3C,MAAM,KAAK,OAAO,eAAe,EAErC,CC9BA,oBAAS,0BACT,qBAAS,4BAEF,MAAM,UAAwB,CAAU,CAC7C,WAAW,CAAC,EAAiB,EAAgC,CAAC,EAAG,CAC/D,MAAM,EAAS,CACb,OAAQ,EAAW,KAAK,oBACxB,MACF,CAAC,EACD,KAAK,KAAO,kBAEhB,CCXA,qBAAS,0BAMF,MAAM,CAA0F,CAC7F,OACA,WAAqC,KAE7C,WAAW,CAAC,EAAkC,CAAC,EAAG,CAChD,IAAM,EAAmB,EAAQ,kBAAoB,IAAI,IAAI,iBAE7D,GAAI,CAAC,EACH,MAAM,IAAI,EACR,kKACF,EAGF,IAAQ,iBAAkB,KAAM,GAAgB,EAW1C,EAAgB,IATC,CACrB,kBAAmB,IACnB,YAAa,MACb,cAAe,GACf,WAAY,EACZ,mBAAoB,GACpB,qBAAsB,EACxB,KAE8C,CAAY,EAE1D,KAAK,OAAS,IAAI,IAAI,YAAY,EAAkB,CAAa,OAGrD,QAAO,EAAkB,CACrC,GAAI,CAAC,KAAK,OAAO,UACf,MAAM,KAAK,OAAO,QAAQ,OAIhB,kBAAiB,EAAkB,CAC/C,GAAI,CAAC,KAAK,WACR,KAAK,WAAa,MAAM,KAAK,OAAO,UAAU,EAGhD,GAAI,CAAC,KAAK,WAAW,UACnB,MAAM,KAAK,WAAW,QAAQ,OAIrB,QAAO,CAAC,EAAsE,CACzF,GAAI,CACF,MAAM,KAAK,QAAQ,EACnB,IAAM,EAAU,KAAK,UAAU,EAAO,IAAI,EAC1C,MAAM,KAAK,OAAO,QAAQ,EAAO,QAAS,CAAO,EACjD,MAAO,EAAO,CACd,MAAM,IAAI,EAAgB,yCAAyC,EAAO,aAAa,GAAO,SAC9F,CACA,KAAK,OAAO,MAAM,QAIT,UAAS,CAAC,EAAiB,EAAwD,CAC9F,GAAI,CACF,MAAM,KAAK,kBAAkB,EAC7B,MAAM,KAAK,YAAY,UAAU,EAAS,CAAC,EAAiB,IAAe,CACzE,IAAM,EAAO,KAAK,MAAM,CAAO,EAC/B,EAAQ,CAAE,OAAM,QAAS,CAAG,CAAC,EAC9B,EACD,MAAO,EAAO,CACd,MAAM,IAAI,EAAgB,mCAAmC,OAAa,GAAO,QAIxE,YAAW,CAAC,EAAgC,CACvD,GAAI,CACF,GAAI,CAAC,KAAK,WACR,OAGF,MAAM,KAAK,WAAW,YAAY,CAAO,EACzC,MAAO,EAAO,CACd,MAAM,IAAI,EAAgB,uCAAuC,OAAa,GAAO,QAI5E,eAAc,EAAkB,CAC3C,GAAI,CACF,GAAI,CAAC,KAAK,WACR,OAGF,MAAM,KAAK,WAAW,YAAY,EAClC,MAAO,EAAO,CACd,MAAM,IAAI,EAAgB,4CAA4C,GAAO,GAGnF,CA5Fa,EAAN,GADN,EAAW,EACL,oGAAM",
11
- "debugId": "71EA4C698ED7AF9C64756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "4F3417BC1E80EAE564756E2164756E21",
12
12
  "names": []
13
13
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ooneex/pub-sub",
3
3
  "description": "Publish-subscribe messaging pattern implementation for event-driven communication between application components",
4
- "version": "0.0.16",
4
+ "version": "0.0.18",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",