@mml-io/delta-net-server 0.0.0-experimental-bcf0b7c-20250715

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/README.md ADDED
@@ -0,0 +1,10 @@
1
+ # DeltaNet Server
2
+ #### `@mml-io/delta-net-server`
3
+
4
+ [![npm version](https://img.shields.io/npm/v/@mml-io/delta-net-server.svg?style=flat)](https://www.npmjs.com/package/@mml-io/delta-net-server)
5
+
6
+ This package contains the `DeltaNetServer` class that provides a way to accept websocket connections that can each set int64 components and byte states which are then visible to every other connected user.
7
+
8
+ The WebSocket protocol used by this package, `delta-net-v0.1`, is defined in `@mml-io/delta-net-protocol`.
9
+
10
+ A client for the `delta-net-v0.1` protocol is provided by `@mml-io/delta-net-web`.
@@ -0,0 +1,22 @@
1
+ export declare class ComponentCollection {
2
+ private targetValues;
3
+ private pendingDeltas;
4
+ private previousEmittedDeltas;
5
+ private currentObservableValues;
6
+ private static readonly MIN_INT64;
7
+ private static readonly MAX_INT64;
8
+ constructor(initialLength?: number);
9
+ setLength(length: number): void;
10
+ setValue(index: number, value: bigint): void;
11
+ private clampToInt64;
12
+ tick(): {
13
+ delta: BigInt64Array;
14
+ deltaDeltas: BigInt64Array;
15
+ };
16
+ removeIndices(sortedUnoccupyingIndices: Array<number>): void;
17
+ getTargetValue(index: number): bigint;
18
+ getPendingDelta(index: number): bigint;
19
+ get length(): number;
20
+ getCurrentValuesArray(): BigInt64Array;
21
+ getPreviousEmittedDeltasArray(): BigInt64Array;
22
+ }
@@ -0,0 +1,126 @@
1
+ import { DeltaNetV01ServerErrorType } from "@mml-io/delta-net-protocol";
2
+ import { DeltaNetV01Connection } from "./DeltaNetV01Connection";
3
+ export type onJoinerOptions = {
4
+ deltaNetV01Connection: DeltaNetV01Connection;
5
+ components: Array<[number, bigint]>;
6
+ states: Array<[number, Uint8Array]>;
7
+ token: string;
8
+ internalConnectionId: number;
9
+ };
10
+ export type onComponentsUpdateOptions = {
11
+ deltaNetV01Connection: DeltaNetV01Connection;
12
+ internalConnectionId: number;
13
+ components: Array<[number, bigint]>;
14
+ };
15
+ export type onStatesUpdateOptions = {
16
+ deltaNetV01Connection: DeltaNetV01Connection;
17
+ internalConnectionId: number;
18
+ states: Array<[number, Uint8Array]>;
19
+ };
20
+ export type onLeaveOptions = {
21
+ deltaNetV01Connection: DeltaNetV01Connection;
22
+ internalConnectionId: number;
23
+ components: Array<[number, number]>;
24
+ states: Array<[number, Uint8Array]>;
25
+ };
26
+ export type onCustomMessageOptions = {
27
+ deltaNetV01Connection: DeltaNetV01Connection;
28
+ internalConnectionId: number;
29
+ customType: number;
30
+ contents: string;
31
+ };
32
+ export declare class DeltaNetServerError extends Error {
33
+ errorType: DeltaNetV01ServerErrorType;
34
+ retryable: boolean;
35
+ constructor(errorType: DeltaNetV01ServerErrorType, message: string, retryable: boolean);
36
+ }
37
+ export type DeltaNetServerOptions = {
38
+ onJoiner?: (opts: onJoinerOptions) => true | void | Error | DeltaNetServerError | {
39
+ success: true;
40
+ stateOverrides?: Array<[number, Uint8Array]>;
41
+ } | Promise<true | void | Error | DeltaNetServerError | {
42
+ success: true;
43
+ stateOverrides?: Array<[number, Uint8Array]>;
44
+ }>;
45
+ onComponentsUpdate?: (opts: onComponentsUpdateOptions) => true | void | Error | DeltaNetServerError;
46
+ onStatesUpdate?: (opts: onStatesUpdateOptions) => true | void | Error | DeltaNetServerError | {
47
+ success: true;
48
+ stateOverrides?: Array<[number, Uint8Array]>;
49
+ } | Promise<true | void | Error | DeltaNetServerError | {
50
+ success: true;
51
+ stateOverrides?: Array<[number, Uint8Array]>;
52
+ }>;
53
+ onLeave?: (opts: onLeaveOptions) => void;
54
+ onCustomMessage?: (opts: onCustomMessageOptions) => void;
55
+ serverConnectionIdStateId?: number;
56
+ maxStateValueSize?: number;
57
+ maxMessageSize?: number;
58
+ };
59
+ export declare class DeltaNetServer {
60
+ private opts;
61
+ private currentConnectionId;
62
+ private nextIndex;
63
+ private preTickData;
64
+ private connectionIdToComponentIndex;
65
+ private componentIndexToConnectionId;
66
+ private connectionIdToDeltaNetServerConnection;
67
+ private allDeltaNetV01Connections;
68
+ private authenticatedDeltaNetV01Connections;
69
+ private observerConnections;
70
+ private webSocketToDeltaNetServerConnection;
71
+ private components;
72
+ private states;
73
+ private documentEffectiveStartTime;
74
+ private pingCounter;
75
+ private disposed;
76
+ private maxStateValueSize;
77
+ private maxMessageSize;
78
+ constructor(opts?: DeltaNetServerOptions);
79
+ static handleWebsocketSubprotocol(protocols: Set<string> | Array<string>): string | false;
80
+ addWebSocket(webSocket: WebSocket): void;
81
+ removeWebSocket(webSocket: WebSocket): void;
82
+ hasWebSocket(webSocket: WebSocket): boolean;
83
+ dangerouslyGetConnectionsToComponentIndex(): Map<number, number>;
84
+ dangerouslyAddNewJoinerCallback(callback: (index: number) => {
85
+ id: number;
86
+ afterAddCallback?: () => void;
87
+ } | null): void;
88
+ private disconnectWithError;
89
+ getComponentValue(componentId: number, componentIndex: number): number;
90
+ getNextConnectionId(): number;
91
+ getMaxMessageSize(): number;
92
+ validateJoiner(deltaNetV01Connection: DeltaNetV01Connection, token: string, components: Array<[number, bigint]>, states: Array<[number, Uint8Array]>): Promise<{
93
+ success: true;
94
+ } | {
95
+ success: false;
96
+ error: string;
97
+ }> | {
98
+ success: true;
99
+ } | {
100
+ success: false;
101
+ error: string;
102
+ };
103
+ addAuthenticatedConnection(deltaNetV01Connection: DeltaNetV01Connection): void;
104
+ validateAndApplyStateUpdate(deltaNetV01Connection: DeltaNetV01Connection, internalConnectionId: number, stateId: number, stateValue: Uint8Array): Promise<true | void | Error | DeltaNetServerError> | true | void | Error | DeltaNetServerError;
105
+ clearInternalConnectionId(internalConnectionId: number): void;
106
+ private sendPings;
107
+ tick(): {
108
+ removedIds: Set<number>;
109
+ addedIds: Set<number>;
110
+ };
111
+ getServerTime(): number;
112
+ setUserComponents(deltaNetV01Connection: DeltaNetV01Connection, internalConnectionId: number, components: Array<[number, bigint]>): {
113
+ success: true;
114
+ } | {
115
+ success: false;
116
+ error: string;
117
+ };
118
+ setComponentValue(componentId: number, index: number, value: bigint): void;
119
+ private applyComponentUpdates;
120
+ overrideUserStates(deltaNetV01Connection: DeltaNetV01Connection | null, internalConnectionId: number, states: Array<[number, Uint8Array]>): void;
121
+ setUserState(index: number, stateId: number, stateValue: Uint8Array): void;
122
+ private applyStateUpdates;
123
+ handleCustomMessage(deltaNetV01Connection: DeltaNetV01Connection, internalConnectionId: number, customType: number, contents: string): void;
124
+ broadcastCustomMessage(customType: number, contents: string): void;
125
+ dispose(): void;
126
+ }
@@ -0,0 +1,25 @@
1
+ import { DeltaNetV01ServerMessage } from "@mml-io/delta-net-protocol";
2
+ import { DeltaNetServer } from "./DeltaNetServer";
3
+ export declare class DeltaNetV01Connection {
4
+ readonly webSocket: WebSocket;
5
+ readonly deltaNetServer: DeltaNetServer;
6
+ private websocketListener;
7
+ readonly internalConnectionId: number;
8
+ isObserver: boolean;
9
+ components: Map<number, bigint>;
10
+ states: Map<number, Uint8Array<ArrayBufferLike>>;
11
+ private pendingStateValidations;
12
+ private nextValidationId;
13
+ private isAuthenticated;
14
+ private isAuthenticating;
15
+ private authenticationAbortController;
16
+ constructor(webSocket: WebSocket, deltaNetServer: DeltaNetServer);
17
+ sendMessage(message: DeltaNetV01ServerMessage): void;
18
+ sendEncodedBytes(bytes: Uint8Array): void;
19
+ dispose(): void;
20
+ setAuthenticated(): void;
21
+ private disconnectWithError;
22
+ private handleConnectUser;
23
+ handleStateUpdate(stateId: number, stateValue: Uint8Array): Promise<void>;
24
+ private handleClientMessage;
25
+ }
@@ -0,0 +1,8 @@
1
+ export declare class StateCollection {
2
+ values: Array<Uint8Array>;
3
+ private modifiedIndices;
4
+ constructor();
5
+ setValue(index: number, value: Uint8Array | null): void;
6
+ tick(): Array<[number, Uint8Array]>;
7
+ removeIndices(sortedUnoccupyingIndices: Array<number>): void;
8
+ }
@@ -0,0 +1,4 @@
1
+ import { DeltaNetServer } from "./DeltaNetServer";
2
+ import { DeltaNetV01Connection } from "./DeltaNetV01Connection";
3
+ export declare const SupportedWebsocketSubProtocolsPreferenceOrder: readonly ["delta-net-v0.1"];
4
+ export declare function createDeltaNetServerConnectionForWebsocket(webSocket: WebSocket, deltaNetServer: DeltaNetServer): DeltaNetV01Connection | null;
@@ -0,0 +1,2 @@
1
+ export * from "./DeltaNetServer";
2
+ export { DeltaNetV01Connection } from "./DeltaNetV01Connection";