@superblocksteam/shared 0.9607.2 → 0.9608.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.
- package/dist/database-lifecycle/appDatabaseCompatibility.d.ts +49 -0
- package/dist/database-lifecycle/appDatabaseCompatibility.d.ts.map +1 -0
- package/dist/database-lifecycle/appDatabaseCompatibility.js +32 -0
- package/dist/database-lifecycle/appDatabaseCompatibility.js.map +1 -0
- package/dist/database-lifecycle/appDatabaseCompatibility.test.d.ts +2 -0
- package/dist/database-lifecycle/appDatabaseCompatibility.test.d.ts.map +1 -0
- package/dist/database-lifecycle/appDatabaseCompatibility.test.js +47 -0
- package/dist/database-lifecycle/appDatabaseCompatibility.test.js.map +1 -0
- package/dist/database-lifecycle/destructiveMigrations.d.ts +12 -0
- package/dist/database-lifecycle/destructiveMigrations.d.ts.map +1 -1
- package/dist/database-lifecycle/destructiveMigrations.js +114 -0
- package/dist/database-lifecycle/destructiveMigrations.js.map +1 -1
- package/dist/database-lifecycle/destructiveMigrations.test.js +79 -0
- package/dist/database-lifecycle/destructiveMigrations.test.js.map +1 -1
- package/dist/database-lifecycle/index.d.ts +46 -2
- package/dist/database-lifecycle/index.d.ts.map +1 -1
- package/dist/database-lifecycle/index.js +127 -1
- package/dist/database-lifecycle/index.js.map +1 -1
- package/dist/database-lifecycle/providerDiagnostics.test.d.ts +2 -0
- package/dist/database-lifecycle/providerDiagnostics.test.d.ts.map +1 -0
- package/dist/database-lifecycle/providerDiagnostics.test.js +119 -0
- package/dist/database-lifecycle/providerDiagnostics.test.js.map +1 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.d.ts +65 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.d.ts.map +1 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.js +87 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.js.map +1 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.test.d.ts +2 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.test.d.ts.map +1 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.test.js +285 -0
- package/dist/environment-compatibility/appEnvironmentCompatibility.test.js.map +1 -0
- package/dist/errors/http.d.ts +15 -4
- package/dist/errors/http.d.ts.map +1 -1
- package/dist/errors/http.js +25 -7
- package/dist/errors/http.js.map +1 -1
- package/dist/errors/http.test.d.ts +2 -0
- package/dist/errors/http.test.d.ts.map +1 -0
- package/dist/errors/http.test.js +28 -0
- package/dist/errors/http.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/templates/restApiIntegration.d.ts.map +1 -1
- package/dist/plugins/templates/restApiIntegration.js +2 -0
- package/dist/plugins/templates/restApiIntegration.js.map +1 -1
- package/dist/plugins/templates/shared/auth.d.ts +3 -1
- package/dist/plugins/templates/shared/auth.d.ts.map +1 -1
- package/dist/plugins/templates/shared/auth.js +129 -17
- package/dist/plugins/templates/shared/auth.js.map +1 -1
- package/dist/plugins/templates/shared/auth.test.d.ts +2 -0
- package/dist/plugins/templates/shared/auth.test.d.ts.map +1 -0
- package/dist/plugins/templates/shared/auth.test.js +116 -0
- package/dist/plugins/templates/shared/auth.test.js.map +1 -0
- package/dist/plugins/templates/shared/restapiintegration.d.ts +2 -0
- package/dist/plugins/templates/shared/restapiintegration.d.ts.map +1 -1
- package/dist/plugins/templates/shared/restapiintegration.js +3 -1
- package/dist/plugins/templates/shared/restapiintegration.js.map +1 -1
- package/dist/socket/dist-entry.test.d.ts +2 -0
- package/dist/socket/dist-entry.test.d.ts.map +1 -0
- package/dist/socket/dist-entry.test.js +34 -0
- package/dist/socket/dist-entry.test.js.map +1 -0
- package/dist/socket/heartbeat.d.ts +258 -0
- package/dist/socket/heartbeat.d.ts.map +1 -0
- package/dist/socket/heartbeat.js +307 -0
- package/dist/socket/heartbeat.js.map +1 -0
- package/dist/socket/heartbeat.test.d.ts +2 -0
- package/dist/socket/heartbeat.test.d.ts.map +1 -0
- package/dist/socket/heartbeat.test.js +431 -0
- package/dist/socket/heartbeat.test.js.map +1 -0
- package/dist/socket/index.d.ts +1 -0
- package/dist/socket/index.d.ts.map +1 -1
- package/dist/socket/index.js +1 -0
- package/dist/socket/index.js.map +1 -1
- package/dist/socket/util.d.ts.map +1 -1
- package/dist/socket/util.js +15 -1
- package/dist/socket/util.js.map +1 -1
- package/dist/socket/util.test.js +12 -2
- package/dist/socket/util.test.js.map +1 -1
- package/dist/types/ai/index.d.ts +3 -0
- package/dist/types/ai/index.d.ts.map +1 -1
- package/dist/types/ai/index.js +3 -0
- package/dist/types/ai/index.js.map +1 -1
- package/dist/types/application/index.d.ts +12 -0
- package/dist/types/application/index.d.ts.map +1 -1
- package/dist/types/application/index.js.map +1 -1
- package/dist/types/codeSecurity/index.d.ts +55 -1
- package/dist/types/codeSecurity/index.d.ts.map +1 -1
- package/dist/types/codeSecurity/index.js +21 -1
- package/dist/types/codeSecurity/index.js.map +1 -1
- package/dist/types/codeSecurity/index.test.d.ts +2 -0
- package/dist/types/codeSecurity/index.test.d.ts.map +1 -0
- package/dist/types/codeSecurity/index.test.js +19 -0
- package/dist/types/codeSecurity/index.test.js.map +1 -0
- package/dist/types/datasource/auth.d.ts +12 -1
- package/dist/types/datasource/auth.d.ts.map +1 -1
- package/dist/types/datasource/auth.js +20 -2
- package/dist/types/datasource/auth.js.map +1 -1
- package/dist/types/datasource/auth.test.js +3 -1
- package/dist/types/datasource/auth.test.js.map +1 -1
- package/dist/types/group/index.d.ts +1 -3
- package/dist/types/group/index.d.ts.map +1 -1
- package/dist/types/group/index.js +1 -3
- package/dist/types/group/index.js.map +1 -1
- package/dist/types/integration/index.d.ts +11 -1
- package/dist/types/integration/index.d.ts.map +1 -1
- package/dist/types/integration/index.js +11 -1
- package/dist/types/integration/index.js.map +1 -1
- package/dist/types/plugin/form.d.ts +32 -0
- package/dist/types/plugin/form.d.ts.map +1 -1
- package/dist/types/plugin/form.js +73 -1
- package/dist/types/plugin/form.js.map +1 -1
- package/dist/types/plugin/form.test.js +128 -0
- package/dist/types/plugin/form.test.js.map +1 -1
- package/dist/types/profile/index.d.ts +16 -1
- package/dist/types/profile/index.d.ts.map +1 -1
- package/dist/types/profile/index.js +7 -1
- package/dist/types/profile/index.js.map +1 -1
- package/dist/types/rbac/index.d.ts +2 -0
- package/dist/types/rbac/index.d.ts.map +1 -1
- package/dist/types/rbac/index.js +2 -0
- package/dist/types/rbac/index.js.map +1 -1
- package/dist/types/response/GetRecentApplicationsResponseBody.d.ts +4 -0
- package/dist/types/response/GetRecentApplicationsResponseBody.d.ts.map +1 -0
- package/dist/types/response/GetRecentApplicationsResponseBody.js +3 -0
- package/dist/types/response/GetRecentApplicationsResponseBody.js.map +1 -0
- package/dist/types/response/index.d.ts +1 -0
- package/dist/types/response/index.d.ts.map +1 -1
- package/dist/types/response/index.js +1 -0
- package/dist/types/response/index.js.map +1 -1
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.d.ts +49 -0
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.js +28 -0
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.js.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.test.d.ts +2 -0
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.test.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.test.js +45 -0
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.test.js.map +1 -0
- package/dist-esm/database-lifecycle/destructiveMigrations.d.ts +12 -0
- package/dist-esm/database-lifecycle/destructiveMigrations.d.ts.map +1 -1
- package/dist-esm/database-lifecycle/destructiveMigrations.js +113 -0
- package/dist-esm/database-lifecycle/destructiveMigrations.js.map +1 -1
- package/dist-esm/database-lifecycle/destructiveMigrations.test.js +80 -1
- package/dist-esm/database-lifecycle/destructiveMigrations.test.js.map +1 -1
- package/dist-esm/database-lifecycle/index.d.ts +46 -2
- package/dist-esm/database-lifecycle/index.d.ts.map +1 -1
- package/dist-esm/database-lifecycle/index.js +123 -1
- package/dist-esm/database-lifecycle/index.js.map +1 -1
- package/dist-esm/database-lifecycle/providerDiagnostics.test.d.ts +2 -0
- package/dist-esm/database-lifecycle/providerDiagnostics.test.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/providerDiagnostics.test.js +117 -0
- package/dist-esm/database-lifecycle/providerDiagnostics.test.js.map +1 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.d.ts +65 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.d.ts.map +1 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.js +79 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.js.map +1 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.test.d.ts +2 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.test.d.ts.map +1 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.test.js +283 -0
- package/dist-esm/environment-compatibility/appEnvironmentCompatibility.test.js.map +1 -0
- package/dist-esm/errors/http.d.ts +15 -4
- package/dist-esm/errors/http.d.ts.map +1 -1
- package/dist-esm/errors/http.js +22 -6
- package/dist-esm/errors/http.js.map +1 -1
- package/dist-esm/errors/http.test.d.ts +2 -0
- package/dist-esm/errors/http.test.d.ts.map +1 -0
- package/dist-esm/errors/http.test.js +26 -0
- package/dist-esm/errors/http.test.js.map +1 -0
- package/dist-esm/index.d.ts +2 -0
- package/dist-esm/index.d.ts.map +1 -1
- package/dist-esm/index.js +2 -0
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/plugins/templates/restApiIntegration.d.ts.map +1 -1
- package/dist-esm/plugins/templates/restApiIntegration.js +2 -0
- package/dist-esm/plugins/templates/restApiIntegration.js.map +1 -1
- package/dist-esm/plugins/templates/shared/auth.d.ts +3 -1
- package/dist-esm/plugins/templates/shared/auth.d.ts.map +1 -1
- package/dist-esm/plugins/templates/shared/auth.js +129 -17
- package/dist-esm/plugins/templates/shared/auth.js.map +1 -1
- package/dist-esm/plugins/templates/shared/auth.test.d.ts +2 -0
- package/dist-esm/plugins/templates/shared/auth.test.d.ts.map +1 -0
- package/dist-esm/plugins/templates/shared/auth.test.js +114 -0
- package/dist-esm/plugins/templates/shared/auth.test.js.map +1 -0
- package/dist-esm/plugins/templates/shared/restapiintegration.d.ts +2 -0
- package/dist-esm/plugins/templates/shared/restapiintegration.d.ts.map +1 -1
- package/dist-esm/plugins/templates/shared/restapiintegration.js +3 -1
- package/dist-esm/plugins/templates/shared/restapiintegration.js.map +1 -1
- package/dist-esm/socket/dist-entry.test.d.ts +2 -0
- package/dist-esm/socket/dist-entry.test.d.ts.map +1 -0
- package/dist-esm/socket/dist-entry.test.js +29 -0
- package/dist-esm/socket/dist-entry.test.js.map +1 -0
- package/dist-esm/socket/heartbeat.d.ts +258 -0
- package/dist-esm/socket/heartbeat.d.ts.map +1 -0
- package/dist-esm/socket/heartbeat.js +303 -0
- package/dist-esm/socket/heartbeat.js.map +1 -0
- package/dist-esm/socket/heartbeat.test.d.ts +2 -0
- package/dist-esm/socket/heartbeat.test.d.ts.map +1 -0
- package/dist-esm/socket/heartbeat.test.js +429 -0
- package/dist-esm/socket/heartbeat.test.js.map +1 -0
- package/dist-esm/socket/index.d.ts +1 -0
- package/dist-esm/socket/index.d.ts.map +1 -1
- package/dist-esm/socket/index.js +1 -0
- package/dist-esm/socket/index.js.map +1 -1
- package/dist-esm/socket/util.d.ts.map +1 -1
- package/dist-esm/socket/util.js +15 -1
- package/dist-esm/socket/util.js.map +1 -1
- package/dist-esm/socket/util.test.js +12 -2
- package/dist-esm/socket/util.test.js.map +1 -1
- package/dist-esm/types/ai/index.d.ts +3 -0
- package/dist-esm/types/ai/index.d.ts.map +1 -1
- package/dist-esm/types/ai/index.js +3 -0
- package/dist-esm/types/ai/index.js.map +1 -1
- package/dist-esm/types/application/index.d.ts +12 -0
- package/dist-esm/types/application/index.d.ts.map +1 -1
- package/dist-esm/types/application/index.js.map +1 -1
- package/dist-esm/types/codeSecurity/index.d.ts +55 -1
- package/dist-esm/types/codeSecurity/index.d.ts.map +1 -1
- package/dist-esm/types/codeSecurity/index.js +17 -1
- package/dist-esm/types/codeSecurity/index.js.map +1 -1
- package/dist-esm/types/codeSecurity/index.test.d.ts +2 -0
- package/dist-esm/types/codeSecurity/index.test.d.ts.map +1 -0
- package/dist-esm/types/codeSecurity/index.test.js +17 -0
- package/dist-esm/types/codeSecurity/index.test.js.map +1 -0
- package/dist-esm/types/datasource/auth.d.ts +12 -1
- package/dist-esm/types/datasource/auth.d.ts.map +1 -1
- package/dist-esm/types/datasource/auth.js +19 -2
- package/dist-esm/types/datasource/auth.js.map +1 -1
- package/dist-esm/types/datasource/auth.test.js +3 -1
- package/dist-esm/types/datasource/auth.test.js.map +1 -1
- package/dist-esm/types/group/index.d.ts +1 -3
- package/dist-esm/types/group/index.d.ts.map +1 -1
- package/dist-esm/types/group/index.js +1 -3
- package/dist-esm/types/group/index.js.map +1 -1
- package/dist-esm/types/integration/index.d.ts +11 -1
- package/dist-esm/types/integration/index.d.ts.map +1 -1
- package/dist-esm/types/integration/index.js +11 -1
- package/dist-esm/types/integration/index.js.map +1 -1
- package/dist-esm/types/plugin/form.d.ts +32 -0
- package/dist-esm/types/plugin/form.d.ts.map +1 -1
- package/dist-esm/types/plugin/form.js +68 -0
- package/dist-esm/types/plugin/form.js.map +1 -1
- package/dist-esm/types/plugin/form.test.js +129 -1
- package/dist-esm/types/plugin/form.test.js.map +1 -1
- package/dist-esm/types/profile/index.d.ts +16 -1
- package/dist-esm/types/profile/index.d.ts.map +1 -1
- package/dist-esm/types/profile/index.js +7 -1
- package/dist-esm/types/profile/index.js.map +1 -1
- package/dist-esm/types/rbac/index.d.ts +2 -0
- package/dist-esm/types/rbac/index.d.ts.map +1 -1
- package/dist-esm/types/rbac/index.js +2 -0
- package/dist-esm/types/rbac/index.js.map +1 -1
- package/dist-esm/types/response/GetRecentApplicationsResponseBody.d.ts +4 -0
- package/dist-esm/types/response/GetRecentApplicationsResponseBody.d.ts.map +1 -0
- package/dist-esm/types/response/GetRecentApplicationsResponseBody.js +2 -0
- package/dist-esm/types/response/GetRecentApplicationsResponseBody.js.map +1 -0
- package/dist-esm/types/response/index.d.ts +1 -0
- package/dist-esm/types/response/index.d.ts.map +1 -1
- package/dist-esm/types/response/index.js +1 -0
- package/dist-esm/types/response/index.js.map +1 -1
- package/package.json +1 -1
- package/src/database-lifecycle/appDatabaseCompatibility.test.ts +55 -0
- package/src/database-lifecycle/appDatabaseCompatibility.ts +62 -0
- package/src/database-lifecycle/destructiveMigrations.test.ts +108 -1
- package/src/database-lifecycle/destructiveMigrations.ts +129 -0
- package/src/database-lifecycle/index.ts +173 -0
- package/src/database-lifecycle/providerDiagnostics.test.ts +134 -0
- package/src/environment-compatibility/appEnvironmentCompatibility.test.ts +326 -0
- package/src/environment-compatibility/appEnvironmentCompatibility.ts +173 -0
- package/src/errors/http.test.ts +32 -0
- package/src/errors/http.ts +24 -6
- package/src/index.ts +2 -0
- package/src/plugins/templates/restApiIntegration.ts +2 -0
- package/src/plugins/templates/shared/auth.test.ts +162 -0
- package/src/plugins/templates/shared/auth.ts +135 -18
- package/src/plugins/templates/shared/restapiintegration.ts +3 -1
- package/src/socket/dist-entry.test.ts +29 -0
- package/src/socket/heartbeat.test.ts +538 -0
- package/src/socket/heartbeat.ts +469 -0
- package/src/socket/index.ts +1 -0
- package/src/socket/util.test.ts +14 -2
- package/src/socket/util.ts +15 -1
- package/src/types/ai/index.ts +3 -0
- package/src/types/application/index.ts +14 -0
- package/src/types/codeSecurity/index.test.ts +21 -0
- package/src/types/codeSecurity/index.ts +83 -1
- package/src/types/datasource/auth.test.ts +3 -1
- package/src/types/datasource/auth.ts +24 -3
- package/src/types/group/index.ts +1 -3
- package/src/types/integration/index.ts +14 -0
- package/src/types/plugin/form.test.ts +174 -1
- package/src/types/plugin/form.ts +100 -2
- package/src/types/profile/index.ts +19 -1
- package/src/types/rbac/index.ts +2 -0
- package/src/types/response/GetRecentApplicationsResponseBody.ts +4 -0
- package/src/types/response/index.ts +1 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const heartbeat_js_1 = require("./heartbeat.js");
|
|
5
|
+
const INTERVAL_MS = 100;
|
|
6
|
+
const TIMEOUT_MS = 50;
|
|
7
|
+
/** A beat whose answer the test decides, so the deadline is the only thing racing it. */
|
|
8
|
+
function controllableBeat() {
|
|
9
|
+
const pending = [];
|
|
10
|
+
const beat = vitest_1.vi.fn(() => new Promise((resolve, reject) => {
|
|
11
|
+
pending.push({ reject, resolve });
|
|
12
|
+
}));
|
|
13
|
+
return {
|
|
14
|
+
answerLast: () => pending[pending.length - 1]?.resolve(),
|
|
15
|
+
beat,
|
|
16
|
+
refuseLast: (error) => pending[pending.length - 1]?.reject(error),
|
|
17
|
+
pending
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function heartbeat(overrides = {}) {
|
|
21
|
+
const onLost = vitest_1.vi.fn();
|
|
22
|
+
const onOutcome = vitest_1.vi.fn();
|
|
23
|
+
const { answerLast, beat, refuseLast } = controllableBeat();
|
|
24
|
+
const subject = new heartbeat_js_1.SocketHeartbeat({
|
|
25
|
+
beat,
|
|
26
|
+
intervalMs: INTERVAL_MS,
|
|
27
|
+
onLost,
|
|
28
|
+
onOutcome,
|
|
29
|
+
timeoutMs: TIMEOUT_MS,
|
|
30
|
+
...overrides
|
|
31
|
+
});
|
|
32
|
+
return { answerLast, beat, onLost, onOutcome, refuseLast, subject };
|
|
33
|
+
}
|
|
34
|
+
/** Runs one full interval, then the beat deadline, letting each settle. */
|
|
35
|
+
async function elapse(ms) {
|
|
36
|
+
await vitest_1.vi.advanceTimersByTimeAsync(ms);
|
|
37
|
+
}
|
|
38
|
+
const outcomes = (onOutcome) => onOutcome.mock.calls.map((call) => call[0]);
|
|
39
|
+
(0, vitest_1.describe)('SocketHeartbeat', () => {
|
|
40
|
+
(0, vitest_1.beforeEach)(() => {
|
|
41
|
+
vitest_1.vi.useFakeTimers();
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.afterEach)(() => {
|
|
44
|
+
vitest_1.vi.clearAllTimers();
|
|
45
|
+
vitest_1.vi.useRealTimers();
|
|
46
|
+
});
|
|
47
|
+
// The answer has to pace the beats, not the interval. Otherwise a channel that
|
|
48
|
+
// stopped answering collects a new pending request every interval, none of
|
|
49
|
+
// which can ever be reconciled.
|
|
50
|
+
(0, vitest_1.it)('keeps a single beat in flight however many intervals pass', async () => {
|
|
51
|
+
const { beat, subject } = heartbeat({ timeoutMs: 10_000 });
|
|
52
|
+
subject.start();
|
|
53
|
+
await elapse(INTERVAL_MS * 5);
|
|
54
|
+
(0, vitest_1.expect)(beat).toHaveBeenCalledTimes(1);
|
|
55
|
+
subject.stop();
|
|
56
|
+
});
|
|
57
|
+
// A request channel's own budget is the whole caller-facing operation, so a
|
|
58
|
+
// beat that borrows it cannot report a miss inside any window a caller waits in.
|
|
59
|
+
(0, vitest_1.it)('holds a beat to its own deadline rather than the request channel budget', async () => {
|
|
60
|
+
const { onOutcome, subject } = heartbeat();
|
|
61
|
+
subject.start();
|
|
62
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
63
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['grace']);
|
|
64
|
+
subject.stop();
|
|
65
|
+
});
|
|
66
|
+
// A refusal is a definite answer about the peer - it arrived, so the channel
|
|
67
|
+
// works - and counting it as a lapse would hide the very thing it reports.
|
|
68
|
+
(0, vitest_1.it)('records a refusal apart from a silence rather than excusing it as a lapse', async () => {
|
|
69
|
+
const { onOutcome, refuseLast, subject } = heartbeat();
|
|
70
|
+
subject.start();
|
|
71
|
+
subject.recordReceive();
|
|
72
|
+
await elapse(INTERVAL_MS);
|
|
73
|
+
refuseLast(new Error('peer is shutting down'));
|
|
74
|
+
await elapse(1);
|
|
75
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['refused']);
|
|
76
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({
|
|
77
|
+
failures: 0,
|
|
78
|
+
lapses: 0,
|
|
79
|
+
lastError: 'peer is shutting down',
|
|
80
|
+
refusals: 1,
|
|
81
|
+
unanswered: 0
|
|
82
|
+
});
|
|
83
|
+
subject.stop();
|
|
84
|
+
});
|
|
85
|
+
// A refusal is an answer: the peer is reachable and the request channel works,
|
|
86
|
+
// so whatever is wrong is not the connection. Spending the grace meant for a
|
|
87
|
+
// starved pong on one would tear a working socket down over an
|
|
88
|
+
// application-level problem.
|
|
89
|
+
(0, vitest_1.it)('does not let a refusal spend the grace meant for a silence', async () => {
|
|
90
|
+
const { onLost, onOutcome, refuseLast, subject } = heartbeat();
|
|
91
|
+
subject.start();
|
|
92
|
+
await elapse(INTERVAL_MS);
|
|
93
|
+
refuseLast(new Error('peer is shutting down'));
|
|
94
|
+
await elapse(1);
|
|
95
|
+
// One unanswered beat after the refusal is still only the first silence.
|
|
96
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
97
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['refused', 'grace']);
|
|
98
|
+
(0, vitest_1.expect)(onLost).not.toHaveBeenCalled();
|
|
99
|
+
subject.stop();
|
|
100
|
+
});
|
|
101
|
+
// ...but an answer to one beat says nothing about the beats that went
|
|
102
|
+
// missing, so a refusal must not clear a run of silences either. Otherwise a
|
|
103
|
+
// channel alternating between timing out and refusing never gives up.
|
|
104
|
+
(0, vitest_1.it)('does not let a refusal clear a run of silences', async () => {
|
|
105
|
+
const { onLost, onOutcome, refuseLast, subject } = heartbeat();
|
|
106
|
+
subject.start();
|
|
107
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
108
|
+
await elapse(INTERVAL_MS - TIMEOUT_MS);
|
|
109
|
+
refuseLast(new Error('peer is shutting down'));
|
|
110
|
+
await elapse(1);
|
|
111
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
112
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['grace', 'refused', 'miss']);
|
|
113
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
114
|
+
subject.stop();
|
|
115
|
+
});
|
|
116
|
+
// Inbound traffic proves the connection is alive, so an unanswered beat on a
|
|
117
|
+
// socket that is still delivering data indicts the request channel, not the
|
|
118
|
+
// connection. Closing on that would kill a healthy-but-busy socket.
|
|
119
|
+
(0, vitest_1.it)('lapses an unanswered beat while the socket is provably receiving', async () => {
|
|
120
|
+
const { onLost, onOutcome, subject } = heartbeat();
|
|
121
|
+
subject.start();
|
|
122
|
+
await elapse(INTERVAL_MS);
|
|
123
|
+
subject.recordReceive();
|
|
124
|
+
await elapse(TIMEOUT_MS);
|
|
125
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['lapse']);
|
|
126
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0, lapses: 1, unanswered: 1 });
|
|
127
|
+
(0, vitest_1.expect)(onLost).not.toHaveBeenCalled();
|
|
128
|
+
subject.stop();
|
|
129
|
+
});
|
|
130
|
+
// Proof of life has to undo a suspicion the same way an answer does, or a
|
|
131
|
+
// single miss during a large transfer stays on the books until a pong lands.
|
|
132
|
+
(0, vitest_1.it)('resets the miss count when inbound traffic proves the connection alive', async () => {
|
|
133
|
+
const { onLost, subject } = heartbeat();
|
|
134
|
+
subject.start();
|
|
135
|
+
// First beat: nothing inbound, so a genuine miss held back by grace.
|
|
136
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
137
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 1 });
|
|
138
|
+
// Second beat: unanswered, but the socket is provably carrying traffic.
|
|
139
|
+
await elapse(INTERVAL_MS - TIMEOUT_MS);
|
|
140
|
+
subject.recordReceive();
|
|
141
|
+
await elapse(TIMEOUT_MS);
|
|
142
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0, lapses: 1, unanswered: 2 });
|
|
143
|
+
(0, vitest_1.expect)(onLost).not.toHaveBeenCalled();
|
|
144
|
+
subject.stop();
|
|
145
|
+
});
|
|
146
|
+
// Inbound data proves the receive path, not that the request channel answers.
|
|
147
|
+
// Without a bound, a wedged channel hides behind continuous pushes forever.
|
|
148
|
+
(0, vitest_1.it)('stops excusing a silent request channel once the silences are exhausted', async () => {
|
|
149
|
+
const maxConsecutiveUnanswered = 3;
|
|
150
|
+
const { onLost, onOutcome, subject } = heartbeat({ maxConsecutiveUnanswered });
|
|
151
|
+
subject.start();
|
|
152
|
+
// Traffic arrives during every beat's own wait, so each one is excused -
|
|
153
|
+
// until the allowance runs out and the next silence is believed anyway.
|
|
154
|
+
for (let beats = 0; beats < maxConsecutiveUnanswered; beats += 1) {
|
|
155
|
+
await elapse(INTERVAL_MS - (beats === 0 ? 0 : TIMEOUT_MS));
|
|
156
|
+
subject.recordReceive();
|
|
157
|
+
await elapse(TIMEOUT_MS);
|
|
158
|
+
}
|
|
159
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['lapse', 'lapse', 'miss']);
|
|
160
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
161
|
+
// Both counts ride along on the close: how long the silence had run, and
|
|
162
|
+
// how much of it the socket was demonstrably carrying traffic through.
|
|
163
|
+
(0, vitest_1.expect)(onLost.mock.calls[0]?.[0]).toMatchObject({
|
|
164
|
+
failures: 1,
|
|
165
|
+
lapses: maxConsecutiveUnanswered - 1,
|
|
166
|
+
unanswered: maxConsecutiveUnanswered
|
|
167
|
+
});
|
|
168
|
+
subject.stop();
|
|
169
|
+
});
|
|
170
|
+
// The bound is on silence, not on the excuse. Two unanswered beats with
|
|
171
|
+
// nothing inbound must report the same run length as two that were excused,
|
|
172
|
+
// or telemetry cannot tell "died after two misses" from "wedged behind
|
|
173
|
+
// continuous pushes until the cap".
|
|
174
|
+
(0, vitest_1.it)('counts every unanswered beat toward the bound, excused or not', async () => {
|
|
175
|
+
const { onLost, subject } = heartbeat();
|
|
176
|
+
subject.start();
|
|
177
|
+
await elapse(INTERVAL_MS * 2 + TIMEOUT_MS);
|
|
178
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
179
|
+
(0, vitest_1.expect)(onLost.mock.calls[0]?.[0]).toMatchObject({ failures: 2, lapses: 0, unanswered: 2 });
|
|
180
|
+
subject.stop();
|
|
181
|
+
});
|
|
182
|
+
// The bound is what stops a wedged request channel hiding behind inbound
|
|
183
|
+
// pushes forever, and a refusal answers one beat - not the beats that already
|
|
184
|
+
// went missing. Clearing the run on a refusal hands that channel an unlimited
|
|
185
|
+
// deferral: every silence is excused by traffic, so `unanswered` is the only
|
|
186
|
+
// thing left that can ever end it.
|
|
187
|
+
(0, vitest_1.it)('does not let a refusal defer the bound on a silent request channel', async () => {
|
|
188
|
+
const maxConsecutiveUnanswered = 3;
|
|
189
|
+
const { onLost, onOutcome, refuseLast, subject } = heartbeat({ maxConsecutiveUnanswered });
|
|
190
|
+
subject.start();
|
|
191
|
+
// Traffic arrives during the beat's own wait, so this silence is excused.
|
|
192
|
+
await elapse(INTERVAL_MS);
|
|
193
|
+
subject.recordReceive();
|
|
194
|
+
await elapse(TIMEOUT_MS);
|
|
195
|
+
// A refusal interleaves: recorded as the answer it is, but it must not wipe
|
|
196
|
+
// the run of silence already on the books.
|
|
197
|
+
await elapse(INTERVAL_MS - TIMEOUT_MS);
|
|
198
|
+
refuseLast(new Error('peer is shutting down'));
|
|
199
|
+
await elapse(1);
|
|
200
|
+
await elapse(INTERVAL_MS - 1);
|
|
201
|
+
subject.recordReceive();
|
|
202
|
+
await elapse(TIMEOUT_MS);
|
|
203
|
+
await elapse(INTERVAL_MS - TIMEOUT_MS);
|
|
204
|
+
subject.recordReceive();
|
|
205
|
+
await elapse(TIMEOUT_MS);
|
|
206
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['lapse', 'refused', 'lapse', 'miss']);
|
|
207
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
208
|
+
(0, vitest_1.expect)(onLost.mock.calls[0]?.[0]).toMatchObject({ refusals: 1, unanswered: maxConsecutiveUnanswered });
|
|
209
|
+
subject.stop();
|
|
210
|
+
});
|
|
211
|
+
// `unanswered` is what the caller reports as the length of the silence that
|
|
212
|
+
// killed the connection, and it is documented as bounded by the cap. Beats
|
|
213
|
+
// keep going out after the alarm has been raised - the caller still has to
|
|
214
|
+
// tear the socket down - so without saturating it the reported run climbs
|
|
215
|
+
// past the cap it is promised to respect.
|
|
216
|
+
(0, vitest_1.it)('never reports a longer silence than the bound allows', async () => {
|
|
217
|
+
const maxConsecutiveUnanswered = 3;
|
|
218
|
+
const { onOutcome, subject } = heartbeat({ maxConsecutiveUnanswered });
|
|
219
|
+
subject.start();
|
|
220
|
+
await elapse(INTERVAL_MS * 5 + TIMEOUT_MS);
|
|
221
|
+
(0, vitest_1.expect)(subject.account.unanswered).toBe(maxConsecutiveUnanswered);
|
|
222
|
+
const lastAccount = onOutcome.mock.calls[onOutcome.mock.calls.length - 1]?.[2];
|
|
223
|
+
(0, vitest_1.expect)(lastAccount.unanswered).toBe(maxConsecutiveUnanswered);
|
|
224
|
+
subject.stop();
|
|
225
|
+
});
|
|
226
|
+
// The alarm is edge-triggered so one run of misses causes one teardown, but
|
|
227
|
+
// that assumes the teardown happened. When the caller cannot act - the socket
|
|
228
|
+
// lookup throws, the close rejects - latching would mean nothing ever closes
|
|
229
|
+
// the connection and nothing ever says so again.
|
|
230
|
+
(0, vitest_1.it)('keeps the alarm armed when the caller could not act on the loss', async () => {
|
|
231
|
+
const onLost = vitest_1.vi.fn(() => {
|
|
232
|
+
throw new Error('the socket was already gone');
|
|
233
|
+
});
|
|
234
|
+
const { subject } = heartbeat({ maxConsecutiveMisses: 1, onLost });
|
|
235
|
+
subject.start();
|
|
236
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
237
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
238
|
+
await elapse(INTERVAL_MS);
|
|
239
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(2);
|
|
240
|
+
subject.stop();
|
|
241
|
+
});
|
|
242
|
+
// One missed beat is survivable: a bulk response is a single websocket message
|
|
243
|
+
// and no receive event fires until its last byte lands, so a transfer only has
|
|
244
|
+
// to finish inside one extra interval for the next answer to get through.
|
|
245
|
+
(0, vitest_1.it)('gives the first genuine miss grace and loses the beat on the second', async () => {
|
|
246
|
+
const { onLost, onOutcome, subject } = heartbeat();
|
|
247
|
+
subject.start();
|
|
248
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
249
|
+
(0, vitest_1.expect)(onLost).not.toHaveBeenCalled();
|
|
250
|
+
await elapse(INTERVAL_MS);
|
|
251
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['grace', 'miss']);
|
|
252
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
253
|
+
subject.stop();
|
|
254
|
+
});
|
|
255
|
+
(0, vitest_1.it)('resets both counters when a beat is answered', async () => {
|
|
256
|
+
const { answerLast, subject } = heartbeat();
|
|
257
|
+
subject.start();
|
|
258
|
+
await elapse(INTERVAL_MS + TIMEOUT_MS);
|
|
259
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 1 });
|
|
260
|
+
await elapse(INTERVAL_MS - TIMEOUT_MS);
|
|
261
|
+
answerLast();
|
|
262
|
+
await elapse(1);
|
|
263
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0, lapses: 0, unanswered: 0 });
|
|
264
|
+
(0, vitest_1.expect)(subject.account.lastSuccessAt).toBeDefined();
|
|
265
|
+
subject.stop();
|
|
266
|
+
});
|
|
267
|
+
// A deadline armed for a previous connection fires after the restart. Letting
|
|
268
|
+
// it tick the new run's counters would close a healthy socket on the strength
|
|
269
|
+
// of a dead one's silence.
|
|
270
|
+
(0, vitest_1.it)('ignores a beat armed before the heartbeat was restarted', async () => {
|
|
271
|
+
const { onLost, onOutcome, subject } = heartbeat();
|
|
272
|
+
subject.start();
|
|
273
|
+
await elapse(INTERVAL_MS);
|
|
274
|
+
subject.stop();
|
|
275
|
+
subject.start();
|
|
276
|
+
await elapse(TIMEOUT_MS);
|
|
277
|
+
(0, vitest_1.expect)(onLost).not.toHaveBeenCalled();
|
|
278
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual([]);
|
|
279
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0, lapses: 0 });
|
|
280
|
+
subject.stop();
|
|
281
|
+
});
|
|
282
|
+
// A socket can die before any beat settles, and unanswered beats are the
|
|
283
|
+
// strongest evidence there is that the peer was gone - so the account cannot
|
|
284
|
+
// be built from settled outcomes alone.
|
|
285
|
+
(0, vitest_1.it)('counts every beat issued, including one still waiting', async () => {
|
|
286
|
+
const { subject } = heartbeat({ timeoutMs: 10_000 });
|
|
287
|
+
subject.start();
|
|
288
|
+
await elapse(INTERVAL_MS);
|
|
289
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0, sent: 1 });
|
|
290
|
+
subject.stop();
|
|
291
|
+
});
|
|
292
|
+
// `sent` says a beat went out; it cannot say whether the last one came back.
|
|
293
|
+
// The caller reporting a death needs both, because a socket that answered a
|
|
294
|
+
// beat and then went quiet is otherwise indistinguishable from one answering
|
|
295
|
+
// right up to the close.
|
|
296
|
+
(0, vitest_1.it)('stamps the outstanding beat and clears the stamp when it settles', async () => {
|
|
297
|
+
const { answerLast, subject } = heartbeat({ timeoutMs: 10_000 });
|
|
298
|
+
subject.start();
|
|
299
|
+
await elapse(INTERVAL_MS);
|
|
300
|
+
const { pendingSince } = subject.account;
|
|
301
|
+
(0, vitest_1.expect)(pendingSince).toBeTypeOf('number');
|
|
302
|
+
answerLast();
|
|
303
|
+
await elapse(0);
|
|
304
|
+
(0, vitest_1.expect)(subject.account.pendingSince).toBeUndefined();
|
|
305
|
+
subject.stop();
|
|
306
|
+
});
|
|
307
|
+
// The account is read after the socket is gone, and stopping is the first
|
|
308
|
+
// thing a caller does with a dead connection. A stamp cleared on the way out
|
|
309
|
+
// would erase the one fact that names what the beat was doing when it died -
|
|
310
|
+
// and no settle is coming, because a retired beat's rejection is dropped.
|
|
311
|
+
(0, vitest_1.it)('keeps the outstanding beat stamped through a stop', async () => {
|
|
312
|
+
const { subject } = heartbeat({ timeoutMs: 10_000 });
|
|
313
|
+
subject.start();
|
|
314
|
+
await elapse(INTERVAL_MS);
|
|
315
|
+
subject.stop();
|
|
316
|
+
(0, vitest_1.expect)(subject.account.pendingSince).toBeTypeOf('number');
|
|
317
|
+
});
|
|
318
|
+
// A channel that cannot carry a beat yet has no turn to protect either, so a
|
|
319
|
+
// skipped beat is not a miss - and must not be booked as an answer, which is
|
|
320
|
+
// what returning early from the beat itself would amount to.
|
|
321
|
+
(0, vitest_1.it)('skips a beat while the channel is not ready to carry one', async () => {
|
|
322
|
+
const { beat, onOutcome, subject } = heartbeat({ shouldBeat: () => false, timeoutMs: 10_000 });
|
|
323
|
+
subject.start();
|
|
324
|
+
await elapse(INTERVAL_MS * 3);
|
|
325
|
+
(0, vitest_1.expect)(beat).not.toHaveBeenCalled();
|
|
326
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual([]);
|
|
327
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0, sent: 0 });
|
|
328
|
+
subject.stop();
|
|
329
|
+
});
|
|
330
|
+
// The alarm is edge-triggered: the counters are an account of what happened,
|
|
331
|
+
// read when a socket dies, and resetting them to re-arm would erase the very
|
|
332
|
+
// evidence the death report is built from.
|
|
333
|
+
(0, vitest_1.it)('raises the alarm once rather than on every beat after it', async () => {
|
|
334
|
+
const { onLost, onOutcome, subject } = heartbeat();
|
|
335
|
+
subject.start();
|
|
336
|
+
await elapse(INTERVAL_MS * 4 + TIMEOUT_MS);
|
|
337
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual(['grace', 'miss', 'miss', 'miss']);
|
|
338
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
339
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 4 });
|
|
340
|
+
subject.stop();
|
|
341
|
+
});
|
|
342
|
+
(0, vitest_1.it)('re-arms the alarm once the peer answers again', async () => {
|
|
343
|
+
const { answerLast, onLost, subject } = heartbeat();
|
|
344
|
+
subject.start();
|
|
345
|
+
await elapse(INTERVAL_MS * 2 + TIMEOUT_MS);
|
|
346
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(1);
|
|
347
|
+
await elapse(INTERVAL_MS - TIMEOUT_MS);
|
|
348
|
+
answerLast();
|
|
349
|
+
await elapse(1);
|
|
350
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0 });
|
|
351
|
+
await elapse(INTERVAL_MS * 2 + TIMEOUT_MS);
|
|
352
|
+
(0, vitest_1.expect)(onLost).toHaveBeenCalledTimes(2);
|
|
353
|
+
subject.stop();
|
|
354
|
+
});
|
|
355
|
+
// Two callers drive the editor's beat: its own cadence, and the moment a
|
|
356
|
+
// user comes back to the keyboard. The second must not have to wait out an
|
|
357
|
+
// interval sized for idle connections.
|
|
358
|
+
(0, vitest_1.it)('beats on demand outside the interval', async () => {
|
|
359
|
+
const { beat, onOutcome, subject } = heartbeat({ timeoutMs: 10_000 });
|
|
360
|
+
// Not awaited: the beat is deliberately left in flight, which is what an
|
|
361
|
+
// on-demand caller sees when the peer is slow.
|
|
362
|
+
void subject.beatNow();
|
|
363
|
+
await elapse(1);
|
|
364
|
+
(0, vitest_1.expect)(beat).toHaveBeenCalledTimes(1);
|
|
365
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ sent: 1 });
|
|
366
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual([]);
|
|
367
|
+
});
|
|
368
|
+
(0, vitest_1.it)('lets an on-demand beat and the interval share the in-flight guard', async () => {
|
|
369
|
+
const { beat, subject } = heartbeat({ timeoutMs: 10_000 });
|
|
370
|
+
subject.start();
|
|
371
|
+
await elapse(INTERVAL_MS);
|
|
372
|
+
await subject.beatNow();
|
|
373
|
+
(0, vitest_1.expect)(beat).toHaveBeenCalledTimes(1);
|
|
374
|
+
subject.stop();
|
|
375
|
+
});
|
|
376
|
+
// A caller can learn it has a new connection before it is ready to beat on
|
|
377
|
+
// one. The old socket's armed deadline has to stop counting at that moment,
|
|
378
|
+
// not whenever the first new beat happens to go out.
|
|
379
|
+
(0, vitest_1.it)('retires an armed beat on reset without touching the interval', async () => {
|
|
380
|
+
const { onLost, onOutcome, subject } = heartbeat();
|
|
381
|
+
subject.start();
|
|
382
|
+
await elapse(INTERVAL_MS);
|
|
383
|
+
subject.reset();
|
|
384
|
+
await elapse(TIMEOUT_MS);
|
|
385
|
+
(0, vitest_1.expect)(outcomes(onOutcome)).toEqual([]);
|
|
386
|
+
(0, vitest_1.expect)(onLost).not.toHaveBeenCalled();
|
|
387
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ failures: 0, sent: 0, unanswered: 0 });
|
|
388
|
+
// Still beating: reset is not a stop.
|
|
389
|
+
await elapse(INTERVAL_MS);
|
|
390
|
+
(0, vitest_1.expect)(subject.account).toMatchObject({ sent: 1 });
|
|
391
|
+
subject.stop();
|
|
392
|
+
});
|
|
393
|
+
// One heartbeat outlives the connections it beats for, and a superseded
|
|
394
|
+
// connection's teardown arrives late. If its stop were not bound to the
|
|
395
|
+
// cadence it started, it would take the live connection's beat down with it -
|
|
396
|
+
// silently, since nothing re-arms an interval that was never meant to stop.
|
|
397
|
+
(0, vitest_1.it)('ignores a stop belonging to a cadence that has been replaced', async () => {
|
|
398
|
+
const { beat, subject } = heartbeat({ timeoutMs: 10_000 });
|
|
399
|
+
const stopFirst = subject.start();
|
|
400
|
+
subject.start();
|
|
401
|
+
stopFirst();
|
|
402
|
+
await elapse(INTERVAL_MS);
|
|
403
|
+
(0, vitest_1.expect)(beat).toHaveBeenCalledTimes(1);
|
|
404
|
+
subject.stop();
|
|
405
|
+
});
|
|
406
|
+
(0, vitest_1.it)('stops the cadence it started when nothing has replaced it', async () => {
|
|
407
|
+
const { beat, subject } = heartbeat({ timeoutMs: 10_000 });
|
|
408
|
+
const stop = subject.start();
|
|
409
|
+
stop();
|
|
410
|
+
await elapse(INTERVAL_MS * 2);
|
|
411
|
+
(0, vitest_1.expect)(beat).not.toHaveBeenCalled();
|
|
412
|
+
});
|
|
413
|
+
(0, vitest_1.it)('replaces a running cadence rather than leaving two beating', async () => {
|
|
414
|
+
const { beat, subject } = heartbeat({ timeoutMs: 10_000 });
|
|
415
|
+
subject.start();
|
|
416
|
+
subject.start();
|
|
417
|
+
await elapse(INTERVAL_MS);
|
|
418
|
+
(0, vitest_1.expect)(beat).toHaveBeenCalledTimes(1);
|
|
419
|
+
subject.stop();
|
|
420
|
+
});
|
|
421
|
+
(0, vitest_1.it)('sends nothing before it is started or after it is stopped', async () => {
|
|
422
|
+
const { beat, subject } = heartbeat();
|
|
423
|
+
await elapse(INTERVAL_MS * 2);
|
|
424
|
+
(0, vitest_1.expect)(beat).not.toHaveBeenCalled();
|
|
425
|
+
subject.start();
|
|
426
|
+
subject.stop();
|
|
427
|
+
await elapse(INTERVAL_MS * 2);
|
|
428
|
+
(0, vitest_1.expect)(beat).not.toHaveBeenCalled();
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
//# sourceMappingURL=heartbeat.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.test.js","sourceRoot":"","sources":["../../src/socket/heartbeat.test.ts"],"names":[],"mappings":"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"}
|
package/dist/socket/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,eAAe,CAAC"}
|
package/dist/socket/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
// the implementation of ISocket
|
|
18
18
|
// this is protocol agnostic, it only handles the communication
|
|
19
|
+
__exportStar(require("./heartbeat.js"), exports);
|
|
19
20
|
__exportStar(require("./socket.js"), exports);
|
|
20
21
|
__exportStar(require("./socketWithClientAuth.js"), exports);
|
|
21
22
|
__exportStar(require("./types.js"), exports);
|
package/dist/socket/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gCAAgC;AAChC,+DAA+D;AAC/D,8CAA4B;AAC5B,4DAA0C;AAC1C,6CAA2B;AAC3B,4CAA0B;AAC1B,oDAAkC;AAElC,0FAA0F;AAC1F,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gCAAgC;AAChC,+DAA+D;AAC/D,iDAA+B;AAC/B,8CAA4B;AAC5B,4DAA0C;AAC1C,6CAA2B;AAC3B,4CAA0B;AAC1B,oDAAkC;AAElC,0FAA0F;AAC1F,gDAA8B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/socket/util.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAC;AAEtC;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,QAAoB,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/socket/util.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAC;AAEtC;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,QAAoB,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,SAAS,CAAC,CAwCzG"}
|
package/dist/socket/util.js
CHANGED
|
@@ -42,7 +42,21 @@ function buildClientUserAgent(component, version) {
|
|
|
42
42
|
function connectWebSocket(wsUrl, options = {}) {
|
|
43
43
|
const { protocol, timeout = 30_000, headers } = options;
|
|
44
44
|
return new Promise((resolve, reject) => {
|
|
45
|
-
|
|
45
|
+
// `protocol ?? []` normalizes "no role asked for" to the empty list. It is
|
|
46
|
+
// defensive only: both runtimes this reaches already collapse an explicit
|
|
47
|
+
// `undefined` to the same thing, so neither offers a subprotocol that was
|
|
48
|
+
// never requested. A browser applies the WebIDL default (`protocols` is
|
|
49
|
+
// optional with default `[]`, and an explicit `undefined` selects it), and
|
|
50
|
+
// isomorphic-ws hands browsers the native WebSocket. Node takes `ws`, which
|
|
51
|
+
// maps `undefined` to `[]` before building the header (websocket.js: `if
|
|
52
|
+
// (protocols === undefined) protocols = []`).
|
|
53
|
+
//
|
|
54
|
+
// What does break a handshake is a *string* naming a role the server does
|
|
55
|
+
// not implement: it answers without echoing a subprotocol, the client fails
|
|
56
|
+
// the handshake, and it reads as a dead dev server rather than a bad offer.
|
|
57
|
+
// `??` cannot catch that - a string is not nullish - so a caller that
|
|
58
|
+
// stringifies its own value still offers the bogus role.
|
|
59
|
+
const ws = new isomorphic_ws_1.default(wsUrl, protocol ?? [], {
|
|
46
60
|
maxPayload: exports.MAX_SOCKET_PAYLOAD_BYTES,
|
|
47
61
|
headers: { 'User-Agent': exports.DEFAULT_WEBSOCKET_USER_AGENT, ...headers }
|
|
48
62
|
});
|
package/dist/socket/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/socket/util.ts"],"names":[],"mappings":";;;;;;AA6BA,oDAEC;AAaD,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/socket/util.ts"],"names":[],"mappings":";;;;;;AA6BA,oDAEC;AAaD,4CAwCC;AApFD,kEAAsC;AAEtC;;;;;;;;;GASG;AACU,QAAA,wBAAwB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1D;;;;;;;GAOG;AACU,QAAA,4BAA4B,GAAG,oBAAoB,CAAC;AAEjE;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,SAAiB,EAAE,OAAgB;IACtE,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AASD;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAa,EAAE,UAAmC,EAAE;IACnF,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,2EAA2E;QAC3E,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,2EAA2E;QAC3E,4EAA4E;QAC5E,yEAAyE;QACzE,8CAA8C;QAC9C,EAAE;QACF,0EAA0E;QAC1E,4EAA4E;QAC5E,4EAA4E;QAC5E,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,EAAE,GAAG,IAAI,uBAAS,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE;YAC9C,UAAU,EAAE,gCAAwB;YACpC,OAAO,EAAE,EAAE,YAAY,EAAE,oCAA4B,EAAE,GAAG,OAAO,EAAE;SACpE,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAC/D,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YAC/B,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,8EAA8E;YAC9E,OAAO,CAAC,EAAE,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACrC,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,4EAA4E;YAC5E,2EAA2E;YAC3E,MAAM,OAAO,GAAG,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;YACxH,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/socket/util.test.js
CHANGED
|
@@ -26,14 +26,14 @@ vitest_1.vi.mock('isomorphic-ws', () => ({
|
|
|
26
26
|
});
|
|
27
27
|
(0, vitest_1.it)('sends a default User-Agent and preserves maxPayload on the handshake', () => {
|
|
28
28
|
void (0, util_js_1.connectWebSocket)('wss://example.com/api/v1/rpc-ws');
|
|
29
|
-
(0, vitest_1.expect)(constructorSpy).toHaveBeenCalledWith('wss://example.com/api/v1/rpc-ws',
|
|
29
|
+
(0, vitest_1.expect)(constructorSpy).toHaveBeenCalledWith('wss://example.com/api/v1/rpc-ws', [], vitest_1.expect.objectContaining({
|
|
30
30
|
maxPayload: util_js_1.MAX_SOCKET_PAYLOAD_BYTES,
|
|
31
31
|
headers: vitest_1.expect.objectContaining({ 'User-Agent': util_js_1.DEFAULT_WEBSOCKET_USER_AGENT })
|
|
32
32
|
}));
|
|
33
33
|
});
|
|
34
34
|
(0, vitest_1.it)('lets callers override the User-Agent via options.headers', () => {
|
|
35
35
|
void (0, util_js_1.connectWebSocket)('wss://example.com/api/v1/rpc-ws', { headers: { 'User-Agent': 'superblocks-cli/9.9.9' } });
|
|
36
|
-
(0, vitest_1.expect)(constructorSpy).toHaveBeenCalledWith('wss://example.com/api/v1/rpc-ws',
|
|
36
|
+
(0, vitest_1.expect)(constructorSpy).toHaveBeenCalledWith('wss://example.com/api/v1/rpc-ws', [], vitest_1.expect.objectContaining({
|
|
37
37
|
headers: vitest_1.expect.objectContaining({ 'User-Agent': 'superblocks-cli/9.9.9' })
|
|
38
38
|
}));
|
|
39
39
|
});
|
|
@@ -41,6 +41,16 @@ vitest_1.vi.mock('isomorphic-ws', () => ({
|
|
|
41
41
|
void (0, util_js_1.connectWebSocket)('wss://example.com/api/v1/rpc-ws', { protocol: 'editor' });
|
|
42
42
|
(0, vitest_1.expect)(constructorSpy).toHaveBeenCalledWith('wss://example.com/api/v1/rpc-ws', 'editor', vitest_1.expect.anything());
|
|
43
43
|
});
|
|
44
|
+
(0, vitest_1.it)('offers no subprotocol at all when the caller asked for none', () => {
|
|
45
|
+
// A browser turns an explicit `undefined` here into the literal string
|
|
46
|
+
// "undefined" on the wire, so a caller that wanted no role ends up offering
|
|
47
|
+
// one no server implements. An empty list is the only value that reaches the
|
|
48
|
+
// handshake as "no subprotocol offered".
|
|
49
|
+
void (0, util_js_1.connectWebSocket)('wss://example.com/api/v1/rpc-ws');
|
|
50
|
+
const [, protocol] = constructorSpy.mock.calls[0];
|
|
51
|
+
(0, vitest_1.expect)(protocol).toEqual([]);
|
|
52
|
+
(0, vitest_1.expect)(protocol).not.toBeUndefined();
|
|
53
|
+
});
|
|
44
54
|
});
|
|
45
55
|
(0, vitest_1.describe)('buildClientUserAgent', () => {
|
|
46
56
|
(0, vitest_1.it)('joins component and version with a slash', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.test.js","sourceRoot":"","sources":["../../src/socket/util.test.ts"],"names":[],"mappings":";;AAAA,mCAAyE;AAEzE,uCAA2H;AAE3H,MAAM,cAAc,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;AAE/B,oFAAoF;AACpF,mFAAmF;AACnF,WAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,aAAa;QAC1B,YAAY,GAAW,EAAE,QAAiB,EAAE,OAAgB;YAC1D,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,gBAAgB;YACd,+EAA+E;QACjF,CAAC;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,WAAE,CAAC,aAAa,EAAE,CAAC;QACnB,cAAc,CAAC,SAAS,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,WAAE,CAAC,cAAc,EAAE,CAAC;QACpB,WAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,KAAK,IAAA,0BAAgB,EAAC,iCAAiC,CAAC,CAAC;QAEzD,IAAA,eAAM,EAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,iCAAiC,EACjC,
|
|
1
|
+
{"version":3,"file":"util.test.js","sourceRoot":"","sources":["../../src/socket/util.test.ts"],"names":[],"mappings":"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"}
|
package/dist/types/ai/index.d.ts
CHANGED
|
@@ -53,9 +53,12 @@ export interface AiResolveAttachmentLeasesResponse {
|
|
|
53
53
|
* System event trigger types for AI operations without prompt_id
|
|
54
54
|
*/
|
|
55
55
|
export declare enum AiSystemTriggerType {
|
|
56
|
+
API_USAGE_SUMMARY = "api_usage_summary",
|
|
56
57
|
APP_NAME = "app_name",
|
|
58
|
+
ATTACHMENT_LABEL = "attachment_label",
|
|
57
59
|
COMMIT_MESSAGE = "commit_message",
|
|
58
60
|
DASHBOARD_CHAT = "dashboard_chat",
|
|
61
|
+
ERROR_SUMMARY = "error_summary",
|
|
59
62
|
FACT_METADATA = "fact_metadata",
|
|
60
63
|
PR_DESCRIPTION = "pr_description"
|
|
61
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/ai/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/ai/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/ai/index.js
CHANGED
|
@@ -20,9 +20,12 @@ exports.AiSystemTriggerType = void 0;
|
|
|
20
20
|
*/
|
|
21
21
|
var AiSystemTriggerType;
|
|
22
22
|
(function (AiSystemTriggerType) {
|
|
23
|
+
AiSystemTriggerType["API_USAGE_SUMMARY"] = "api_usage_summary";
|
|
23
24
|
AiSystemTriggerType["APP_NAME"] = "app_name";
|
|
25
|
+
AiSystemTriggerType["ATTACHMENT_LABEL"] = "attachment_label";
|
|
24
26
|
AiSystemTriggerType["COMMIT_MESSAGE"] = "commit_message";
|
|
25
27
|
AiSystemTriggerType["DASHBOARD_CHAT"] = "dashboard_chat";
|
|
28
|
+
AiSystemTriggerType["ERROR_SUMMARY"] = "error_summary";
|
|
26
29
|
AiSystemTriggerType["FACT_METADATA"] = "fact_metadata";
|
|
27
30
|
AiSystemTriggerType["PR_DESCRIPTION"] = "pr_description";
|
|
28
31
|
})(AiSystemTriggerType || (exports.AiSystemTriggerType = AiSystemTriggerType = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/ai/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA0DA;;GAEG;AACH,IAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/ai/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA0DA;;GAEG;AACH,IAAY,mBASX;AATD,WAAY,mBAAmB;IAC7B,8DAAuC,CAAA;IACvC,4CAAqB,CAAA;IACrB,4DAAqC,CAAA;IACrC,wDAAiC,CAAA;IACjC,wDAAiC,CAAA;IACjC,sDAA+B,CAAA;IAC/B,sDAA+B,CAAA;IAC/B,wDAAiC,CAAA;AACnC,CAAC,EATW,mBAAmB,mCAAnB,mBAAmB,QAS9B;AA6DD,2DAAyC;AACzC,qDAAmC;AACnC,6DAA2C"}
|