@authup/core-realtime-kit 1.0.0-beta.24 → 1.0.0-beta.26

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/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2021-2024 Peter Placzek
189
+ Copyright 2021-2025 Peter Placzek <peter.placzek1996@gmail.com>
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- import type { Socket } from 'socket.io-client';
1
+ import type { ManagerOptions, Socket } from 'socket.io-client';
2
2
  import { Manager } from 'socket.io-client';
3
3
  import type { CTSEvents, DefaultEvents, STCEvents } from '../../types';
4
4
  import type { ClientManagerContext, ClientManagerTokenFn } from './types';
@@ -7,6 +7,7 @@ export declare class ClientManager<ListenEvents extends DefaultEvents = STCEvent
7
7
  protected sockets: Map<string, Socket<ListenEvents, EmitEvents>>;
8
8
  protected tokenFn: ClientManagerTokenFn;
9
9
  constructor(ctx: ClientManagerContext);
10
+ get options(): Partial<ManagerOptions>;
10
11
  connect(namespace?: string): Promise<Socket<ListenEvents, EmitEvents>>;
11
12
  disconnect(namespace?: string): Promise<void>;
12
13
  reconnect(namespace?: string): Promise<Socket<ListenEvents, EmitEvents>>;
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/client/manager/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAG1E,qBAAa,aAAa,CACtB,YAAY,SAAS,aAAa,GAAG,SAAS,EAC9C,UAAU,SAAS,aAAa,GAAG,SAAS;IAE5C,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAEtD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAEjE,SAAS,CAAC,OAAO,EAAG,oBAAoB,CAAC;gBAE7B,GAAG,EAAE,oBAAoB;IAW/B,OAAO,CAAC,SAAS,SAAM,GAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAmBpE,UAAU,CAAC,SAAS,SAAM,GAAI,OAAO,CAAC,IAAI,CAAC;IA4B3C,SAAS,CAAC,SAAS,SAAM,GAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAWtE,YAAY,IAAK,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;IAgBlE,MAAM,CAAC,SAAS,SAAM,GAAI,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC;IAqB1D,KAAK,CAAC,SAAS,SAAM;CAMxB"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/client/manager/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAG1E,qBAAa,aAAa,CACtB,YAAY,SAAS,aAAa,GAAG,SAAS,EAC9C,UAAU,SAAS,aAAa,GAAG,SAAS;IAE5C,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAEtD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAEjE,SAAS,CAAC,OAAO,EAAG,oBAAoB,CAAC;gBAE7B,GAAG,EAAE,oBAAoB;IA8BrC,IAAI,OAAO,4BAEV;IAEK,OAAO,CAAC,SAAS,SAAM,GAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAmBpE,UAAU,CAAC,SAAS,SAAM,GAAI,OAAO,CAAC,IAAI,CAAC;IA4B3C,SAAS,CAAC,SAAS,SAAM,GAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAWtE,YAAY,IAAK,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;IAgBlE,MAAM,CAAC,SAAS,SAAM,GAAI,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC;IAqB1D,KAAK,CAAC,SAAS,SAAM;CAMxB"}
package/dist/index.cjs CHANGED
@@ -3,6 +3,18 @@
3
3
  var socket_ioClient = require('socket.io-client');
4
4
  var kit = require('@authup/kit');
5
5
 
