@socket-mesh/core 1.0.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.
@@ -0,0 +1,86 @@
1
+ import { CodecEngine } from "@socket-mesh/formatter";
2
+ import { AnyPacket } from "./packet.js";
3
+ import { AsyncStreamEmitter } from "@socket-mesh/async-stream-emitter";
4
+ import { SocketEvent, AuthenticateEvent, BadAuthTokenEvent, CloseEvent, ConnectEvent, DisconnectEvent, ErrorEvent, MessageEvent, PingEvent, PongEvent, RequestEvent, UnexpectedResponseEvent, UpgradeEvent, ResponseEvent, AuthStateChangeEvent, RemoveAuthTokenEvent, ConnectingEvent, DeauthenticateEvent } from "./socket-event.js";
5
+ import { FunctionReturnType } from "./maps/method-map.js";
6
+ import { HandlerMap } from "./maps/handler-map.js";
7
+ import { CallIdGenerator, InvokeMethodOptions, InvokeServiceOptions, SocketTransport } from "./socket-transport.js";
8
+ import { DemuxedConsumableStream, StreamEvent } from "@socket-mesh/stream-demux";
9
+ import { AuthToken, SignedAuthToken } from "@socket-mesh/auth";
10
+ import { SocketMap } from "./maps/socket-map.js";
11
+ import { Plugin } from "./plugins/plugin.js";
12
+ export type StreamCleanupMode = 'kill' | 'close' | 'none';
13
+ export interface SocketOptions<T extends SocketMap, TSocket extends Socket<T> = Socket<T>> {
14
+ ackTimeoutMs?: number;
15
+ callIdGenerator?: CallIdGenerator;
16
+ codecEngine?: CodecEngine;
17
+ handlers?: HandlerMap<T>;
18
+ isPingTimeoutDisabled?: boolean;
19
+ plugins?: Plugin<T>[];
20
+ onUnhandledRequest?: (socket: TSocket, packet: AnyPacket<T>) => boolean;
21
+ state?: T['State'];
22
+ streamCleanupMode?: StreamCleanupMode;
23
+ }
24
+ export type SocketStatus = 'connecting' | 'ready' | 'closing' | 'closed';
25
+ export declare class Socket<T extends SocketMap> extends AsyncStreamEmitter<SocketEvent<T>> {
26
+ private readonly _transport;
27
+ readonly state: Partial<T['State']>;
28
+ protected constructor(transport: SocketTransport<T>, options?: SocketOptions<T>);
29
+ get id(): string;
30
+ get authToken(): AuthToken;
31
+ get signedAuthToken(): SignedAuthToken;
32
+ deauthenticate(): Promise<boolean>;
33
+ disconnect(code?: number, reason?: string): void;
34
+ getBackpressure(): number;
35
+ getInboundBackpressure(): number;
36
+ getOutboundBackpressure(): number;
37
+ emit(event: 'authStateChange', data: AuthStateChangeEvent): void;
38
+ emit(event: 'authenticate', data: AuthenticateEvent): void;
39
+ emit(event: 'badAuthToken', data: BadAuthTokenEvent): void;
40
+ emit(event: 'close', data: CloseEvent): void;
41
+ emit(event: 'connect', data: ConnectEvent): void;
42
+ emit(event: 'connectAbort', data: DisconnectEvent): void;
43
+ emit(event: 'connecting', data: ConnectingEvent): void;
44
+ emit(event: 'deauthenticate', data: DeauthenticateEvent): void;
45
+ emit(event: 'disconnect', data: DisconnectEvent): void;
46
+ emit(event: 'end'): void;
47
+ emit(event: 'error', data: ErrorEvent): void;
48
+ emit(event: 'message', data: MessageEvent): void;
49
+ emit(event: 'ping', data: PingEvent): void;
50
+ emit(event: 'pong', data: PongEvent): void;
51
+ emit(event: 'removeAuthToken', data: RemoveAuthTokenEvent): void;
52
+ emit(event: 'request', data: RequestEvent<T>): void;
53
+ emit(event: 'response', data: ResponseEvent<T>): void;
54
+ emit(event: 'unexpectedResponse', data: UnexpectedResponseEvent): void;
55
+ emit(event: 'upgrade', data: UpgradeEvent): void;
56
+ listen(): DemuxedConsumableStream<StreamEvent<SocketEvent<T>>>;
57
+ listen(event: 'authStateChange'): DemuxedConsumableStream<AuthStateChangeEvent>;
58
+ listen(event: 'authenticate'): DemuxedConsumableStream<AuthenticateEvent>;
59
+ listen(event: 'badAuthToken'): DemuxedConsumableStream<BadAuthTokenEvent>;
60
+ listen(event: 'close'): DemuxedConsumableStream<CloseEvent>;
61
+ listen(event: 'connect'): DemuxedConsumableStream<ConnectEvent>;
62
+ listen(event: 'connectAbort'): DemuxedConsumableStream<DisconnectEvent>;
63
+ listen(event: 'connecting'): DemuxedConsumableStream<ConnectingEvent>;
64
+ listen(event: 'deauthenticate'): DemuxedConsumableStream<AuthenticateEvent>;
65
+ listen(event: 'disconnect'): DemuxedConsumableStream<DisconnectEvent>;
66
+ listen(event: 'end'): DemuxedConsumableStream<void>;
67
+ listen(event: 'error'): DemuxedConsumableStream<ErrorEvent>;
68
+ listen(event: 'message'): DemuxedConsumableStream<MessageEvent>;
69
+ listen(event: 'ping'): DemuxedConsumableStream<PingEvent>;
70
+ listen(event: 'pong'): DemuxedConsumableStream<PongEvent>;
71
+ listen(event: 'removeAuthToken'): DemuxedConsumableStream<RemoveAuthTokenEvent>;
72
+ listen(event: 'request'): DemuxedConsumableStream<RequestEvent<T>>;
73
+ listen(event: 'response'): DemuxedConsumableStream<ResponseEvent<T>>;
74
+ listen(event: 'unexpectedResponse'): DemuxedConsumableStream<UnexpectedResponseEvent>;
75
+ listen(event: 'upgrade'): DemuxedConsumableStream<UpgradeEvent>;
76
+ listen<U extends SocketEvent<T>, V = U>(event: string): DemuxedConsumableStream<V>;
77
+ ping(): Promise<void>;
78
+ get status(): SocketStatus;
79
+ get url(): string;
80
+ transmit<TMethod extends keyof T['Outgoing']>(method: TMethod, arg?: Parameters<T['Outgoing'][TMethod]>[0]): Promise<void>;
81
+ transmit<TService extends keyof T['Service'], TMethod extends keyof T['Service'][TService]>(options: [TService, TMethod], arg?: Parameters<T['Service'][TService][TMethod]>[0]): Promise<void>;
82
+ invoke<TMethod extends keyof T['Outgoing']>(method: TMethod, arg?: Parameters<T['Outgoing'][TMethod]>[0]): Promise<FunctionReturnType<T['Outgoing'][TMethod]>>;
83
+ invoke<TService extends keyof T['Service'], TMethod extends keyof T['Service'][TService]>(options: [TService, TMethod, (number | false)?], arg?: Parameters<T['Service'][TService][TMethod]>[0]): Promise<FunctionReturnType<T['Service'][TService][TMethod]>>;
84
+ invoke<TService extends keyof T['Service'], TMethod extends keyof T['Service'][TService]>(options: InvokeServiceOptions<T['Service'], TService, TMethod>, arg?: Parameters<T['Service'][TService][TMethod]>[0]): Promise<FunctionReturnType<T['Service'][TService][TMethod]>>;
85
+ invoke<TMethod extends keyof T['Outgoing']>(options: InvokeMethodOptions<T['Outgoing'], TMethod>, arg?: Parameters<T['Outgoing'][TMethod]>[0]): Promise<FunctionReturnType<T['Outgoing'][TMethod]>>;
86
+ }
package/dist/socket.js ADDED
@@ -0,0 +1,54 @@
1
+ import { AsyncStreamEmitter } from "@socket-mesh/async-stream-emitter";
2
+ export class Socket extends AsyncStreamEmitter {
3
+ constructor(transport, options) {
4
+ super();
5
+ this.state = options?.state || {};
6
+ transport.socket = this;
7
+ this._transport = transport;
8
+ }
9
+ get id() {
10
+ return this._transport.id;
11
+ }
12
+ get authToken() {
13
+ return this._transport.authToken;
14
+ }
15
+ get signedAuthToken() {
16
+ return this._transport.signedAuthToken;
17
+ }
18
+ deauthenticate() {
19
+ return this._transport.changeToUnauthenticatedState();
20
+ }
21
+ disconnect(code = 1000, reason) {
22
+ this._transport.disconnect(code, reason);
23
+ }
24
+ getBackpressure() {
25
+ return Math.max(this._transport.getBackpressure(), this.getListenerBackpressure());
26
+ }
27
+ getInboundBackpressure() {
28
+ return this._transport.getInboundBackpressure();
29
+ }
30
+ getOutboundBackpressure() {
31
+ return this._transport.getOutboundBackpressure();
32
+ }
33
+ emit(event, data) {
34
+ super.emit(event, data);
35
+ }
36
+ listen(event) {
37
+ return super.listen(event);
38
+ }
39
+ ping() {
40
+ return this._transport.ping();
41
+ }
42
+ get status() {
43
+ return this._transport.status;
44
+ }
45
+ get url() {
46
+ return this._transport.url;
47
+ }
48
+ transmit(serviceAndMethod, arg) {
49
+ return this._transport.transmit(serviceAndMethod, arg);
50
+ }
51
+ invoke(methodOptions, arg) {
52
+ return this._transport.invoke(methodOptions, arg)[0];
53
+ }
54
+ }
@@ -0,0 +1,2 @@
1
+ export declare function wait(duration: number): Promise<void>;
2
+ export declare function toArray<T>(arr: T | T[]): T[];
package/dist/utils.js ADDED
@@ -0,0 +1,10 @@
1
+ export function wait(duration) {
2
+ return new Promise((resolve) => {
3
+ setTimeout(() => {
4
+ resolve();
5
+ }, duration);
6
+ });
7
+ }
8
+ export function toArray(arr) {
9
+ return Array.isArray(arr) ? arr : [arr];
10
+ }
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@socket-mesh/core",
3
+ "version": "1.0.0",
4
+ "description": "Core module for SocketMesh Server",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": ["./dist"],
9
+ "scripts": {
10
+ "build": "node ../../scripts/build.mjs && tsc --project tsconfig.build.json",
11
+ "deploy": "npm run build && node ../../scripts/publish.mjs",
12
+ "test": "cross-env node --test --loader ts-node/esm test/index.spec.ts"
13
+ },
14
+ "keywords": [
15
+ "auth",
16
+ "jwt",
17
+ "socketMesh"
18
+ ],
19
+ "author": "Greg Kimmy",
20
+ "license": "MIT",
21
+ "homepage": "https://github.com/socket-mesh/main/tree/main/packages/core#README.md",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/socket-mesh/auth.git"
25
+ },
26
+ "bugs": {
27
+ "url": "https://github.com/socket-mesh/auth/issues"
28
+ },
29
+ "devDependencies": {
30
+ "@types/base64id": "^2.0.2",
31
+ "@types/ws": "^8.5.11"
32
+ },
33
+ "dependencies": {
34
+ "@socket-mesh/async-stream-emitter": "^7.1.2",
35
+ "@socket-mesh/auth": "^2.2.0",
36
+ "@socket-mesh/errors": "^3.2.0",
37
+ "@socket-mesh/formatter": "^4.1.0",
38
+ "@socket-mesh/stream-demux": "^10.1.5",
39
+ "isomorphic-ws": "^5.0.0",
40
+ "ws": "^8.18.0"
41
+ }
42
+ }