@ancon/wildcat-utils 1.20.20 → 1.21.0

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,12 @@
1
1
  /**
2
- * Generate backoff array with number of ms to sleep
2
+ * Generate backoff array with number of ms to sleep.
3
+ * Intervals are increased semi-exponentially from `baseSleep` but capped at `maxSleep`.
4
+ * It's not entirely exponential because there is added jitter.
3
5
  * https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/
4
6
  *
5
7
  * @param numIntervals Number of intervals to generate
6
- * @param baseSleep Base ms jitter
7
- * @param maxSleep Max ms jitter
8
+ * @param baseSleep Base ms (first interval +/- jitter)
9
+ * @param maxSleep Max ms (greatest allowed interval - jitter)
8
10
  * @returns Array with milliseconds entries
9
11
  */
10
12
  declare function generateBackoffWithEqualJitter(numIntervals?: number, baseSleep?: number, maxSleep?: number): number[];
package/index.d.ts CHANGED
@@ -12,3 +12,4 @@ export * from './tables';
12
12
  export * from './checkout';
13
13
  export * from './currency';
14
14
  export * from './inventory';
15
+ export * from './signalr';
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./shared/enums.js"),r=require("./shared/isWithinFlag.js"),i=require("./shared/generateId.js"),n=require("./outlet/getListOutletOpeningHoursTable.js"),o=require("./outlet/getOutletTagInformation.js"),u=require("./outlet/getOutletAvailabilityInfo.js"),s=require("./outlet/getOutletOfflineOrderFormats.js"),a=require("./outlet/getOutletAvailableOrderFormats.js"),c=require("./outlet/getOutletFormattedDistance.js"),l=require("./outlet/isOutletAcceptingPreOrders.js"),g=require("./outlet/getOutletDeliveryFee.js"),d=require("./outlet/getOutletTodayOpeningTimes.js"),q=require("./outlet/getOutletOrderFormats.js"),O=require("./outlet/serviceDateTimesFromOpeningHours.js"),_=require("./versioning/isVersionALessThanB.js"),m=require("./versioning/cleanVersionString.js"),k=require("./api/getUrlAndParams.js"),y=require("./api/getEndpointWithVersion.js"),h=require("./api/generateBackoffWithEqualJitter.js"),p=require("./string/slugify.js"),T=require("./string/truncate.js"),f=require("./color/lighten.js"),P=require("./color/brighten.js"),F=require("./color/darken.js"),S=require("./color/isDarkBackground.js"),v=require("./user/getFullName.js"),I=require("./user/getFullAddressString.js"),D=require("./logger/Logger.js"),b=require("./logger/types.js"),A=require("./logger/sanitizeAsStringDict.js"),C=require("./printing/getPrinterType.js"),V=require("./printing/isValidPrinter.js"),L=require("./printing/isValidNetworkPrinter.js"),B=require("./printing/isValidStarCloudPrinter.js"),W=require("./printing/isTerminalPrinter.js"),M=require("./number/randomIntFromInterval.js"),N=require("./tables/decodeTableQRPayload.js"),E=require("./checkout/getCheckoutItemModifications.js"),H=require("./checkout/getCheckoutProductName.js"),t=require("./checkout/getCheckoutOrderStatusTexts.js"),w=require("./checkout/getCheckoutItemsMappedByTicketItemStatus.js"),x=require("./checkout/isCheckoutOrderSummary.js"),z=require("./currency/getFormattedCurrency.js"),J=require("./inventory/isDetailedProductOutOfStock.js"),K=require("./inventory/isDetailedProductVariantOutOfStocks.js"),Q=require("./inventory/isMenuTreeProductOutOfStock.js");require("moment");require("@ancon/wildcat-types");require("./outlet/types.js");require("./outlet/constants.js");require("./outlet/getOutletCurrentActiveOperatingHour.js");require("./outlet/getMomentFromDateAndTimeString.js");require("./outlet/searchNextOpeningMoment.js");require("lodash");require("compare-versions");require("tinycolor2");require("@ancon/wildcat-printing");require("./currency/getFormattedCurrencyPostfix.js");exports.DayOfWeek=e.DayOfWeek;exports.IntervalState=e.IntervalState;exports.IntervalType=e.IntervalType;exports.OrderFormat=e.OrderFormat;exports.isWithinFlag=r;exports.generateId=i;exports.getListOutletOpeningHoursTable=n;exports.getOutletTagInformation=o.default;exports.getOutletAvailabilityInfo=u.default;exports.getOutletOfflineOrderFormats=s;exports.getOutletAvailableOrderFormats=a;exports.getOutletFormattedDistance=c;exports.isOutletAcceptingPreOrders=l;exports.getOutletDeliveryFee=g;exports.getOutletTodayOpeningTimes=d;exports.getOutletOrderFormats=q;exports.serviceDateTimesFromOpeningHours=O;exports.isVersionALessThanB=_;exports.cleanVersionString=m;exports.getUrlAndParams=k;exports.getEndpointWithVersion=y;exports.generateBackoffWithEqualJitter=h;exports.slugify=p;exports.truncate=T;exports.lighten=f;exports.brighten=P;exports.darken=F;exports.isDarkBackground=S;exports.getFullName=v;exports.getFullAddressString=I;exports.Logger=D;exports.LogLevel=b.LogLevel;exports.sanitizeAsStringDict=A;exports.getPrinterType=C;exports.isValidPrinter=V;exports.isValidNetworkPrinter=L;exports.isValidStarCloudPrinter=B;exports.isTerminalPrinter=W;exports.randomIntFromInterval=M;exports.decodeTableQRPayload=N;exports.getCheckoutGroupedModifications=E;exports.getCheckoutProductName=H;exports.TranslationKey=t.TranslationKey;exports.getCheckoutOrderStatusTexts=t.default;exports.getCheckoutItemsMappedByTicketItemStatus=w;exports.isCheckoutOrderSummary=x;exports.getFormattedCurrency=z;exports.isDetailedProductOutOfStock=J;exports.isDetailedProductVariantOutOfStocks=K;exports.isMenuTreeProductOutOfStock=Q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./shared/enums.js"),r=require("./shared/isWithinFlag.js"),i=require("./shared/generateId.js"),n=require("./shared/wait.js"),o=require("./outlet/getListOutletOpeningHoursTable.js"),u=require("./outlet/getOutletTagInformation.js"),s=require("./outlet/getOutletAvailabilityInfo.js"),a=require("./outlet/getOutletOfflineOrderFormats.js"),c=require("./outlet/getOutletAvailableOrderFormats.js"),l=require("./outlet/getOutletFormattedDistance.js"),g=require("./outlet/isOutletAcceptingPreOrders.js"),d=require("./outlet/getOutletDeliveryFee.js"),q=require("./outlet/getOutletTodayOpeningTimes.js"),O=require("./outlet/getOutletOrderFormats.js"),_=require("./outlet/serviceDateTimesFromOpeningHours.js"),m=require("./versioning/isVersionALessThanB.js"),k=require("./versioning/cleanVersionString.js"),h=require("./api/getUrlAndParams.js"),y=require("./api/getEndpointWithVersion.js"),p=require("./api/generateBackoffWithEqualJitter.js"),T=require("./string/slugify.js"),f=require("./string/truncate.js"),S=require("./color/lighten.js"),P=require("./color/brighten.js"),F=require("./color/darken.js"),v=require("./color/isDarkBackground.js"),I=require("./user/getFullName.js"),D=require("./user/getFullAddressString.js"),b=require("./logger/Logger.js"),A=require("./logger/types.js"),C=require("./logger/sanitizeAsStringDict.js"),V=require("./printing/getPrinterType.js"),L=require("./printing/isValidPrinter.js"),B=require("./printing/isValidNetworkPrinter.js"),W=require("./printing/isValidStarCloudPrinter.js"),M=require("./printing/isTerminalPrinter.js"),H=require("./number/randomIntFromInterval.js"),N=require("./tables/decodeTableQRPayload.js"),R=require("./checkout/getCheckoutItemModifications.js"),w=require("./checkout/getCheckoutProductName.js"),t=require("./checkout/getCheckoutOrderStatusTexts.js"),E=require("./checkout/getCheckoutItemsMappedByTicketItemStatus.js"),U=require("./checkout/isCheckoutOrderSummary.js"),x=require("./currency/getFormattedCurrency.js"),z=require("./inventory/isDetailedProductOutOfStock.js"),J=require("./inventory/isDetailedProductVariantOutOfStocks.js"),K=require("./inventory/isMenuTreeProductOutOfStock.js"),Q=require("./signalr/createUseSignalRHook.js"),j=require("./signalr/SignalR.js");require("moment");require("@ancon/wildcat-types");require("./outlet/types.js");require("./outlet/constants.js");require("./outlet/getOutletCurrentActiveOperatingHour.js");require("./outlet/getMomentFromDateAndTimeString.js");require("./outlet/searchNextOpeningMoment.js");require("lodash");require("compare-versions");require("tinycolor2");require("@ancon/wildcat-printing");require("./currency/getFormattedCurrencyPostfix.js");require("react");require("react-redux");require("@microsoft/signalr");exports.DayOfWeek=e.DayOfWeek;exports.IntervalState=e.IntervalState;exports.IntervalType=e.IntervalType;exports.OrderFormat=e.OrderFormat;exports.isWithinFlag=r;exports.generateId=i;exports.wait=n;exports.getListOutletOpeningHoursTable=o;exports.getOutletTagInformation=u.default;exports.getOutletAvailabilityInfo=s.default;exports.getOutletOfflineOrderFormats=a;exports.getOutletAvailableOrderFormats=c;exports.getOutletFormattedDistance=l;exports.isOutletAcceptingPreOrders=g;exports.getOutletDeliveryFee=d;exports.getOutletTodayOpeningTimes=q;exports.getOutletOrderFormats=O;exports.serviceDateTimesFromOpeningHours=_;exports.isVersionALessThanB=m;exports.cleanVersionString=k;exports.getUrlAndParams=h;exports.getEndpointWithVersion=y;exports.generateBackoffWithEqualJitter=p;exports.slugify=T;exports.truncate=f;exports.lighten=S;exports.brighten=P;exports.darken=F;exports.isDarkBackground=v;exports.getFullName=I;exports.getFullAddressString=D;exports.Logger=b;exports.LogLevel=A.LogLevel;exports.sanitizeAsStringDict=C;exports.getPrinterType=V;exports.isValidPrinter=L;exports.isValidNetworkPrinter=B;exports.isValidStarCloudPrinter=W;exports.isTerminalPrinter=M;exports.randomIntFromInterval=H;exports.decodeTableQRPayload=N;exports.getCheckoutGroupedModifications=R;exports.getCheckoutProductName=w;exports.TranslationKey=t.TranslationKey;exports.getCheckoutOrderStatusTexts=t.default;exports.getCheckoutItemsMappedByTicketItemStatus=E;exports.isCheckoutOrderSummary=U;exports.getFormattedCurrency=x;exports.isDetailedProductOutOfStock=z;exports.isDetailedProductVariantOutOfStocks=J;exports.isMenuTreeProductOutOfStock=K;exports.createUseSignalRHook=Q;exports.SignalR=j;
package/index.mjs CHANGED
@@ -1,49 +1,52 @@
1
- import { DayOfWeek as x, IntervalState as g, IntervalType as O, OrderFormat as c } from "./shared/enums.mjs";
2
- import { default as T } from "./shared/isWithinFlag.mjs";
3
- import { default as F } from "./shared/generateId.mjs";
4
- import { default as h } from "./outlet/getListOutletOpeningHoursTable.mjs";
5
- import { default as I } from "./outlet/getOutletTagInformation.mjs";
6
- import { default as D } from "./outlet/getOutletAvailabilityInfo.mjs";
7
- import { default as C } from "./outlet/getOutletOfflineOrderFormats.mjs";
8
- import { default as b } from "./outlet/getOutletAvailableOrderFormats.mjs";
9
- import { default as B } from "./outlet/getOutletFormattedDistance.mjs";
10
- import { default as M } from "./outlet/isOutletAcceptingPreOrders.mjs";
11
- import { default as E } from "./outlet/getOutletDeliveryFee.mjs";
12
- import { default as q } from "./outlet/getOutletTodayOpeningTimes.mjs";
13
- import { default as z } from "./outlet/getOutletOrderFormats.mjs";
14
- import { default as J } from "./outlet/serviceDateTimesFromOpeningHours.mjs";
15
- import { default as Q } from "./versioning/isVersionALessThanB.mjs";
16
- import { default as U } from "./versioning/cleanVersionString.mjs";
17
- import { default as X } from "./api/getUrlAndParams.mjs";
18
- import { default as Z } from "./api/getEndpointWithVersion.mjs";
19
- import { default as $ } from "./api/generateBackoffWithEqualJitter.mjs";
20
- import { default as et } from "./string/slugify.mjs";
21
- import { default as ot } from "./string/truncate.mjs";
22
- import { default as ft } from "./color/lighten.mjs";
23
- import { default as st } from "./color/brighten.mjs";
24
- import { default as dt } from "./color/darken.mjs";
25
- import { default as it } from "./color/isDarkBackground.mjs";
26
- import { default as nt } from "./user/getFullName.mjs";
27
- import { default as gt } from "./user/getFullAddressString.mjs";
28
- import { default as ct } from "./logger/Logger.mjs";
29
- import { LogLevel as Tt } from "./logger/types.mjs";
30
- import { default as Ft } from "./logger/sanitizeAsStringDict.mjs";
31
- import { default as ht } from "./printing/getPrinterType.mjs";
32
- import { default as It } from "./printing/isValidPrinter.mjs";
33
- import { default as Dt } from "./printing/isValidNetworkPrinter.mjs";
34
- import { default as Ct } from "./printing/isValidStarCloudPrinter.mjs";
35
- import { default as bt } from "./printing/isTerminalPrinter.mjs";
36
- import { default as Bt } from "./number/randomIntFromInterval.mjs";
37
- import { default as Mt } from "./tables/decodeTableQRPayload.mjs";
38
- import { default as Et } from "./checkout/getCheckoutItemModifications.mjs";
39
- import { default as qt } from "./checkout/getCheckoutProductName.mjs";
40
- import { TranslationKey as zt, default as Gt } from "./checkout/getCheckoutOrderStatusTexts.mjs";
41
- import { default as Kt } from "./checkout/getCheckoutItemsMappedByTicketItemStatus.mjs";
42
- import { default as Rt } from "./checkout/isCheckoutOrderSummary.mjs";
43
- import { default as jt } from "./currency/getFormattedCurrency.mjs";
44
- import { default as Yt } from "./inventory/isDetailedProductOutOfStock.mjs";
45
- import { default as _t } from "./inventory/isDetailedProductVariantOutOfStocks.mjs";
46
- import { default as te } from "./inventory/isMenuTreeProductOutOfStock.mjs";
1
+ import { DayOfWeek as c, IntervalState as k, IntervalType as T, OrderFormat as S } from "./shared/enums.mjs";
2
+ import { default as F } from "./shared/isWithinFlag.mjs";
3
+ import { default as h } from "./shared/generateId.mjs";
4
+ import { default as v } from "./shared/wait.mjs";
5
+ import { default as A } from "./outlet/getListOutletOpeningHoursTable.mjs";
6
+ import { default as V } from "./outlet/getOutletTagInformation.mjs";
7
+ import { default as L } from "./outlet/getOutletAvailabilityInfo.mjs";
8
+ import { default as W } from "./outlet/getOutletOfflineOrderFormats.mjs";
9
+ import { default as M } from "./outlet/getOutletAvailableOrderFormats.mjs";
10
+ import { default as R } from "./outlet/getOutletFormattedDistance.mjs";
11
+ import { default as E } from "./outlet/isOutletAcceptingPreOrders.mjs";
12
+ import { default as q } from "./outlet/getOutletDeliveryFee.mjs";
13
+ import { default as G } from "./outlet/getOutletTodayOpeningTimes.mjs";
14
+ import { default as K } from "./outlet/getOutletOrderFormats.mjs";
15
+ import { default as j } from "./outlet/serviceDateTimesFromOpeningHours.mjs";
16
+ import { default as Y } from "./versioning/isVersionALessThanB.mjs";
17
+ import { default as _ } from "./versioning/cleanVersionString.mjs";
18
+ import { default as tt } from "./api/getUrlAndParams.mjs";
19
+ import { default as rt } from "./api/getEndpointWithVersion.mjs";
20
+ import { default as at } from "./api/generateBackoffWithEqualJitter.mjs";
21
+ import { default as lt } from "./string/slugify.mjs";
22
+ import { default as mt } from "./string/truncate.mjs";
23
+ import { default as dt } from "./color/lighten.mjs";
24
+ import { default as pt } from "./color/brighten.mjs";
25
+ import { default as xt } from "./color/darken.mjs";
26
+ import { default as Ot } from "./color/isDarkBackground.mjs";
27
+ import { default as kt } from "./user/getFullName.mjs";
28
+ import { default as St } from "./user/getFullAddressString.mjs";
29
+ import { default as Ft } from "./logger/Logger.mjs";
30
+ import { LogLevel as ht } from "./logger/types.mjs";
31
+ import { default as vt } from "./logger/sanitizeAsStringDict.mjs";
32
+ import { default as At } from "./printing/getPrinterType.mjs";
33
+ import { default as Vt } from "./printing/isValidPrinter.mjs";
34
+ import { default as Lt } from "./printing/isValidNetworkPrinter.mjs";
35
+ import { default as Wt } from "./printing/isValidStarCloudPrinter.mjs";
36
+ import { default as Mt } from "./printing/isTerminalPrinter.mjs";
37
+ import { default as Rt } from "./number/randomIntFromInterval.mjs";
38
+ import { default as Et } from "./tables/decodeTableQRPayload.mjs";
39
+ import { default as qt } from "./checkout/getCheckoutItemModifications.mjs";
40
+ import { default as Gt } from "./checkout/getCheckoutProductName.mjs";
41
+ import { TranslationKey as Kt, default as Qt } from "./checkout/getCheckoutOrderStatusTexts.mjs";
42
+ import { default as Xt } from "./checkout/getCheckoutItemsMappedByTicketItemStatus.mjs";
43
+ import { default as Zt } from "./checkout/isCheckoutOrderSummary.mjs";
44
+ import { default as $t } from "./currency/getFormattedCurrency.mjs";
45
+ import { default as ee } from "./inventory/isDetailedProductOutOfStock.mjs";
46
+ import { default as oe } from "./inventory/isDetailedProductVariantOutOfStocks.mjs";
47
+ import { default as fe } from "./inventory/isMenuTreeProductOutOfStock.mjs";
48
+ import { default as se } from "./signalr/createUseSignalRHook.mjs";
49
+ import { default as ue } from "./signalr/SignalR.mjs";
47
50
  import "moment";