6
+ /*
7
+ * Copyright (c) 2025.
8
+ * Author Peter Placzek (tada5hi)
9
+ * For the full copyright and license information,
10
+ * view the LICENSE file that was distributed with this source code.
11
+ */ function cleanDoubleSlashes(input = '') {
12
+ if (input.indexOf('://') !== -1) {
13
+ return input.split('://').map((str)=>cleanDoubleSlashes(str)).join('://');
14
+ }
15
+ return input.replace(/\/+/g, '/');
16
+ }
17
+
6
18
  function toClientManagerTokenAsyncFn(input) {
7
19
  if (typeof input === 'undefined') {
8
20
  return ()=>undefined;
@@ -17,6 +29,9 @@ function isDisconnectDescription(input) {
17
29
  }
18
30
 
19
31
  class ClientManager {
32
+ get options() {
33
+ return this.manager.opts;
34
+ }
20
35
  async connect(namespace = '/') {
21
36
  const socket = this.inject(namespace);
22
37
  if (socket.connected) {
@@ -97,9 +112,25 @@ class ClientManager {
97
112
  }
98
113
  constructor(ctx){
99
114
  this.sockets = new Map();
100
- this.manager = new socket_ioClient.Manager(ctx.url, {
115
+ const url = new URL(ctx.url);
116
+ const baseURL = `${url.protocol}//${url.host}`;
117
+ const options = {
118
+ ...ctx.options || {}
119
+ };
120
+ if (options.path) {
121
+ if (url.pathname.endsWith(options.path)) {
122
+ options.path = url.pathname;
123
+ } else if (url.pathname !== '/') {
124
+ options.path = cleanDoubleSlashes(url.pathname + options.path);
125
+ }
126
+ } else if (url.pathname.endsWith('/socket.io')) {
127
+ options.path = url.pathname;
128
+ } else if (url.pathname !== '/') {
129
+ options.path = cleanDoubleSlashes(`${url.pathname}/socket.io`);
130
+ }
131
+ this.manager = new socket_ioClient.Manager(baseURL, {
101
132
  autoConnect: false,
102
- ...ctx.options
133
+ ...options
103
134
  });
104
135
  this.tokenFn = toClientManagerTokenAsyncFn(ctx.token);
105
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/client/manager/utils.ts","../src/client/manager/module.ts","../src/event/constants.ts","../src/event/utils.ts","../src/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { DisconnectDescription } from '../../types';\nimport type { ClientManagerTokenFn } from './types';\n\nexport function toClientManagerTokenAsyncFn(input?: string | ClientManagerTokenFn) {\n if (typeof input === 'undefined') {\n return () => undefined;\n }\n\n if (typeof input === 'string') {\n return () => input;\n }\n\n return input;\n}\n\nexport function isDisconnectDescription(input: unknown) : input is DisconnectDescription {\n return isObject(input) &&\n typeof input.description === 'string';\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Socket } from 'socket.io-client';\nimport { Manager } from 'socket.io-client';\nimport type { CTSEvents, DefaultEvents, STCEvents } from '../../types';\nimport type { ClientManagerContext, ClientManagerTokenFn } from './types';\nimport { isDisconnectDescription, toClientManagerTokenAsyncFn } from './utils';\n\nexport class ClientManager<\n ListenEvents extends DefaultEvents = STCEvents,\n EmitEvents extends DefaultEvents = CTSEvents,\n> {\n protected manager : Manager<ListenEvents, EmitEvents>;\n\n protected sockets: Map<string, Socket<ListenEvents, EmitEvents>>;\n\n protected tokenFn : ClientManagerTokenFn;\n\n constructor(ctx: ClientManagerContext) {\n this.sockets = new Map();\n\n this.manager = new Manager(ctx.url, {\n autoConnect: false,\n ...ctx.options,\n });\n\n this.tokenFn = toClientManagerTokenAsyncFn(ctx.token);\n }\n\n async connect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n const socket = this.inject(namespace);\n if (socket.connected) {\n return socket;\n }\n\n return new Promise((resolve, reject) => {\n socket.once('connect', () => {\n resolve(socket);\n });\n\n socket.once('connect_error', (err) => {\n reject(err);\n });\n\n socket.connect();\n });\n }\n\n async disconnect(namespace = '/') : Promise<void> {\n const socket = this.inject(namespace);\n if (!socket.connected) {\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n socket.once('disconnect', (\n reason,\n description,\n ) => {\n if (reason === 'io client disconnect') {\n resolve();\n return;\n }\n\n if (isDisconnectDescription(description)) {\n reject(new Error(description.description));\n return;\n }\n\n reject(description);\n });\n\n socket.disconnect();\n });\n }\n\n async reconnect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n await this.disconnect(namespace);\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this.connect(namespace)\n .then((socket) => resolve(socket))\n .catch((err) => reject(err));\n });\n });\n }\n\n async reconnectAll() : Promise<Socket<ListenEvents, EmitEvents>[]> {\n const keys = this.sockets.keys();\n const promises : Promise<Socket<ListenEvents, EmitEvents>>[] = [];\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const key = keys.next();\n if (key.done) {\n break;\n }\n\n promises.push(this.reconnect(key.value));\n }\n\n return Promise.all(promises);\n }\n\n inject(namespace = '/') : Socket<ListenEvents, EmitEvents> {\n if (this.sockets.has(namespace)) {\n return this.sockets.get(namespace);\n }\n\n const socket = this.manager.socket(namespace, {\n auth: (cb: CallableFunction) => {\n Promise.resolve()\n .then(() => this.tokenFn())\n .then((token) => {\n cb({ token });\n })\n .catch(() => cb());\n },\n });\n\n this.sockets.set(namespace, socket);\n\n return socket;\n }\n\n eject(namespace = '/') {\n if (this.sockets[namespace]) {\n this.sockets[namespace].disconnect();\n delete this.sockets[namespace];\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum EventNameSuffix {\n CREATED = 'created',\n DELETED = 'deleted',\n UPDATED = 'updated',\n\n SUBSCRIBE = 'subscribe',\n UNSUBSCRIBE = 'unsubscribe',\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventFullName } from './types';\n\nexport function buildEventFullName<\n ENTITY extends string,\n VERB extends string,\n>(\n entity: ENTITY,\n event: VERB,\n) : EventFullName<ENTITY, VERB> {\n const eventCapitalized = event.substring(0, 1).toUpperCase() + event.substring(1);\n\n return entity + eventCapitalized as EventFullName<ENTITY, VERB>;\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventCallback, EventTarget } from './types';\n\nexport function isEventTarget(\n input: unknown,\n) : input is EventTarget {\n return typeof input === 'number' ||\n typeof input === 'string' ||\n typeof input === 'undefined';\n}\n\nexport function isEventCallback(\n input: unknown,\n fnArgs?: number,\n) : input is EventCallback {\n if (typeof fnArgs === 'undefined') {\n return typeof input === 'function';\n }\n\n return typeof input === 'function' &&\n input.length >= fnArgs;\n}\n"],"names":["toClientManagerTokenAsyncFn","input","undefined","isDisconnectDescription","isObject","description","ClientManager","connect","namespace","socket","inject","connected","Promise","resolve","reject","once","err","disconnect","reason","Error","reconnect","setTimeout","then","catch","reconnectAll","keys","sockets","promises","key","next","done","push","value","all","has","get","manager","auth","cb","tokenFn","token","set","eject","constructor","ctx","Map","Manager","url","autoConnect","options","EventNameSuffix","buildEventFullName","entity","event","eventCapitalized","substring","toUpperCase","isEventTarget","isEventCallback","fnArgs","length"],"mappings":";;;;;AAWO,SAASA,4BAA4BC,KAAqC,EAAA;IAC7E,IAAI,OAAOA,UAAU,WAAa,EAAA;AAC9B,QAAA,OAAO,IAAMC,SAAAA;AACjB;IAEA,IAAI,OAAOD,UAAU,QAAU,EAAA;AAC3B,QAAA,OAAO,IAAMA,KAAAA;AACjB;IAEA,OAAOA,KAAAA;AACX;AAEO,SAASE,wBAAwBF,KAAc,EAAA;AAClD,IAAA,OAAOG,YAASH,CAAAA,KAAAA,CAAAA,IACZ,OAAOA,KAAAA,CAAMI,WAAW,KAAK,QAAA;AACrC;;ACbO,MAAMC,aAAAA,CAAAA;IAqBT,MAAMC,OAAAA,CAAQC,SAAY,GAAA,GAAG,EAA8C;AACvE,QAAA,MAAMC,MAAS,GAAA,IAAI,CAACC,MAAM,CAACF,SAAAA,CAAAA;QAC3B,IAAIC,MAAAA,CAAOE,SAAS,EAAE;YAClB,OAAOF,MAAAA;AACX;QAEA,OAAO,IAAIG,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;YACzBL,MAAOM,CAAAA,IAAI,CAAC,SAAW,EAAA,IAAA;gBACnBF,OAAQJ,CAAAA,MAAAA,CAAAA;AACZ,aAAA,CAAA;YAEAA,MAAOM,CAAAA,IAAI,CAAC,eAAA,EAAiB,CAACC,GAAAA,GAAAA;gBAC1BF,MAAOE,CAAAA,GAAAA,CAAAA;AACX,aAAA,CAAA;AAEAP,YAAAA,MAAAA,CAAOF,OAAO,EAAA;AAClB,SAAA,CAAA;AACJ;IAEA,MAAMU,UAAAA,CAAWT,SAAY,GAAA,GAAG,EAAkB;AAC9C,QAAA,MAAMC,MAAS,GAAA,IAAI,CAACC,MAAM,CAACF,SAAAA,CAAAA;QAC3B,IAAI,CAACC,MAAOE,CAAAA,SAAS,EAAE;AACnB,YAAA;AACJ;QAEA,MAAM,IAAIC,OAAc,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AAC9BL,YAAAA,MAAAA,CAAOM,IAAI,CAAC,YAAc,EAAA,CACtBG,MACAb,EAAAA,WAAAA,GAAAA;AAEA,gBAAA,IAAIa,WAAW,sBAAwB,EAAA;AACnCL,oBAAAA,OAAAA,EAAAA;AACA,oBAAA;AACJ;AAEA,gBAAA,IAAIV,wBAAwBE,WAAc,CAAA,EAAA;oBACtCS,MAAO,CAAA,IAAIK,KAAMd,CAAAA,WAAAA,CAAYA,WAAW,CAAA,CAAA;AACxC,oBAAA;AACJ;gBAEAS,MAAOT,CAAAA,WAAAA,CAAAA;AACX,aAAA,CAAA;AAEAI,YAAAA,MAAAA,CAAOQ,UAAU,EAAA;AACrB,SAAA,CAAA;AACJ;IAEA,MAAMG,SAAAA,CAAUZ,SAAY,GAAA,GAAG,EAA8C;QACzE,MAAM,IAAI,CAACS,UAAU,CAACT,SAAAA,CAAAA;QACtB,OAAO,IAAII,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;YACzBO,UAAW,CAAA,IAAA;AACP,gBAAA,IAAI,CAACd,OAAO,CAACC,SAAAA,CAAAA,CACRc,IAAI,CAAC,CAACb,MAAWI,GAAAA,OAAAA,CAAQJ,MACzBc,CAAAA,CAAAA,CAAAA,KAAK,CAAC,CAACP,MAAQF,MAAOE,CAAAA,GAAAA,CAAAA,CAAAA;AAC/B,aAAA,CAAA;AACJ,SAAA,CAAA;AACJ;AAEA,IAAA,MAAMQ,YAA6D,GAAA;AAC/D,QAAA,MAAMC,IAAO,GAAA,IAAI,CAACC,OAAO,CAACD,IAAI,EAAA;AAC9B,QAAA,MAAME,WAAyD,EAAE;;AAEjE,QAAA,MAAO,IAAM,CAAA;YACT,MAAMC,GAAAA,GAAMH,KAAKI,IAAI,EAAA;YACrB,IAAID,GAAAA,CAAIE,IAAI,EAAE;AACV,gBAAA;AACJ;AAEAH,YAAAA,QAAAA,CAASI,IAAI,CAAC,IAAI,CAACX,SAAS,CAACQ,IAAII,KAAK,CAAA,CAAA;AAC1C;QAEA,OAAOpB,OAAAA,CAAQqB,GAAG,CAACN,QAAAA,CAAAA;AACvB;IAEAjB,MAAOF,CAAAA,SAAAA,GAAY,GAAG,EAAqC;AACvD,QAAA,IAAI,IAAI,CAACkB,OAAO,CAACQ,GAAG,CAAC1B,SAAY,CAAA,EAAA;AAC7B,YAAA,OAAO,IAAI,CAACkB,OAAO,CAACS,GAAG,CAAC3B,SAAAA,CAAAA;AAC5B;AAEA,QAAA,MAAMC,SAAS,IAAI,CAAC2B,OAAO,CAAC3B,MAAM,CAACD,SAAW,EAAA;AAC1C6B,YAAAA,IAAAA,EAAM,CAACC,EAAAA,GAAAA;gBACH1B,OAAQC,CAAAA,OAAO,EACVS,CAAAA,IAAI,CAAC,IAAM,IAAI,CAACiB,OAAO,EAAA,CAAA,CACvBjB,IAAI,CAAC,CAACkB,KAAAA,GAAAA;oBACHF,EAAG,CAAA;AAAEE,wBAAAA;AAAM,qBAAA,CAAA;iBAEdjB,CAAAA,CAAAA,KAAK,CAAC,IAAMe,EAAAA,EAAAA,CAAAA;AACrB;AACJ,SAAA,CAAA;AAEA,QAAA,IAAI,CAACZ,OAAO,CAACe,GAAG,CAACjC,SAAWC,EAAAA,MAAAA,CAAAA;QAE5B,OAAOA,MAAAA;AACX;IAEAiC,KAAMlC,CAAAA,SAAAA,GAAY,GAAG,EAAE;AACnB,QAAA,IAAI,IAAI,CAACkB,OAAO,CAAClB,UAAU,EAAE;AACzB,YAAA,IAAI,CAACkB,OAAO,CAAClB,SAAAA,CAAU,CAACS,UAAU,EAAA;AAClC,YAAA,OAAO,IAAI,CAACS,OAAO,CAAClB,SAAU,CAAA;AAClC;AACJ;AA/GAmC,IAAAA,WAAAA,CAAYC,GAAyB,CAAE;QACnC,IAAI,CAAClB,OAAO,GAAG,IAAImB,GAAAA,EAAAA;AAEnB,QAAA,IAAI,CAACT,OAAO,GAAG,IAAIU,uBAAQF,CAAAA,GAAAA,CAAIG,GAAG,EAAE;YAChCC,WAAa,EAAA,KAAA;AACb,YAAA,GAAGJ,IAAIK;AACX,SAAA,CAAA;AAEA,QAAA,IAAI,CAACV,OAAO,GAAGvC,2BAAAA,CAA4B4C,IAAIJ,KAAK,CAAA;AACxD;AAuGJ;;ACvIA;;;;;IAOO,IAAKU,eAAAA,iBAAAA,SAAAA,eAAAA,EAAAA;;;;;;AAAAA,IAAAA,OAAAA,eAAAA;AAOX,CAAA,CAAA,EAAA;;ACdD;;;;;AAKC,IAIM,SAASC,kBAIZC,CAAAA,MAAc,EACdC,KAAW,EAAA;IAEX,MAAMC,gBAAAA,GAAmBD,KAAME,CAAAA,SAAS,CAAC,CAAA,EAAG,GAAGC,WAAW,EAAA,GAAKH,KAAME,CAAAA,SAAS,CAAC,CAAA,CAAA;AAE/E,IAAA,OAAOH,MAASE,GAAAA,gBAAAA;AACpB;;ACnBA;;;;;IASO,SAASG,aAAAA,CACZxD,KAAc,EAAA;AAEd,IAAA,OAAO,OAAOA,KAAU,KAAA,QAAA,IACpB,OAAOA,KAAU,KAAA,QAAA,IACjB,OAAOA,KAAU,KAAA,WAAA;AACzB;AAEO,SAASyD,eAAAA,CACZzD,KAAc,EACd0D,MAAe,EAAA;IAEf,IAAI,OAAOA,WAAW,WAAa,EAAA;AAC/B,QAAA,OAAO,OAAO1D,KAAU,KAAA,UAAA;AAC5B;AAEA,IAAA,OAAO,OAAOA,KAAAA,KAAU,UACpBA,IAAAA,KAAAA,CAAM2D,MAAM,IAAID,MAAAA;AACxB;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/url.ts","../src/client/manager/utils.ts","../src/client/manager/module.ts","../src/event/constants.ts","../src/event/utils.ts","../src/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function cleanDoubleSlashes(input = ''): string {\n if (input.indexOf('://') !== -1) {\n return input.split('://')\n .map((str) => cleanDoubleSlashes(str))\n .join('://');\n }\n\n return input.replace(/\\/+/g, '/');\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { DisconnectDescription } from '../../types';\nimport type { ClientManagerTokenFn } from './types';\n\nexport function toClientManagerTokenAsyncFn(input?: string | ClientManagerTokenFn) {\n if (typeof input === 'undefined') {\n return () => undefined;\n }\n\n if (typeof input === 'string') {\n return () => input;\n }\n\n return input;\n}\n\nexport function isDisconnectDescription(input: unknown) : input is DisconnectDescription {\n return isObject(input) &&\n typeof input.description === 'string';\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ManagerOptions, Socket } from 'socket.io-client';\nimport { Manager } from 'socket.io-client';\nimport type { CTSEvents, DefaultEvents, STCEvents } from '../../types';\nimport { cleanDoubleSlashes } from '../../utils';\nimport type { ClientManagerContext, ClientManagerTokenFn } from './types';\nimport { isDisconnectDescription, toClientManagerTokenAsyncFn } from './utils';\n\nexport class ClientManager<\n ListenEvents extends DefaultEvents = STCEvents,\n EmitEvents extends DefaultEvents = CTSEvents,\n> {\n protected manager : Manager<ListenEvents, EmitEvents>;\n\n protected sockets: Map<string, Socket<ListenEvents, EmitEvents>>;\n\n protected tokenFn : ClientManagerTokenFn;\n\n constructor(ctx: ClientManagerContext) {\n this.sockets = new Map();\n\n const url = new URL(ctx.url);\n const baseURL = `${url.protocol}//${url.host}`;\n\n const options : Partial<ManagerOptions> = {\n ...(ctx.options || {}),\n };\n\n if (options.path) {\n if (url.pathname.endsWith(options.path)) {\n options.path = url.pathname;\n } else if (url.pathname !== '/') {\n options.path = cleanDoubleSlashes(url.pathname + options.path);\n }\n } else if (url.pathname.endsWith('/socket.io')) {\n options.path = url.pathname;\n } else if (url.pathname !== '/') {\n options.path = cleanDoubleSlashes(`${url.pathname}/socket.io`);\n }\n\n this.manager = new Manager(baseURL, {\n autoConnect: false,\n ...options,\n });\n\n this.tokenFn = toClientManagerTokenAsyncFn(ctx.token);\n }\n\n get options() {\n return this.manager.opts;\n }\n\n async connect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n const socket = this.inject(namespace);\n if (socket.connected) {\n return socket;\n }\n\n return new Promise((resolve, reject) => {\n socket.once('connect', () => {\n resolve(socket);\n });\n\n socket.once('connect_error', (err) => {\n reject(err);\n });\n\n socket.connect();\n });\n }\n\n async disconnect(namespace = '/') : Promise<void> {\n const socket = this.inject(namespace);\n if (!socket.connected) {\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n socket.once('disconnect', (\n reason,\n description,\n ) => {\n if (reason === 'io client disconnect') {\n resolve();\n return;\n }\n\n if (isDisconnectDescription(description)) {\n reject(new Error(description.description));\n return;\n }\n\n reject(description);\n });\n\n socket.disconnect();\n });\n }\n\n async reconnect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n await this.disconnect(namespace);\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this.connect(namespace)\n .then((socket) => resolve(socket))\n .catch((err) => reject(err));\n });\n });\n }\n\n async reconnectAll() : Promise<Socket<ListenEvents, EmitEvents>[]> {\n const keys = this.sockets.keys();\n const promises : Promise<Socket<ListenEvents, EmitEvents>>[] = [];\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const key = keys.next();\n if (key.done) {\n break;\n }\n\n promises.push(this.reconnect(key.value));\n }\n\n return Promise.all(promises);\n }\n\n inject(namespace = '/') : Socket<ListenEvents, EmitEvents> {\n if (this.sockets.has(namespace)) {\n return this.sockets.get(namespace);\n }\n\n const socket = this.manager.socket(namespace, {\n auth: (cb: CallableFunction) => {\n Promise.resolve()\n .then(() => this.tokenFn())\n .then((token) => {\n cb({ token });\n })\n .catch(() => cb());\n },\n });\n\n this.sockets.set(namespace, socket);\n\n return socket;\n }\n\n eject(namespace = '/') {\n if (this.sockets[namespace]) {\n this.sockets[namespace].disconnect();\n delete this.sockets[namespace];\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum EventNameSuffix {\n CREATED = 'created',\n DELETED = 'deleted',\n UPDATED = 'updated',\n\n SUBSCRIBE = 'subscribe',\n UNSUBSCRIBE = 'unsubscribe',\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventFullName } from './types';\n\nexport function buildEventFullName<\n ENTITY extends string,\n VERB extends string,\n>(\n entity: ENTITY,\n event: VERB,\n) : EventFullName<ENTITY, VERB> {\n const eventCapitalized = event.substring(0, 1).toUpperCase() + event.substring(1);\n\n return entity + eventCapitalized as EventFullName<ENTITY, VERB>;\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventCallback, EventTarget } from './types';\n\nexport function isEventTarget(\n input: unknown,\n) : input is EventTarget {\n return typeof input === 'number' ||\n typeof input === 'string' ||\n typeof input === 'undefined';\n}\n\nexport function isEventCallback(\n input: unknown,\n fnArgs?: number,\n) : input is EventCallback {\n if (typeof fnArgs === 'undefined') {\n return typeof input === 'function';\n }\n\n return typeof input === 'function' &&\n input.length >= fnArgs;\n}\n"],"names":["cleanDoubleSlashes","input","indexOf","split","map","str","join","replace","toClientManagerTokenAsyncFn","undefined","isDisconnectDescription","isObject","description","ClientManager","options","manager","opts","connect","namespace","socket","inject","connected","Promise","resolve","reject","once","err","disconnect","reason","Error","reconnect","setTimeout","then","catch","reconnectAll","keys","sockets","promises","key","next","done","push","value","all","has","get","auth","cb","tokenFn","token","set","eject","constructor","ctx","Map","url","URL","baseURL","protocol","host","path","pathname","endsWith","Manager","autoConnect","EventNameSuffix","buildEventFullName","entity","event","eventCapitalized","substring","toUpperCase","isEventTarget","isEventCallback","fnArgs","length"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,18 @@
1
1
  import { Manager } from 'socket.io-client';
2
2
  import { isObject } from '@authup/kit';
3
3
 
4
+ /*
5
+ * Copyright (c) 2025.
6
+ * Author Peter Placzek (tada5hi)
7
+ * For the full copyright and license information,
8
+ * view the LICENSE file that was distributed with this source code.
9
+ */ function cleanDoubleSlashes(input = '') {
10
+ if (input.indexOf('://') !== -1) {
11
+ return input.split('://').map((str)=>cleanDoubleSlashes(str)).join('://');
12
+ }
13
+ return input.replace(/\/+/g, '/');
14
+ }
15
+
4
16
  function toClientManagerTokenAsyncFn(input) {
5
17
  if (typeof input === 'undefined') {
6
18
  return ()=>undefined;
@@ -15,6 +27,9 @@ function isDisconnectDescription(input) {
15
27
  }
16
28
 
17
29
  class ClientManager {
30
+ get options() {
31
+ return this.manager.opts;
32
+ }
18
33
  async connect(namespace = '/') {
19
34
  const socket = this.inject(namespace);
20
35
  if (socket.connected) {
@@ -95,9 +110,25 @@ class ClientManager {
95
110
  }
96
111
  constructor(ctx){
97
112
  this.sockets = new Map();
98
- this.manager = new Manager(ctx.url, {
113
+ const url = new URL(ctx.url);
114
+ const baseURL = `${url.protocol}//${url.host}`;
115
+ const options = {
116
+ ...ctx.options || {}
117
+ };
118
+ if (options.path) {
119
+ if (url.pathname.endsWith(options.path)) {
120
+ options.path = url.pathname;
121
+ } else if (url.pathname !== '/') {
122
+ options.path = cleanDoubleSlashes(url.pathname + options.path);
123
+ }
124
+ } else if (url.pathname.endsWith('/socket.io')) {
125
+ options.path = url.pathname;
126
+ } else if (url.pathname !== '/') {
127
+ options.path = cleanDoubleSlashes(`${url.pathname}/socket.io`);
128
+ }
129
+ this.manager = new Manager(baseURL, {
99
130
  autoConnect: false,
100
- ...ctx.options
131
+ ...options
101
132
  });
102
133
  this.tokenFn = toClientManagerTokenAsyncFn(ctx.token);
103
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/client/manager/utils.ts","../src/client/manager/module.ts","../src/event/constants.ts","../src/event/utils.ts","../src/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { DisconnectDescription } from '../../types';\nimport type { ClientManagerTokenFn } from './types';\n\nexport function toClientManagerTokenAsyncFn(input?: string | ClientManagerTokenFn) {\n if (typeof input === 'undefined') {\n return () => undefined;\n }\n\n if (typeof input === 'string') {\n return () => input;\n }\n\n return input;\n}\n\nexport function isDisconnectDescription(input: unknown) : input is DisconnectDescription {\n return isObject(input) &&\n typeof input.description === 'string';\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Socket } from 'socket.io-client';\nimport { Manager } from 'socket.io-client';\nimport type { CTSEvents, DefaultEvents, STCEvents } from '../../types';\nimport type { ClientManagerContext, ClientManagerTokenFn } from './types';\nimport { isDisconnectDescription, toClientManagerTokenAsyncFn } from './utils';\n\nexport class ClientManager<\n ListenEvents extends DefaultEvents = STCEvents,\n EmitEvents extends DefaultEvents = CTSEvents,\n> {\n protected manager : Manager<ListenEvents, EmitEvents>;\n\n protected sockets: Map<string, Socket<ListenEvents, EmitEvents>>;\n\n protected tokenFn : ClientManagerTokenFn;\n\n constructor(ctx: ClientManagerContext) {\n this.sockets = new Map();\n\n this.manager = new Manager(ctx.url, {\n autoConnect: false,\n ...ctx.options,\n });\n\n this.tokenFn = toClientManagerTokenAsyncFn(ctx.token);\n }\n\n async connect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n const socket = this.inject(namespace);\n if (socket.connected) {\n return socket;\n }\n\n return new Promise((resolve, reject) => {\n socket.once('connect', () => {\n resolve(socket);\n });\n\n socket.once('connect_error', (err) => {\n reject(err);\n });\n\n socket.connect();\n });\n }\n\n async disconnect(namespace = '/') : Promise<void> {\n const socket = this.inject(namespace);\n if (!socket.connected) {\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n socket.once('disconnect', (\n reason,\n description,\n ) => {\n if (reason === 'io client disconnect') {\n resolve();\n return;\n }\n\n if (isDisconnectDescription(description)) {\n reject(new Error(description.description));\n return;\n }\n\n reject(description);\n });\n\n socket.disconnect();\n });\n }\n\n async reconnect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n await this.disconnect(namespace);\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this.connect(namespace)\n .then((socket) => resolve(socket))\n .catch((err) => reject(err));\n });\n });\n }\n\n async reconnectAll() : Promise<Socket<ListenEvents, EmitEvents>[]> {\n const keys = this.sockets.keys();\n const promises : Promise<Socket<ListenEvents, EmitEvents>>[] = [];\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const key = keys.next();\n if (key.done) {\n break;\n }\n\n promises.push(this.reconnect(key.value));\n }\n\n return Promise.all(promises);\n }\n\n inject(namespace = '/') : Socket<ListenEvents, EmitEvents> {\n if (this.sockets.has(namespace)) {\n return this.sockets.get(namespace);\n }\n\n const socket = this.manager.socket(namespace, {\n auth: (cb: CallableFunction) => {\n Promise.resolve()\n .then(() => this.tokenFn())\n .then((token) => {\n cb({ token });\n })\n .catch(() => cb());\n },\n });\n\n this.sockets.set(namespace, socket);\n\n return socket;\n }\n\n eject(namespace = '/') {\n if (this.sockets[namespace]) {\n this.sockets[namespace].disconnect();\n delete this.sockets[namespace];\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum EventNameSuffix {\n CREATED = 'created',\n DELETED = 'deleted',\n UPDATED = 'updated',\n\n SUBSCRIBE = 'subscribe',\n UNSUBSCRIBE = 'unsubscribe',\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventFullName } from './types';\n\nexport function buildEventFullName<\n ENTITY extends string,\n VERB extends string,\n>(\n entity: ENTITY,\n event: VERB,\n) : EventFullName<ENTITY, VERB> {\n const eventCapitalized = event.substring(0, 1).toUpperCase() + event.substring(1);\n\n return entity + eventCapitalized as EventFullName<ENTITY, VERB>;\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventCallback, EventTarget } from './types';\n\nexport function isEventTarget(\n input: unknown,\n) : input is EventTarget {\n return typeof input === 'number' ||\n typeof input === 'string' ||\n typeof input === 'undefined';\n}\n\nexport function isEventCallback(\n input: unknown,\n fnArgs?: number,\n) : input is EventCallback {\n if (typeof fnArgs === 'undefined') {\n return typeof input === 'function';\n }\n\n return typeof input === 'function' &&\n input.length >= fnArgs;\n}\n"],"names":["toClientManagerTokenAsyncFn","input","undefined","isDisconnectDescription","isObject","description","ClientManager","connect","namespace","socket","inject","connected","Promise","resolve","reject","once","err","disconnect","reason","Error","reconnect","setTimeout","then","catch","reconnectAll","keys","sockets","promises","key","next","done","push","value","all","has","get","manager","auth","cb","tokenFn","token","set","eject","constructor","ctx","Map","Manager","url","autoConnect","options","EventNameSuffix","buildEventFullName","entity","event","eventCapitalized","substring","toUpperCase","isEventTarget","isEventCallback","fnArgs","length"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils/url.ts","../src/client/manager/utils.ts","../src/client/manager/module.ts","../src/event/constants.ts","../src/event/utils.ts","../src/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function cleanDoubleSlashes(input = ''): string {\n if (input.indexOf('://') !== -1) {\n return input.split('://')\n .map((str) => cleanDoubleSlashes(str))\n .join('://');\n }\n\n return input.replace(/\\/+/g, '/');\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { DisconnectDescription } from '../../types';\nimport type { ClientManagerTokenFn } from './types';\n\nexport function toClientManagerTokenAsyncFn(input?: string | ClientManagerTokenFn) {\n if (typeof input === 'undefined') {\n return () => undefined;\n }\n\n if (typeof input === 'string') {\n return () => input;\n }\n\n return input;\n}\n\nexport function isDisconnectDescription(input: unknown) : input is DisconnectDescription {\n return isObject(input) &&\n typeof input.description === 'string';\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ManagerOptions, Socket } from 'socket.io-client';\nimport { Manager } from 'socket.io-client';\nimport type { CTSEvents, DefaultEvents, STCEvents } from '../../types';\nimport { cleanDoubleSlashes } from '../../utils';\nimport type { ClientManagerContext, ClientManagerTokenFn } from './types';\nimport { isDisconnectDescription, toClientManagerTokenAsyncFn } from './utils';\n\nexport class ClientManager<\n ListenEvents extends DefaultEvents = STCEvents,\n EmitEvents extends DefaultEvents = CTSEvents,\n> {\n protected manager : Manager<ListenEvents, EmitEvents>;\n\n protected sockets: Map<string, Socket<ListenEvents, EmitEvents>>;\n\n protected tokenFn : ClientManagerTokenFn;\n\n constructor(ctx: ClientManagerContext) {\n this.sockets = new Map();\n\n const url = new URL(ctx.url);\n const baseURL = `${url.protocol}//${url.host}`;\n\n const options : Partial<ManagerOptions> = {\n ...(ctx.options || {}),\n };\n\n if (options.path) {\n if (url.pathname.endsWith(options.path)) {\n options.path = url.pathname;\n } else if (url.pathname !== '/') {\n options.path = cleanDoubleSlashes(url.pathname + options.path);\n }\n } else if (url.pathname.endsWith('/socket.io')) {\n options.path = url.pathname;\n } else if (url.pathname !== '/') {\n options.path = cleanDoubleSlashes(`${url.pathname}/socket.io`);\n }\n\n this.manager = new Manager(baseURL, {\n autoConnect: false,\n ...options,\n });\n\n this.tokenFn = toClientManagerTokenAsyncFn(ctx.token);\n }\n\n get options() {\n return this.manager.opts;\n }\n\n async connect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n const socket = this.inject(namespace);\n if (socket.connected) {\n return socket;\n }\n\n return new Promise((resolve, reject) => {\n socket.once('connect', () => {\n resolve(socket);\n });\n\n socket.once('connect_error', (err) => {\n reject(err);\n });\n\n socket.connect();\n });\n }\n\n async disconnect(namespace = '/') : Promise<void> {\n const socket = this.inject(namespace);\n if (!socket.connected) {\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n socket.once('disconnect', (\n reason,\n description,\n ) => {\n if (reason === 'io client disconnect') {\n resolve();\n return;\n }\n\n if (isDisconnectDescription(description)) {\n reject(new Error(description.description));\n return;\n }\n\n reject(description);\n });\n\n socket.disconnect();\n });\n }\n\n async reconnect(namespace = '/') : Promise<Socket<ListenEvents, EmitEvents>> {\n await this.disconnect(namespace);\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this.connect(namespace)\n .then((socket) => resolve(socket))\n .catch((err) => reject(err));\n });\n });\n }\n\n async reconnectAll() : Promise<Socket<ListenEvents, EmitEvents>[]> {\n const keys = this.sockets.keys();\n const promises : Promise<Socket<ListenEvents, EmitEvents>>[] = [];\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const key = keys.next();\n if (key.done) {\n break;\n }\n\n promises.push(this.reconnect(key.value));\n }\n\n return Promise.all(promises);\n }\n\n inject(namespace = '/') : Socket<ListenEvents, EmitEvents> {\n if (this.sockets.has(namespace)) {\n return this.sockets.get(namespace);\n }\n\n const socket = this.manager.socket(namespace, {\n auth: (cb: CallableFunction) => {\n Promise.resolve()\n .then(() => this.tokenFn())\n .then((token) => {\n cb({ token });\n })\n .catch(() => cb());\n },\n });\n\n this.sockets.set(namespace, socket);\n\n return socket;\n }\n\n eject(namespace = '/') {\n if (this.sockets[namespace]) {\n this.sockets[namespace].disconnect();\n delete this.sockets[namespace];\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum EventNameSuffix {\n CREATED = 'created',\n DELETED = 'deleted',\n UPDATED = 'updated',\n\n SUBSCRIBE = 'subscribe',\n UNSUBSCRIBE = 'unsubscribe',\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventFullName } from './types';\n\nexport function buildEventFullName<\n ENTITY extends string,\n VERB extends string,\n>(\n entity: ENTITY,\n event: VERB,\n) : EventFullName<ENTITY, VERB> {\n const eventCapitalized = event.substring(0, 1).toUpperCase() + event.substring(1);\n\n return entity + eventCapitalized as EventFullName<ENTITY, VERB>;\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventCallback, EventTarget } from './types';\n\nexport function isEventTarget(\n input: unknown,\n) : input is EventTarget {\n return typeof input === 'number' ||\n typeof input === 'string' ||\n typeof input === 'undefined';\n}\n\nexport function isEventCallback(\n input: unknown,\n fnArgs?: number,\n) : input is EventCallback {\n if (typeof fnArgs === 'undefined') {\n return typeof input === 'function';\n }\n\n return typeof input === 'function' &&\n input.length >= fnArgs;\n}\n"],"names":["cleanDoubleSlashes","input","indexOf","split","map","str","join","replace","toClientManagerTokenAsyncFn","undefined","isDisconnectDescription","isObject","description","ClientManager","options","manager","opts","connect","namespace","socket","inject","connected","Promise","resolve","reject","once","err","disconnect","reason","Error","reconnect","setTimeout","then","catch","reconnectAll","keys","sockets","promises","key","next","done","push","value","all","has","get","auth","cb","tokenFn","token","set","eject","constructor","ctx","Map","url","URL","baseURL","protocol","host","path","pathname","endsWith","Manager","autoConnect","EventNameSuffix","buildEventFullName","entity","event","eventCapitalized","substring","toUpperCase","isEventTarget","isEventCallback","fnArgs","length"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './url';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAOA,cAAc,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function cleanDoubleSlashes(input?: string): string;
2
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,CAAC,KAAK,SAAK,GAAG,MAAM,CAQrD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authup/core-realtime-kit",
3
- "version": "1.0.0-beta.24",
3
+ "version": "1.0.0-beta.26",
4
4
  "description": "Package containing a toolkit for the core realtime service.",
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
@@ -41,12 +41,12 @@
41
41
  },
42
42
  "homepage": "https://github.com/authup/authup#readme",
43
43
  "devDependencies": {
44
- "@authup/kit": "^1.0.0-beta.24",
44
+ "@authup/kit": "^1.0.0-beta.26",
45
45
  "socket.io": "^4.8.1",
46
46
  "socket.io-client": "^4.8.1"
47
47
  },
48
48
  "peerDependencies": {
49
- "@authup/kit": "^1.0.0-beta.24",
49
+ "@authup/kit": "^1.0.0-beta.26",
50
50
  "socket.io-client": "^4.8.1"
51
51
  },
52
52
  "publishConfig": {