@azure/web-pubsub-client 1.0.4-alpha.20251104.1 → 1.0.4-alpha.20251107.1

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 (33) hide show
  1. package/dist/browser/ackManager.d.ts +22 -0
  2. package/dist/browser/ackManager.d.ts.map +1 -0
  3. package/dist/browser/ackManager.js +105 -0
  4. package/dist/browser/ackManager.js.map +1 -0
  5. package/dist/browser/webPubSubClient.d.ts +1 -3
  6. package/dist/browser/webPubSubClient.d.ts.map +1 -1
  7. package/dist/browser/webPubSubClient.js +24 -75
  8. package/dist/browser/webPubSubClient.js.map +1 -1
  9. package/dist/commonjs/ackManager.d.ts +22 -0
  10. package/dist/commonjs/ackManager.d.ts.map +1 -0
  11. package/dist/commonjs/ackManager.js +109 -0
  12. package/dist/commonjs/ackManager.js.map +1 -0
  13. package/dist/commonjs/webPubSubClient.d.ts +1 -3
  14. package/dist/commonjs/webPubSubClient.d.ts.map +1 -1
  15. package/dist/commonjs/webPubSubClient.js +24 -75
  16. package/dist/commonjs/webPubSubClient.js.map +1 -1
  17. package/dist/esm/ackManager.d.ts +22 -0
  18. package/dist/esm/ackManager.d.ts.map +1 -0
  19. package/dist/esm/ackManager.js +105 -0
  20. package/dist/esm/ackManager.js.map +1 -0
  21. package/dist/esm/webPubSubClient.d.ts +1 -3
  22. package/dist/esm/webPubSubClient.d.ts.map +1 -1
  23. package/dist/esm/webPubSubClient.js +24 -75
  24. package/dist/esm/webPubSubClient.js.map +1 -1
  25. package/dist/react-native/ackManager.d.ts +22 -0
  26. package/dist/react-native/ackManager.d.ts.map +1 -0
  27. package/dist/react-native/ackManager.js +105 -0
  28. package/dist/react-native/ackManager.js.map +1 -0
  29. package/dist/react-native/webPubSubClient.d.ts +1 -3
  30. package/dist/react-native/webPubSubClient.d.ts.map +1 -1
  31. package/dist/react-native/webPubSubClient.js +24 -75
  32. package/dist/react-native/webPubSubClient.js.map +1 -1
  33. package/package.json +4 -4