48
51
  import "@ancon/wildcat-types";
49
52
  import "./outlet/types.mjs";
@@ -56,55 +59,61 @@ import "compare-versions";
56
59
  import "tinycolor2";
57
60
  import "@ancon/wildcat-printing";
58
61
  import "./currency/getFormattedCurrencyPostfix.mjs";
62
+ import "react";
63
+ import "react-redux";
64
+ import "@microsoft/signalr";
59
65
  export {
60
- x as DayOfWeek,
61
- g as IntervalState,
62
- O as IntervalType,
63
- Tt as LogLevel,
64
- ct as Logger,
65
- c as OrderFormat,
66
- zt as TranslationKey,
67
- st as brighten,
68
- U as cleanVersionString,
69
- dt as darken,
70
- Mt as decodeTableQRPayload,
71
- $ as generateBackoffWithEqualJitter,
72
- F as generateId,
73
- Et as getCheckoutGroupedModifications,
74
- Kt as getCheckoutItemsMappedByTicketItemStatus,
75
- Gt as getCheckoutOrderStatusTexts,
76
- qt as getCheckoutProductName,
77
- Z as getEndpointWithVersion,
78
- jt as getFormattedCurrency,
79
- gt as getFullAddressString,
80
- nt as getFullName,
81
- h as getListOutletOpeningHoursTable,
82
- D as getOutletAvailabilityInfo,
83
- b as getOutletAvailableOrderFormats,
84
- E as getOutletDeliveryFee,
85
- B as getOutletFormattedDistance,
86
- C as getOutletOfflineOrderFormats,
87
- z as getOutletOrderFormats,
88
- I as getOutletTagInformation,
89
- q as getOutletTodayOpeningTimes,
90
- ht as getPrinterType,
91
- X as getUrlAndParams,
92
- Rt as isCheckoutOrderSummary,
93
- it as isDarkBackground,
94
- Yt as isDetailedProductOutOfStock,
95
- _t as isDetailedProductVariantOutOfStocks,
96
- te as isMenuTreeProductOutOfStock,
97
- M as isOutletAcceptingPreOrders,
98
- bt as isTerminalPrinter,
99
- Dt as isValidNetworkPrinter,
100
- It as isValidPrinter,
101
- Ct as isValidStarCloudPrinter,
102
- Q as isVersionALessThanB,
103
- T as isWithinFlag,
104
- ft as lighten,
105
- Bt as randomIntFromInterval,
106
- Ft as sanitizeAsStringDict,
107
- J as serviceDateTimesFromOpeningHours,
108
- et as slugify,
109
- ot as truncate
66
+ c as DayOfWeek,
67
+ k as IntervalState,
68
+ T as IntervalType,
69
+ ht as LogLevel,
70
+ Ft as Logger,
71
+ S as OrderFormat,
72
+ ue as SignalR,
73
+ Kt as TranslationKey,
74
+ pt as brighten,
75
+ _ as cleanVersionString,
76
+ se as createUseSignalRHook,
77
+ xt as darken,
78
+ Et as decodeTableQRPayload,
79
+ at as generateBackoffWithEqualJitter,
80
+ h as generateId,
81
+ qt as getCheckoutGroupedModifications,
82
+ Xt as getCheckoutItemsMappedByTicketItemStatus,
83
+ Qt as getCheckoutOrderStatusTexts,
84
+ Gt as getCheckoutProductName,
85
+ rt as getEndpointWithVersion,
86
+ $t as getFormattedCurrency,
87
+ St as getFullAddressString,
88
+ kt as getFullName,
89
+ A as getListOutletOpeningHoursTable,
90
+ L as getOutletAvailabilityInfo,
91
+ M as getOutletAvailableOrderFormats,
92
+ q as getOutletDeliveryFee,
93
+ R as getOutletFormattedDistance,
94
+ W as getOutletOfflineOrderFormats,
95
+ K as getOutletOrderFormats,
96
+ V as getOutletTagInformation,
97
+ G as getOutletTodayOpeningTimes,
98
+ At as getPrinterType,
99
+ tt as getUrlAndParams,
100
+ Zt as isCheckoutOrderSummary,
101
+ Ot as isDarkBackground,
102
+ ee as isDetailedProductOutOfStock,
103
+ oe as isDetailedProductVariantOutOfStocks,
104
+ fe as isMenuTreeProductOutOfStock,
105
+ E as isOutletAcceptingPreOrders,
106
+ Mt as isTerminalPrinter,
107
+ Lt as isValidNetworkPrinter,
108
+ Vt as isValidPrinter,
109
+ Wt as isValidStarCloudPrinter,
110
+ Y as isVersionALessThanB,
111
+ F as isWithinFlag,
112
+ dt as lighten,
113
+ Rt as randomIntFromInterval,
114
+ vt as sanitizeAsStringDict,
115
+ j as serviceDateTimesFromOpeningHours,
116
+ lt as slugify,
117
+ mt as truncate,
118
+ v as wait
110
119
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ancon/wildcat-utils",
3
- "version": "1.20.20",
3
+ "version": "1.21.0",
4
4
  "private": false,
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -286,6 +286,31 @@
286
286
  "require": "./shared/isWithinFlag.js",
287
287
  "types": "./shared/isWithinFlag.d.ts"
288
288
  },
