@hashgraphonline/standards-sdk 0.0.84 → 0.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/hcs-10/connections-manager.d.ts +26 -8
- package/dist/es/hcs-10/connections-manager.d.ts.map +1 -1
- package/dist/es/standards-sdk.es10.js +271 -85
- package/dist/es/standards-sdk.es10.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +147 -3
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +90 -3
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +84 -13
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +32 -13
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +5 -15
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +158 -4
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +21 -37
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +787 -34
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +172 -35
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +133 -68
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +20 -3
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +26 -33
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +25 -32
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +38 -9
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +4 -34
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +419 -3
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +2 -2
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +120 -2
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +3 -3
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es18.js +2 -2
- package/dist/es/standards-sdk.es19.js +3 -3
- package/dist/es/standards-sdk.es2.js +0 -11
- package/dist/es/standards-sdk.es2.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +1692 -966
- package/dist/es/standards-sdk.es22.js.map +1 -1
- package/dist/es/standards-sdk.es23.js +36 -1767
- package/dist/es/standards-sdk.es23.js.map +1 -1
- package/dist/es/standards-sdk.es24.js +48 -36
- package/dist/es/standards-sdk.es24.js.map +1 -1
- package/dist/es/standards-sdk.es25.js +7163 -21
- package/dist/es/standards-sdk.es25.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +3 -7190
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +2 -3
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es28.js +1041 -2
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es29.js +4167 -5
- package/dist/es/standards-sdk.es29.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +5 -4167
- package/dist/es/standards-sdk.es30.js.map +1 -1
- package/dist/es/standards-sdk.es31.js +364 -2
- package/dist/es/standards-sdk.es31.js.map +1 -1
- package/dist/es/standards-sdk.es32.js +4 -362
- package/dist/es/standards-sdk.es32.js.map +1 -1
- package/dist/es/standards-sdk.es33.js +178 -5
- package/dist/es/standards-sdk.es33.js.map +1 -1
- package/dist/es/standards-sdk.es34.js +73 -171
- package/dist/es/standards-sdk.es34.js.map +1 -1
- package/dist/es/standards-sdk.es35.js +107 -74
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +45 -107
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +9 -51
- package/dist/es/standards-sdk.es37.js.map +1 -1
- package/dist/es/standards-sdk.es38.js +96 -9
- package/dist/es/standards-sdk.es38.js.map +1 -1
- package/dist/es/standards-sdk.es39.js +3 -96
- package/dist/es/standards-sdk.es39.js.map +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es40.js +2 -4
- package/dist/es/standards-sdk.es40.js.map +1 -1
- package/dist/es/standards-sdk.es41.js +113 -2
- package/dist/es/standards-sdk.es41.js.map +1 -1
- package/dist/es/standards-sdk.es42.js +70 -109
- package/dist/es/standards-sdk.es42.js.map +1 -1
- package/dist/es/standards-sdk.es43.js +5 -73
- package/dist/es/standards-sdk.es43.js.map +1 -1
- package/dist/es/standards-sdk.es44.js +4 -5
- package/dist/es/standards-sdk.es44.js.map +1 -1
- package/dist/es/standards-sdk.es45.js +220 -4
- package/dist/es/standards-sdk.es45.js.map +1 -1
- package/dist/es/standards-sdk.es46.js +51 -214
- package/dist/es/standards-sdk.es46.js.map +1 -1
- package/dist/es/standards-sdk.es47.js +67 -56
- package/dist/es/standards-sdk.es47.js.map +1 -1
- package/dist/es/standards-sdk.es48.js +3 -69
- package/dist/es/standards-sdk.es48.js.map +1 -1
- package/dist/es/standards-sdk.es49.js +146 -177
- package/dist/es/standards-sdk.es49.js.map +1 -1
- package/dist/es/standards-sdk.es5.js +3 -3
- package/dist/es/standards-sdk.es50.js +26 -432
- package/dist/es/standards-sdk.es50.js.map +1 -1
- package/dist/es/standards-sdk.es51.js +57 -19
- package/dist/es/standards-sdk.es51.js.map +1 -1
- package/dist/es/standards-sdk.es52.js +44 -133
- package/dist/es/standards-sdk.es52.js.map +1 -1
- package/dist/es/standards-sdk.es53.js +9 -17
- package/dist/es/standards-sdk.es53.js.map +1 -1
- package/dist/es/standards-sdk.es54.js +61 -25
- package/dist/es/standards-sdk.es54.js.map +1 -1
- package/dist/es/standards-sdk.es55.js +6 -29
- package/dist/es/standards-sdk.es55.js.map +1 -1
- package/dist/es/standards-sdk.es56.js +13 -19
- package/dist/es/standards-sdk.es56.js.map +1 -1
- package/dist/es/standards-sdk.es57.js +7 -44
- package/dist/es/standards-sdk.es57.js.map +1 -1
- package/dist/es/standards-sdk.es58.js +45 -18
- package/dist/es/standards-sdk.es58.js.map +1 -1
- package/dist/es/standards-sdk.es59.js +2 -61
- package/dist/es/standards-sdk.es59.js.map +1 -1
- package/dist/es/standards-sdk.es60.js +121 -1274
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +157 -133
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +98 -88
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +2 -84
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +15 -31
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +408 -5
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +13 -159
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +13 -23
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +29 -790
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +14 -100
- package/dist/es/standards-sdk.es69.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +3 -3
- package/dist/es/standards-sdk.es70.js +4 -2
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +3 -15
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +14 -407
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +4 -173
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +39 -143
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +39 -2281
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +34 -161
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +67 -408
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +2282 -2
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +2 -120
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es8.js +3 -3
- package/dist/es/standards-sdk.es80.js +7131 -16
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +3 -3
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +2 -32
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +2 -63
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +32 -48
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +32 -9
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +9 -65
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +34 -6
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +192 -12
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +437 -6
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +1 -1
- package/dist/es/standards-sdk.es90.js +24 -44
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +139 -2
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +18 -136
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +23 -166
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +27 -7134
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +19 -25
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +42 -24
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +16 -36
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +60 -31
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +1288 -14
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/dist/umd/hcs-10/connections-manager.d.ts +26 -8
- package/dist/umd/hcs-10/connections-manager.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +9 -9
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/package.json +2 -1
|
@@ -37,6 +37,8 @@ export interface Connection {
|
|
|
37
37
|
closedReason?: string;
|
|
38
38
|
closeMethod?: string;
|
|
39
39
|
uniqueRequestKey?: string;
|
|
40
|
+
originTopicId?: string;
|
|
41
|
+
processed: boolean;
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
42
44
|
* Options for the connections manager
|
|
@@ -72,6 +74,12 @@ export declare class ConnectionsManager {
|
|
|
72
74
|
* that might not be visible in our local messages
|
|
73
75
|
*/
|
|
74
76
|
private checkTargetInboundTopicsForConfirmations;
|
|
77
|
+
/**
|
|
78
|
+
* Checks target agents' inbound topics for confirmations of our outbound connection requests
|
|
79
|
+
* This complements checkTargetInboundTopicsForConfirmations by looking for confirmations
|
|
80
|
+
* that might have been sent to the target agent's inbound topic rather than our own
|
|
81
|
+
*/
|
|
82
|
+
private checkOutboundRequestsForConfirmations;
|
|
75
83
|
/**
|
|
76
84
|
* Fetches profiles for all connected accounts
|
|
77
85
|
* @param accountId - The account ID making the request
|
|
@@ -105,10 +113,9 @@ export declare class ConnectionsManager {
|
|
|
105
113
|
/**
|
|
106
114
|
* Process inbound messages to track connection requests and confirmations
|
|
107
115
|
* @param messages - The messages to process
|
|
108
|
-
* @param accountId - The account ID that received the messages
|
|
109
116
|
* @returns Array of connections after processing
|
|
110
117
|
*/
|
|
111
|
-
processInboundMessages(messages: HCSMessage[]
|
|
118
|
+
processInboundMessages(messages: HCSMessage[]): Connection[];
|
|
112
119
|
/**
|
|
113
120
|
* Process connection topic messages to update last activity time
|
|
114
121
|
* @param connectionTopicId - The topic ID of the connection
|
|
@@ -154,12 +161,6 @@ export declare class ConnectionsManager {
|
|
|
154
161
|
* @returns The connection with the given topic ID, or undefined if not found
|
|
155
162
|
*/
|
|
156
163
|
getConnectionByTopicId(connectionTopicId: string): Connection | undefined;
|
|
157
|
-
/**
|
|
158
|
-
* Gets a connection by request ID
|
|
159
|
-
* @param requestId - The request ID to look up
|
|
160
|
-
* @returns The connection with the given request ID, or undefined if not found
|
|
161
|
-
*/
|
|
162
|
-
getConnection(requestId: number, inboundTopicId: string): Connection | undefined;
|
|
163
164
|
/**
|
|
164
165
|
* Gets a connection by account ID
|
|
165
166
|
* @param accountId - The account ID to look up
|
|
@@ -181,5 +182,22 @@ export declare class ConnectionsManager {
|
|
|
181
182
|
* Clears all tracked connections and requests
|
|
182
183
|
*/
|
|
183
184
|
clearAll(): void;
|
|
185
|
+
/**
|
|
186
|
+
* Checks if a given connection request has been processed already
|
|
187
|
+
* This uses a combination of topic ID and request ID to uniquely identify requests
|
|
188
|
+
*
|
|
189
|
+
* @param inboundTopicId - The inbound topic ID where the request was received
|
|
190
|
+
* @param requestId - The sequence number (request ID)
|
|
191
|
+
* @returns True if this specific request has been processed, false otherwise
|
|
192
|
+
*/
|
|
193
|
+
isConnectionRequestProcessed(inboundTopicId: string, requestId: number): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Marks a specific connection request as processed
|
|
196
|
+
*
|
|
197
|
+
* @param inboundTopicId - The inbound topic ID where the request was received
|
|
198
|
+
* @param requestId - The sequence number (request ID)
|
|
199
|
+
* @returns True if a matching connection was found and marked, false otherwise
|
|
200
|
+
*/
|
|
201
|
+
markConnectionRequestProcessed(inboundTopicId: string, requestId: number): boolean;
|
|
184
202
|
}
|
|
185
203
|
//# sourceMappingURL=connections-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections-manager.d.ts","sourceRoot":"","sources":["../../../src/hcs-10/connections-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,oBAAoB,GAAG,QAAQ,CAAC;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"connections-manager.d.ts","sourceRoot":"","sources":["../../../src/hcs-10/connections-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,15 @@ class ConnectionsManager {
|
|
|
32
32
|
const topicInfo = await this.baseClient.retrieveCommunicationTopics(
|
|
33
33
|
accountId
|
|
34
34
|
);
|
|
35
|
+
const isValidTopicId = (topicId) => {
|
|
36
|
+
return Boolean(topicId) && !topicId.includes(":");
|
|
37
|
+
};
|
|
38
|
+
if (!isValidTopicId(topicInfo.inboundTopic) || !isValidTopicId(topicInfo.outboundTopic)) {
|
|
39
|
+
this.logger.warn(
|
|
40
|
+
"Invalid topic IDs detected in retrieved communication topics"
|
|
41
|
+
);
|
|
42
|
+
return this.getAllConnections();
|
|
43
|
+
}
|
|
35
44
|
const [outboundMessagesResult, inboundMessagesResult] = await Promise.all(
|
|
36
45
|
[
|
|
37
46
|
this.baseClient.getMessages(topicInfo.outboundTopic),
|
|
@@ -42,11 +51,15 @@ class ConnectionsManager {
|
|
|
42
51
|
outboundMessagesResult.messages || [],
|
|
43
52
|
accountId
|
|
44
53
|
);
|
|
45
|
-
this.processInboundMessages(
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
this.processInboundMessages(inboundMessagesResult.messages || []);
|
|
55
|
+
const pendingCount = Array.from(this.connections.values()).filter(
|
|
56
|
+
(conn) => conn.status === "pending" || conn.isPending
|
|
57
|
+
).length;
|
|
58
|
+
this.logger.debug(
|
|
59
|
+
`Processed ${outboundMessagesResult.messages?.length || 0} outbound and ${inboundMessagesResult.messages?.length || 0} inbound messages. Found ${pendingCount} pending connections.`
|
|
48
60
|
);
|
|
49
61
|
await this.checkTargetInboundTopicsForConfirmations();
|
|
62
|
+
await this.checkOutboundRequestsForConfirmations();
|
|
50
63
|
await this.fetchProfilesForConnections(accountId);
|
|
51
64
|
await this.fetchConnectionActivity();
|
|
52
65
|
return this.getAllConnections();
|
|
@@ -61,7 +74,7 @@ class ConnectionsManager {
|
|
|
61
74
|
*/
|
|
62
75
|
async checkTargetInboundTopicsForConfirmations() {
|
|
63
76
|
const pendingConnections = Array.from(this.connections.values()).filter(
|
|
64
|
-
(conn) => conn.isPending && conn.targetInboundTopicId
|
|
77
|
+
(conn) => (conn.isPending || conn.status === "pending") && conn.targetInboundTopicId
|
|
65
78
|
);
|
|
66
79
|
if (pendingConnections.length === 0) {
|
|
67
80
|
return;
|
|
@@ -92,16 +105,31 @@ class ConnectionsManager {
|
|
|
92
105
|
if (!requestId) {
|
|
93
106
|
continue;
|
|
94
107
|
}
|
|
95
|
-
const confirmationMsg = targetMessages.find(
|
|
96
|
-
(msg
|
|
97
|
-
|
|
108
|
+
const confirmationMsg = targetMessages.find((msg) => {
|
|
109
|
+
if (msg.op !== "connection_created" || !msg.connection_topic_id) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (msg.connection_id !== requestId) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
if (conn.uniqueRequestKey) {
|
|
116
|
+
const keyParts = conn.uniqueRequestKey.split(":");
|
|
117
|
+
if (keyParts.length > 1) {
|
|
118
|
+
const operatorIdPart = keyParts[1];
|
|
119
|
+
if (msg.operator_id && msg.operator_id === operatorIdPart) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
if (msg.connected_account_id === conn.targetAccountId) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
});
|
|
98
129
|
if (confirmationMsg?.connection_topic_id) {
|
|
99
130
|
confirmedAny = true;
|
|
100
131
|
const connectionTopicId = confirmationMsg.connection_topic_id;
|
|
101
|
-
let pendingKey = conn.
|
|
102
|
-
if (!pendingKey.startsWith("req-") && conn.uniqueRequestKey) {
|
|
103
|
-
pendingKey = conn.uniqueRequestKey;
|
|
104
|
-
}
|
|
132
|
+
let pendingKey = conn.uniqueRequestKey;
|
|
105
133
|
const newConnection = {
|
|
106
134
|
connectionTopicId,
|
|
107
135
|
targetAccountId: conn.targetAccountId,
|
|
@@ -113,10 +141,12 @@ class ConnectionsManager {
|
|
|
113
141
|
created: new Date(confirmationMsg.created || conn.created),
|
|
114
142
|
profileInfo: conn.profileInfo,
|
|
115
143
|
connectionRequestId: requestId,
|
|
116
|
-
uniqueRequestKey: conn.uniqueRequestKey
|
|
144
|
+
uniqueRequestKey: conn.uniqueRequestKey,
|
|
145
|
+
originTopicId: conn.originTopicId,
|
|
146
|
+
processed: conn.processed
|
|
117
147
|
};
|
|
118
148
|
this.connections.set(connectionTopicId, newConnection);
|
|
119
|
-
if (pendingKey
|
|
149
|
+
if (pendingKey) {
|
|
120
150
|
this.connections.delete(pendingKey);
|
|
121
151
|
}
|
|
122
152
|
this.logger.debug(
|
|
@@ -141,6 +171,115 @@ class ConnectionsManager {
|
|
|
141
171
|
}
|
|
142
172
|
}
|
|
143
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Checks target agents' inbound topics for confirmations of our outbound connection requests
|
|
176
|
+
* This complements checkTargetInboundTopicsForConfirmations by looking for confirmations
|
|
177
|
+
* that might have been sent to the target agent's inbound topic rather than our own
|
|
178
|
+
*/
|
|
179
|
+
async checkOutboundRequestsForConfirmations() {
|
|
180
|
+
const allConnections = Array.from(this.connections.values());
|
|
181
|
+
this.logger.info(`Total connections in map: ${allConnections.length}`);
|
|
182
|
+
const pendingByStatus = allConnections.filter(
|
|
183
|
+
(conn) => conn.status === "pending"
|
|
184
|
+
);
|
|
185
|
+
this.logger.info(
|
|
186
|
+
`Connections with status='pending': ${pendingByStatus.length}`
|
|
187
|
+
);
|
|
188
|
+
const pendingConnections = allConnections.filter(
|
|
189
|
+
(conn) => conn.status === "pending"
|
|
190
|
+
);
|
|
191
|
+
if (!Boolean(pendingConnections?.length)) {
|
|
192
|
+
this.logger.info("No pending connections found");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
for (const conn of pendingConnections) {
|
|
196
|
+
this.logger.debug(
|
|
197
|
+
`Processing pending connection: ${conn.connectionTopicId}`
|
|
198
|
+
);
|
|
199
|
+
if (!conn.targetAccountId) {
|
|
200
|
+
this.logger.debug(
|
|
201
|
+
`Skipping connection ${conn.connectionTopicId} - no targetAccountId`
|
|
202
|
+
);
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
let targetInboundTopicId = conn.targetInboundTopicId;
|
|
206
|
+
if (!targetInboundTopicId) {
|
|
207
|
+
try {
|
|
208
|
+
const profileResponse = await this.baseClient.retrieveProfile(
|
|
209
|
+
conn.targetAccountId
|
|
210
|
+
);
|
|
211
|
+
if (profileResponse?.profile?.inboundTopicId) {
|
|
212
|
+
targetInboundTopicId = profileResponse.profile.inboundTopicId;
|
|
213
|
+
this.connections.set(conn.connectionTopicId, {
|
|
214
|
+
...conn,
|
|
215
|
+
targetInboundTopicId
|
|
216
|
+
});
|
|
217
|
+
this.logger.debug(
|
|
218
|
+
`Updated connection ${conn.connectionTopicId} with inbound topic ID: ${targetInboundTopicId}`
|
|
219
|
+
);
|
|
220
|
+
} else {
|
|
221
|
+
this.logger.debug(
|
|
222
|
+
`Couldn't get inbound topic ID for account ${conn.targetAccountId}`
|
|
223
|
+
);
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
} catch (error) {
|
|
227
|
+
this.logger.debug(
|
|
228
|
+
`Error fetching profile for ${conn.targetAccountId}: ${error}`
|
|
229
|
+
);
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (!targetInboundTopicId || targetInboundTopicId.includes(":")) {
|
|
234
|
+
this.logger.debug(
|
|
235
|
+
`Skipping invalid inbound topic format: ${targetInboundTopicId}`
|
|
236
|
+
);
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const requestId = conn.connectionRequestId || conn.inboundRequestId;
|
|
240
|
+
if (!requestId) {
|
|
241
|
+
this.logger.debug(
|
|
242
|
+
`Skipping connection ${conn.connectionTopicId} - no request ID`
|
|
243
|
+
);
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
this.logger.debug(
|
|
248
|
+
`Checking for confirmations on topic ${targetInboundTopicId} for request ID ${requestId}`
|
|
249
|
+
);
|
|
250
|
+
const targetMessagesResult = await this.baseClient.getMessages(
|
|
251
|
+
targetInboundTopicId
|
|
252
|
+
);
|
|
253
|
+
const targetMessages = targetMessagesResult.messages || [];
|
|
254
|
+
const confirmationMsg = targetMessages.find(
|
|
255
|
+
(msg) => msg.op === "connection_created" && msg.connection_id === requestId && msg.connection_topic_id
|
|
256
|
+
);
|
|
257
|
+
if (confirmationMsg?.connection_topic_id) {
|
|
258
|
+
const connectionTopicId = confirmationMsg.connection_topic_id;
|
|
259
|
+
this.logger.info(
|
|
260
|
+
`Found confirmation for request #${requestId} to ${conn.targetAccountId} on their inbound topic`
|
|
261
|
+
);
|
|
262
|
+
this.connections.set(conn.connectionTopicId, {
|
|
263
|
+
...conn,
|
|
264
|
+
connectionTopicId,
|
|
265
|
+
status: "established",
|
|
266
|
+
isPending: false,
|
|
267
|
+
needsConfirmation: false,
|
|
268
|
+
created: new Date(confirmationMsg.created || conn.created),
|
|
269
|
+
lastActivity: new Date(confirmationMsg.created || conn.created)
|
|
270
|
+
});
|
|
271
|
+
} else {
|
|
272
|
+
this.logger.debug(
|
|
273
|
+
`No confirmation found for request ID ${requestId} on topic ${targetInboundTopicId}`
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
} catch (error) {
|
|
277
|
+
this.logger.warn(
|
|
278
|
+
`Error checking for confirmations on target inbound topic for ${conn.targetAccountId}: ${error}`
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
144
283
|
/**
|
|
145
284
|
* Fetches profiles for all connected accounts
|
|
146
285
|
* @param accountId - The account ID making the request
|
|
@@ -198,16 +337,22 @@ class ConnectionsManager {
|
|
|
198
337
|
*/
|
|
199
338
|
async fetchConnectionActivity() {
|
|
200
339
|
const activeConnections = this.getActiveConnections();
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
340
|
+
const validConnections = activeConnections.filter((connection) => {
|
|
341
|
+
const topicId = connection.connectionTopicId;
|
|
342
|
+
if (!topicId || topicId.includes(":") || !topicId.match(/^0\.0\.\d+$/)) {
|
|
343
|
+
this.logger.debug(
|
|
344
|
+
`Skipping activity fetch for invalid topic ID format: ${topicId}`
|
|
205
345
|
);
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
return true;
|
|
349
|
+
});
|
|
350
|
+
const activityPromises = validConnections.map(async (connection) => {
|
|
351
|
+
try {
|
|
352
|
+
const topicId = connection.connectionTopicId;
|
|
353
|
+
const messagesResult = await this.baseClient.getMessages(topicId);
|
|
206
354
|
if (messagesResult?.messages?.length > 0) {
|
|
207
|
-
this.processConnectionMessages(
|
|
208
|
-
connection.connectionTopicId,
|
|
209
|
-
messagesResult.messages
|
|
210
|
-
);
|
|
355
|
+
this.processConnectionMessages(topicId, messagesResult.messages);
|
|
211
356
|
}
|
|
212
357
|
} catch (error) {
|
|
213
358
|
this.logger.debug(
|
|
@@ -239,7 +384,7 @@ class ConnectionsManager {
|
|
|
239
384
|
* @returns Array of connections after processing
|
|
240
385
|
*/
|
|
241
386
|
processOutboundMessages(messages, accountId) {
|
|
242
|
-
if (!messages
|
|
387
|
+
if (!Boolean(messages?.length)) {
|
|
243
388
|
return Array.from(this.connections.values());
|
|
244
389
|
}
|
|
245
390
|
const requestMessages = messages.filter(
|
|
@@ -257,11 +402,11 @@ class ConnectionsManager {
|
|
|
257
402
|
continue;
|
|
258
403
|
}
|
|
259
404
|
const isAlreadyConfirmed = Array.from(this.connections.values()).some(
|
|
260
|
-
(conn) => conn.connectionRequestId === requestId && !conn.isPending
|
|
405
|
+
(conn) => conn.connectionRequestId === requestId && !conn.isPending && conn.targetAccountId === targetAccountId
|
|
261
406
|
);
|
|
262
407
|
const pendingKey = `req-${requestId}:${operatorId}`;
|
|
263
408
|
if (!isAlreadyConfirmed && !this.pendingRequests.has(pendingKey)) {
|
|
264
|
-
|
|
409
|
+
const pendingRequest = {
|
|
265
410
|
id: requestId,
|
|
266
411
|
requesterId: accountId,
|
|
267
412
|
requesterTopicId: msg.outbound_topic_id || "",
|
|
@@ -272,9 +417,10 @@ class ConnectionsManager {
|
|
|
272
417
|
created: msg.created || /* @__PURE__ */ new Date(),
|
|
273
418
|
memo: msg.m,
|
|
274
419
|
status: "pending"
|
|
275
|
-
}
|
|
420
|
+
};
|
|
421
|
+
this.pendingRequests.set(pendingKey, pendingRequest);
|
|
276
422
|
if (!this.connections.has(pendingKey)) {
|
|
277
|
-
|
|
423
|
+
const pendingConnection = {
|
|
278
424
|
connectionTopicId: pendingKey,
|
|
279
425
|
targetAccountId,
|
|
280
426
|
targetInboundTopicId,
|
|
@@ -283,8 +429,11 @@ class ConnectionsManager {
|
|
|
283
429
|
needsConfirmation: false,
|
|
284
430
|
created: msg.created || /* @__PURE__ */ new Date(),
|
|
285
431
|
connectionRequestId: requestId,
|
|
286
|
-
uniqueRequestKey: pendingKey
|
|
287
|
-
|
|
432
|
+
uniqueRequestKey: pendingKey,
|
|
433
|
+
originTopicId: msg.outbound_topic_id || "",
|
|
434
|
+
processed: false
|
|
435
|
+
};
|
|
436
|
+
this.connections.set(pendingKey, pendingConnection);
|
|
288
437
|
}
|
|
289
438
|
}
|
|
290
439
|
}
|
|
@@ -311,14 +460,6 @@ class ConnectionsManager {
|
|
|
311
460
|
if (this.connections.has(pendingKey)) {
|
|
312
461
|
this.connections.delete(pendingKey);
|
|
313
462
|
}
|
|
314
|
-
const existingConnections = Array.from(this.connections.entries()).filter(
|
|
315
|
-
([_, conn]) => conn.connectionRequestId === requestId
|
|
316
|
-
);
|
|
317
|
-
for (const [key, _] of existingConnections) {
|
|
318
|
-
if (key !== connectionTopicId) {
|
|
319
|
-
this.connections.delete(key);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
463
|
if (!this.connections.has(connectionTopicId)) {
|
|
323
464
|
this.connections.set(connectionTopicId, {
|
|
324
465
|
connectionTopicId,
|
|
@@ -330,7 +471,9 @@ class ConnectionsManager {
|
|
|
330
471
|
connectionRequestId: requestId,
|
|
331
472
|
confirmedRequestId: msg.confirmed_request_id,
|
|
332
473
|
requesterOutboundTopicId: msg.outbound_topic_id,
|
|
333
|
-
uniqueRequestKey: pendingKey
|
|
474
|
+
uniqueRequestKey: pendingKey,
|
|
475
|
+
originTopicId: msg.outbound_topic_id || "",
|
|
476
|
+
processed: false
|
|
334
477
|
});
|
|
335
478
|
} else {
|
|
336
479
|
const conn = this.connections.get(connectionTopicId);
|
|
@@ -342,7 +485,9 @@ class ConnectionsManager {
|
|
|
342
485
|
connectionRequestId: requestId,
|
|
343
486
|
confirmedRequestId: msg.confirmed_request_id,
|
|
344
487
|
requesterOutboundTopicId: msg.outbound_topic_id,
|
|
345
|
-
uniqueRequestKey: pendingKey
|
|
488
|
+
uniqueRequestKey: pendingKey,
|
|
489
|
+
originTopicId: msg.outbound_topic_id || "",
|
|
490
|
+
processed: false
|
|
346
491
|
});
|
|
347
492
|
}
|
|
348
493
|
}
|
|
@@ -365,7 +510,9 @@ class ConnectionsManager {
|
|
|
365
510
|
lastActivity: msg.created || /* @__PURE__ */ new Date(),
|
|
366
511
|
closedReason: msg.reason,
|
|
367
512
|
closeMethod: msg.close_method,
|
|
368
|
-
uniqueRequestKey: uniqueKey
|
|
513
|
+
uniqueRequestKey: uniqueKey,
|
|
514
|
+
originTopicId: conn.originTopicId,
|
|
515
|
+
processed: false
|
|
369
516
|
});
|
|
370
517
|
}
|
|
371
518
|
}
|
|
@@ -376,11 +523,10 @@ class ConnectionsManager {
|
|
|
376
523
|
/**
|
|
377
524
|
* Process inbound messages to track connection requests and confirmations
|
|
378
525
|
* @param messages - The messages to process
|
|
379
|
-
* @param accountId - The account ID that received the messages
|
|
380
526
|
* @returns Array of connections after processing
|
|
381
527
|
*/
|
|
382
|
-
processInboundMessages(messages
|
|
383
|
-
if (!messages
|
|
528
|
+
processInboundMessages(messages) {
|
|
529
|
+
if (!Boolean(messages?.length)) {
|
|
384
530
|
return Array.from(this.connections.values());
|
|
385
531
|
}
|
|
386
532
|
const requestMessages = messages.filter(
|
|
@@ -397,24 +543,21 @@ class ConnectionsManager {
|
|
|
397
543
|
);
|
|
398
544
|
continue;
|
|
399
545
|
}
|
|
400
|
-
const
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
uniqueRequestKey: needsConfirmKey
|
|
416
|
-
});
|
|
417
|
-
}
|
|
546
|
+
const needsConfirmKey = `inb-${sequenceNumber}:${operatorId}`;
|
|
547
|
+
if (!this.connections.has(needsConfirmKey)) {
|
|
548
|
+
this.connections.set(needsConfirmKey, {
|
|
549
|
+
connectionTopicId: needsConfirmKey,
|
|
550
|
+
targetAccountId: requestorAccountId,
|
|
551
|
+
targetInboundTopicId: requestorTopicId,
|
|
552
|
+
status: "needs_confirmation",
|
|
553
|
+
isPending: false,
|
|
554
|
+
needsConfirmation: true,
|
|
555
|
+
created: msg.created || /* @__PURE__ */ new Date(),
|
|
556
|
+
inboundRequestId: sequenceNumber,
|
|
557
|
+
uniqueRequestKey: needsConfirmKey,
|
|
558
|
+
originTopicId: requestorTopicId,
|
|
559
|
+
processed: false
|
|
560
|
+
});
|
|
418
561
|
}
|
|
419
562
|
}
|
|
420
563
|
const confirmationMessages = messages.filter(
|
|
@@ -424,24 +567,17 @@ class ConnectionsManager {
|
|
|
424
567
|
const sequenceNumber = msg.connection_id;
|
|
425
568
|
const connectionTopicId = msg.connection_topic_id;
|
|
426
569
|
const connectedAccountId = msg.connected_account_id || "";
|
|
570
|
+
const operatorId = msg.operator_id || "";
|
|
427
571
|
if (this.shouldFilterAccount(connectedAccountId)) {
|
|
428
572
|
this.logger.debug(
|
|
429
573
|
`Filtering out confirmation for account: ${connectedAccountId}`
|
|
430
574
|
);
|
|
431
575
|
continue;
|
|
432
576
|
}
|
|
433
|
-
const needsConfirmKey = `inb-${sequenceNumber}:${
|
|
577
|
+
const needsConfirmKey = `inb-${sequenceNumber}:${operatorId}`;
|
|
434
578
|
if (this.connections.has(needsConfirmKey)) {
|
|
435
579
|
this.connections.delete(needsConfirmKey);
|
|
436
580
|
}
|
|
437
|
-
const existingConnections = Array.from(this.connections.entries()).filter(
|
|
438
|
-
([_, conn]) => conn.inboundRequestId === sequenceNumber
|
|
439
|
-
);
|
|
440
|
-
for (const [key, _] of existingConnections) {
|
|
441
|
-
if (key !== connectionTopicId) {
|
|
442
|
-
this.connections.delete(key);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
581
|
if (!this.connections.has(connectionTopicId)) {
|
|
446
582
|
this.connections.set(connectionTopicId, {
|
|
447
583
|
connectionTopicId,
|
|
@@ -451,7 +587,9 @@ class ConnectionsManager {
|
|
|
451
587
|
needsConfirmation: false,
|
|
452
588
|
created: msg.created || /* @__PURE__ */ new Date(),
|
|
453
589
|
inboundRequestId: sequenceNumber,
|
|
454
|
-
uniqueRequestKey: needsConfirmKey
|
|
590
|
+
uniqueRequestKey: needsConfirmKey,
|
|
591
|
+
originTopicId: msg.connection_topic_id,
|
|
592
|
+
processed: false
|
|
455
593
|
});
|
|
456
594
|
} else {
|
|
457
595
|
const conn = this.connections.get(connectionTopicId);
|
|
@@ -461,7 +599,9 @@ class ConnectionsManager {
|
|
|
461
599
|
isPending: false,
|
|
462
600
|
needsConfirmation: false,
|
|
463
601
|
inboundRequestId: sequenceNumber,
|
|
464
|
-
uniqueRequestKey: needsConfirmKey
|
|
602
|
+
uniqueRequestKey: needsConfirmKey,
|
|
603
|
+
originTopicId: msg.connection_topic_id,
|
|
604
|
+
processed: false
|
|
465
605
|
});
|
|
466
606
|
}
|
|
467
607
|
}
|
|
@@ -529,18 +669,22 @@ class ConnectionsManager {
|
|
|
529
669
|
* @returns Array of all connections that should be visible
|
|
530
670
|
*/
|
|
531
671
|
getAllConnections() {
|
|
532
|
-
|
|
672
|
+
const connections = Array.from(this.connections.values()).filter(
|
|
533
673
|
(conn) => conn.status === "established" || conn.status === "closed" || !this.filterPendingAccountIds.has(conn.targetAccountId) || this.hasEstablishedConnectionWithAccount(conn.targetAccountId)
|
|
534
674
|
);
|
|
675
|
+
return connections;
|
|
535
676
|
}
|
|
536
677
|
/**
|
|
537
678
|
* Gets all pending connection requests
|
|
538
679
|
* @returns Array of pending connection requests
|
|
539
680
|
*/
|
|
540
681
|
getPendingRequests() {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
682
|
+
const pendingConnections = Array.from(this.connections.values()).filter(
|
|
683
|
+
(conn) => {
|
|
684
|
+
return conn.isPending && (!this.filterPendingAccountIds.has(conn.targetAccountId) || this.hasEstablishedConnectionWithAccount(conn.targetAccountId));
|
|
685
|
+
}
|
|
686
|
+
);
|
|
687
|
+
return pendingConnections;
|
|
544
688
|
}
|
|
545
689
|
/**
|
|
546
690
|
* Helper method to check if there's an established connection with an account
|
|
@@ -578,16 +722,6 @@ class ConnectionsManager {
|
|
|
578
722
|
getConnectionByTopicId(connectionTopicId) {
|
|
579
723
|
return this.connections.get(connectionTopicId);
|
|
580
724
|
}
|
|
581
|
-
/**
|
|
582
|
-
* Gets a connection by request ID
|
|
583
|
-
* @param requestId - The request ID to look up
|
|
584
|
-
* @returns The connection with the given request ID, or undefined if not found
|
|
585
|
-
*/
|
|
586
|
-
getConnection(requestId, inboundTopicId) {
|
|
587
|
-
return Array.from(this.connections.values()).find(
|
|
588
|
-
(conn) => conn.connectionRequestId === requestId || conn.inboundRequestId === requestId
|
|
589
|
-
);
|
|
590
|
-
}
|
|
591
725
|
/**
|
|
592
726
|
* Gets a connection by account ID
|
|
593
727
|
* @param accountId - The account ID to look up
|
|
@@ -622,6 +756,58 @@ class ConnectionsManager {
|
|
|
622
756
|
this.connections.clear();
|
|
623
757
|
this.pendingRequests.clear();
|
|
624
758
|
}
|
|
759
|
+
/**
|
|
760
|
+
* Checks if a given connection request has been processed already
|
|
761
|
+
* This uses a combination of topic ID and request ID to uniquely identify requests
|
|
762
|
+
*
|
|
763
|
+
* @param inboundTopicId - The inbound topic ID where the request was received
|
|
764
|
+
* @param requestId - The sequence number (request ID)
|
|
765
|
+
* @returns True if this specific request has been processed, false otherwise
|
|
766
|
+
*/
|
|
767
|
+
isConnectionRequestProcessed(inboundTopicId, requestId) {
|
|
768
|
+
for (const conn of this.connections.values()) {
|
|
769
|
+
if (conn.originTopicId === inboundTopicId && conn.inboundRequestId === requestId && conn.processed) {
|
|
770
|
+
return true;
|
|
771
|
+
}
|
|
772
|
+
if (conn.originTopicId === inboundTopicId && conn.connectionRequestId === requestId && conn.processed) {
|
|
773
|
+
return true;
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
return false;
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* Marks a specific connection request as processed
|
|
780
|
+
*
|
|
781
|
+
* @param inboundTopicId - The inbound topic ID where the request was received
|
|
782
|
+
* @param requestId - The sequence number (request ID)
|
|
783
|
+
* @returns True if a matching connection was found and marked, false otherwise
|
|
784
|
+
*/
|
|
785
|
+
markConnectionRequestProcessed(inboundTopicId, requestId) {
|
|
786
|
+
let found = false;
|
|
787
|
+
for (const [key, conn] of this.connections.entries()) {
|
|
788
|
+
if (conn.originTopicId === inboundTopicId && conn.inboundRequestId === requestId) {
|
|
789
|
+
this.connections.set(key, {
|
|
790
|
+
...conn,
|
|
791
|
+
processed: true
|
|
792
|
+
});
|
|
793
|
+
found = true;
|
|
794
|
+
this.logger.debug(
|
|
795
|
+
`Marked inbound connection request #${requestId} on topic ${inboundTopicId} as processed`
|
|
796
|
+
);
|
|
797
|
+
}
|
|
798
|
+
if (conn.originTopicId === inboundTopicId && conn.connectionRequestId === requestId) {
|
|
799
|
+
this.connections.set(key, {
|
|
800
|
+
...conn,
|
|
801
|
+
processed: true
|
|
802
|
+
});
|
|
803
|
+
found = true;
|
|
804
|
+
this.logger.debug(
|
|
805
|
+
`Marked outbound connection request #${requestId} on topic ${inboundTopicId} as processed`
|
|
806
|
+
);
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
return found;
|
|
810
|
+
}
|
|
625
811
|
}
|
|
626
812
|
export {
|
|
627
813
|
ConnectionsManager
|