@croct/sdk 0.16.1 → 0.17.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.
Files changed (94) hide show
  1. package/base64Url.js +2 -3
  2. package/base64Url.js.map +1 -1
  3. package/cache/cookieCache.d.ts +1 -1
  4. package/cache/cookieCache.js +12 -2
  5. package/cache/cookieCache.js.map +1 -1
  6. package/channel/channel.d.ts +7 -0
  7. package/channel/channel.js +23 -0
  8. package/channel/channel.js.map +1 -1
  9. package/channel/guaranteedChannel.js +4 -3
  10. package/channel/guaranteedChannel.js.map +1 -1
  11. package/channel/httpBeaconChannel.d.ts +23 -0
  12. package/channel/httpBeaconChannel.js +89 -0
  13. package/channel/httpBeaconChannel.js.map +1 -0
  14. package/channel/index.d.ts +1 -2
  15. package/channel/index.js +3 -5
  16. package/channel/index.js.map +1 -1
  17. package/channel/queuedChannel.js +5 -4
  18. package/channel/queuedChannel.js.map +1 -1
  19. package/channel/retryChannel.js +8 -4
  20. package/channel/retryChannel.js.map +1 -1
  21. package/channel/sandboxChannel.js +4 -0
  22. package/channel/sandboxChannel.js.map +1 -1
  23. package/constants.d.ts +2 -2
  24. package/constants.js +1 -1
  25. package/container.d.ts +3 -0
  26. package/container.js +15 -14
  27. package/container.js.map +1 -1
  28. package/contentFetcher.d.ts +3 -4
  29. package/contentFetcher.js +44 -27
  30. package/contentFetcher.js.map +1 -1
  31. package/error.js +2 -3
  32. package/error.js.map +1 -1
  33. package/evaluator.d.ts +2 -4
  34. package/evaluator.js +54 -39
  35. package/evaluator.js.map +1 -1
  36. package/facade/contentFetcherFacade.d.ts +1 -6
  37. package/facade/contentFetcherFacade.js +2 -5
  38. package/facade/contentFetcherFacade.js.map +1 -1
  39. package/facade/sdkFacade.d.ts +3 -6
  40. package/facade/sdkFacade.js +3 -7
  41. package/facade/sdkFacade.js.map +1 -1
  42. package/help.d.ts +3 -0
  43. package/help.js +26 -0
  44. package/help.js.map +1 -0
  45. package/package.json +1 -3
  46. package/queue/persistentQueue.d.ts +1 -3
  47. package/queue/persistentQueue.js +9 -16
  48. package/queue/persistentQueue.js.map +1 -1
  49. package/schema/eventSchemas.js +0 -16
  50. package/schema/eventSchemas.js.map +1 -1
  51. package/schema/sdkFacadeSchemas.js +5 -1
  52. package/schema/sdkFacadeSchemas.js.map +1 -1
  53. package/schema/sdkSchemas.js +7 -0
  54. package/schema/sdkSchemas.js.map +1 -1
  55. package/sdk.d.ts +2 -0
  56. package/sdk.js +1 -2
  57. package/sdk.js.map +1 -1
  58. package/sourceLocation.js +3 -4
  59. package/sourceLocation.js.map +1 -1
  60. package/src/cache/cookieCache.ts +13 -2
  61. package/src/channel/channel.ts +32 -0
  62. package/src/channel/guaranteedChannel.ts +4 -4
  63. package/src/channel/httpBeaconChannel.ts +128 -0
  64. package/src/channel/index.ts +1 -2
  65. package/src/channel/queuedChannel.ts +5 -5
  66. package/src/channel/retryChannel.ts +9 -5
  67. package/src/channel/sandboxChannel.ts +5 -1
  68. package/src/container.ts +17 -19
  69. package/src/contentFetcher.ts +48 -29
  70. package/src/evaluator.ts +81 -65
  71. package/src/facade/contentFetcherFacade.ts +2 -11
  72. package/src/facade/sdkFacade.ts +5 -14
  73. package/src/help.ts +24 -0
  74. package/src/queue/persistentQueue.ts +11 -22
  75. package/src/schema/eventSchemas.ts +0 -16
  76. package/src/schema/sdkFacadeSchemas.ts +14 -2
  77. package/src/schema/sdkSchemas.ts +7 -0
  78. package/src/sdk.ts +3 -2
  79. package/src/trackingEvents.ts +0 -4
  80. package/trackingEvents.d.ts +0 -4
  81. package/trackingEvents.js +3 -3
  82. package/trackingEvents.js.map +1 -1
  83. package/uuid.js +1 -2
  84. package/uuid.js.map +1 -1
  85. package/validation/violation.js +2 -3
  86. package/validation/violation.js.map +1 -1
  87. package/channel/beaconSocketChannel.d.ts +0 -37
  88. package/channel/beaconSocketChannel.js +0 -83
  89. package/channel/beaconSocketChannel.js.map +0 -1
  90. package/channel/socketChannel.d.ts +0 -31
  91. package/channel/socketChannel.js +0 -145
  92. package/channel/socketChannel.js.map +0 -1
  93. package/src/channel/beaconSocketChannel.ts +0 -153
  94. package/src/channel/socketChannel.ts +0 -217