289
+ "./shared/wait": {
290
+ "import": "./shared/wait.mjs",
291
+ "require": "./shared/wait.js",
292
+ "types": "./shared/wait.d.ts"
293
+ },
294
+ "./signalr/SignalR": {
295
+ "import": "./signalr/SignalR.mjs",
296
+ "require": "./signalr/SignalR.js",
297
+ "types": "./signalr/SignalR.d.ts"
298
+ },
299
+ "./signalr/createUseSignalRHook": {
300
+ "import": "./signalr/createUseSignalRHook.mjs",
301
+ "require": "./signalr/createUseSignalRHook.js",
302
+ "types": "./signalr/createUseSignalRHook.d.ts"
303
+ },
304
+ "./signalr": {
305
+ "import": "./signalr/index.mjs",
306
+ "require": "./signalr/index.js",
307
+ "types": "./signalr/index.d.ts"
308
+ },
309
+ "./signalr/types": {
310
+ "import": "./signalr/types.mjs",
311
+ "require": "./signalr/types.js",
312
+ "types": "./signalr/types.d.ts"
313
+ },
289
314
  "./string": {
290
315
  "import": "./string/index.mjs",
291
316
  "require": "./string/index.js",
package/shared/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
- export { IntervalState, DayOfWeek, IntervalType, OrderFormat } from './enums';
2
- export { default as isWithinFlag } from './isWithinFlag';
3
- export { default as generateId } from './generateId';
1
+ import { IntervalState, DayOfWeek, IntervalType, OrderFormat } from './enums';
2
+ import isWithinFlag from './isWithinFlag';
3
+ import generateId from './generateId';
4
+ import wait from './wait';
5
+ export { IntervalState, DayOfWeek, IntervalType, OrderFormat, isWithinFlag, generateId, wait, };
package/shared/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./enums.js"),r=require("./isWithinFlag.js"),t=require("./generateId.js");exports.DayOfWeek=e.DayOfWeek;exports.IntervalState=e.IntervalState;exports.IntervalType=e.IntervalType;exports.OrderFormat=e.OrderFormat;exports.isWithinFlag=r;exports.generateId=t;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./enums.js"),r=require("./isWithinFlag.js"),t=require("./generateId.js"),a=require("./wait.js");exports.DayOfWeek=e.DayOfWeek;exports.IntervalState=e.IntervalState;exports.IntervalType=e.IntervalType;exports.OrderFormat=e.OrderFormat;exports.isWithinFlag=r;exports.generateId=t;exports.wait=a;
package/shared/index.mjs CHANGED
@@ -1,11 +1,13 @@
1
- import { DayOfWeek as t, IntervalState as a, IntervalType as o, OrderFormat as f } from "./enums.mjs";
1
+ import { DayOfWeek as a, IntervalState as r, IntervalType as o, OrderFormat as f } from "./enums.mjs";
2
2
  import { default as d } from "./isWithinFlag.mjs";
