aurival 0.1.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/LICENSE +202 -0
- package/README.md +195 -0
- package/dist/auth.d.ts +67 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +416 -0
- package/dist/auth.js.map +1 -0
- package/dist/bot.d.ts +76 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +278 -0
- package/dist/bot.js.map +1 -0
- package/dist/cli.d.ts +27 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +137 -0
- package/dist/cli.js.map +1 -0
- package/dist/errors.d.ts +140 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +205 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +77 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +106 -0
- package/dist/events.js.map +1 -0
- package/dist/http.d.ts +48 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +201 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/socket.d.ts +61 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +447 -0
- package/dist/socket.js.map +1 -0
- package/package.json +59 -0
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aurival bot SDK.
|
|
3
|
+
*
|
|
4
|
+
* Declare commands, call run(), and the SDK holds the socket:
|
|
5
|
+
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { Bot } from "aurival";
|
|
8
|
+
*
|
|
9
|
+
* const bot = new Bot();
|
|
10
|
+
*
|
|
11
|
+
* bot.command("ping", async (ctx) => {
|
|
12
|
+
* await ctx.reply("pong");
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* bot.run();
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Everything a developer can name is exported here. The Python package mirrors
|
|
19
|
+
* this list file for file (SDK-7), so a name missing here becomes a permanent
|
|
20
|
+
* asymmetry: adding an export later is free, removing one is a break.
|
|
21
|
+
*/
|
|
22
|
+
export { Bot } from './bot.js';
|
|
23
|
+
export { APIError, AccessTokenExpired, AccessTokenInvalid, AckUnknownEvent, AssertionExpired, AssertionReplay, AurivalAPIError, AurivalError, AuthenticationError, BadAssertion, BadProof, BadPublicKey, BotLinkNotAllowed, BotPlaygroundOnly, BotSuspended, CODE_CLASSES, DOC_URL_PREFIX, EmptyText, FrameInvalid, FrameTooLarge, IdempotencyKeyInvalid, IdempotencyKeyReused, IdleTimeout, InternalError, InvalidCommandName, InvalidJSON, InvalidRequestError, KeyAlreadyPaired, KeyRevoked, NotFound, PairRateLimited, ParameterInvalid, ParameterMissing, PermissionDeniedError, ProtocolError, RateLimitError, RateLimited, ServerRestarting, SessionSuperseded, SyncRateLimited, TYPE_CLASSES, TextTooLong, TooManyProblems, TransportError, UnknownOperation, UnknownParameter, fromEnvelope, } from './errors.js';
|
|
24
|
+
export { Context, Event } from './events.js';
|
|
25
|
+
export type { Chat, Command, User } from './events.js';
|
|
26
|
+
export { BYE_ACTIONS, ByeAction, actionForBye } from './socket.js';
|
|
27
|
+
export declare const version = "0.1.0";
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,SAAS,EACT,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aurival bot SDK.
|
|
3
|
+
*
|
|
4
|
+
* Declare commands, call run(), and the SDK holds the socket:
|
|
5
|
+
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { Bot } from "aurival";
|
|
8
|
+
*
|
|
9
|
+
* const bot = new Bot();
|
|
10
|
+
*
|
|
11
|
+
* bot.command("ping", async (ctx) => {
|
|
12
|
+
* await ctx.reply("pong");
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* bot.run();
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Everything a developer can name is exported here. The Python package mirrors
|
|
19
|
+
* this list file for file (SDK-7), so a name missing here becomes a permanent
|
|
20
|
+
* asymmetry: adding an export later is free, removing one is a break.
|
|
21
|
+
*/
|
|
22
|
+
export { Bot } from './bot.js';
|
|
23
|
+
export { APIError, AccessTokenExpired, AccessTokenInvalid, AckUnknownEvent, AssertionExpired, AssertionReplay, AurivalAPIError, AurivalError, AuthenticationError, BadAssertion, BadProof, BadPublicKey, BotLinkNotAllowed, BotPlaygroundOnly, BotSuspended, CODE_CLASSES, DOC_URL_PREFIX, EmptyText, FrameInvalid, FrameTooLarge, IdempotencyKeyInvalid, IdempotencyKeyReused, IdleTimeout, InternalError, InvalidCommandName, InvalidJSON, InvalidRequestError, KeyAlreadyPaired, KeyRevoked, NotFound, PairRateLimited, ParameterInvalid, ParameterMissing, PermissionDeniedError, ProtocolError, RateLimitError, RateLimited, ServerRestarting, SessionSuperseded, SyncRateLimited, TYPE_CLASSES, TextTooLong, TooManyProblems, TransportError, UnknownOperation, UnknownParameter, fromEnvelope, } from './errors.js';
|
|
24
|
+
export { Context, Event } from './events.js';
|
|
25
|
+
export { BYE_ACTIONS, ByeAction, actionForBye } from './socket.js';
|
|
26
|
+
export const version = '0.1.0';
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,SAAS,EACT,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
package/dist/socket.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The live connection: `hello`, heartbeat, dispatch, acks, `problem`/`bye`
|
|
3
|
+
* handling, reconnect (SOCKET-V1, DECISIONS SDK-23..28, SDK-39).
|
|
4
|
+
*
|
|
5
|
+
* There are no WebSocket close codes in this API — every close is 1000, and a
|
|
6
|
+
* close with no `bye` is a network fault, never a designed signal. The `bye`
|
|
7
|
+
* payload is the only error channel; never branch on a close code.
|
|
8
|
+
*/
|
|
9
|
+
import { AurivalAPIError } from './errors.js';
|
|
10
|
+
import { Event } from './events.js';
|
|
11
|
+
import type { Auth } from './auth.js';
|
|
12
|
+
import type { HttpClient, Logger } from './http.js';
|
|
13
|
+
export declare const EVENT_COMMAND_INVOKED = "command.invoked";
|
|
14
|
+
export declare const EVENT_BACKLOG_OVERFLOWED = "backlog.overflowed";
|
|
15
|
+
/**
|
|
16
|
+
* A plain frozen object rather than a TS `enum`: `enum` would change the
|
|
17
|
+
* runtime shape of a name the package exports (SDK-7).
|
|
18
|
+
*/
|
|
19
|
+
export declare const ByeAction: {
|
|
20
|
+
/** re-exchange, reconnect NOW, no backoff */
|
|
21
|
+
readonly REAUTH_RECONNECT: 'reauth_reconnect';
|
|
22
|
+
/** ONE jittered wait, 1-5s, not escalating */
|
|
23
|
+
readonly SHORT_WAIT_RECONNECT: 'short_wait';
|
|
24
|
+
/** stop; this is a bug, not a blip */
|
|
25
|
+
readonly RAISE: 'raise';
|
|
26
|
+
};
|
|
27
|
+
export type ByeAction = (typeof ByeAction)[keyof typeof ByeAction];
|
|
28
|
+
/**
|
|
29
|
+
* The table, exactly (SOCKET-V1 §4, PLAN.md "The socket, exactly", SDK-39).
|
|
30
|
+
* `frame_invalid`/`unknown_operation`/`ack_unknown_event` are here because they
|
|
31
|
+
* arrive as a `bye` on the fiftieth `problem` (gateway.go's
|
|
32
|
+
* MaxSocketProblemsBeforeBye) — not because a `problem` frame is fatal; a
|
|
33
|
+
* `problem` never is.
|
|
34
|
+
*/
|
|
35
|
+
export declare const BYE_ACTIONS: Readonly<Record<string, ByeAction>>;
|
|
36
|
+
/**
|
|
37
|
+
* Unknown code falls back on the ERRORS-V1 `type` (SDK-11 / BA-R24):
|
|
38
|
+
* `api_error` reconnects (a short wait, matching `server_restarting` and
|
|
39
|
+
* `idle_timeout`, its only other members), everything else raises.
|
|
40
|
+
*/
|
|
41
|
+
export declare function actionForBye(code: string, errorType: string): ByeAction;
|
|
42
|
+
export interface SocketOptions {
|
|
43
|
+
dispatch: (event: Event) => Promise<void>;
|
|
44
|
+
onProblem: (problem: AurivalAPIError | Event) => void;
|
|
45
|
+
logger?: Logger | undefined;
|
|
46
|
+
seenLimit?: number | undefined;
|
|
47
|
+
backoffBase?: number | undefined;
|
|
48
|
+
backoffCap?: number | undefined;
|
|
49
|
+
shortWaitRange?: readonly [number, number] | undefined;
|
|
50
|
+
jitter?: (() => number) | undefined;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* One bot's live connection. `run(signal)` owns reconnect forever, until the
|
|
54
|
+
* signal aborts or a `bye` says the credential itself is dead.
|
|
55
|
+
*/
|
|
56
|
+
export declare class Socket {
|
|
57
|
+
#private;
|
|
58
|
+
constructor(http: HttpClient, auth: Auth, options: SocketOptions);
|
|
59
|
+
run(signal: AbortSignal): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,eAAe,EAIhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEpD,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,SAAS;IACpB,6CAA6C;aAC7C,gBAAgB,EAAE,kBAAkB;IACpC,8CAA8C;aAC9C,oBAAoB,EAAE,YAAY;IAClC,sCAAsC;aACtC,KAAK,EAAE,OAAO;CACN,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAc3D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAIvE;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,GAAG,KAAK,KAAK,IAAI,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACvD,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CACrC;AAiED;;;GAGG;AACH,qBAAa,MAAM;;IAiBjB,YAAY,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAW/D;IAEK,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD5C;CAmOF"}
|
package/dist/socket.js
ADDED
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The live connection: `hello`, heartbeat, dispatch, acks, `problem`/`bye`
|
|
3
|
+
* handling, reconnect (SOCKET-V1, DECISIONS SDK-23..28, SDK-39).
|
|
4
|
+
*
|
|
5
|
+
* There are no WebSocket close codes in this API — every close is 1000, and a
|
|
6
|
+
* close with no `bye` is a network fault, never a designed signal. The `bye`
|
|
7
|
+
* payload is the only error channel; never branch on a close code.
|
|
8
|
+
*/
|
|
9
|
+
import { AuthenticationError, AurivalAPIError, ProtocolError, TransportError, fromEnvelope, } from './errors.js';
|
|
10
|
+
import { Event } from './events.js';
|
|
11
|
+
import { defaultLogger } from './http.js';
|
|
12
|
+
export const EVENT_COMMAND_INVOKED = 'command.invoked';
|
|
13
|
+
export const EVENT_BACKLOG_OVERFLOWED = 'backlog.overflowed';
|
|
14
|
+
/**
|
|
15
|
+
* A plain frozen object rather than a TS `enum`: `enum` would change the
|
|
16
|
+
* runtime shape of a name the package exports (SDK-7).
|
|
17
|
+
*/
|
|
18
|
+
export const ByeAction = {
|
|
19
|
+
/** re-exchange, reconnect NOW, no backoff */
|
|
20
|
+
REAUTH_RECONNECT: 'reauth_reconnect',
|
|
21
|
+
/** ONE jittered wait, 1-5s, not escalating */
|
|
22
|
+
SHORT_WAIT_RECONNECT: 'short_wait',
|
|
23
|
+
/** stop; this is a bug, not a blip */
|
|
24
|
+
RAISE: 'raise',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The table, exactly (SOCKET-V1 §4, PLAN.md "The socket, exactly", SDK-39).
|
|
28
|
+
* `frame_invalid`/`unknown_operation`/`ack_unknown_event` are here because they
|
|
29
|
+
* arrive as a `bye` on the fiftieth `problem` (gateway.go's
|
|
30
|
+
* MaxSocketProblemsBeforeBye) — not because a `problem` frame is fatal; a
|
|
31
|
+
* `problem` never is.
|
|
32
|
+
*/
|
|
33
|
+
export const BYE_ACTIONS = {
|
|
34
|
+
access_token_expired: ByeAction.REAUTH_RECONNECT,
|
|
35
|
+
key_revoked: ByeAction.RAISE,
|
|
36
|
+
key_already_paired: ByeAction.RAISE,
|
|
37
|
+
access_token_invalid: ByeAction.RAISE,
|
|
38
|
+
session_superseded: ByeAction.RAISE,
|
|
39
|
+
frame_too_large: ByeAction.RAISE,
|
|
40
|
+
frame_invalid: ByeAction.RAISE,
|
|
41
|
+
unknown_operation: ByeAction.RAISE,
|
|
42
|
+
ack_unknown_event: ByeAction.RAISE,
|
|
43
|
+
too_many_problems: ByeAction.RAISE,
|
|
44
|
+
bot_suspended: ByeAction.RAISE,
|
|
45
|
+
server_restarting: ByeAction.SHORT_WAIT_RECONNECT,
|
|
46
|
+
idle_timeout: ByeAction.SHORT_WAIT_RECONNECT,
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Unknown code falls back on the ERRORS-V1 `type` (SDK-11 / BA-R24):
|
|
50
|
+
* `api_error` reconnects (a short wait, matching `server_restarting` and
|
|
51
|
+
* `idle_timeout`, its only other members), everything else raises.
|
|
52
|
+
*/
|
|
53
|
+
export function actionForBye(code, errorType) {
|
|
54
|
+
const action = BYE_ACTIONS[code];
|
|
55
|
+
if (action !== undefined)
|
|
56
|
+
return action;
|
|
57
|
+
return errorType === 'api_error' ? ByeAction.SHORT_WAIT_RECONNECT : ByeAction.RAISE;
|
|
58
|
+
}
|
|
59
|
+
const DEFAULT_HEARTBEAT_MS = 30_000;
|
|
60
|
+
/** Bridges `ws.onmessage`/`onclose`/`onerror` callbacks into an awaitable queue. */
|
|
61
|
+
class AsyncQueue {
|
|
62
|
+
#items = [];
|
|
63
|
+
#waiters = [];
|
|
64
|
+
push(item) {
|
|
65
|
+
const waiter = this.#waiters.shift();
|
|
66
|
+
if (waiter)
|
|
67
|
+
waiter(item);
|
|
68
|
+
else
|
|
69
|
+
this.#items.push(item);
|
|
70
|
+
}
|
|
71
|
+
next() {
|
|
72
|
+
const item = this.#items.shift();
|
|
73
|
+
if (item !== undefined)
|
|
74
|
+
return Promise.resolve(item);
|
|
75
|
+
return new Promise((resolve) => this.#waiters.push(resolve));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Resolves `'aborted'` the instant `signal` fires, without waiting on `promise`. */
|
|
79
|
+
function raceAbort(promise, signal) {
|
|
80
|
+
if (signal.aborted)
|
|
81
|
+
return Promise.resolve('aborted');
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
let settled = false;
|
|
84
|
+
const onAbort = () => {
|
|
85
|
+
if (settled)
|
|
86
|
+
return;
|
|
87
|
+
settled = true;
|
|
88
|
+
resolve('aborted');
|
|
89
|
+
};
|
|
90
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
91
|
+
promise.then((value) => {
|
|
92
|
+
if (settled)
|
|
93
|
+
return;
|
|
94
|
+
settled = true;
|
|
95
|
+
signal.removeEventListener('abort', onAbort);
|
|
96
|
+
resolve(value);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/** `true` if `signal` fired during the wait — a SIGINT must never sit behind a sleep. */
|
|
101
|
+
function interruptibleSleep(ms, signal) {
|
|
102
|
+
if (signal.aborted)
|
|
103
|
+
return Promise.resolve(true);
|
|
104
|
+
return new Promise((resolve) => {
|
|
105
|
+
const timer = setTimeout(() => {
|
|
106
|
+
cleanup();
|
|
107
|
+
resolve(false);
|
|
108
|
+
}, ms);
|
|
109
|
+
const onAbort = () => {
|
|
110
|
+
cleanup();
|
|
111
|
+
resolve(true);
|
|
112
|
+
};
|
|
113
|
+
function cleanup() {
|
|
114
|
+
clearTimeout(timer);
|
|
115
|
+
signal.removeEventListener('abort', onAbort);
|
|
116
|
+
}
|
|
117
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* One bot's live connection. `run(signal)` owns reconnect forever, until the
|
|
122
|
+
* signal aborts or a `bye` says the credential itself is dead.
|
|
123
|
+
*/
|
|
124
|
+
export class Socket {
|
|
125
|
+
#http;
|
|
126
|
+
#auth;
|
|
127
|
+
#dispatch;
|
|
128
|
+
#onProblem;
|
|
129
|
+
#logger;
|
|
130
|
+
#seenLimit;
|
|
131
|
+
#backoffBase;
|
|
132
|
+
#backoffCap;
|
|
133
|
+
#shortWaitRange;
|
|
134
|
+
#jitter;
|
|
135
|
+
#seen = new Map();
|
|
136
|
+
#inFlight = new Map();
|
|
137
|
+
#generation = 0;
|
|
138
|
+
#backoffN = 0;
|
|
139
|
+
constructor(http, auth, options) {
|
|
140
|
+
this.#http = http;
|
|
141
|
+
this.#auth = auth;
|
|
142
|
+
this.#dispatch = options.dispatch;
|
|
143
|
+
this.#onProblem = options.onProblem;
|
|
144
|
+
this.#logger = options.logger ?? defaultLogger();
|
|
145
|
+
this.#seenLimit = options.seenLimit ?? 10_000;
|
|
146
|
+
this.#backoffBase = options.backoffBase ?? 1;
|
|
147
|
+
this.#backoffCap = options.backoffCap ?? 60;
|
|
148
|
+
this.#shortWaitRange = options.shortWaitRange ?? [1, 5];
|
|
149
|
+
this.#jitter = options.jitter ?? Math.random;
|
|
150
|
+
}
|
|
151
|
+
async run(signal) {
|
|
152
|
+
while (!signal.aborted) {
|
|
153
|
+
let token;
|
|
154
|
+
try {
|
|
155
|
+
token = await this.#auth.token();
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
if (err instanceof AuthenticationError)
|
|
159
|
+
throw err;
|
|
160
|
+
if (err instanceof AurivalAPIError ||
|
|
161
|
+
err instanceof TransportError ||
|
|
162
|
+
err instanceof ProtocolError) {
|
|
163
|
+
if (await this.#sleepBackoff(signal))
|
|
164
|
+
return;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
throw err;
|
|
168
|
+
}
|
|
169
|
+
let bye;
|
|
170
|
+
try {
|
|
171
|
+
const ws = await this.#connect(this.#http.gatewayUrl(), token, signal);
|
|
172
|
+
bye = await this.#runConnection(ws, signal);
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
bye = null;
|
|
176
|
+
if (signal.aborted)
|
|
177
|
+
return;
|
|
178
|
+
if (await this.#sleepBackoff(signal))
|
|
179
|
+
return;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (signal.aborted)
|
|
183
|
+
return;
|
|
184
|
+
if (bye === null) {
|
|
185
|
+
// A close with no `bye`: a network fault, never a designed signal
|
|
186
|
+
// (SOCKET-V1 §1). Escalating backoff, unbounded.
|
|
187
|
+
if (await this.#sleepBackoff(signal))
|
|
188
|
+
return;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const action = actionForBye(bye.code, bye.type);
|
|
192
|
+
if (action === ByeAction.RAISE)
|
|
193
|
+
throw bye;
|
|
194
|
+
if (action === ByeAction.REAUTH_RECONNECT) {
|
|
195
|
+
try {
|
|
196
|
+
await this.#auth.refresh();
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
if (err instanceof AuthenticationError)
|
|
200
|
+
throw err;
|
|
201
|
+
// The exchange itself is unwell (e.g. `/v1/token` 5xx): keep
|
|
202
|
+
// backing off, never raise (SDK-26).
|
|
203
|
+
if (await this.#sleepBackoff(signal))
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
continue; // reconnect NOW — no backoff, "once" per connection
|
|
207
|
+
}
|
|
208
|
+
if (action === ByeAction.SHORT_WAIT_RECONNECT) {
|
|
209
|
+
if (await this.#shortWait(signal))
|
|
210
|
+
return;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
#connect(url, token, signal) {
|
|
216
|
+
return new Promise((resolve, reject) => {
|
|
217
|
+
if (signal.aborted) {
|
|
218
|
+
reject(new Error('aborted'));
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const ws = new WebSocket(url, { headers: { Authorization: `Bearer ${token}` } });
|
|
222
|
+
let settled = false;
|
|
223
|
+
const cleanup = () => {
|
|
224
|
+
ws.onopen = null;
|
|
225
|
+
ws.onerror = null;
|
|
226
|
+
signal.removeEventListener('abort', onAbort);
|
|
227
|
+
};
|
|
228
|
+
const onAbort = () => {
|
|
229
|
+
if (settled)
|
|
230
|
+
return;
|
|
231
|
+
settled = true;
|
|
232
|
+
cleanup();
|
|
233
|
+
try {
|
|
234
|
+
ws.close();
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// ignore — we're abandoning this connection anyway
|
|
238
|
+
}
|
|
239
|
+
reject(new Error('aborted'));
|
|
240
|
+
};
|
|
241
|
+
ws.onopen = () => {
|
|
242
|
+
if (settled)
|
|
243
|
+
return;
|
|
244
|
+
settled = true;
|
|
245
|
+
cleanup();
|
|
246
|
+
resolve(ws);
|
|
247
|
+
};
|
|
248
|
+
// Never log or attach the event here (SDK-33): a refused handshake is
|
|
249
|
+
// ordinary (a token that aged out during a reconnect does it), and this
|
|
250
|
+
// request carries an Authorization header.
|
|
251
|
+
ws.onerror = () => {
|
|
252
|
+
if (settled)
|
|
253
|
+
return;
|
|
254
|
+
settled = true;
|
|
255
|
+
cleanup();
|
|
256
|
+
reject(new Error('websocket connect failed'));
|
|
257
|
+
};
|
|
258
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Reads frames until the socket closes. Returns the `bye` error if one
|
|
263
|
+
* arrived, else `null` — a network-fault close, per SOCKET-V1 §1.
|
|
264
|
+
*/
|
|
265
|
+
async #runConnection(ws, signal) {
|
|
266
|
+
this.#generation += 1;
|
|
267
|
+
const generation = this.#generation;
|
|
268
|
+
const queue = new AsyncQueue();
|
|
269
|
+
ws.onmessage = (ev) => {
|
|
270
|
+
const data = ev.data;
|
|
271
|
+
queue.push({ kind: 'message', data: typeof data === 'string' ? data : null });
|
|
272
|
+
};
|
|
273
|
+
ws.onclose = () => queue.push({ kind: 'close' });
|
|
274
|
+
ws.onerror = () => queue.push({ kind: 'error' });
|
|
275
|
+
let stopHeartbeat = null;
|
|
276
|
+
try {
|
|
277
|
+
for (;;) {
|
|
278
|
+
const item = await raceAbort(queue.next(), signal);
|
|
279
|
+
if (item === 'aborted') {
|
|
280
|
+
try {
|
|
281
|
+
ws.close();
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// ignore
|
|
285
|
+
}
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
if (item.kind === 'close' || item.kind === 'error')
|
|
289
|
+
return null;
|
|
290
|
+
if (item.data === null)
|
|
291
|
+
continue; // not a text frame; ignored, never fatal
|
|
292
|
+
let raw;
|
|
293
|
+
try {
|
|
294
|
+
raw = JSON.parse(item.data);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
|
|
300
|
+
continue;
|
|
301
|
+
const frame = raw;
|
|
302
|
+
const op = frame['op'];
|
|
303
|
+
const dRaw = frame['d'];
|
|
304
|
+
const d = typeof dRaw === 'object' && dRaw !== null && !Array.isArray(dRaw)
|
|
305
|
+
? dRaw
|
|
306
|
+
: {};
|
|
307
|
+
if (op === 'hello') {
|
|
308
|
+
const intervalMs = d['heartbeat_interval_ms'];
|
|
309
|
+
const heartbeatMs = typeof intervalMs === 'number' && intervalMs > 0 ? intervalMs : DEFAULT_HEARTBEAT_MS;
|
|
310
|
+
// We reached a live session: the next fault is a fresh problem, not
|
|
311
|
+
// a continuation of the last one.
|
|
312
|
+
this.#backoffN = 0;
|
|
313
|
+
stopHeartbeat?.();
|
|
314
|
+
stopHeartbeat = this.#startHeartbeat(ws, heartbeatMs);
|
|
315
|
+
}
|
|
316
|
+
else if (op === 'heartbeat_ack') {
|
|
317
|
+
// ignore
|
|
318
|
+
}
|
|
319
|
+
else if (op === 'event') {
|
|
320
|
+
await this.#handleEvent(ws, d, generation);
|
|
321
|
+
}
|
|
322
|
+
else if (op === 'problem') {
|
|
323
|
+
const exc = fromEnvelope(d);
|
|
324
|
+
this.#logger.warn(`bot-api problem: ${exc.code}: ${exc.message}`);
|
|
325
|
+
this.#onProblem(exc);
|
|
326
|
+
}
|
|
327
|
+
else if (op === 'bye') {
|
|
328
|
+
const exc = fromEnvelope(d);
|
|
329
|
+
this.#logger.warn(`bot-api bye: ${exc.code}: ${exc.message}`);
|
|
330
|
+
return exc;
|
|
331
|
+
}
|
|
332
|
+
// else: unknown op. Ignored, never fatal (CONTRACT-V1 §3, §9).
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
finally {
|
|
336
|
+
stopHeartbeat?.();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/** Its own timer, never on the dispatch path — a slow handler must not starve it. */
|
|
340
|
+
#startHeartbeat(ws, intervalMs) {
|
|
341
|
+
let stopped = false;
|
|
342
|
+
let timer = null;
|
|
343
|
+
const tick = () => {
|
|
344
|
+
if (stopped)
|
|
345
|
+
return;
|
|
346
|
+
if (ws.readyState !== WebSocket.OPEN)
|
|
347
|
+
return; // the read loop will notice
|
|
348
|
+
try {
|
|
349
|
+
ws.send(JSON.stringify({ op: 'heartbeat', d: {} }));
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
return; // connection is gone
|
|
353
|
+
}
|
|
354
|
+
timer = setTimeout(tick, intervalMs);
|
|
355
|
+
};
|
|
356
|
+
timer = setTimeout(tick, intervalMs);
|
|
357
|
+
return () => {
|
|
358
|
+
stopped = true;
|
|
359
|
+
if (timer !== null)
|
|
360
|
+
clearTimeout(timer);
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
async #handleEvent(ws, d, generation) {
|
|
364
|
+
const event = Event.fromFrame(d);
|
|
365
|
+
if (!event.id)
|
|
366
|
+
return;
|
|
367
|
+
if (this.#inFlight.has(event.id))
|
|
368
|
+
return; // never dispatch an id whose handler is in flight
|
|
369
|
+
if (this.#seen.has(event.id)) {
|
|
370
|
+
// Already ran to completion — possibly on a prior connection whose ack
|
|
371
|
+
// got dropped when it died mid-flight, and this is that same event
|
|
372
|
+
// redelivered. Don't run the handler again; a duplicate ack of a real
|
|
373
|
+
// event is harmless, and skipping it here would leave the server
|
|
374
|
+
// redelivering forever.
|
|
375
|
+
await this.#ack(ws, event.id, generation);
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
if (event.type === EVENT_BACKLOG_OVERFLOWED) {
|
|
379
|
+
// An event, not a problem — it goes to the log and the hook, never to a
|
|
380
|
+
// handler (SDK-28). NOT acked: it has no durable row, so acking it
|
|
381
|
+
// would earn `ack_unknown_event` right back.
|
|
382
|
+
this.#logger.warn(`backlog overflowed: dropped=${String(event.data['dropped_count'])} resume_sequence=${String(event.data['resume_sequence'])}`);
|
|
383
|
+
this.#onProblem(event);
|
|
384
|
+
this.#markSeen(event.id);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
if (event.type !== EVENT_COMMAND_INVOKED) {
|
|
388
|
+
// Unknown event type: ignored, never fatal — the first additive type
|
|
389
|
+
// must not break the fleet. Unlike `backlog.overflowed` this is
|
|
390
|
+
// presumed durable, so it is acked to keep the stream moving rather
|
|
391
|
+
// than redelivered forever (SDK-40).
|
|
392
|
+
this.#logger.debug(`ignoring unknown event type ${event.type}`);
|
|
393
|
+
this.#markSeen(event.id);
|
|
394
|
+
await this.#ack(ws, event.id, generation);
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
const handled = this.#runHandler(ws, event, generation);
|
|
398
|
+
this.#inFlight.set(event.id, handled);
|
|
399
|
+
handled.catch(() => {
|
|
400
|
+
// The handler is expected not to throw (bot.ts wraps handler calls);
|
|
401
|
+
// if it does anyway, the ack above already ran in the `finally`.
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
async #runHandler(ws, event, generation) {
|
|
405
|
+
try {
|
|
406
|
+
await this.#dispatch(event);
|
|
407
|
+
}
|
|
408
|
+
finally {
|
|
409
|
+
this.#inFlight.delete(event.id);
|
|
410
|
+
this.#markSeen(event.id);
|
|
411
|
+
// Across a reconnect the handler still finishes, but its ack is
|
|
412
|
+
// dropped — redelivery on the new connection covers it (SDK-27).
|
|
413
|
+
if (generation === this.#generation) {
|
|
414
|
+
await this.#ack(ws, event.id, generation);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
async #ack(ws, eventId, generation) {
|
|
419
|
+
if (generation !== this.#generation || ws.readyState !== WebSocket.OPEN)
|
|
420
|
+
return;
|
|
421
|
+
try {
|
|
422
|
+
ws.send(JSON.stringify({ op: 'ack', d: { event_id: eventId } }));
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
// the connection died under us; redelivery covers it
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
#markSeen(eventId) {
|
|
429
|
+
this.#seen.set(eventId, undefined);
|
|
430
|
+
if (this.#seen.size > this.#seenLimit) {
|
|
431
|
+
const oldest = this.#seen.keys().next().value;
|
|
432
|
+
if (oldest !== undefined)
|
|
433
|
+
this.#seen.delete(oldest);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
async #sleepBackoff(signal) {
|
|
437
|
+
const delaySeconds = Math.min(this.#backoffCap, this.#backoffBase * 2 ** this.#backoffN);
|
|
438
|
+
this.#backoffN += 1;
|
|
439
|
+
return interruptibleSleep(this.#jitter() * delaySeconds * 1000, signal);
|
|
440
|
+
}
|
|
441
|
+
async #shortWait(signal) {
|
|
442
|
+
const [lo, hi] = this.#shortWaitRange;
|
|
443
|
+
const delaySeconds = lo + this.#jitter() * (hi - lo);
|
|
444
|
+
return interruptibleSleep(delaySeconds * 1000, signal);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
|