package/base64Url.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.base64UrlDecode = exports.base64UrlEncode = void 0;
3
+ exports.base64UrlEncode = base64UrlEncode;
4
+ exports.base64UrlDecode = base64UrlDecode;
4
5
  function base64Unescape(value) {
5
6
  return (value + '==='.slice((value.length + 3) % 4)).replace(/-/g, '+').replace(/_/g, '/');
6
7
  }
@@ -15,11 +16,9 @@ function base64UrlEncode(value, utf8 = false) {
15
16
  ? base64Escape(btoa(String.fromCodePoint(...new TextEncoder().encode(value))))
16
17
  : base64Escape(btoa(value));
17
18
  }
18
- exports.base64UrlEncode = base64UrlEncode;
19
19
  function base64UrlDecode(value, utf8 = false) {
20
20
  return utf8
21
21
  ? new TextDecoder().decode(Uint8Array.from(atob(base64Unescape(value)), m => m.codePointAt(0)))
22
22
  : atob(base64Unescape(value));
23
23
  }
24
- exports.base64UrlDecode = base64UrlDecode;
25
24
  //# sourceMappingURL=base64Url.js.map
package/base64Url.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"base64Url.js","sourceRoot":"","sources":["src/base64Url.ts"],"names":[],"mappings":";;;AAAA,SAAS,cAAc,CAAC,KAAa;IACjC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IAC/B,OAAO,KAAK;SACP,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa,EAAE,IAAI,GAAG,KAAK;IACvD,OAAO,IAAI;QACP,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAJD,0CAIC;AAED,SAAgB,eAAe,CAAC,KAAa,EAAE,IAAI,GAAG,KAAK;IACvD,OAAO,IAAI;QACP,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC;QAChG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC;AAJD,0CAIC"}
1
+ {"version":3,"file":"base64Url.js","sourceRoot":"","sources":["src/base64Url.ts"],"names":[],"mappings":";;AAWA,0CAIC;AAED,0CAIC;AArBD,SAAS,cAAc,CAAC,KAAa;IACjC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IAC/B,OAAO,KAAK;SACP,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa,EAAE,IAAI,GAAG,KAAK;IACvD,OAAO,IAAI;QACP,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa,EAAE,IAAI,GAAG,KAAK;IACvD,OAAO,IAAI;QACP,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC;QAChG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -9,7 +9,7 @@ export type CookieCacheConfiguration = {
9
9
  };