@@ -0,0 +1,22 @@
1
+ import type { AbortSignalLike } from "@azure/abort-controller";
2
+ import type { WebPubSubResult } from "./models/index.js";
3
+ export interface AckRegistration {
4
+ ackId: number;
5
+ wait(abortSignal?: AbortSignalLike): Promise<WebPubSubResult>;
6
+ }
7
+ /**
8
+ * Manages ack id generation and pending ack entries.
9
+ */
10
+ export declare class AckManager {
11
+ private readonly _ackEntries;
12
+ private _ackId;
13
+ constructor(initialAckId?: number);
14
+ registerAck(ackId?: number): AckRegistration;
15
+ resolveAck(ackId: number, result: WebPubSubResult): boolean;
16
+ rejectAck(ackId: number, reason: unknown): boolean;
17
+ discard(ackId: number): void;
18
+ rejectAll(createReason: (ackId: number) => unknown): void;
19
+ private _waitForEntry;
20
+ private _generateAckId;
21
+ }
22
+ //# sourceMappingURL=ackManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ackManager.d.ts","sourceRoot":"","sources":["../../src/ackManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,MAAM,CAAS;gBAEX,YAAY,SAAI;IAIrB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,eAAe;IAc5C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO;IAU3D,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAUlD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B,SAAS,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAQhE,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,cAAc;CAIvB"}
@@ -0,0 +1,105 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { SendMessageError } from "./errors/index.js";
4
+ import { abortablePromise } from "./utils/abortablePromise.js";
5
+ /**
6
+ * Manages ack id generation and pending ack entries.
7
+ */
8
+ export class AckManager {
9
+ _ackEntries = new Map();
10
+ _ackId;
11
+ constructor(initialAckId = 0) {
12
+ this._ackId = initialAckId;
13
+ }
14
+ registerAck(ackId) {
15
+ const resolvedAckId = ackId ?? this._generateAckId();
16
+ let entry = this._ackEntries.get(resolvedAckId);
17
+ if (!entry) {
18
+ entry = new AckEntity(resolvedAckId);
19
+ this._ackEntries.set(resolvedAckId, entry);
20
+ }
21
+ const ackEntry = entry;
22
+ return {
23
+ ackId: resolvedAckId,
24
+ wait: (abortSignal) => this._waitForEntry(ackEntry, abortSignal),
25
+ };
26
+ }
27
+ resolveAck(ackId, result) {
28
+ const entry = this._ackEntries.get(ackId);
29
+ if (!entry) {
30
+ return false;
31
+ }
32
+ this._ackEntries.delete(ackId);
33
+ entry.resolve(result);
34
+ return true;
35
+ }
36
+ rejectAck(ackId, reason) {
37
+ const entry = this._ackEntries.get(ackId);
38
+ if (!entry) {
39
+ return false;
40
+ }
41
+ this._ackEntries.delete(ackId);
42
+ entry.reject(reason);
43
+ return true;
44
+ }
45
+ discard(ackId) {
46
+ this._ackEntries.delete(ackId);
47
+ }
48
+ rejectAll(createReason) {
49
+ this._ackEntries.forEach((entry, ackId) => {
50
+ if (this._ackEntries.delete(ackId)) {
51
+ entry.reject(createReason(ackId));
52
+ }
53
+ });
54
+ }
55
+ _waitForEntry(entry, abortSignal) {
56
+ if (!abortSignal) {
57
+ return entry.promise();
58
+ }
59
+ return abortablePromise(entry.promise(), abortSignal).catch((err) => {
60
+ if (err instanceof Error && err.name === "AbortError") {
61
+ throw new SendMessageError("Cancelled by abortSignal", { ackId: entry.ackId });
62
+ }
63
+ throw err;
64
+ });
65
+ }
66
+ _generateAckId() {
67
+ this._ackId += 1;
68
+ return this._ackId;
69
+ }
70
+ }
71
+ class AckEntity {
72
+ ackId;
73
+ _promise;
74
+ _resolve;
75
+ _reject;
76
+ constructor(ackId) {
77
+ this.ackId = ackId;
78
+ this._promise = new Promise((resolve, reject) => {
79
+ this._resolve = resolve;
80
+ this._reject = reject;
81
+ });
82
+ }
83
+ promise() {
84
+ return this._promise;
85
+ }
86
+ resolve(value) {
87
+ const callback = this._resolve;
88
+ if (!callback) {
89
+ return;
90
+ }
91
+ this._resolve = undefined;
92
+ this._reject = undefined;
93
+ callback(value);
94
+ }
95
+ reject(reason) {
96
+ const callback = this._reject;
97
+ if (!callback) {
98
+ return;
99
+ }
100
+ this._resolve = undefined;
101
+ this._reject = undefined;
102
+ callback(reason);
103
+ }
104
+ }
105
+ //# sourceMappingURL=ackManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ackManager.js","sourceRoot":"","sources":["../../src/ackManager.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAO/D;;GAEG;AACH,MAAM,OAAO,UAAU;IACJ,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAC;IACpD,MAAM,CAAS;IAEvB,YAAY,YAAY,GAAG,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;IAC7B,CAAC;IAEM,WAAW,CAAC,KAAc;QAC/B,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACrD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,CAAC,WAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC;SACnF,CAAC;IACJ,CAAC;IAEM,UAAU,CAAC,KAAa,EAAE,MAAuB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,SAAS,CAAC,KAAa,EAAE,MAAe;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,KAAa;QAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAEM,SAAS,CAAC,YAAwC;QACvD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,KAAgB,EAAE,WAA6B;QACnE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAClE,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtD,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,SAAS;IAKe;IAJX,QAAQ,CAA2B;IAC5C,QAAQ,CAAgF;IACxF,OAAO,CAA2C;IAE1D,YAA4B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,OAAO,CAAC,KAAqD;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IAEM,MAAM,CAAC,MAAgB;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { WebPubSubResult } from \"./models/index.js\";\nimport { SendMessageError } from \"./errors/index.js\";\nimport { abortablePromise } from \"./utils/abortablePromise.js\";\n\nexport interface AckRegistration {\n ackId: number;\n wait(abortSignal?: AbortSignalLike): Promise<WebPubSubResult>;\n}\n\n/**\n * Manages ack id generation and pending ack entries.\n */\nexport class AckManager {\n private readonly _ackEntries = new Map<number, AckEntity>();\n private _ackId: number;\n\n constructor(initialAckId = 0) {\n this._ackId = initialAckId;\n }\n\n public registerAck(ackId?: number): AckRegistration {\n const resolvedAckId = ackId ?? this._generateAckId();\n let entry = this._ackEntries.get(resolvedAckId);\n if (!entry) {\n entry = new AckEntity(resolvedAckId);\n this._ackEntries.set(resolvedAckId, entry);\n }\n const ackEntry = entry;\n return {\n ackId: resolvedAckId,\n wait: (abortSignal?: AbortSignalLike) => this._waitForEntry(ackEntry, abortSignal),\n };\n }\n\n public resolveAck(ackId: number, result: WebPubSubResult): boolean {\n const entry = this._ackEntries.get(ackId);\n if (!entry) {\n return false;\n }\n this._ackEntries.delete(ackId);\n entry.resolve(result);\n return true;\n }\n\n public rejectAck(ackId: number, reason: unknown): boolean {\n const entry = this._ackEntries.get(ackId);\n if (!entry) {\n return false;\n }\n this._ackEntries.delete(ackId);\n entry.reject(reason);\n return true;\n }\n\n public discard(ackId: number): void {\n this._ackEntries.delete(ackId);\n }\n\n public rejectAll(createReason: (ackId: number) => unknown): void {\n this._ackEntries.forEach((entry, ackId) => {\n if (this._ackEntries.delete(ackId)) {\n entry.reject(createReason(ackId));\n }\n });\n }\n\n private _waitForEntry(entry: AckEntity, abortSignal?: AbortSignalLike): Promise<WebPubSubResult> {\n if (!abortSignal) {\n return entry.promise();\n }\n\n return abortablePromise(entry.promise(), abortSignal).catch((err) => {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new SendMessageError(\"Cancelled by abortSignal\", { ackId: entry.ackId });\n }\n throw err;\n });\n }\n\n private _generateAckId(): number {\n this._ackId += 1;\n return this._ackId;\n }\n}\n\nclass AckEntity {\n private readonly _promise: Promise<WebPubSubResult>;\n private _resolve: ((value: WebPubSubResult | PromiseLike<WebPubSubResult>) => void) | undefined;\n private _reject: ((reason?: unknown) => void) | undefined;\n\n constructor(public readonly ackId: number) {\n this._promise = new Promise<WebPubSubResult>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n public promise(): Promise<WebPubSubResult> {\n return this._promise;\n }\n\n public resolve(value: WebPubSubResult | PromiseLike<WebPubSubResult>): void {\n const callback = this._resolve;\n if (!callback) {\n return;\n }\n this._resolve = undefined;\n this._reject = undefined;\n callback(value);\n }\n\n public reject(reason?: unknown): void {\n const callback = this._reject;\n if (!callback) {\n return;\n }\n this._resolve = undefined;\n this._reject = undefined;\n callback(reason);\n }\n}\n"]}
@@ -13,7 +13,7 @@ export declare class WebPubSubClient {
13
13
  private readonly _credential;
14
14
  private readonly _options;
15
15
  private readonly _groupMap;
16
- private readonly _ackMap;
16
+ private readonly _ackManager;
17
17
  private readonly _sequenceId;
18
18
  private readonly _messageRetryPolicy;
19
19
  private readonly _reconnectRetryPolicy;
@@ -22,7 +22,6 @@ export declare class WebPubSubClient {
22
22
  private readonly _emitter;
23
23
  private _state;
24
24
  private _isStopping;
25
- private _ackId;
26
25
  private _activeKeepaliveTask;
27
26
  private _wsClient?;
28
27
  private _uri?;
@@ -32,7 +31,6 @@ export declare class WebPubSubClient {
32
31
  private _reconnectionToken?;
33
32
  private _isInitialConnected;
34
33
  private _sequenceAckTask?;
35
- private nextAckId;
36
34
  /**
37
35
  * Create an instance of WebPubSubClient
38
36
  * @param clientAccessUrl - The uri to connect
@@ -1 +1 @@
1
- {"version":3,"file":"webPubSubClient.d.ts","sourceRoot":"","sources":["../../src/webPubSubClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webPubSubClient.d.ts","sourceRoot":"","sources":["../../src/webPubSubClient.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { SendMessageError } from "./errors/index.js";
6
6
  import { logger } from "./logger.js";
7
7
  import { WebPubSubJsonReliableProtocol } from "./protocols/index.js";
8
8
  import { WebSocketClientFactory } from "./websocket/websocketClient.js";
9
- import { abortablePromise } from "./utils/abortablePromise.js";
9
+ import { AckManager } from "./ackManager.js";
10
10
  var WebPubSubClientState;
11
11
  (function (WebPubSubClientState) {
12
12
  WebPubSubClientState["Stopped"] = "Stopped";
@@ -23,7 +23,7 @@ export class WebPubSubClient {
23
23
  _credential;
24
24
  _options;
25
25
  _groupMap;
26
- _ackMap;
26
+ _ackManager;
27
27
  _sequenceId;
28
28
  _messageRetryPolicy;
29
29
  _reconnectRetryPolicy;
@@ -32,7 +32,6 @@ export class WebPubSubClient {
32
32
  _emitter = new EventEmitter();
33
33
  _state;
34
34
  _isStopping = false;
35
- _ackId;
36
35
  _activeKeepaliveTask;
37
36
  // connection lifetime
38
37
  _wsClient;
@@ -43,10 +42,6 @@ export class WebPubSubClient {
43
42
  _reconnectionToken;
44
43
  _isInitialConnected = false;
45
44
  _sequenceAckTask;
46
- nextAckId() {
47
- this._ackId = this._ackId + 1;
48
- return this._ackId;
49
- }
50
45
  constructor(credential, options) {
51
46
  if (typeof credential === "string") {
52
47
  this._credential = { getClientAccessUrl: credential };
@@ -63,10 +58,9 @@ export class WebPubSubClient {
63
58
  this._reconnectRetryPolicy = new RetryPolicy(this._options.reconnectRetryOptions);
64
59
  this._protocol = this._options.protocol;
65
60
  this._groupMap = new Map();
66
- this._ackMap = new Map();
61
+ this._ackManager = new AckManager();
67
62
  this._sequenceId = new SequenceId();
68
63
  this._state = WebPubSubClientState.Stopped;
69
- this._ackId = 0;
70
64
  }
71
65
  /**
72
66
  * Start to start to the service.
@@ -354,22 +348,18 @@ export class WebPubSubClient {
354
348
  });
355
349
  client.onmessage((data) => {
356
350
  const handleAckMessage = (message) => {
357
- if (this._ackMap.has(message.ackId)) {
358
- const entity = this._ackMap.get(message.ackId);
359
- this._ackMap.delete(message.ackId);
360
- const isDuplicated = message.error != null && message.error.name === "Duplicate";
361
- if (message.success || isDuplicated) {
362
- entity.resolve({
363
- ackId: message.ackId,
364
- isDuplicated: isDuplicated,
365
- });
366
- }
367
- else {
368
- entity.reject(new SendMessageError("Failed to send message.", {
369
- ackId: message.ackId,
370
- errorDetail: message.error,
371
- }));
372
- }
351
+ const isDuplicated = message.error != null && message.error.name === "Duplicate";
352
+ if (message.success || isDuplicated) {
353
+ this._ackManager.resolveAck(message.ackId, {
354
+ ackId: message.ackId,
355
+ isDuplicated: isDuplicated,
356
+ });
357
+ }
358
+ else {
359
+ this._ackManager.rejectAck(message.ackId, new SendMessageError("Failed to send message.", {
360
+ ackId: message.ackId,
361
+ errorDetail: message.error,
362
+ }));
373
363
  }
374
364
  };
375
365
  const handleConnectedMessage = async (message) => {
@@ -542,46 +532,27 @@ export class WebPubSubClient {
542
532
  await this._wsClient.send(payload, abortSignal);
543
533
  }
544
534
  async _sendMessageWithAckId(messageProvider, ackId, abortSignal) {
545
- if (ackId == null) {
546
- ackId = this.nextAckId();
547
- }
548
- const message = messageProvider(ackId);
549
- if (!this._ackMap.has(ackId)) {
550
- this._ackMap.set(ackId, new AckEntity(ackId));
551
- }
552
- const entity = this._ackMap.get(ackId);
535
+ const { ackId: resolvedAckId, wait } = this._ackManager.registerAck(ackId);
536
+ const message = messageProvider(resolvedAckId);
553
537
  try {
554
538
  await this._sendMessage(message, abortSignal);
555
539
  }
556
540
  catch (error) {
557
- this._ackMap.delete(ackId);
541
+ this._ackManager.discard(resolvedAckId);
558
542
  let errorMessage = "";
559
543
  if (error instanceof Error) {
560
544
  errorMessage = error.message;
561
545
  }
562
- throw new SendMessageError(errorMessage, { ackId: ackId });
563
- }
564
- if (abortSignal) {
565
- try {
566
- return await abortablePromise(entity.promise(), abortSignal);
567
- }
568
- catch (err) {
569
- if (err instanceof Error && err.name === "AbortError") {
570
- throw new SendMessageError("Cancelled by abortSignal", { ackId: ackId });
571
- }
572
- throw err;
573
- }
546
+ throw new SendMessageError(errorMessage, { ackId: resolvedAckId });
574
547
  }
575
- return entity.promise();
548
+ return wait(abortSignal);
576
549
  }
577
550
  async _handleConnectionClose() {
578
551
  // Clean ack cache
579
- this._ackMap.forEach((value, key) => {
580
- if (this._ackMap.delete(key)) {
581
- value.reject(new SendMessageError("Connection is disconnected before receive ack from the service", {
582
- ackId: value.ackId,
583
- }));
584
- }
552
+ this._ackManager.rejectAll((ackId) => {
553
+ return new SendMessageError("Connection is disconnected before receive ack from the service", {
554
+ ackId,
555
+ });
585
556
  });
586
557
  if (this._isStopping) {
587
558
  logger.warning("The client is stopping state. Stop recovery.");
@@ -790,28 +761,6 @@ class WebPubSubGroup {
790
761
  this.name = name;
791
762
  }
792
763
  }
793
- class AckEntity {
794
- _promise;
795
- _resolve;
796
- _reject;
797
- constructor(ackId) {
798
- this._promise = new Promise((resolve, reject) => {
799
- this._resolve = resolve;
800
- this._reject = reject;
801
- });
802
- this.ackId = ackId;
803
- }
804
- ackId;
805
- promise() {
806
- return this._promise;
807
- }
808
- resolve(value) {
809
- this._resolve(value);
810
- }
811
- reject(reason) {
812
- this._reject(reason);
813
- }
814
- }
815
764
  class SequenceId {
816
765
  _sequenceId;
817
766
  _isUpdate;