@minded-ai/mindedjs 2.0.22 → 2.0.23
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.
|
@@ -2,14 +2,14 @@ import { mindedConnectionSocketMessageType, mindedConnectionSocketMessageTypeMap
|
|
|
2
2
|
export declare const isConnected: () => boolean;
|
|
3
3
|
export declare const on: <E extends keyof mindedConnectionSocketMessageTypeMap>(event: E, callback: (message: mindedConnectionSocketMessageTypeMap[E]) => any) => void;
|
|
4
4
|
export declare const emit: <E extends keyof mindedConnectionSocketMessageTypeMap>(event: E, message: mindedConnectionSocketMessageTypeMap[E]) => void;
|
|
5
|
-
export declare const awaitEmit: <T, R>(event: mindedConnectionSocketMessageType, message: T, timeoutMs?: number) => Promise<R>;
|
|
5
|
+
export declare const awaitEmit: <T, R>(event: mindedConnectionSocketMessageType, message: T, timeoutMs?: number, maxRetries?: number) => Promise<R>;
|
|
6
6
|
export declare const start: () => Promise<void>;
|
|
7
7
|
export declare const disconnect: () => void;
|
|
8
8
|
export declare const mindedConnection: {
|
|
9
9
|
isConnected: () => boolean;
|
|
10
10
|
on: <E extends keyof mindedConnectionSocketMessageTypeMap>(event: E, callback: (message: mindedConnectionSocketMessageTypeMap[E]) => any) => void;
|
|
11
11
|
emit: <E extends keyof mindedConnectionSocketMessageTypeMap>(event: E, message: mindedConnectionSocketMessageTypeMap[E]) => void;
|
|
12
|
-
awaitEmit: <T, R>(event: mindedConnectionSocketMessageType, message: T, timeoutMs?: number) => Promise<R>;
|
|
12
|
+
awaitEmit: <T, R>(event: mindedConnectionSocketMessageType, message: T, timeoutMs?: number, maxRetries?: number) => Promise<R>;
|
|
13
13
|
start: () => Promise<void>;
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=mindedConnection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mindedConnection.d.ts","sourceRoot":"","sources":["../../src/platform/mindedConnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"mindedConnection.d.ts","sourceRoot":"","sources":["../../src/platform/mindedConnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAoBlH,eAAO,MAAM,WAAW,QAAO,OAE9B,CAAC;AAEF,eAAO,MAAM,EAAE,GAAI,CAAC,SAAS,MAAM,oCAAoC,EACrE,OAAO,CAAC,EACR,UAAU,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC,CAAC,KAAK,GAAG,SAMpE,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,oCAAoC,EAAE,OAAO,CAAC,EAAE,SAAS,oCAAoC,CAAC,CAAC,CAAC,SAIpI,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,CAAC,EAAE,CAAC,EAClC,OAAO,iCAAiC,EACxC,SAAS,CAAC,EACV,YAAW,MAAa,EACxB,aAAY,MAAU,KACrB,OAAO,CAAC,CAAC,CAwDX,CAAC;AAqMF,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAM1C,CAAC;AAEF,eAAO,MAAM,UAAU,YAatB,CAAC;AAEF,eAAO,MAAM,gBAAgB;uBA7SE,OAAO;SAInB,CAAC,SAAS,MAAM,oCAAoC,SAC9D,CAAC,YACE,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC,CAAC,KAAK,GAAG;WAQhD,CAAC,SAAS,MAAM,oCAAoC,SAAS,CAAC,WAAW,oCAAoC,CAAC,CAAC,CAAC;gBAMrG,CAAC,EAAE,CAAC,SAC3B,iCAAiC,WAC/B,CAAC,cACC,MAAM,eACL,MAAM,KACjB,OAAO,CAAC,CAAC,CAAC;iBA6PkB,OAAO,CAAC,IAAI,CAAC;CA6B3C,CAAC"}
|
|
@@ -47,6 +47,7 @@ const colorize = (message, colorCode) => {
|
|
|
47
47
|
};
|
|
48
48
|
// Module-level singleton state
|
|
49
49
|
let socket = null;
|
|
50
|
+
let isReconnecting = false; // Flag to prevent multiple simultaneous reconnections
|
|
50
51
|
const listeners = {};
|
|
51
52
|
const isConnected = () => {
|
|
52
53
|
var _a;
|
|
@@ -66,28 +67,54 @@ const emit = (event, message) => {
|
|
|
66
67
|
}
|
|
67
68
|
};
|
|
68
69
|
exports.emit = emit;
|
|
69
|
-
const awaitEmit = async (event, message, timeoutMs = 5000) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// Emit with acknowledgement callback
|
|
80
|
-
socket.emit(event, (0, flatted_1.stringify)(message), (response) => {
|
|
81
|
-
clearTimeout(timeout);
|
|
82
|
-
// Check if the response indicates an error
|
|
83
|
-
if (response && response.error) {
|
|
84
|
-
reject(new Error(response.error));
|
|
70
|
+
const awaitEmit = async (event, message, timeoutMs = 5000, maxRetries = 3) => {
|
|
71
|
+
let lastError = null;
|
|
72
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
73
|
+
try {
|
|
74
|
+
// Check if socket exists and is connected
|
|
75
|
+
if (!socket || !(0, exports.isConnected)()) {
|
|
76
|
+
logger_1.logger.warn({
|
|
77
|
+
msg: colorize(`[Agent] Socket not connected for event "${event}", attempting reconnection (attempt ${attempt + 1}/${maxRetries})`, '\x1b[33m'),
|
|
78
|
+
});
|
|
79
|
+
await attemptReconnect();
|
|
85
80
|
}
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
// Wait for connection to be ready
|
|
82
|
+
await waitForConnection();
|
|
83
|
+
// Attempt to emit with acknowledgement
|
|
84
|
+
return await new Promise((resolve, reject) => {
|
|
85
|
+
const timeout = setTimeout(() => {
|
|
86
|
+
reject(new Error(`Acknowledgement timeout after ${timeoutMs}ms; event type: ${event}`));
|
|
87
|
+
}, timeoutMs);
|
|
88
|
+
socket.emit(event, (0, flatted_1.stringify)(message), (response) => {
|
|
89
|
+
clearTimeout(timeout);
|
|
90
|
+
// Check if the response indicates an error
|
|
91
|
+
if (response && response.error) {
|
|
92
|
+
reject(new Error(response.error));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
resolve(response);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
lastError = error;
|
|
102
|
+
logger_1.logger.warn({
|
|
103
|
+
msg: colorize(`[Agent] awaitEmit failed for event "${event}" (attempt ${attempt + 1}/${maxRetries})`, '\x1b[33m'),
|
|
104
|
+
error: lastError.message,
|
|
105
|
+
});
|
|
106
|
+
// If not the last attempt, wait with exponential backoff
|
|
107
|
+
if (attempt < maxRetries - 1) {
|
|
108
|
+
const backoffMs = Math.min(1000 * Math.pow(2, attempt), 5000); // Exponential backoff: 1s, 2s, 4s (max 5s)
|
|
109
|
+
logger_1.logger.info({
|
|
110
|
+
msg: colorize(`[Agent] Retrying in ${backoffMs}ms...`, '\x1b[33m'),
|
|
111
|
+
});
|
|
112
|
+
await (0, wait_1.wait)(backoffMs);
|
|
88
113
|
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// All retries exhausted
|
|
117
|
+
throw new Error(`Failed to emit event "${event}" after ${maxRetries} attempts: ${(lastError === null || lastError === void 0 ? void 0 : lastError.message) || 'Unknown error'}`);
|
|
91
118
|
};
|
|
92
119
|
exports.awaitEmit = awaitEmit;
|
|
93
120
|
const waitForConnection = async () => {
|
|
@@ -102,6 +129,43 @@ const waitForConnection = async () => {
|
|
|
102
129
|
}
|
|
103
130
|
}
|
|
104
131
|
};
|
|
132
|
+
const attemptReconnect = async () => {
|
|
133
|
+
// If another reconnection is in progress, wait for it
|
|
134
|
+
if (isReconnecting) {
|
|
135
|
+
logger_1.logger.info({ msg: colorize('[Agent] Reconnection already in progress, waiting...', '\x1b[33m') });
|
|
136
|
+
const maxWait = 30000; // 30 seconds max wait for ongoing reconnection
|
|
137
|
+
const interval = 100;
|
|
138
|
+
let waited = 0;
|
|
139
|
+
while (isReconnecting && waited < maxWait) {
|
|
140
|
+
await (0, wait_1.wait)(interval);
|
|
141
|
+
waited += interval;
|
|
142
|
+
}
|
|
143
|
+
if (isReconnecting) {
|
|
144
|
+
throw new Error('Reconnection timeout - another reconnection is still in progress');
|
|
145
|
+
}
|
|
146
|
+
// Reconnection completed by another call, return
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
isReconnecting = true;
|
|
150
|
+
try {
|
|
151
|
+
logger_1.logger.info({ msg: colorize('[Agent] Attempting to reconnect socket...', '\x1b[33m') });
|
|
152
|
+
const { token } = (0, config_1.getConfig)();
|
|
153
|
+
if (!token) {
|
|
154
|
+
throw new Error('[Agent] Minded token not found for reconnection');
|
|
155
|
+
}
|
|
156
|
+
// Disconnect existing socket if any
|
|
157
|
+
if (socket === null || socket === void 0 ? void 0 : socket.connected) {
|
|
158
|
+
socket.disconnect();
|
|
159
|
+
}
|
|
160
|
+
socket = null;
|
|
161
|
+
// Reconnect with fresh attempt
|
|
162
|
+
await connect(token, 0);
|
|
163
|
+
logger_1.logger.info({ msg: colorize('[Agent] Socket reconnected successfully', '\x1b[32m') });
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
isReconnecting = false;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
105
169
|
const getSdkVersion = () => {
|
|
106
170
|
try {
|
|
107
171
|
return packageJson.version;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mindedConnection.js","sourceRoot":"","sources":["../../src/platform/mindedConnection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA8C;AAE9C,qCAAoC;AACpC,qCAAqC;AACrC,4CAAyC;AACzC,wCAAqC;AACrC,gEAAkD;AAElD,0DAA0D;AAC1D,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,SAAiB,EAAU,EAAE;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;IACpD,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,SAAS,CAAC;AAC7D,CAAC,CAAC;AAEF,+BAA+B;AAC/B,IAAI,MAAM,GAAkB,IAAI,CAAC;AACjC,MAAM,SAAS,GAEX,EAAE,CAAC;AAEA,MAAM,WAAW,GAAG,GAAY,EAAE;;IACvC,OAAO,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,mCAAI,KAAK,CAAC;AACpC,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;AAEK,MAAM,EAAE,GAAG,CAChB,KAAQ,EACR,QAAmE,EACnE,EAAE;IACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;IACD,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC,CAAC;AARW,QAAA,EAAE,MAQb;AAEK,MAAM,IAAI,GAAG,CAAuD,KAAQ,EAAE,OAAgD,EAAE,EAAE;IACvI,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC,CAAC;AAJW,QAAA,IAAI,QAIf;AAEK,MAAM,SAAS,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"mindedConnection.js","sourceRoot":"","sources":["../../src/platform/mindedConnection.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -14,6 +14,7 @@ const colorize = (message: string, colorCode: string): string => {
|
|
|
14
14
|
|
|
15
15
|
// Module-level singleton state
|
|
16
16
|
let socket: Socket | null = null;
|
|
17
|
+
let isReconnecting = false; // Flag to prevent multiple simultaneous reconnections
|
|
17
18
|
const listeners: {
|
|
18
19
|
[key: string]: ((message: any) => any)[];
|
|
19
20
|
} = {};
|
|
@@ -38,31 +39,67 @@ export const emit = <E extends keyof mindedConnectionSocketMessageTypeMap>(event
|
|
|
38
39
|
}
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
export const awaitEmit = async <T, R>(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
export const awaitEmit = async <T, R>(
|
|
43
|
+
event: mindedConnectionSocketMessageType,
|
|
44
|
+
message: T,
|
|
45
|
+
timeoutMs: number = 5000,
|
|
46
|
+
maxRetries: number = 3,
|
|
47
|
+
): Promise<R> => {
|
|
48
|
+
let lastError: Error | null = null;
|
|
49
|
+
|
|
50
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
51
|
+
try {
|
|
52
|
+
// Check if socket exists and is connected
|
|
53
|
+
if (!socket || !isConnected()) {
|
|
54
|
+
logger.warn({
|
|
55
|
+
msg: colorize(
|
|
56
|
+
`[Agent] Socket not connected for event "${event}", attempting reconnection (attempt ${attempt + 1}/${maxRetries})`,
|
|
57
|
+
'\x1b[33m',
|
|
58
|
+
),
|
|
59
|
+
});
|
|
60
|
+
await attemptReconnect();
|
|
61
|
+
}
|
|
45
62
|
|
|
46
|
-
|
|
63
|
+
// Wait for connection to be ready
|
|
64
|
+
await waitForConnection();
|
|
47
65
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
66
|
+
// Attempt to emit with acknowledgement
|
|
67
|
+
return await new Promise<R>((resolve, reject) => {
|
|
68
|
+
const timeout = setTimeout(() => {
|
|
69
|
+
reject(new Error(`Acknowledgement timeout after ${timeoutMs}ms; event type: ${event}`));
|
|
70
|
+
}, timeoutMs);
|
|
53
71
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
clearTimeout(timeout);
|
|
72
|
+
socket!.emit(event, stringify(message), (response: any) => {
|
|
73
|
+
clearTimeout(timeout);
|
|
57
74
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
75
|
+
// Check if the response indicates an error
|
|
76
|
+
if (response && response.error) {
|
|
77
|
+
reject(new Error(response.error));
|
|
78
|
+
} else {
|
|
79
|
+
resolve(response);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
lastError = error as Error;
|
|
85
|
+
logger.warn({
|
|
86
|
+
msg: colorize(`[Agent] awaitEmit failed for event "${event}" (attempt ${attempt + 1}/${maxRetries})`, '\x1b[33m'),
|
|
87
|
+
error: lastError.message,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// If not the last attempt, wait with exponential backoff
|
|
91
|
+
if (attempt < maxRetries - 1) {
|
|
92
|
+
const backoffMs = Math.min(1000 * Math.pow(2, attempt), 5000); // Exponential backoff: 1s, 2s, 4s (max 5s)
|
|
93
|
+
logger.info({
|
|
94
|
+
msg: colorize(`[Agent] Retrying in ${backoffMs}ms...`, '\x1b[33m'),
|
|
95
|
+
});
|
|
96
|
+
await wait(backoffMs);
|
|
63
97
|
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// All retries exhausted
|
|
102
|
+
throw new Error(`Failed to emit event "${event}" after ${maxRetries} attempts: ${lastError?.message || 'Unknown error'}`);
|
|
66
103
|
};
|
|
67
104
|
|
|
68
105
|
const waitForConnection = async (): Promise<void> => {
|
|
@@ -78,6 +115,47 @@ const waitForConnection = async (): Promise<void> => {
|
|
|
78
115
|
}
|
|
79
116
|
};
|
|
80
117
|
|
|
118
|
+
const attemptReconnect = async (): Promise<void> => {
|
|
119
|
+
// If another reconnection is in progress, wait for it
|
|
120
|
+
if (isReconnecting) {
|
|
121
|
+
logger.info({ msg: colorize('[Agent] Reconnection already in progress, waiting...', '\x1b[33m') });
|
|
122
|
+
const maxWait = 30000; // 30 seconds max wait for ongoing reconnection
|
|
123
|
+
const interval = 100;
|
|
124
|
+
let waited = 0;
|
|
125
|
+
while (isReconnecting && waited < maxWait) {
|
|
126
|
+
await wait(interval);
|
|
127
|
+
waited += interval;
|
|
128
|
+
}
|
|
129
|
+
if (isReconnecting) {
|
|
130
|
+
throw new Error('Reconnection timeout - another reconnection is still in progress');
|
|
131
|
+
}
|
|
132
|
+
// Reconnection completed by another call, return
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
isReconnecting = true;
|
|
137
|
+
try {
|
|
138
|
+
logger.info({ msg: colorize('[Agent] Attempting to reconnect socket...', '\x1b[33m') });
|
|
139
|
+
|
|
140
|
+
const { token } = getConfig();
|
|
141
|
+
if (!token) {
|
|
142
|
+
throw new Error('[Agent] Minded token not found for reconnection');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Disconnect existing socket if any
|
|
146
|
+
if (socket?.connected) {
|
|
147
|
+
socket.disconnect();
|
|
148
|
+
}
|
|
149
|
+
socket = null;
|
|
150
|
+
|
|
151
|
+
// Reconnect with fresh attempt
|
|
152
|
+
await connect(token, 0);
|
|
153
|
+
logger.info({ msg: colorize('[Agent] Socket reconnected successfully', '\x1b[32m') });
|
|
154
|
+
} finally {
|
|
155
|
+
isReconnecting = false;
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
|
|
81
159
|
const getSdkVersion = (): string => {
|
|
82
160
|
try {
|
|
83
161
|
return packageJson.version;
|