@lagless/net-wire 0.0.46 → 0.0.50

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.
@@ -10,7 +10,9 @@ export declare const enum MsgType {
10
10
  StateRequest = 6,
11
11
  StateResponse = 7,
12
12
  PlayerFinished = 8,
13
- TickInputBatch = 9
13
+ TickInputBatch = 9,
14
+ HashReport = 10,
15
+ HashMismatch = 11
14
16
  }
15
17
  export declare const enum TickInputKind {
16
18
  Client = 0,
@@ -74,6 +76,17 @@ export declare const PlayerFinishedSchema: BinarySchema<{
74
76
  playerSlot: FieldType.Uint8;
75
77
  payloadLength: FieldType.Uint16;
76
78
  }>;
79
+ export declare const HashReportSchema: BinarySchema<{
80
+ hash: FieldType.Uint32;
81
+ atTick: FieldType.Uint32;
82
+ }>;
83
+ export declare const HashMismatchSchema: BinarySchema<{
84
+ slotA: FieldType.Uint8;
85
+ slotB: FieldType.Uint8;
86
+ hashA: FieldType.Uint32;
87
+ hashB: FieldType.Uint32;
88
+ atTick: FieldType.Uint32;
89
+ }>;
77
90
  export interface ServerHelloPlayer {
78
91
  readonly playerId: Uint8Array;
79
92
  readonly slot: number;
@@ -122,6 +135,17 @@ export interface PlayerFinishedData {
122
135
  readonly playerSlot: number;
123
136
  readonly payload: Uint8Array;
124
137
  }
138
+ export interface HashReportData {
139
+ readonly hash: number;
140
+ readonly atTick: number;
141
+ }
142
+ export interface HashMismatchData {
143
+ readonly slotA: number;
144
+ readonly slotB: number;
145
+ readonly hashA: number;
146
+ readonly hashB: number;
147
+ readonly atTick: number;
148
+ }
125
149
  export declare function packServerHello(data: ServerHelloData): Uint8Array;
126
150
  export declare function packTickInput(data: TickInputData): Uint8Array;
127
151
  export declare function packTickInputFanout(data: FanoutData): Uint8Array;
@@ -131,6 +155,8 @@ export declare function packPing(cSend: number): Uint8Array;
131
155
  export declare function packPong(data: PongData): Uint8Array;
132
156
  export declare function packStateRequest(requestId: number): Uint8Array;
133
157
  export declare function packStateResponse(data: StateResponseData): Uint8Array;
158
+ export declare function packHashReport(data: HashReportData): Uint8Array;
159
+ export declare function packHashMismatch(data: HashMismatchData): Uint8Array;
134
160
  export declare function packPlayerFinished(data: PlayerFinishedData): Uint8Array;
135
161
  export declare function unpackHeader(data: ArrayBuffer): {
136
162
  version: number;
@@ -144,5 +170,7 @@ export declare function unpackPong(data: ArrayBuffer): PongData;
144
170
  export declare function unpackStateRequest(data: ArrayBuffer): number;
145
171
  export declare function unpackStateResponse(data: ArrayBuffer): StateResponseData;
146
172
  export declare function unpackPlayerFinished(data: ArrayBuffer): PlayerFinishedData;
173
+ export declare function unpackHashReport(data: ArrayBuffer): HashReportData;
174
+ export declare function unpackHashMismatch(data: ArrayBuffer): HashMismatchData;
147
175
  export declare function unpackTickInputFanout(data: ArrayBuffer): FanoutData;
148
176
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/lib/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/lib/protocol.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export var MsgType;
15
15
  MsgType[MsgType["StateResponse"] = 7] = "StateResponse";
16
16
  MsgType[MsgType["PlayerFinished"] = 8] = "PlayerFinished";
17
17
  MsgType[MsgType["TickInputBatch"] = 9] = "TickInputBatch";
18
+ MsgType[MsgType["HashReport"] = 10] = "HashReport";
19
+ MsgType[MsgType["HashMismatch"] = 11] = "HashMismatch";
18
20
  })(MsgType || (MsgType = {}));
19
21
  export var TickInputKind;
20
22
  (function(TickInputKind) {
@@ -83,6 +85,17 @@ export const PlayerFinishedSchema = new BinarySchema({
83
85
  playerSlot: FieldType.Uint8,
84
86
  payloadLength: FieldType.Uint16
85
87
  });
88
+ export const HashReportSchema = new BinarySchema({
89
+ hash: FieldType.Uint32,
90
+ atTick: FieldType.Uint32
91
+ });
92
+ export const HashMismatchSchema = new BinarySchema({
93
+ slotA: FieldType.Uint8,
94
+ slotB: FieldType.Uint8,
95
+ hashA: FieldType.Uint32,
96
+ hashB: FieldType.Uint32,
97
+ atTick: FieldType.Uint32
98
+ });
86
99
  // ─────────────────────────────────────────────────────────────
87
100
  // Packing
88
101
  // ─────────────────────────────────────────────────────────────
@@ -222,6 +235,27 @@ export function packStateResponse(data) {
222
235
  pipeline.appendBuffer(data.state);
223
236
  return pipeline.toUint8Array();
224
237
  }
238
+ export function packHashReport(data) {
239
+ const pipeline = new BinarySchemaPackPipeline();
240
+ packHeader(pipeline, 10);
241
+ pipeline.pack(HashReportSchema, {
242
+ hash: data.hash,
243
+ atTick: data.atTick
244
+ });
245
+ return pipeline.toUint8Array();
246
+ }
247
+ export function packHashMismatch(data) {
248
+ const pipeline = new BinarySchemaPackPipeline();
249
+ packHeader(pipeline, 11);
250
+ pipeline.pack(HashMismatchSchema, {
251
+ slotA: data.slotA,
252
+ slotB: data.slotB,
253
+ hashA: data.hashA,
254
+ hashB: data.hashB,
255
+ atTick: data.atTick
256
+ });
257
+ return pipeline.toUint8Array();
258
+ }
225
259
  export function packPlayerFinished(data) {
226
260
  const pipeline = new BinarySchemaPackPipeline();
227
261
  packHeader(pipeline, 8);
@@ -357,6 +391,27 @@ export function unpackPlayerFinished(data) {
357
391
  payload
358
392
  };
359
393
  }
394
+ export function unpackHashReport(data) {
395
+ const pipeline = new BinarySchemaUnpackPipeline(data);
396
+ pipeline.unpack(HeaderSchema);
397
+ const report = pipeline.unpack(HashReportSchema);
398
+ return {
399
+ hash: report.hash,
400
+ atTick: report.atTick
401
+ };
402
+ }
403
+ export function unpackHashMismatch(data) {
404
+ const pipeline = new BinarySchemaUnpackPipeline(data);
405
+ pipeline.unpack(HeaderSchema);
406
+ const mismatch = pipeline.unpack(HashMismatchSchema);
407
+ return {
408
+ slotA: mismatch.slotA,
409
+ slotB: mismatch.slotB,
410
+ hashA: mismatch.hashA,
411
+ hashB: mismatch.hashB,
412
+ atTick: mismatch.atTick
413
+ };
414
+ }
360
415
  export function unpackTickInputFanout(data) {
361
416
  const view = new DataView(data);
362
417
  let offset = HeaderSchema.byteLength; // skip header
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/protocol.ts"],"sourcesContent":["import {\n BinarySchema,\n BinarySchemaPackPipeline,\n BinarySchemaUnpackPipeline,\n FieldType,\n LE,\n} from '@lagless/binary';\n\n// ─────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────\n\nexport const WIRE_VERSION = 1;\n\nexport const enum MsgType {\n ServerHello = 0,\n TickInput = 1,\n TickInputFanout = 2,\n CancelInput = 3,\n Ping = 4,\n Pong = 5,\n StateRequest = 6,\n StateResponse = 7,\n PlayerFinished = 8,\n TickInputBatch = 9,\n}\n\nexport const enum TickInputKind {\n Client = 0,\n Server = 1,\n}\n\nexport const enum CancelReason {\n TooOld = 0,\n TooFarFuture = 1,\n InvalidSlot = 2,\n}\n\n// ─────────────────────────────────────────────────────────────\n// Schemas\n// ─────────────────────────────────────────────────────────────\n\nexport const HeaderSchema = new BinarySchema({\n version: FieldType.Uint8,\n type: FieldType.Uint8,\n});\n\nexport const ServerHelloSchema = new BinarySchema({\n playerSlot: FieldType.Uint8,\n serverTick: FieldType.Uint32,\n maxPlayers: FieldType.Uint8,\n playerCount: FieldType.Uint8,\n});\n\nexport const TickInputSchema = new BinarySchema({\n tick: FieldType.Uint32,\n playerSlot: FieldType.Uint8,\n seq: FieldType.Uint32,\n kind: FieldType.Uint8,\n payloadLength: FieldType.Uint16,\n});\n\nexport const TickInputFanoutSchema = new BinarySchema({\n serverTick: FieldType.Uint32,\n inputCount: FieldType.Uint8,\n});\n\nexport const TickInputBatchSchema = new BinarySchema({\n inputCount: FieldType.Uint8,\n});\n\nexport const CancelInputSchema = new BinarySchema({\n tick: FieldType.Uint32,\n playerSlot: FieldType.Uint8,\n seq: FieldType.Uint32,\n reason: FieldType.Uint8,\n});\n\nexport const PingSchema = new BinarySchema({\n cSend: FieldType.Float64,\n});\n\nexport const PongSchema = new BinarySchema({\n cSend: FieldType.Float64,\n sRecv: FieldType.Float64,\n sSend: FieldType.Float64,\n sTick: FieldType.Uint32,\n});\n\nexport const StateRequestSchema = new BinarySchema({\n requestId: FieldType.Uint32,\n});\n\nexport const StateResponseHeaderSchema = new BinarySchema({\n requestId: FieldType.Uint32,\n tick: FieldType.Uint32,\n hash: FieldType.Uint32,\n stateLength: FieldType.Uint32,\n});\n\nexport const PlayerFinishedSchema = new BinarySchema({\n tick: FieldType.Uint32,\n playerSlot: FieldType.Uint8,\n payloadLength: FieldType.Uint16,\n});\n\n// ─────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────\n\nexport interface ServerHelloPlayer {\n readonly playerId: Uint8Array; // 16 bytes UUID\n readonly slot: number;\n readonly isBot: boolean;\n readonly metadataJson: string; // JSON-encoded metadata\n}\n\nexport interface ServerHelloData {\n readonly seed: Uint8Array; // 16-byte PRNG seed\n readonly playerSlot: number;\n readonly serverTick: number;\n readonly maxPlayers: number;\n readonly players: ReadonlyArray<ServerHelloPlayer>;\n readonly scopeJson: string;\n}\n\nexport interface TickInputData {\n readonly tick: number;\n readonly playerSlot: number;\n readonly seq: number;\n readonly kind: TickInputKind;\n readonly payload: Uint8Array;\n}\n\nexport interface FanoutData {\n readonly serverTick: number;\n readonly inputs: ReadonlyArray<TickInputData>;\n}\n\nexport interface CancelInputData {\n readonly tick: number;\n readonly playerSlot: number;\n readonly seq: number;\n readonly reason: CancelReason;\n}\n\nexport interface PongData {\n readonly cSend: number;\n readonly sRecv: number;\n readonly sSend: number;\n readonly sTick: number;\n}\n\nexport interface StateResponseData {\n readonly requestId: number;\n readonly tick: number;\n readonly hash: number;\n readonly state: ArrayBuffer;\n}\n\nexport interface PlayerFinishedData {\n readonly tick: number;\n readonly playerSlot: number;\n readonly payload: Uint8Array;\n}\n\n// ─────────────────────────────────────────────────────────────\n// Packing\n// ─────────────────────────────────────────────────────────────\n\nfunction packHeader(pipeline: BinarySchemaPackPipeline, type: MsgType): void {\n pipeline.pack(HeaderSchema, { version: WIRE_VERSION, type });\n}\n\nexport function packServerHello(data: ServerHelloData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n\n packHeader(pipeline, MsgType.ServerHello);\n pipeline.appendView(data.seed); // 16-byte PRNG seed\n pipeline.pack(ServerHelloSchema, {\n playerSlot: data.playerSlot,\n serverTick: data.serverTick,\n maxPlayers: data.maxPlayers,\n playerCount: data.players.length,\n });\n\n // Pack players: for each player: playerId (16 bytes) + slot (u8) + isBot (u8) + metadataJsonLen (u16) + metadataJson\n const playerChunks: ArrayBuffer[] = [];\n for (const player of data.players) {\n const metadataBytes = new TextEncoder().encode(player.metadataJson);\n const chunk = new ArrayBuffer(16 + 1 + 1 + 2 + metadataBytes.length);\n const view = new DataView(chunk);\n const uint8 = new Uint8Array(chunk);\n uint8.set(player.playerId, 0);\n view.setUint8(16, player.slot);\n view.setUint8(17, player.isBot ? 1 : 0);\n view.setUint16(18, metadataBytes.length, LE);\n uint8.set(metadataBytes, 20);\n playerChunks.push(chunk);\n }\n for (const chunk of playerChunks) {\n pipeline.appendBuffer(chunk);\n }\n\n // Pack scope JSON\n const scopeBytes = new TextEncoder().encode(data.scopeJson);\n const scopeHeader = new ArrayBuffer(2);\n new DataView(scopeHeader).setUint16(0, scopeBytes.length, LE);\n pipeline.appendBuffer(scopeHeader);\n pipeline.appendView(scopeBytes);\n\n return pipeline.toUint8Array();\n}\n\nexport function packTickInput(data: TickInputData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.TickInput);\n pipeline.pack(TickInputSchema, {\n tick: data.tick,\n playerSlot: data.playerSlot,\n seq: data.seq,\n kind: data.kind,\n payloadLength: data.payload.byteLength,\n });\n pipeline.appendView(data.payload);\n return pipeline.toUint8Array();\n}\n\nexport function packTickInputFanout(data: FanoutData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.TickInputFanout);\n pipeline.pack(TickInputFanoutSchema, {\n serverTick: data.serverTick,\n inputCount: data.inputs.length,\n });\n\n for (const input of data.inputs) {\n pipeline.pack(TickInputSchema, {\n tick: input.tick,\n playerSlot: input.playerSlot,\n seq: input.seq,\n kind: input.kind,\n payloadLength: input.payload.byteLength,\n });\n pipeline.appendView(input.payload);\n }\n\n return pipeline.toUint8Array();\n}\n\nexport function packTickInputBatch(inputs: ReadonlyArray<TickInputData>): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.TickInputBatch);\n pipeline.pack(TickInputBatchSchema, { inputCount: inputs.length });\n\n for (const input of inputs) {\n pipeline.pack(TickInputSchema, {\n tick: input.tick,\n playerSlot: input.playerSlot,\n seq: input.seq,\n kind: input.kind,\n payloadLength: input.payload.byteLength,\n });\n pipeline.appendView(input.payload);\n }\n\n return pipeline.toUint8Array();\n}\n\nexport function packCancelInput(data: CancelInputData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.CancelInput);\n pipeline.pack(CancelInputSchema, {\n tick: data.tick,\n playerSlot: data.playerSlot,\n seq: data.seq,\n reason: data.reason,\n });\n return pipeline.toUint8Array();\n}\n\nexport function packPing(cSend: number): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.Ping);\n pipeline.pack(PingSchema, { cSend });\n return pipeline.toUint8Array();\n}\n\nexport function packPong(data: PongData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.Pong);\n pipeline.pack(PongSchema, data);\n return pipeline.toUint8Array();\n}\n\nexport function packStateRequest(requestId: number): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.StateRequest);\n pipeline.pack(StateRequestSchema, { requestId });\n return pipeline.toUint8Array();\n}\n\nexport function packStateResponse(data: StateResponseData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.StateResponse);\n pipeline.pack(StateResponseHeaderSchema, {\n requestId: data.requestId,\n tick: data.tick,\n hash: data.hash,\n stateLength: data.state.byteLength,\n });\n pipeline.appendBuffer(data.state);\n return pipeline.toUint8Array();\n}\n\nexport function packPlayerFinished(data: PlayerFinishedData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.PlayerFinished);\n pipeline.pack(PlayerFinishedSchema, {\n tick: data.tick,\n playerSlot: data.playerSlot,\n payloadLength: data.payload.byteLength,\n });\n pipeline.appendView(data.payload);\n return pipeline.toUint8Array();\n}\n\n// ─────────────────────────────────────────────────────────────\n// Unpacking\n// ─────────────────────────────────────────────────────────────\n\nexport function unpackHeader(data: ArrayBuffer): { version: number; type: MsgType } {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n const header = pipeline.unpack(HeaderSchema);\n return { version: header.version, type: header.type as MsgType };\n}\n\nexport function unpackServerHello(data: ArrayBuffer): ServerHelloData {\n const uint8 = new Uint8Array(data);\n const view = new DataView(data);\n let offset = HeaderSchema.byteLength; // skip header (2B)\n\n // Read 16-byte seed\n const seed = uint8.slice(offset, offset + 16);\n offset += 16;\n\n // Read schema fields manually (matches ServerHelloSchema field order)\n const playerSlot = view.getUint8(offset); offset += 1;\n const serverTick = view.getUint32(offset, LE); offset += 4;\n const maxPlayers = view.getUint8(offset); offset += 1;\n const playerCount = view.getUint8(offset); offset += 1;\n\n // Players\n const players: ServerHelloPlayer[] = [];\n for (let i = 0; i < playerCount; i++) {\n const playerId = uint8.slice(offset, offset + 16);\n offset += 16;\n const slot = uint8[offset++];\n const isBot = uint8[offset++] === 1;\n const metadataLen = view.getUint16(offset, LE);\n offset += 2;\n const metadataJson = new TextDecoder().decode(uint8.slice(offset, offset + metadataLen));\n offset += metadataLen;\n players.push({ playerId, slot, isBot, metadataJson });\n }\n\n // Scope JSON\n const scopeLen = view.getUint16(offset, LE);\n offset += 2;\n const scopeJson = new TextDecoder().decode(uint8.slice(offset, offset + scopeLen));\n\n return {\n seed,\n playerSlot,\n serverTick,\n maxPlayers,\n players,\n scopeJson,\n };\n}\n\nexport function unpackTickInput(data: ArrayBuffer): TickInputData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema); // skip header\n const input = pipeline.unpack(TickInputSchema);\n const payload = new Uint8Array(pipeline.sliceRemaining()).slice(0, input.payloadLength);\n return {\n tick: input.tick,\n playerSlot: input.playerSlot,\n seq: input.seq,\n kind: input.kind as TickInputKind,\n payload,\n };\n}\n\nexport function unpackCancelInput(data: ArrayBuffer): CancelInputData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const cancel = pipeline.unpack(CancelInputSchema);\n return {\n tick: cancel.tick,\n playerSlot: cancel.playerSlot,\n seq: cancel.seq,\n reason: cancel.reason as CancelReason,\n };\n}\n\nexport function unpackPing(data: ArrayBuffer): number {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const ping = pipeline.unpack(PingSchema);\n return ping.cSend;\n}\n\nexport function unpackPong(data: ArrayBuffer): PongData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n return pipeline.unpack(PongSchema);\n}\n\nexport function unpackStateRequest(data: ArrayBuffer): number {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const req = pipeline.unpack(StateRequestSchema);\n return req.requestId;\n}\n\nexport function unpackStateResponse(data: ArrayBuffer): StateResponseData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const header = pipeline.unpack(StateResponseHeaderSchema);\n const remaining = pipeline.sliceRemaining();\n const state = remaining.slice(0, header.stateLength);\n return {\n requestId: header.requestId,\n tick: header.tick,\n hash: header.hash,\n state,\n };\n}\n\nexport function unpackPlayerFinished(data: ArrayBuffer): PlayerFinishedData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const pf = pipeline.unpack(PlayerFinishedSchema);\n const remaining = new Uint8Array(pipeline.sliceRemaining());\n const payload = remaining.slice(0, pf.payloadLength);\n return {\n tick: pf.tick,\n playerSlot: pf.playerSlot,\n payload,\n };\n}\n\nexport function unpackTickInputFanout(data: ArrayBuffer): FanoutData {\n const view = new DataView(data);\n let offset = HeaderSchema.byteLength; // skip header\n\n const serverTick = view.getUint32(offset, LE); offset += 4;\n const inputCount = view.getUint8(offset); offset += 1;\n\n const inputs: TickInputData[] = [];\n for (let i = 0; i < inputCount; i++) {\n const tick = view.getUint32(offset, LE); offset += 4;\n const playerSlot = view.getUint8(offset); offset += 1;\n const seq = view.getUint32(offset, LE); offset += 4;\n const kind = view.getUint8(offset) as TickInputKind; offset += 1;\n const payloadLength = view.getUint16(offset, LE); offset += 2;\n const payload = new Uint8Array(data.slice(offset, offset + payloadLength));\n offset += payloadLength;\n\n inputs.push({ tick, playerSlot, seq, kind, payload });\n }\n\n return { serverTick, inputs };\n}\n"],"names":["BinarySchema","BinarySchemaPackPipeline","BinarySchemaUnpackPipeline","FieldType","LE","WIRE_VERSION","MsgType","TickInputKind","CancelReason","HeaderSchema","version","Uint8","type","ServerHelloSchema","playerSlot","serverTick","Uint32","maxPlayers","playerCount","TickInputSchema","tick","seq","kind","payloadLength","Uint16","TickInputFanoutSchema","inputCount","TickInputBatchSchema","CancelInputSchema","reason","PingSchema","cSend","Float64","PongSchema","sRecv","sSend","sTick","StateRequestSchema","requestId","StateResponseHeaderSchema","hash","stateLength","PlayerFinishedSchema","packHeader","pipeline","pack","packServerHello","data","appendView","seed","players","length","playerChunks","player","metadataBytes","TextEncoder","encode","metadataJson","chunk","ArrayBuffer","view","DataView","uint8","Uint8Array","set","playerId","setUint8","slot","isBot","setUint16","push","appendBuffer","scopeBytes","scopeJson","scopeHeader","toUint8Array","packTickInput","payload","byteLength","packTickInputFanout","inputs","input","packTickInputBatch","packCancelInput","packPing","packPong","packStateRequest","packStateResponse","state","packPlayerFinished","unpackHeader","header","unpack","unpackServerHello","offset","slice","getUint8","getUint32","i","metadataLen","getUint16","TextDecoder","decode","scopeLen","unpackTickInput","sliceRemaining","unpackCancelInput","cancel","unpackPing","ping","unpackPong","unpackStateRequest","req","unpackStateResponse","remaining","unpackPlayerFinished","pf","unpackTickInputFanout"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/protocol.ts"],"sourcesContent":["import {\n BinarySchema,\n BinarySchemaPackPipeline,\n BinarySchemaUnpackPipeline,\n FieldType,\n LE,\n} from '@lagless/binary';\n\n// ─────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────\n\nexport const WIRE_VERSION = 1;\n\nexport const enum MsgType {\n ServerHello = 0,\n TickInput = 1,\n TickInputFanout = 2,\n CancelInput = 3,\n Ping = 4,\n Pong = 5,\n StateRequest = 6,\n StateResponse = 7,\n PlayerFinished = 8,\n TickInputBatch = 9,\n HashReport = 10,\n HashMismatch = 11,\n}\n\nexport const enum TickInputKind {\n Client = 0,\n Server = 1,\n}\n\nexport const enum CancelReason {\n TooOld = 0,\n TooFarFuture = 1,\n InvalidSlot = 2,\n}\n\n// ─────────────────────────────────────────────────────────────\n// Schemas\n// ─────────────────────────────────────────────────────────────\n\nexport const HeaderSchema = new BinarySchema({\n version: FieldType.Uint8,\n type: FieldType.Uint8,\n});\n\nexport const ServerHelloSchema = new BinarySchema({\n playerSlot: FieldType.Uint8,\n serverTick: FieldType.Uint32,\n maxPlayers: FieldType.Uint8,\n playerCount: FieldType.Uint8,\n});\n\nexport const TickInputSchema = new BinarySchema({\n tick: FieldType.Uint32,\n playerSlot: FieldType.Uint8,\n seq: FieldType.Uint32,\n kind: FieldType.Uint8,\n payloadLength: FieldType.Uint16,\n});\n\nexport const TickInputFanoutSchema = new BinarySchema({\n serverTick: FieldType.Uint32,\n inputCount: FieldType.Uint8,\n});\n\nexport const TickInputBatchSchema = new BinarySchema({\n inputCount: FieldType.Uint8,\n});\n\nexport const CancelInputSchema = new BinarySchema({\n tick: FieldType.Uint32,\n playerSlot: FieldType.Uint8,\n seq: FieldType.Uint32,\n reason: FieldType.Uint8,\n});\n\nexport const PingSchema = new BinarySchema({\n cSend: FieldType.Float64,\n});\n\nexport const PongSchema = new BinarySchema({\n cSend: FieldType.Float64,\n sRecv: FieldType.Float64,\n sSend: FieldType.Float64,\n sTick: FieldType.Uint32,\n});\n\nexport const StateRequestSchema = new BinarySchema({\n requestId: FieldType.Uint32,\n});\n\nexport const StateResponseHeaderSchema = new BinarySchema({\n requestId: FieldType.Uint32,\n tick: FieldType.Uint32,\n hash: FieldType.Uint32,\n stateLength: FieldType.Uint32,\n});\n\nexport const PlayerFinishedSchema = new BinarySchema({\n tick: FieldType.Uint32,\n playerSlot: FieldType.Uint8,\n payloadLength: FieldType.Uint16,\n});\n\nexport const HashReportSchema = new BinarySchema({\n hash: FieldType.Uint32,\n atTick: FieldType.Uint32,\n});\n\nexport const HashMismatchSchema = new BinarySchema({\n slotA: FieldType.Uint8,\n slotB: FieldType.Uint8,\n hashA: FieldType.Uint32,\n hashB: FieldType.Uint32,\n atTick: FieldType.Uint32,\n});\n\n// ─────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────\n\nexport interface ServerHelloPlayer {\n readonly playerId: Uint8Array; // 16 bytes UUID\n readonly slot: number;\n readonly isBot: boolean;\n readonly metadataJson: string; // JSON-encoded metadata\n}\n\nexport interface ServerHelloData {\n readonly seed: Uint8Array; // 16-byte PRNG seed\n readonly playerSlot: number;\n readonly serverTick: number;\n readonly maxPlayers: number;\n readonly players: ReadonlyArray<ServerHelloPlayer>;\n readonly scopeJson: string;\n}\n\nexport interface TickInputData {\n readonly tick: number;\n readonly playerSlot: number;\n readonly seq: number;\n readonly kind: TickInputKind;\n readonly payload: Uint8Array;\n}\n\nexport interface FanoutData {\n readonly serverTick: number;\n readonly inputs: ReadonlyArray<TickInputData>;\n}\n\nexport interface CancelInputData {\n readonly tick: number;\n readonly playerSlot: number;\n readonly seq: number;\n readonly reason: CancelReason;\n}\n\nexport interface PongData {\n readonly cSend: number;\n readonly sRecv: number;\n readonly sSend: number;\n readonly sTick: number;\n}\n\nexport interface StateResponseData {\n readonly requestId: number;\n readonly tick: number;\n readonly hash: number;\n readonly state: ArrayBuffer;\n}\n\nexport interface PlayerFinishedData {\n readonly tick: number;\n readonly playerSlot: number;\n readonly payload: Uint8Array;\n}\n\nexport interface HashReportData {\n readonly hash: number;\n readonly atTick: number;\n}\n\nexport interface HashMismatchData {\n readonly slotA: number;\n readonly slotB: number;\n readonly hashA: number;\n readonly hashB: number;\n readonly atTick: number;\n}\n\n// ─────────────────────────────────────────────────────────────\n// Packing\n// ─────────────────────────────────────────────────────────────\n\nfunction packHeader(pipeline: BinarySchemaPackPipeline, type: MsgType): void {\n pipeline.pack(HeaderSchema, { version: WIRE_VERSION, type });\n}\n\nexport function packServerHello(data: ServerHelloData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n\n packHeader(pipeline, MsgType.ServerHello);\n pipeline.appendView(data.seed); // 16-byte PRNG seed\n pipeline.pack(ServerHelloSchema, {\n playerSlot: data.playerSlot,\n serverTick: data.serverTick,\n maxPlayers: data.maxPlayers,\n playerCount: data.players.length,\n });\n\n // Pack players: for each player: playerId (16 bytes) + slot (u8) + isBot (u8) + metadataJsonLen (u16) + metadataJson\n const playerChunks: ArrayBuffer[] = [];\n for (const player of data.players) {\n const metadataBytes = new TextEncoder().encode(player.metadataJson);\n const chunk = new ArrayBuffer(16 + 1 + 1 + 2 + metadataBytes.length);\n const view = new DataView(chunk);\n const uint8 = new Uint8Array(chunk);\n uint8.set(player.playerId, 0);\n view.setUint8(16, player.slot);\n view.setUint8(17, player.isBot ? 1 : 0);\n view.setUint16(18, metadataBytes.length, LE);\n uint8.set(metadataBytes, 20);\n playerChunks.push(chunk);\n }\n for (const chunk of playerChunks) {\n pipeline.appendBuffer(chunk);\n }\n\n // Pack scope JSON\n const scopeBytes = new TextEncoder().encode(data.scopeJson);\n const scopeHeader = new ArrayBuffer(2);\n new DataView(scopeHeader).setUint16(0, scopeBytes.length, LE);\n pipeline.appendBuffer(scopeHeader);\n pipeline.appendView(scopeBytes);\n\n return pipeline.toUint8Array();\n}\n\nexport function packTickInput(data: TickInputData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.TickInput);\n pipeline.pack(TickInputSchema, {\n tick: data.tick,\n playerSlot: data.playerSlot,\n seq: data.seq,\n kind: data.kind,\n payloadLength: data.payload.byteLength,\n });\n pipeline.appendView(data.payload);\n return pipeline.toUint8Array();\n}\n\nexport function packTickInputFanout(data: FanoutData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.TickInputFanout);\n pipeline.pack(TickInputFanoutSchema, {\n serverTick: data.serverTick,\n inputCount: data.inputs.length,\n });\n\n for (const input of data.inputs) {\n pipeline.pack(TickInputSchema, {\n tick: input.tick,\n playerSlot: input.playerSlot,\n seq: input.seq,\n kind: input.kind,\n payloadLength: input.payload.byteLength,\n });\n pipeline.appendView(input.payload);\n }\n\n return pipeline.toUint8Array();\n}\n\nexport function packTickInputBatch(inputs: ReadonlyArray<TickInputData>): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.TickInputBatch);\n pipeline.pack(TickInputBatchSchema, { inputCount: inputs.length });\n\n for (const input of inputs) {\n pipeline.pack(TickInputSchema, {\n tick: input.tick,\n playerSlot: input.playerSlot,\n seq: input.seq,\n kind: input.kind,\n payloadLength: input.payload.byteLength,\n });\n pipeline.appendView(input.payload);\n }\n\n return pipeline.toUint8Array();\n}\n\nexport function packCancelInput(data: CancelInputData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.CancelInput);\n pipeline.pack(CancelInputSchema, {\n tick: data.tick,\n playerSlot: data.playerSlot,\n seq: data.seq,\n reason: data.reason,\n });\n return pipeline.toUint8Array();\n}\n\nexport function packPing(cSend: number): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.Ping);\n pipeline.pack(PingSchema, { cSend });\n return pipeline.toUint8Array();\n}\n\nexport function packPong(data: PongData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.Pong);\n pipeline.pack(PongSchema, data);\n return pipeline.toUint8Array();\n}\n\nexport function packStateRequest(requestId: number): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.StateRequest);\n pipeline.pack(StateRequestSchema, { requestId });\n return pipeline.toUint8Array();\n}\n\nexport function packStateResponse(data: StateResponseData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.StateResponse);\n pipeline.pack(StateResponseHeaderSchema, {\n requestId: data.requestId,\n tick: data.tick,\n hash: data.hash,\n stateLength: data.state.byteLength,\n });\n pipeline.appendBuffer(data.state);\n return pipeline.toUint8Array();\n}\n\nexport function packHashReport(data: HashReportData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.HashReport);\n pipeline.pack(HashReportSchema, { hash: data.hash, atTick: data.atTick });\n return pipeline.toUint8Array();\n}\n\nexport function packHashMismatch(data: HashMismatchData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.HashMismatch);\n pipeline.pack(HashMismatchSchema, {\n slotA: data.slotA,\n slotB: data.slotB,\n hashA: data.hashA,\n hashB: data.hashB,\n atTick: data.atTick,\n });\n return pipeline.toUint8Array();\n}\n\nexport function packPlayerFinished(data: PlayerFinishedData): Uint8Array {\n const pipeline = new BinarySchemaPackPipeline();\n packHeader(pipeline, MsgType.PlayerFinished);\n pipeline.pack(PlayerFinishedSchema, {\n tick: data.tick,\n playerSlot: data.playerSlot,\n payloadLength: data.payload.byteLength,\n });\n pipeline.appendView(data.payload);\n return pipeline.toUint8Array();\n}\n\n// ─────────────────────────────────────────────────────────────\n// Unpacking\n// ─────────────────────────────────────────────────────────────\n\nexport function unpackHeader(data: ArrayBuffer): { version: number; type: MsgType } {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n const header = pipeline.unpack(HeaderSchema);\n return { version: header.version, type: header.type as MsgType };\n}\n\nexport function unpackServerHello(data: ArrayBuffer): ServerHelloData {\n const uint8 = new Uint8Array(data);\n const view = new DataView(data);\n let offset = HeaderSchema.byteLength; // skip header (2B)\n\n // Read 16-byte seed\n const seed = uint8.slice(offset, offset + 16);\n offset += 16;\n\n // Read schema fields manually (matches ServerHelloSchema field order)\n const playerSlot = view.getUint8(offset); offset += 1;\n const serverTick = view.getUint32(offset, LE); offset += 4;\n const maxPlayers = view.getUint8(offset); offset += 1;\n const playerCount = view.getUint8(offset); offset += 1;\n\n // Players\n const players: ServerHelloPlayer[] = [];\n for (let i = 0; i < playerCount; i++) {\n const playerId = uint8.slice(offset, offset + 16);\n offset += 16;\n const slot = uint8[offset++];\n const isBot = uint8[offset++] === 1;\n const metadataLen = view.getUint16(offset, LE);\n offset += 2;\n const metadataJson = new TextDecoder().decode(uint8.slice(offset, offset + metadataLen));\n offset += metadataLen;\n players.push({ playerId, slot, isBot, metadataJson });\n }\n\n // Scope JSON\n const scopeLen = view.getUint16(offset, LE);\n offset += 2;\n const scopeJson = new TextDecoder().decode(uint8.slice(offset, offset + scopeLen));\n\n return {\n seed,\n playerSlot,\n serverTick,\n maxPlayers,\n players,\n scopeJson,\n };\n}\n\nexport function unpackTickInput(data: ArrayBuffer): TickInputData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema); // skip header\n const input = pipeline.unpack(TickInputSchema);\n const payload = new Uint8Array(pipeline.sliceRemaining()).slice(0, input.payloadLength);\n return {\n tick: input.tick,\n playerSlot: input.playerSlot,\n seq: input.seq,\n kind: input.kind as TickInputKind,\n payload,\n };\n}\n\nexport function unpackCancelInput(data: ArrayBuffer): CancelInputData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const cancel = pipeline.unpack(CancelInputSchema);\n return {\n tick: cancel.tick,\n playerSlot: cancel.playerSlot,\n seq: cancel.seq,\n reason: cancel.reason as CancelReason,\n };\n}\n\nexport function unpackPing(data: ArrayBuffer): number {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const ping = pipeline.unpack(PingSchema);\n return ping.cSend;\n}\n\nexport function unpackPong(data: ArrayBuffer): PongData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n return pipeline.unpack(PongSchema);\n}\n\nexport function unpackStateRequest(data: ArrayBuffer): number {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const req = pipeline.unpack(StateRequestSchema);\n return req.requestId;\n}\n\nexport function unpackStateResponse(data: ArrayBuffer): StateResponseData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const header = pipeline.unpack(StateResponseHeaderSchema);\n const remaining = pipeline.sliceRemaining();\n const state = remaining.slice(0, header.stateLength);\n return {\n requestId: header.requestId,\n tick: header.tick,\n hash: header.hash,\n state,\n };\n}\n\nexport function unpackPlayerFinished(data: ArrayBuffer): PlayerFinishedData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const pf = pipeline.unpack(PlayerFinishedSchema);\n const remaining = new Uint8Array(pipeline.sliceRemaining());\n const payload = remaining.slice(0, pf.payloadLength);\n return {\n tick: pf.tick,\n playerSlot: pf.playerSlot,\n payload,\n };\n}\n\nexport function unpackHashReport(data: ArrayBuffer): HashReportData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const report = pipeline.unpack(HashReportSchema);\n return { hash: report.hash, atTick: report.atTick };\n}\n\nexport function unpackHashMismatch(data: ArrayBuffer): HashMismatchData {\n const pipeline = new BinarySchemaUnpackPipeline(data);\n pipeline.unpack(HeaderSchema);\n const mismatch = pipeline.unpack(HashMismatchSchema);\n return {\n slotA: mismatch.slotA,\n slotB: mismatch.slotB,\n hashA: mismatch.hashA,\n hashB: mismatch.hashB,\n atTick: mismatch.atTick,\n };\n}\n\nexport function unpackTickInputFanout(data: ArrayBuffer): FanoutData {\n const view = new DataView(data);\n let offset = HeaderSchema.byteLength; // skip header\n\n const serverTick = view.getUint32(offset, LE); offset += 4;\n const inputCount = view.getUint8(offset); offset += 1;\n\n const inputs: TickInputData[] = [];\n for (let i = 0; i < inputCount; i++) {\n const tick = view.getUint32(offset, LE); offset += 4;\n const playerSlot = view.getUint8(offset); offset += 1;\n const seq = view.getUint32(offset, LE); offset += 4;\n const kind = view.getUint8(offset) as TickInputKind; offset += 1;\n const payloadLength = view.getUint16(offset, LE); offset += 2;\n const payload = new Uint8Array(data.slice(offset, offset + payloadLength));\n offset += payloadLength;\n\n inputs.push({ tick, playerSlot, seq, kind, payload });\n }\n\n return { serverTick, inputs };\n}\n"],"names":["BinarySchema","BinarySchemaPackPipeline","BinarySchemaUnpackPipeline","FieldType","LE","WIRE_VERSION","MsgType","TickInputKind","CancelReason","HeaderSchema","version","Uint8","type","ServerHelloSchema","playerSlot","serverTick","Uint32","maxPlayers","playerCount","TickInputSchema","tick","seq","kind","payloadLength","Uint16","TickInputFanoutSchema","inputCount","TickInputBatchSchema","CancelInputSchema","reason","PingSchema","cSend","Float64","PongSchema","sRecv","sSend","sTick","StateRequestSchema","requestId","StateResponseHeaderSchema","hash","stateLength","PlayerFinishedSchema","HashReportSchema","atTick","HashMismatchSchema","slotA","slotB","hashA","hashB","packHeader","pipeline","pack","packServerHello","data","appendView","seed","players","length","playerChunks","player","metadataBytes","TextEncoder","encode","metadataJson","chunk","ArrayBuffer","view","DataView","uint8","Uint8Array","set","playerId","setUint8","slot","isBot","setUint16","push","appendBuffer","scopeBytes","scopeJson","scopeHeader","toUint8Array","packTickInput","payload","byteLength","packTickInputFanout","inputs","input","packTickInputBatch","packCancelInput","packPing","packPong","packStateRequest","packStateResponse","state","packHashReport","packHashMismatch","packPlayerFinished","unpackHeader","header","unpack","unpackServerHello","offset","slice","getUint8","getUint32","i","metadataLen","getUint16","TextDecoder","decode","scopeLen","unpackTickInput","sliceRemaining","unpackCancelInput","cancel","unpackPing","ping","unpackPong","unpackStateRequest","req","unpackStateResponse","remaining","unpackPlayerFinished","pf","unpackHashReport","report","unpackHashMismatch","mismatch","unpackTickInputFanout"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lagless/net-wire",
3
- "version": "0.0.46",
3
+ "version": "0.0.50",
4
4
  "license": "CC-BY-NC-4.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,8 +39,8 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@swc/helpers": "~0.5.11",
42
- "@lagless/misc": "0.0.46",
43
- "@lagless/binary": "0.0.46"
42
+ "@lagless/binary": "0.0.50",
43
+ "@lagless/misc": "0.0.50"
44
44
  },
45
45
  "files": [
46
46
  "dist",