10
10
  export declare class CookieCache implements Cache {
11
11
  private readonly config;
12
- constructor(config: CookieCacheConfiguration);
12
+ constructor(config: CookieCacheConfiguration, defaultSecure?: boolean);
13
13
  get(): string | null;
14
14
  put(value: string): void;
15
15
  clear(): void;
@@ -2,8 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CookieCache = void 0;
4
4
  class CookieCache {
5
- constructor(config) {
6
- this.config = config;
5
+ constructor(config, defaultSecure = window.location.protocol === 'https:') {
6
+ var _a;
7
+ this.config = {
8
+ ...config,
9
+ path: (_a = config.path) !== null && _a !== void 0 ? _a : '/',
10
+ };
11
+ if (defaultSecure && this.config.secure === undefined) {
12
+ this.config.secure = true;
13
+ }
14
+ if (this.config.secure === true && this.config.sameSite === undefined) {
15
+ this.config.sameSite = 'none';
16
+ }
7
17
  }
8
18
  get() {
9
19
  const entries = document.cookie.split(';');
@@ -1 +1 @@
1
- {"version":3,"file":"cookieCache.js","sourceRoot":"","sources":["../src/cache/cookieCache.ts"],"names":[],"mappings":";;;AAWA,MAAa,WAAW;IAGpB,YAAmB,MAAgC;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,GAAG;QACN,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEvC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvD,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,GAAG,CAAC,KAAa;QACpB,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAEM,KAAK;QACR,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,EAAE,EAAE;YAC9C,GAAG,IAAI,CAAC,MAAM;YACd,MAAM,EAAE,CAAC;SACZ,CAAC,CAAC;IACP,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,KAAa,EAAE,MAAgC;QAC1E,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,KAAa;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,KAAa;QAC/B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACJ;AAjED,kCAiEC"}
1
+ {"version":3,"file":"cookieCache.js","sourceRoot":"","sources":["../src/cache/cookieCache.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ export declare class MessageDeliveryError extends Error {
2
+ readonly retryable: boolean;
3
+ constructor(message: string, retryable: boolean);
4
+ static retryable(cause: unknown): MessageDeliveryError;
5
+ static nonRetryable(cause: unknown): MessageDeliveryError;
6
+ private static fromCause;
7
+ }
1
8
  export interface Closeable {
2
9
  close(): Promise<void>;
3
10
  }
@@ -1,3 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageDeliveryError = void 0;
4
+ const error_1 = require("../error");
5
+ class MessageDeliveryError extends Error {
6
+ constructor(message, retryable) {
7
+ super(message);
8
+ this.retryable = retryable;
9
+ Object.setPrototypeOf(this, MessageDeliveryError.prototype);
10
+ }
11
+ static retryable(cause) {
12
+ return MessageDeliveryError.fromCause(cause, true);
13
+ }
14
+ static nonRetryable(cause) {
15
+ return MessageDeliveryError.fromCause(cause, false);
16
+ }
17
+ static fromCause(cause, retryable) {
18
+ const error = new MessageDeliveryError((0, error_1.formatMessage)(cause), retryable);
19
+ if (cause instanceof Error) {
20
+ error.stack = cause.stack;
21
+ }
22
+ return error;
23
+ }
24
+ }
25
+ exports.MessageDeliveryError = MessageDeliveryError;
3
26
  //# sourceMappingURL=channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel/channel.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel/channel.ts"],"names":[],"mappings":";;;AAAA,oCAAuC;AAEvC,MAAa,oBAAqB,SAAQ,KAAK;IAG3C,YAAmB,OAAe,EAAE,SAAkB;QAClD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,KAAc;QAClC,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,KAAc;QACrC,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,KAAc,EAAE,SAAkB;QACvD,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QAExE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AA5BD,oDA4BC"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GuaranteedChannel = exports.TimeStamper = void 0;
4
4
  const logging_1 = require("../logging");
5
+ const channel_1 = require("./channel");
5
6
  class TimeStamper {
6
7
  generate() {
7
8
  return String(Date.now());
@@ -22,7 +23,7 @@ class GuaranteedChannel {
22
23
  }
23
24
  publish(message) {
24
25
  if (this.closed) {
25
- return Promise.reject(new Error('Channel is closed.'));
26
+ return Promise.reject(channel_1.MessageDeliveryError.nonRetryable('Channel is closed.'));
26
27
  }
27
28
  return new Promise((resolve, reject) => {
28
29
  const id = this.stamper.generate(message);
@@ -56,12 +57,12 @@ class GuaranteedChannel {
56
57
  closeWatcher = window.setInterval(() => {
57
58
  if (this.closed) {
58
59
  // Cancel delay immediately when the channel is closed
59
- abort(new Error('Connection deliberately closed.'));
60
+ abort(channel_1.MessageDeliveryError.nonRetryable('Connection deliberately closed.'));
60
61
  }
61
62
  }, 0);
62
63
  this.logger.debug(`Waiting confirmation #${id}...`);
63
64
  timeoutTimer = window.setTimeout(() => {
64
- abort(new Error('Maximum confirmation time reached.'));
65
+ abort(channel_1.MessageDeliveryError.retryable('Maximum confirmation time reached.'));
65
66
  }, this.options.ackTimeout);
66
67
  };
67
68
  this.logger.debug(`Sending message #${id}...`);
@@ -1 +1 @@
1
- {"version":3,"file":"guaranteedChannel.js","sourceRoot":"","sources":["../src/channel/guaranteedChannel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guaranteedChannel.js","sourceRoot":"","sources":["../src/channel/guaranteedChannel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ChannelListener, DuplexChannel } from './channel';
2
+ import { Envelope } from './guaranteedChannel';
3
+ import { Logger } from '../logging';
4
+ import { CidAssigner } from '../cid';
5
+ export type Configuration = {
6
+ appId: string;
7
+ endpointUrl: string;
8
+ cidAssigner: CidAssigner;
9
+ logger?: Logger;
10
+ };
11
+ export declare class HttpBeaconChannel implements DuplexChannel<string, Envelope<string, string>> {
12
+ private readonly configuration;
13
+ private readonly logger;
14
+ private readonly listeners;
15
+ private closed;
16
+ constructor({ logger, ...configuration }: Configuration);
17
+ publish({ id: receiptId, message }: Envelope<string, string>): Promise<void>;
18
+ subscribe(listener: ChannelListener<string>): void;
19
+ unsubscribe(listener: ChannelListener<string>): void;
20
+ private notify;
21
+ close(): Promise<void>;
22
+ private static isRetryable;
23
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpBeaconChannel = void 0;
4
+ const channel_1 = require("./channel");
5
+ const logging_1 = require("../logging");
6
+ const error_1 = require("../error");
7
+ const constants_1 = require("../constants");
8
+ const help_1 = require("../help");
9
+ class HttpBeaconChannel {
10
+ constructor({ logger = new logging_1.NullLogger(), ...configuration }) {
11
+ this.listeners = [];
12
+ this.closed = false;
13
+ this.configuration = configuration;
14
+ this.logger = logger;
15
+ }
16
+ async publish({ id: receiptId, message }) {
17
+ if (this.closed) {
18
+ return Promise.reject(channel_1.MessageDeliveryError.nonRetryable('Channel is closed'));
19
+ }
20
+ const { token, timestamp, context, payload } = JSON.parse(message);
21
+ const { endpointUrl, appId, cidAssigner } = this.configuration;
22
+ return fetch(endpointUrl, {
23
+ method: 'POST',
24
+ headers: {
25
+ 'X-App-Id': appId,
26
+ 'X-Client-Id': await cidAssigner.assignCid(),
27
+ 'X-Client-Library': constants_1.CLIENT_LIBRARY,
28
+ 'Content-Type': 'application/json',
29
+ ...(token !== undefined ? { 'X-Token': token } : {}),
30
+ },
31
+ body: JSON.stringify({
32
+ context: context,
33
+ payload: payload,
34
+ originalTime: timestamp,
35
+ departureTime: Date.now(),
36
+ }),
37
+ }).then(async (response) => {
38
+ if (response.ok) {
39
+ this.notify(receiptId);
40
+ return;
41
+ }
42
+ const problem = await response.json().catch(() => ({
43
+ type: 'https://croct.help/api/event-tracker#unexpected-error',
44
+ title: response.statusText,
45
+ status: response.status,
46
+ }));
47
+ const isRetryable = HttpBeaconChannel.isRetryable(problem.status);
48
+ const help = help_1.Help.forStatusCode(problem.status);
49
+ if (help !== undefined) {
50
+ this.logger.error(help);
51
+ }
52
+ else if (!isRetryable) {
53
+ this.logger.error(`Beacon rejected with non-retryable status: ${problem.title}`);
54
+ }
55
+ return Promise.reject(isRetryable
56
+ ? channel_1.MessageDeliveryError.retryable(problem.title)
57
+ : channel_1.MessageDeliveryError.nonRetryable(problem.title));
58
+ }).catch(error => {
59
+ this.logger.error(`Failed to publish beacon: ${(0, error_1.formatMessage)(error)}`);
60
+ return Promise.reject(error instanceof channel_1.MessageDeliveryError
61
+ ? error
62
+ : channel_1.MessageDeliveryError.retryable(error));
63
+ });
64
+ }
65
+ subscribe(listener) {
66
+ if (!this.listeners.includes(listener)) {
67
+ this.listeners.push(listener);
68
+ }
69
+ }
70
+ unsubscribe(listener) {
71
+ const index = this.listeners.indexOf(listener);
72
+ if (index >= 0) {
73
+ this.listeners.splice(index, 1);
74
+ }
75
+ }
76
+ notify(receiptId) {
77
+ this.listeners.forEach(dispatch => dispatch(receiptId));
78
+ }
79
+ close() {
80
+ this.closed = true;
81
+ return Promise.resolve();
82
+ }
83
+ static isRetryable(status) {
84
+ // Retry on any server error and client errors 429 (rate limit) and 408 (request timeout)
85
+ return status >= 500 || status === 429 || status === 408;
86
+ }
87
+ }
88
+ exports.HttpBeaconChannel = HttpBeaconChannel;
89
+ //# sourceMappingURL=httpBeaconChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpBeaconChannel.js","sourceRoot":"","sources":["../src/channel/httpBeaconChannel.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  export * from './channel';
2
- export { BeaconSocketChannel, DuplexChannelFactory } from './beaconSocketChannel';
3
2
  export { EncodedChannel } from './encodedChannel';
4
3
  export { GuaranteedChannel } from './guaranteedChannel';
5
4
  export { QueuedChannel } from './queuedChannel';
6
5
  export { RetryChannel } from './retryChannel';
7
6
  export { SandboxChannel } from './sandboxChannel';
8
- export { SocketChannel } from './socketChannel';
7
+ export { HttpBeaconChannel } from './httpBeaconChannel';
package/channel/index.js CHANGED
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SocketChannel = exports.SandboxChannel = exports.RetryChannel = exports.QueuedChannel = exports.GuaranteedChannel = exports.EncodedChannel = exports.BeaconSocketChannel = void 0;
3
+ exports.HttpBeaconChannel = exports.SandboxChannel = exports.RetryChannel = exports.QueuedChannel = exports.GuaranteedChannel = exports.EncodedChannel = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./channel"), exports);
6
- var beaconSocketChannel_1 = require("./beaconSocketChannel");
7
- Object.defineProperty(exports, "BeaconSocketChannel", { enumerable: true, get: function () { return beaconSocketChannel_1.BeaconSocketChannel; } });
8
6
  var encodedChannel_1 = require("./encodedChannel");
9
7
  Object.defineProperty(exports, "EncodedChannel", { enumerable: true, get: function () { return encodedChannel_1.EncodedChannel; } });
10
8
  var guaranteedChannel_1 = require("./guaranteedChannel");
@@ -15,6 +13,6 @@ var retryChannel_1 = require("./retryChannel");
15
13
  Object.defineProperty(exports, "RetryChannel", { enumerable: true, get: function () { return retryChannel_1.RetryChannel; } });
16
14
  var sandboxChannel_1 = require("./sandboxChannel");
17
15
  Object.defineProperty(exports, "SandboxChannel", { enumerable: true, get: function () { return sandboxChannel_1.SandboxChannel; } });
18
- var socketChannel_1 = require("./socketChannel");
19
- Object.defineProperty(exports, "SocketChannel", { enumerable: true, get: function () { return socketChannel_1.SocketChannel; } });
16
+ var httpBeaconChannel_1 = require("./httpBeaconChannel");
17
+ Object.defineProperty(exports, "HttpBeaconChannel", { enumerable: true, get: function () { return httpBeaconChannel_1.HttpBeaconChannel; } });
20
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/channel/index.ts"],"names":[],"mappings":";;;;AAAA,oDAA0B;AAC1B,6DAAgF;AAAxE,0HAAA,mBAAmB,OAAA;AAC3B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/channel/index.ts"],"names":[],"mappings":";;;;AAAA,oDAA0B;AAC1B,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QueuedChannel = void 0;
4
+ const channel_1 = require("./channel");
4
5
  const logging_1 = require("../logging");
5
6
  class QueuedChannel {
6
7
  constructor(channel, queue, logger) {
@@ -17,16 +18,16 @@ class QueuedChannel {
17
18
  }
18
19
  publish(message) {
19
20
  if (this.closed) {
20
- return Promise.reject(new Error('Channel is closed.'));
21
+ return Promise.reject(channel_1.MessageDeliveryError.nonRetryable('Channel is closed.'));
21
22
  }
22
23
  if (this.queue.length() >= this.queue.getCapacity()) {
23
24
  this.logger.warn('The queue is full, message rejected.');
24
- return Promise.reject(new Error('The queue is full.'));
25
+ return Promise.reject(channel_1.MessageDeliveryError.retryable('The queue is full.'));
25
26
  }
26
27
  if (this.pending === undefined) {
27
28
  this.pending = this.queue.isEmpty()
28
29
  ? Promise.resolve()
29
- : Promise.reject(new Error('The queue must be flushed.'));
30
+ : Promise.reject(channel_1.MessageDeliveryError.retryable('The queue must be flushed.'));
30
31
  }
31
32
  this.enqueue(message);
32
33
  this.pending = this.pending.then(() => this.channel
@@ -46,7 +47,7 @@ class QueuedChannel {
46
47
  }
47
48
  requeue() {
48
49
  if (this.closed) {
49
- return Promise.reject(new Error('Channel is closed.'));
50
+ return Promise.reject(channel_1.MessageDeliveryError.nonRetryable('Channel is closed.'));
50
51
  }
51
52
  this.pending = Promise.resolve();
52
53
  if (this.queue.isEmpty()) {
@@ -1 +1 @@
1
- {"version":3,"file":"queuedChannel.js","sourceRoot":"","sources":["../src/channel/queuedChannel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queuedChannel.js","sourceRoot":"","sources":["../src/channel/queuedChannel.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RetryChannel = void 0;
4
+ const channel_1 = require("./channel");
4
5
  const logging_1 = require("../logging");
5
6
  class RetryChannel {
6
7
  constructor({ channel, retryPolicy, logger }) {
@@ -11,17 +12,20 @@ class RetryChannel {
11
12
  }
12
13
  publish(message) {
13
14
  if (this.closed) {
14
- return Promise.reject(new Error('The channel is closed.'));
15
+ return Promise.reject(channel_1.MessageDeliveryError.nonRetryable('The channel is closed.'));
15
16
  }
16
17
  return this.channel
17
18
  .publish(message)
18
19
  .catch(error => this.retry(message, error));
19
20
  }
20
21
  async retry(message, error) {
22
+ if (error instanceof channel_1.MessageDeliveryError && !error.retryable) {
23
+ throw error;
24
+ }
21
25
  let attempt = 0;
22
26
  while (this.retryPolicy.shouldRetry(attempt, message, error)) {
23
27
  if (this.closed) {
24
- throw new Error('Connection deliberately closed.');
28
+ throw channel_1.MessageDeliveryError.nonRetryable('Connection deliberately closed.');
25
29
  }
26
30
  const delay = this.retryPolicy.getDelay(attempt);
27
31
  this.logger.debug(`Retry attempt ${attempt + 1}`);
@@ -32,7 +36,7 @@ class RetryChannel {
32
36
  if (this.closed) {
33
37
  // Cancel delay immediately when the channel is closed
34
38
  window.clearInterval(closeWatcher);
35
- reject(new Error('Connection deliberately closed.'));
39
+ reject(channel_1.MessageDeliveryError.nonRetryable('Connection deliberately closed.'));
36
40
  }
37
41
  }, 0);
38
42
  window.setTimeout(() => {
@@ -48,7 +52,7 @@ class RetryChannel {
48
52
  attempt += 1;
49
53
  }
50
54
  }
51
- throw new Error('Maximum retry attempts reached.');
55
+ throw channel_1.MessageDeliveryError.nonRetryable('Maximum retry attempts reached.');
52
56
  }
53
57
  close() {
54
58
  this.closed = true;
@@ -1 +1 @@
1
- {"version":3,"file":"retryChannel.js","sourceRoot":"","sources":["../src/channel/retryChannel.ts"],"names":[],"mappings":";;;AACA,wCAA8C;AAS9C,MAAa,YAAY;IASrB,YAAmB,EAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmB;QAF3D,WAAM,GAAG,KAAK,CAAC;QAGnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,oBAAU,EAAE,CAAC;IAC7C,CAAC;IAEM,OAAO,CAAC,OAAU;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC,OAAO;aACd,OAAO,CAAC,OAAO,CAAC;aAChB,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAU,EAAE,KAAc;QACzC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;YAElD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,IAAI,CAAC,CAAC;gBAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;oBAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACnC,GAAG,EAAE;wBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;4BACd,sDAAsD;4BACtD,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;4BAEnC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;wBACzD,CAAC;oBACL,CAAC,EACD,CAAC,CACJ,CAAC;oBAEF,MAAM,CAAC,UAAU,CACb,GAAS,EAAE;wBACP,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;wBAEnC,OAAO,EAAE,CAAC;oBACd,CAAC,EACD,KAAK,CACR,CAAC;gBACN,CAAC,CAAC,CAAC;YACP,CAAC;YAED,IAAI,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,IAAI,CAAC,CAAC;YACjB,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;CACJ;AA/ED,oCA+EC"}
1
+ {"version":3,"file":"retryChannel.js","sourceRoot":"","sources":["../src/channel/retryChannel.ts"],"names":[],"mappings":";;;AAAA,uCAA8D;AAC9D,wCAA8C;AAS9C,MAAa,YAAY;IASrB,YAAmB,EAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmB;QAF3D,WAAM,GAAG,KAAK,CAAC;QAGnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,oBAAU,EAAE,CAAC;IAC7C,CAAC;IAEM,OAAO,CAAC,OAAU;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,8BAAoB,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,IAAI,CAAC,OAAO;aACd,OAAO,CAAC,OAAO,CAAC;aAChB,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAU,EAAE,KAAc;QACzC,IAAI,KAAK,YAAY,8BAAoB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC5D,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,MAAM,8BAAoB,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;YAElD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,IAAI,CAAC,CAAC;gBAEzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;oBAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACnC,GAAG,EAAE;wBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;4BACd,sDAAsD;4BACtD,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;4BAEnC,MAAM,CAAC,8BAAoB,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC,CAAC;wBACjF,CAAC;oBACL,CAAC,EACD,CAAC,CACJ,CAAC;oBAEF,MAAM,CAAC,UAAU,CACb,GAAS,EAAE;wBACP,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;wBAEnC,OAAO,EAAE,CAAC;oBACd,CAAC,EACD,KAAK,CACR,CAAC;gBACN,CAAC,CAAC,CAAC;YACP,CAAC;YAED,IAAI,CAAC;gBACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,IAAI,CAAC,CAAC;YACjB,CAAC;QACL,CAAC;QAED,MAAM,8BAAoB,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC;IAC/E,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;CACJ;AAnFD,oCAmFC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SandboxChannel = void 0;
4
+ const channel_1 = require("./channel");
4
5
  class SandboxChannel {
5
6
  constructor() {
6
7
  this.listeners = [];
@@ -8,6 +9,9 @@ class SandboxChannel {
8
9
  this.closed = false;
9
10
  }
10
11
  publish(message) {
12
+ if (this.closed) {
13
+ return Promise.reject(channel_1.MessageDeliveryError.nonRetryable('Channel is closed.'));
14
+ }
11
15
  this.messages.push(message);
12
16
  return Promise.resolve();
13
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxChannel.js","sourceRoot":"","sources":["../src/channel/sandboxChannel.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;IAA3B;QACqB,cAAS,GAA8B,EAAE,CAAC;QAE3C,aAAQ,GAAQ,EAAE,CAAC;QAE3B,WAAM,GAAG,KAAK,CAAC;IAmC3B,CAAC;IAjCU,OAAO,CAAC,OAAU;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,OAAU;QACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEM,SAAS,CAAC,QAA4B;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAEM,WAAW,CAAC,QAA4B;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ;AAxCD,wCAwCC"}
1
+ {"version":3,"file":"sandboxChannel.js","sourceRoot":"","sources":["../src/channel/sandboxChannel.ts"],"names":[],"mappings":";;;AAAA,uCAA+E;AAE/E,MAAa,cAAc;IAA3B;QACqB,cAAS,GAA8B,EAAE,CAAC;QAE3C,aAAQ,GAAQ,EAAE,CAAC;QAE3B,WAAM,GAAG,KAAK,CAAC;IAuC3B,CAAC;IArCU,OAAO,CAAC,OAAU;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,8BAAoB,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,OAAU;QACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEM,SAAS,CAAC,QAA4B;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAEM,WAAW,CAAC,QAA4B;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ;AA5CD,wCA4CC"}
package/constants.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export declare const BASE_ENDPOINT_URL = "https://api.croct.io";
2
2
  export declare const MAX_QUERY_LENGTH: number;
3
- export declare const VERSION = "0.16.1";
4
- export declare const CLIENT_LIBRARY = "Croct SDK JS v0.16.1";
3
+ export declare const VERSION = "0.17.0";
4
+ export declare const CLIENT_LIBRARY = "Croct SDK JS v0.17.0";
package/constants.js CHANGED
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CLIENT_LIBRARY = exports.VERSION = exports.MAX_QUERY_LENGTH = exports.BASE_ENDPOINT_URL = void 0;
4
4
  exports.BASE_ENDPOINT_URL = 'https://api.croct.io';
5
5
  exports.MAX_QUERY_LENGTH = 500;
6
- exports.VERSION = '0.16.1';
6
+ exports.VERSION = '0.17.0';
7
7
  exports.CLIENT_LIBRARY = `Croct SDK JS v${exports.VERSION}`;
8
8
  //# sourceMappingURL=constants.js.map
package/container.d.ts CHANGED
@@ -34,8 +34,11 @@ export type Configuration = {
34
34
  [key: string]: string;
35
35
  };
36
36
  eventProcessor?: DependencyResolver<TrackingEventProcessor>;
37
+ defaultFetchTimeout?: number;
38
+ defaultPreferredLocale?: string;
37
39
  };
38
40
  export declare class Container {
41
+ static readonly DEFAULT_FETCH_TIMEOUT = 5000;
39
42
  private readonly configuration;
40
43
  private context?;
41
44
  private userTokenProvider?;
package/container.js CHANGED
@@ -18,6 +18,7 @@ const channel_1 = require("./channel");
18
18
  const contentFetcher_1 = require("./contentFetcher");
19
19
  const cookieCache_1 = require("./cache/cookieCache");
20
20
  const filteredLogger_1 = require("./logging/filteredLogger");
21
+ const httpBeaconChannel_1 = require("./channel/httpBeaconChannel");
21
22
  class Container {
22
23
  constructor(configuration) {
23
24
  this.eventManager = new eventManager_1.SynchronousEventManager();
@@ -33,10 +34,12 @@ class Container {
33
34
  return this.evaluator;
34
35
  }
35
36
  createEvaluator() {
37
+ var _a;
36
38
  return new evaluator_1.Evaluator({
37
39
  appId: this.configuration.appId,
38
40
  baseEndpointUrl: this.configuration.evaluationBaseEndpointUrl,
39
41
  logger: this.getLogger('Evaluator'),
42
+ defaultTimeout: (_a = this.configuration.defaultFetchTimeout) !== null && _a !== void 0 ? _a : Container.DEFAULT_FETCH_TIMEOUT,
40
43
  });
41
44
  }
42
45
  getContentFetcher() {
@@ -46,10 +49,13 @@ class Container {
46
49
  return this.contentFetcher;
47
50
  }
48
51
  createContentFetcher() {
52
+ var _a;
49
53
  return new contentFetcher_1.ContentFetcher({
50
54
  appId: this.configuration.appId,
51
55
  baseEndpointUrl: this.configuration.contentBaseEndpointUrl,
52
56
  logger: this.getLogger('ContentFetcher'),
57
+ defaultTimeout: (_a = this.configuration.defaultFetchTimeout) !== null && _a !== void 0 ? _a : Container.DEFAULT_FETCH_TIMEOUT,
58
+ defaultPreferredLocale: this.configuration.defaultPreferredLocale,
53
59
  });
54
60
  }
55
61
  getPreviewTokenStore() {
@@ -138,21 +144,18 @@ class Container {
138
144
  const { appId, trackerEndpointUrl } = this.configuration;
139
145
  const queuedChannel = new channel_1.QueuedChannel(new channel_1.RetryChannel({
140
146
  channel: new channel_1.GuaranteedChannel({
141
- channel: new channel_1.BeaconSocketChannel({
142
- trackerEndpointUrl: `${trackerEndpointUrl}/${appId}`,
143
- tokenParameter: 'token',
144
- loggerFactory: this.getLogger.bind(this),
145
- logger: channelLogger,
146
- channelFactory: (url, logger) => (new channel_1.SocketChannel({ url: url, logger: logger })),
147
+ channel: new httpBeaconChannel_1.HttpBeaconChannel({
148
+ appId: appId,
149
+ endpointUrl: trackerEndpointUrl,
147
150
  cidAssigner: this.getCidAssigner(),
148
- cidParameter: 'clientId',
151
+ logger: channelLogger,
149
152
  }),
150
153
  stamper: new guaranteedChannel_1.TimeStamper(),
151
154
  ackTimeout: 10000,
152
155
  logger: channelLogger,
153
156
  }),
154
157
  retryPolicy: new retry_1.BackoffPolicy({
155
- minRetryDelay: 1000, // 1 second
158
+ minRetryDelay: 3000, // 3 seconds
156
159
  maxRetryDelay: 60 * 1000, // 60 seconds
157
160
  backoffFactor: 1.5, // 1.5 ^ attempt
158
161
  backoffJitter: 1, // add randomness
@@ -193,9 +196,7 @@ class Container {
193
196
  return this.beaconQueue;
194
197
  }
195
198
  createBeaconQueue() {
196
- const context = this.getContext();
197
- const tab = context.getTab();
198
- return new queue_1.MonitoredQueue(new queue_1.CapacityRestrictedQueue(new queue_1.PersistentQueue(this.getGlobalTabStorage('queue'), tab.id), this.configuration.beaconQueueSize), this.getLogger('BeaconQueue'));
199
+ return new queue_1.MonitoredQueue(new queue_1.CapacityRestrictedQueue(new queue_1.PersistentQueue(this.getGlobalTabStorage('queue')), this.configuration.beaconQueueSize), this.getLogger('BeaconQueue'));
199
200
  }
200
201
  getLogger(...namespace) {
201
202
  const prefix = `Croct${namespace.length === 0 ? '' : `:${namespace.join(':')}`}`;
@@ -220,9 +221,8 @@ class Container {
220
221
  return new namespacedStorage_1.NamespacedStorage(this.getLocalStorage(), this.resolveStorageNamespace(namespace, ...subnamespace));
221
222
  }
222
223
  resolveStorageNamespace(namespace, ...subnamespace) {
223
- return `croct[${this.configuration
224
- .appId
225
- .toLowerCase()}].${[namespace].concat(subnamespace).join('.')}`;
224
+ const { appId } = this.configuration;
225
+ return `croct[${appId.toLowerCase()}].${[namespace].concat(subnamespace).join('.')}`;
226
226
  }
227
227
  getLocalStorage() {
228
228
  return localStorage;
@@ -267,4 +267,5 @@ class Container {
267
267
  }
268
268
  }
269
269
  exports.Container = Container;
270
+ Container.DEFAULT_FETCH_TIMEOUT = 5000; // 5 seconds
270
271
  //# sourceMappingURL=container.js.map