@clockworkdog/timesync 2.11.0 → 2.11.2

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/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './timesync';
1
+ export { createTimeSyncClient, createTimeSyncServer, TimeSyncClient, TimeSyncRequestData, TimeSyncResponseData, TimeSyncServer } from './timesync';
2
2
  export * from './setDate';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export * from './timesync';
1
+ export { createTimeSyncClient, createTimeSyncServer } from './timesync';
2
2
  export * from './setDate';
@@ -16,6 +16,12 @@ export interface TimeSyncClient {
16
16
  export interface TimeSyncServer {
17
17
  receive(data: TimeSyncRequestData): void;
18
18
  }
19
+ interface CompletedRequest {
20
+ sentAt: number;
21
+ receivedAt: number;
22
+ serverNow: number;
23
+ clientNow: number;
24
+ }
19
25
  export declare function createTimeSyncClient({ interval, send, onChange, syncSampleSize, syncRequestTimeout, }: {
20
26
  interval: number;
21
27
  send: (data: TimeSyncRequestData) => void | Promise<void>;
@@ -23,6 +29,8 @@ export declare function createTimeSyncClient({ interval, send, onChange, syncSam
23
29
  syncSampleSize?: number;
24
30
  syncRequestTimeout?: number;
25
31
  }): TimeSyncClient;
32
+ export declare function calculateDelta(results: CompletedRequest[]): number;
26
33
  export declare function createTimeSyncServer({ send }: {
27
34
  send: (data: TimeSyncResponseData) => void | Promise<void>;
28
35
  }): TimeSyncServer;
36
+ export {};
package/dist/timesync.js CHANGED
@@ -13,9 +13,10 @@ export function createTimeSyncClient({ interval, send, onChange = setDate, syncS
13
13
  for (let i = 0; i < syncSampleSize; i++) {
14
14
  const promise = new Promise((resolve) => {
15
15
  const id = getId();
16
+ const clientNow = Date.now();
16
17
  const sentAt = performance.now();
17
18
  send({ timesync: { id } });
18
- const complete = (receivedAt, serverNow) => resolve({ sentAt, receivedAt, serverNow, clientNow: Date.now() });
19
+ const complete = (receivedAt, serverNow) => resolve({ sentAt, receivedAt, serverNow, clientNow });
19
20
  requests[id] = { complete };
20
21
  setTimeout(() => resolve(null), syncRequestTimeout);
21
22
  });
@@ -23,17 +24,10 @@ export function createTimeSyncClient({ interval, send, onChange = setDate, syncS
23
24
  await promise;
24
25
  }
25
26
  // Perform calculation with results
26
- const results = await Promise.all(promises);
27
- const deltas = results
28
- .filter((result) => result !== null)
29
- .map((result) => {
30
- const { sentAt, receivedAt, serverNow, clientNow } = result;
31
- const halfLatency = (receivedAt - sentAt) / 2;
32
- return clientNow - serverNow + halfLatency;
33
- });
34
- const averageDelta = deltas.reduce((d1, d2) => d1 + d2, 0) / deltas.length;
35
- if (!isNaN(averageDelta)) {
36
- onChange(Date.now() + averageDelta);
27
+ const results = (await Promise.all(promises)).filter((result) => result !== null);
28
+ const delta = calculateDelta(results);
29
+ if (!isNaN(delta)) {
30
+ onChange(Date.now() + delta);
37
31
  }
38
32
  }
39
33
  const receive = (data) => {
@@ -53,6 +47,14 @@ export function createTimeSyncClient({ interval, send, onChange = setDate, syncS
53
47
  destroy,
54
48
  };
55
49
  }
50
+ export function calculateDelta(results) {
51
+ return (results
52
+ .map(({ sentAt, receivedAt, clientNow, serverNow }) => {
53
+ const halfLatency = (receivedAt - sentAt) / 2;
54
+ return serverNow - clientNow - halfLatency;
55
+ })
56
+ .reduce((d1, d2) => d1 + d2, 0) / results.length);
57
+ }
56
58
  export function createTimeSyncServer({ send }) {
57
59
  return {
58
60
  receive(data) {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "A library to synchronize a client's clock to a server's",
4
4
  "author": "Clockwork Dog <info@clockwork.dog>",
5
5
  "homepage": "https://github.com/clockwork-dog/cogs-sdk/tree/main/packages/timesync",
6
- "version": "2.11.0",
6
+ "version": "2.11.2",
7
7
  "keywords": [],
8
8
  "license": "MIT",
9
9
  "repository": {