3
- import { default as n } from "./generateId.mjs";
3
+ import { default as p } from "./generateId.mjs";
4
+ import { default as n } from "./wait.mjs";
4
5
  export {
5
- t as DayOfWeek,
6
- a as IntervalState,
6
+ a as DayOfWeek,
7
+ r as IntervalState,
7
8
  o as IntervalType,
8
9
  f as OrderFormat,
9
- n as generateId,
10
- d as isWithinFlag
10
+ p as generateId,
11
+ d as isWithinFlag,
12
+ n as wait
11
13
  };
@@ -0,0 +1,2 @@
1
+ declare function wait(ms: number): Promise<void>;
2
+ export default wait;
package/shared/wait.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";function i(t){return new Promise(e=>{setTimeout(e,t)})}module.exports=i;
@@ -0,0 +1,8 @@
1
+ function i(e) {
2
+ return new Promise((t) => {
3
+ setTimeout(t, e);
4
+ });
5
+ }
6
+ export {
7
+ i as default
8
+ };
@@ -0,0 +1,59 @@
1
+ import { SignalRSignalName } from '@ancon/wildcat-types';
2
+ import { SignalRConfig, SignalREventListener } from './types';
3
+ declare type InternalEvent = 'connected' | 'disconnected' | 'reconnected';
4
+ declare type InternalEventListener = (...payload: any[]) => any;
5
+ declare class SignalR {
6
+ private internalEvents;
7
+ private signalREvents;
8
+ private hubConnection;
9
+ private clientId;
10
+ private logger;
11
+ private backoff;
12
+ private reconnectAttempt;
13
+ groups: string[];
14
+ constructor(options: SignalRConfig);
15
+ info: (message: string, data?: any) => void;
16
+ private generateBackoff;
17
+ private reconnect;
18
+ private buildInitialListeners;
19
+ /**
20
+ * Emit event
21
+ * @param event Event to emit
22
+ * @param args Arguments to send to the listeners
23
+ */
24
+ private emitEvent;
25
+ private skipSignal;
26
+ private enhanceListener;
27
+ setClientId: (clientId: string | undefined) => void;
28
+ connect: (throwError?: boolean) => Promise<void>;
29
+ disconnect: () => Promise<void>;
30
+ /**
31
+ * Add internal event listener
32
+ * @param event Event to listen on
33
+ * @param listener Event listener function
34
+ */
35
+ addEventListener: (event: InternalEvent, listener: InternalEventListener) => () => void;
36
+ /**
37
+ * Remove internal event listener
38
+ * @param event Event to stop listening to
39
+ * @param listener Event listener function
40
+ */
41
+ removeEventListener: (event: InternalEvent, listener: InternalEventListener) => void;
42
+ /**
43
+ * Add signal listener
44
+ * @param signal Signal name
45
+ * @param listener Signal listener function
46
+ */
47
+ addSignalListener: (signal: SignalRSignalName, listener: SignalREventListener, shouldSkipOwnClient?: boolean) => () => void;
48
+ /**
49
+ * Remove signal listener
50
+ * @param signal Signal name
51
+ * @param listener Signal listener function
52
+ */
53
+ removeSignalListener: (signal: SignalRSignalName, listener: SignalREventListener) => void;
54
+ joinGroup: (group: string) => Promise<void>;
55
+ leaveGroup: (group: string) => Promise<void>;
56
+ leaveAllGroups: () => Promise<void>;
57
+ getHubConnectionId: () => string | null;
58
+ }
59
+ export default SignalR;
@@ -0,0 +1 @@
1
+ "use strict";var l=Object.defineProperty;var d=(r,e,t)=>e in r?l(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var n=(r,e,t)=>(d(r,typeof e!="symbol"?e+"":e,t),t);const h=require("@microsoft/signalr"),a=require("@ancon/wildcat-types"),f=require("../shared/wait.js"),u=require("../api/generateBackoffWithEqualJitter.js");require("../number/randomIntFromInterval.js");class g{constructor(e){n(this,"internalEvents");n(this,"signalREvents");n(this,"hubConnection");n(this,"clientId");n(this,"logger");n(this,"backoff",[]);n(this,"reconnectAttempt",0);n(this,"groups");n(this,"info",(e,t)=>{var i;(i=this.logger)==null||i.info(e,t)});n(this,"generateBackoff",()=>{this.backoff=u(50,500,5e3),this.info("Generated new backoff")});n(this,"reconnect",async()=>{try{this.info("Attempting to reconnect...",{attempt:this.reconnectAttempt+1}),await this.connect(!0),this.info("Reconnected"),this.reconnectAttempt=0}catch{if(this.backoff[this.reconnectAttempt]!=null){const t=this.backoff[this.reconnectAttempt];if(t!=null)await f(t);else throw new Error("Could not resolve ms from backoff")}else{this.reconnectAttempt>0&&this.info("Ran out of backoff intervals, restarting backoff..."),this.reconnectAttempt=0,this.generateBackoff();const t=this.backoff[this.reconnectAttempt];if(t!=null)await f(t);else throw new Error("Could not resolve ms from backoff")}this.reconnectAttempt+=1,await this.reconnect()}});n(this,"buildInitialListeners",()=>{this.hubConnection.onclose(()=>{this.groups=[],this.info("Hub connection closed"),this.emitEvent("disconnected"),this.reconnect()}),this.hubConnection.onreconnected(()=>this.emitEvent("reconnected"))});n(this,"emitEvent",(e,...t)=>{if(this.internalEvents.has(e)){this.info(`Emitting event "${e}"`);const i=this.internalEvents.get(e);i&&i.forEach(s=>s(...t))}else this.info(`Failed to emit event "${e}". There were no listeners.`)});n(this,"skipSignal",(e,t)=>{this.info(`Skipped signal "${e}"`,t)});n(this,"enhanceListener",(e,t,i)=>s=>{const o=JSON.parse(s),c=i&&o.clientId&&o.clientId===this.clientId;return c||this.info(`Received signal "${e}"`,s),c?this.skipSignal(e,s):t(o)});n(this,"setClientId",e=>{this.clientId=e});n(this,"connect",async(e=!1)=>{try{this.info("Connecting..."),await this.hubConnection.start(),this.info("Connected"),this.emitEvent("connected")}catch(t){if(this.info("Failed to connect"),e)throw t}});n(this,"disconnect",async()=>{try{this.info("Disconnecting..."),await this.hubConnection.stop(),this.info("Disconnected"),this.emitEvent("disconnected")}catch{this.info("Failed to disconnect")}});n(this,"addEventListener",(e,t)=>{this.internalEvents.has(e)||this.internalEvents.set(e,[]);const i=this.internalEvents.get(e);return i&&i.push(t),()=>this.removeEventListener(e,t)});n(this,"removeEventListener",(e,t)=>{var i;if(this.internalEvents.has(e)){const s=this.internalEvents.get(e),o=((i=s==null?void 0:s.indexOf)==null?void 0:i.call(s,t))??-1;o>=0?(s.splice(o,1),this.info(`Removed event listener for event "${e}"`)):this.info(`Failed to remove event listener for event "${e}". Specified listener was not found.`)}else this.info(`Failed to remove event listener for event "${e}". Event doesn't have any listeners.`)});n(this,"addSignalListener",(e,t,i=!0)=>{this.signalREvents.has(e)||this.signalREvents.set(e,[]);const s=this.signalREvents.get(e),o=this.enhanceListener(e,t,i);return s&&s.push(o),this.hubConnection.on(e,o),this.info(`Added signal listener for signal "${e}"`),()=>this.removeSignalListener(e,o)});n(this,"removeSignalListener",(e,t)=>{var i;if(this.signalREvents.has(e)){const s=this.signalREvents.get(e),o=((i=s==null?void 0:s.indexOf)==null?void 0:i.call(s,t))??-1;o>=0?(this.hubConnection.off(e,t),s.splice(o,1),this.info(`Removed signal listener for signal "${e}"`)):this.info(`Failed to remove signal listener for signal "${e}". Specified listener was not found.`)}else this.info(`Failed to remove signal listener for signal "${e}". Signal doesn't have any listeners.`)});n(this,"joinGroup",async e=>{this.info(`Joining group "${e}"...`);const t=this.groups.push(e)-1;try{await this.hubConnection.invoke(a.SignalRMethodName.JoinGroup,e),this.info(`Joined group "${e}"`)}catch(i){this.info(`Failed to join group "${e}"`,i),t>=0&&this.groups.splice(t,1)}});n(this,"leaveGroup",async e=>{this.info(`Leaving group "${e}"...`);const t=this.groups.indexOf(e);t>=0&&this.groups.splice(t,1);try{await this.hubConnection.invoke(a.SignalRMethodName.LeaveGroup,e),this.info(`Left group "${e}"`)}catch(i){this.groups.indexOf(e)<0&&this.groups.push(e),this.info(`Failed to leave group "${e}"`,i)}});n(this,"leaveAllGroups",async()=>{this.info(`Leaving all (${this.groups.length}) groups...`);const e=[...this.groups].map(t=>this.leaveGroup(t));await Promise.all(e),this.info("Left all groups")});n(this,"getHubConnectionId",()=>this.hubConnection.connectionId);this.internalEvents=new Map,this.signalREvents=new Map,this.groups=[],e.enableLogging&&(this.logger=e.logger),this.hubConnection=new h.HubConnectionBuilder().withUrl(`${e.signalRApiUrl}/${e.hub}`).configureLogging(h.LogLevel.None).build(),this.buildInitialListeners()}}module.exports=g;
@@ -0,0 +1,155 @@
1
+ var f = Object.defineProperty;
2
+ var l = (r, t, e) => t in r ? f(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
3
+ var n = (r, t, e) => (l(r, typeof t != "symbol" ? t + "" : t, e), e);
4
+ import { HubConnectionBuilder as d, LogLevel as g } from "@microsoft/signalr";
5
+ import { SignalRMethodName as h } from "@ancon/wildcat-types";
6
+ import a from "../shared/wait.mjs";
7
+ import u from "../api/generateBackoffWithEqualJitter.mjs";
8
+ import "../number/randomIntFromInterval.mjs";
9
+ class L {
10
+ constructor(t) {
11
+ n(this, "internalEvents");
12
+ n(this, "signalREvents");
13
+ n(this, "hubConnection");
14
+ n(this, "clientId");
15
+ n(this, "logger");
16
+ n(this, "backoff", []);
17
+ n(this, "reconnectAttempt", 0);
18
+ n(this, "groups");
19
+ n(this, "info", (t, e) => {
20
+ var i;
21
+ (i = this.logger) == null || i.info(t, e);
22
+ });
23
+ n(this, "generateBackoff", () => {
24
+ this.backoff = u(50, 500, 5e3), this.info("Generated new backoff");
25
+ });
26
+ n(this, "reconnect", async () => {
27
+ try {
28
+ this.info("Attempting to reconnect...", {
29
+ attempt: this.reconnectAttempt + 1
30
+ }), await this.connect(!0), this.info("Reconnected"), this.reconnectAttempt = 0;
31
+ } catch {
32
+ if (this.backoff[this.reconnectAttempt] != null) {
33
+ const e = this.backoff[this.reconnectAttempt];
34
+ if (e != null)
35
+ await a(e);
36
+ else
37
+ throw new Error("Could not resolve ms from backoff");
38
+ } else {
39
+ this.reconnectAttempt > 0 && this.info("Ran out of backoff intervals, restarting backoff..."), this.reconnectAttempt = 0, this.generateBackoff();
40
+ const e = this.backoff[this.reconnectAttempt];
41
+ if (e != null)
42
+ await a(e);
43
+ else
44
+ throw new Error("Could not resolve ms from backoff");
45
+ }
46
+ this.reconnectAttempt += 1, await this.reconnect();
47
+ }
48
+ });
49
+ n(this, "buildInitialListeners", () => {
50
+ this.hubConnection.onclose(() => {
51
+ this.groups = [], this.info("Hub connection closed"), this.emitEvent("disconnected"), this.reconnect();
52
+ }), this.hubConnection.onreconnected(() => this.emitEvent("reconnected"));
53
+ });
54
+ n(this, "emitEvent", (t, ...e) => {
55
+ if (this.internalEvents.has(t)) {
56
+ this.info(`Emitting event "${t}"`);
57
+ const i = this.internalEvents.get(t);
58
+ i && i.forEach((s) => s(...e));
59
+ } else
60
+ this.info(`Failed to emit event "${t}". There were no listeners.`);
61
+ });
62
+ n(this, "skipSignal", (t, e) => {
63
+ this.info(`Skipped signal "${t}"`, e);
64
+ });
65
+ n(this, "enhanceListener", (t, e, i) => (s) => {
66
+ const o = JSON.parse(s), c = i && o.clientId && o.clientId === this.clientId;
67
+ return c || this.info(`Received signal "${t}"`, s), c ? this.skipSignal(t, s) : e(o);
68
+ });
69
+ n(this, "setClientId", (t) => {
70
+ this.clientId = t;
71
+ });
72
+ n(this, "connect", async (t = !1) => {
73
+ try {
74
+ this.info("Connecting..."), await this.hubConnection.start(), this.info("Connected"), this.emitEvent("connected");
75
+ } catch (e) {
76
+ if (this.info("Failed to connect"), t)
77
+ throw e;
78
+ }
79
+ });
80
+ n(this, "disconnect", async () => {
81
+ try {
82
+ this.info("Disconnecting..."), await this.hubConnection.stop(), this.info("Disconnected"), this.emitEvent("disconnected");
83
+ } catch {
84
+ this.info("Failed to disconnect");
85
+ }
86
+ });
87
+ n(this, "addEventListener", (t, e) => {
88
+ this.internalEvents.has(t) || this.internalEvents.set(t, []);
89
+ const i = this.internalEvents.get(t);
90
+ return i && i.push(e), () => this.removeEventListener(t, e);
91
+ });
92
+ n(this, "removeEventListener", (t, e) => {
93
+ var i;
94
+ if (this.internalEvents.has(t)) {
95
+ const s = this.internalEvents.get(t), o = ((i = s == null ? void 0 : s.indexOf) == null ? void 0 : i.call(s, e)) ?? -1;
96
+ o >= 0 ? (s.splice(o, 1), this.info(`Removed event listener for event "${t}"`)) : this.info(
97
+ `Failed to remove event listener for event "${t}". Specified listener was not found.`
98
+ );
99
+ } else
100
+ this.info(
101
+ `Failed to remove event listener for event "${t}". Event doesn't have any listeners.`
102
+ );
103
+ });
104
+ n(this, "addSignalListener", (t, e, i = !0) => {
105
+ this.signalREvents.has(t) || this.signalREvents.set(t, []);
106
+ const s = this.signalREvents.get(t), o = this.enhanceListener(
107
+ t,
108
+ e,
109
+ i
110
+ );
111
+ return s && s.push(o), this.hubConnection.on(t, o), this.info(`Added signal listener for signal "${t}"`), () => this.removeSignalListener(t, o);
112
+ });
113
+ n(this, "removeSignalListener", (t, e) => {
114
+ var i;
115
+ if (this.signalREvents.has(t)) {
116
+ const s = this.signalREvents.get(t), o = ((i = s == null ? void 0 : s.indexOf) == null ? void 0 : i.call(s, e)) ?? -1;
117
+ o >= 0 ? (this.hubConnection.off(t, e), s.splice(o, 1), this.info(`Removed signal listener for signal "${t}"`)) : this.info(
118
+ `Failed to remove signal listener for signal "${t}". Specified listener was not found.`
119
+ );
120
+ } else
121
+ this.info(
122
+ `Failed to remove signal listener for signal "${t}". Signal doesn't have any listeners.`
123
+ );
124
+ });
125
+ n(this, "joinGroup", async (t) => {
126
+ this.info(`Joining group "${t}"...`);
127
+ const e = this.groups.push(t) - 1;
128
+ try {
129
+ await this.hubConnection.invoke(h.JoinGroup, t), this.info(`Joined group "${t}"`);
130
+ } catch (i) {
131
+ this.info(`Failed to join group "${t}"`, i), e >= 0 && this.groups.splice(e, 1);
132
+ }
133
+ });
134
+ n(this, "leaveGroup", async (t) => {
135
+ this.info(`Leaving group "${t}"...`);
136
+ const e = this.groups.indexOf(t);
137
+ e >= 0 && this.groups.splice(e, 1);
138
+ try {
139
+ await this.hubConnection.invoke(h.LeaveGroup, t), this.info(`Left group "${t}"`);
140
+ } catch (i) {
141
+ this.groups.indexOf(t) < 0 && this.groups.push(t), this.info(`Failed to leave group "${t}"`, i);
142
+ }
143
+ });
144
+ n(this, "leaveAllGroups", async () => {
145
+ this.info(`Leaving all (${this.groups.length}) groups...`);
146
+ const t = [...this.groups].map((e) => this.leaveGroup(e));
147
+ await Promise.all(t), this.info("Left all groups");
148
+ });
149
+ n(this, "getHubConnectionId", () => this.hubConnection.connectionId);
150
+ this.internalEvents = /* @__PURE__ */ new Map(), this.signalREvents = /* @__PURE__ */ new Map(), this.groups = [], t.enableLogging && (this.logger = t.logger), this.hubConnection = new d().withUrl(`${t.signalRApiUrl}/${t.hub}`).configureLogging(g.None).build(), this.buildInitialListeners();
151
+ }
152
+ }
153
+ export {
154
+ L as default
155
+ };
@@ -0,0 +1,28 @@
1
+ import { SignalRHubName, SignalRSignalName } from '@ancon/wildcat-types';
2
+ import { SignalRConfig, SignalREventListener } from './types';
3
+ declare type SignalRConfigArg = Omit<SignalRConfig, 'hub'>;
4
+ declare type ReduxSelectorsArg<RootState = unknown> = {
5
+ clientIdSelector: (state: RootState) => string | null;
6
+ isSignalROnlineSelector: (state: RootState) => boolean;
7
+ };
8
+ declare type ReduxActionsArg = {
9
+ setIsSignalROnlineAction: (payload: {
10
+ isSignalROnline: boolean;
11
+ }) => unknown;
12
+ };
13
+ declare type ReduxHooksArg = Partial<{
14
+ useAppDispatch: () => (action: unknown) => unknown;
15
+ useAppStore: <T = {}>() => {
16
+ getState: () => T;
17
+ };
18
+ useAppSelector: <T extends (...args: any[]) => any>(selector: T) => ReturnType<T>;
19
+ }>;
20
+ declare function createUseSignalRHook(signalRConfig: SignalRConfigArg, selectors: ReduxSelectorsArg, actions: ReduxActionsArg, hooks?: ReduxHooksArg): (hub: SignalRHubName) => {
21
+ isHubConnected: boolean;
22
+ join: (group: string) => Promise<void>;
23
+ leave: (group: string) => Promise<void>;
24
+ subscribe: (signal: SignalRSignalName, listener: SignalREventListener, shouldSkipOwnClient?: boolean) => () => void;
25
+ unsubscribe: (signal: SignalRSignalName, listener: SignalREventListener) => void;
26
+ getHubConnectionId: () => string | null;
27
+ };
28
+ export default createUseSignalRHook;
@@ -0,0 +1 @@
1
+ "use strict";const e=require("react"),l=require("react-redux"),U=require("./SignalR.js");require("@microsoft/signalr");require("@ancon/wildcat-types");require("../shared/wait.js");require("../api/generateBackoffWithEqualJitter.js");require("../number/randomIntFromInterval.js");function M(O,k,q,H){const{signalRApiUrl:h,logger:A,enableLogging:m}=O,{clientIdSelector:D,isSignalROnlineSelector:d}=k,{setIsSignalROnlineAction:f}=q,{useAppStore:w=l.useStore,useAppDispatch:x=l.useDispatch,useAppSelector:y=l.useSelector}=H??{};return function(G){const n=e.useRef(new U({signalRApiUrl:h,hub:G,logger:A,enableLogging:m})),i=w(),u=x(),g=y(D),[c,j]=e.useState(!1),[s,S]=e.useState(!1),R=e.useRef(c),o=e.useCallback(()=>{d(i.getState())||u(f({isSignalROnline:!0})),s||S(!0)},[u,s,i]),b=o,v=e.useCallback(()=>{d(i.getState())&&u(f({isSignalROnline:!1})),s&&S(!1)},[u,s,i]),p=e.useCallback(async t=>{n.current.groups.indexOf(t)<0&&await n.current.joinGroup(t)},[]),C=e.useCallback(async t=>{n.current.groups.indexOf(t)>=0&&await n.current.leaveGroup(t)},[]),E=e.useCallback((t,r,a)=>n.current.addSignalListener(t,r,a),[]),L=e.useCallback((t,r)=>n.current.removeSignalListener(t,r),[]),I=e.useCallback(()=>n.current.getHubConnectionId(),[]);return e.useEffect(()=>{R.current=c},[c]),e.useEffect(()=>{const t=n.current.addEventListener("connected",o),r=n.current.addEventListener("reconnected",b),a=n.current.addEventListener("disconnected",v);return R.current||j(!0),()=>{t(),r(),a()}},[o,v,b]),e.useEffect(()=>{n.current.setClientId(g||void 0)},[g]),e.useEffect(()=>{async function t(){await n.current.connect()}c&&t()},[c]),e.useEffect(()=>()=>{n.current.leaveAllGroups().then(()=>{n.current.disconnect()})},[n]),e.useMemo(()=>({isHubConnected:s,join:p,leave:C,subscribe:E,unsubscribe:L,getHubConnectionId:I}),[s,p,C,E,L,I])}}module.exports=M;
@@ -0,0 +1,94 @@
1
+ import { useRef as O, useState as C, useCallback as t, useEffect as i, useMemo as z } from "react";
2
+ import { useStore as B, useDispatch as F, useSelector as J } from "react-redux";
3
+ import K from "./SignalR.mjs";
4
+ import "@microsoft/signalr";
5
+ import "@ancon/wildcat-types";
6
+ import "../shared/wait.mjs";
7
+ import "../api/generateBackoffWithEqualJitter.mjs";
8
+ import "../number/randomIntFromInterval.mjs";
9
+ function $(H, h, A, D) {
10
+ const { signalRApiUrl: w, logger: x, enableLogging: y } = H, { clientIdSelector: G, isSignalROnlineSelector: d } = h, { setIsSignalROnlineAction: g } = A, {
11
+ useAppStore: j = B,
12
+ useAppDispatch: k = F,
13
+ useAppSelector: U = J
14
+ } = D ?? {};
15
+ return function(M) {
16
+ const e = O(
17
+ new K({
18
+ signalRApiUrl: w,
19
+ hub: M,
20
+ logger: x,
21
+ enableLogging: y
22
+ })
23
+ ), o = j(), u = k(), f = U(G), [s, q] = C(!1), [r, p] = C(!1), S = O(s), a = t(() => {
24
+ d(o.getState()) || u(g({ isSignalROnline: !0 })), r || p(!0);
25
+ }, [u, r, o]), R = a, v = t(() => {
26
+ d(o.getState()) && u(g({ isSignalROnline: !1 })), r && p(!1);
27
+ }, [u, r, o]), m = t(async (n) => {
28
+ e.current.groups.indexOf(n) < 0 && await e.current.joinGroup(n);
29
+ }, []), b = t(async (n) => {
30
+ e.current.groups.indexOf(n) >= 0 && await e.current.leaveGroup(n);
31
+ }, []), L = t(
32
+ (n, c, l) => e.current.addSignalListener(
33
+ n,
34
+ c,
35
+ l
36
+ ),
37
+ []
38
+ ), I = t(
39
+ (n, c) => e.current.removeSignalListener(n, c),
40
+ []
41
+ ), E = t(
42
+ () => e.current.getHubConnectionId(),
43
+ []
44
+ );
45
+ return i(() => {
46
+ S.current = s;
47
+ }, [s]), i(() => {
48
+ const n = e.current.addEventListener(
49
+ "connected",
50
+ a
51
+ ), c = e.current.addEventListener(
52
+ "reconnected",
53
+ R
54
+ ), l = e.current.addEventListener(
55
+ "disconnected",
56
+ v
57
+ );
58
+ return S.current || q(!0), () => {
59
+ n(), c(), l();
60
+ };
61
+ }, [
62
+ a,
63
+ v,
64
+ R
65
+ ]), i(() => {
66
+ e.current.setClientId(f || void 0);
67
+ }, [f]), i(() => {
68
+ async function n() {
69
+ await e.current.connect();
70
+ }
71
+ s && n();
72
+ }, [s]), i(
73
+ () => () => {
74
+ e.current.leaveAllGroups().then(() => {
75
+ e.current.disconnect();
76
+ });
77
+ },
78
+ [e]
79
+ ), z(
80
+ () => ({
81
+ isHubConnected: r,
82
+ join: m,
83
+ leave: b,
84
+ subscribe: L,
85
+ unsubscribe: I,
86
+ getHubConnectionId: E
87
+ }),
88
+ [r, m, b, L, I, E]
89
+ );
90
+ };
91
+ }
92
+ export {
93
+ $ as default
94
+ };
@@ -0,0 +1,5 @@
1
+ import createUseSignalRHook from './createUseSignalRHook';
2
+ import SignalR from './SignalR';
3
+ import type { SignalRConfig } from './types';
4
+ export { createUseSignalRHook, SignalR };
5
+ export type { SignalRConfig };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./createUseSignalRHook.js"),r=require("./SignalR.js");require("react");require("react-redux");require("@microsoft/signalr");require("@ancon/wildcat-types");require("../shared/wait.js");require("../api/generateBackoffWithEqualJitter.js");require("../number/randomIntFromInterval.js");exports.createUseSignalRHook=e;exports.SignalR=r;
@@ -0,0 +1,13 @@
1
+ import { default as l } from "./createUseSignalRHook.mjs";
2
+ import { default as d } from "./SignalR.mjs";
3
+ import "react";
4
+ import "react-redux";
5
+ import "@microsoft/signalr";
6
+ import "@ancon/wildcat-types";
7
+ import "../shared/wait.mjs";
8
+ import "../api/generateBackoffWithEqualJitter.mjs";
9
+ import "../number/randomIntFromInterval.mjs";
10
+ export {
11
+ d as SignalR,
12
+ l as createUseSignalRHook
13
+ };
@@ -0,0 +1,13 @@
1
+ import { SignalRHubName } from '@ancon/wildcat-types';
2
+ import Logger from '../logger/Logger';
3
+ export declare type SignalREventListener<T = unknown> = (data: T) => void;
4
+ export declare type SignalRConfig = {
5
+ /** @example "https://notification-api.ancon.io" */
6
+ signalRApiUrl: string;
7
+ /** @example "TicketHub" */
8
+ hub: SignalRHubName;
9
+ /** You need to set `enableLogging: true` too to enable logging */
10
+ logger?: Logger;
11
+ /** @default false */
12
+ enableLogging?: boolean;
13
+ };
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1 @@
1
+