socket-function 1.2.2 → 1.2.5

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.
Files changed (52) hide show
  1. package/SocketFunction.d.ts +1 -1
  2. package/SocketFunctionTypes.d.ts +1 -1
  3. package/hot/HotReloadController.d.ts +3 -3
  4. package/index.d.ts +25 -10
  5. package/package.json +1 -1
  6. package/require/CSSShim.d.ts +1 -1
  7. package/require/RequireController.d.ts +2 -2
  8. package/require/compileFlags.d.ts +1 -1
  9. package/require/require.d.ts +1 -1
  10. package/src/callManager.d.ts +1 -1
  11. package/src/webSocketServer.ts +44 -35
  12. package/test.ts +5 -11
  13. package/time/trueTimeShim.d.ts +16 -1
  14. package/time/trueTimeShim.ts +43 -7
  15. package/dist/SetProcessVariables.ts.cache +0 -9
  16. package/dist/SocketFunction.ts.cache +0 -467
  17. package/hot/dist/HotReloadController.ts.cache +0 -252
  18. package/require/dist/RequireController.ts.cache +0 -386
  19. package/require/dist/compileFlags.ts.cache +0 -41
  20. package/require/dist/extMapper.ts.cache +0 -368
  21. package/require/dist/require.ts.cache +0 -676
  22. package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
  23. package/src/dist/CallFactory.ts.cache +0 -930
  24. package/src/dist/Zip.ts.cache +0 -156
  25. package/src/dist/batching.ts.cache +0 -377
  26. package/src/dist/bits.ts.cache +0 -121
  27. package/src/dist/buffers.ts.cache +0 -76
  28. package/src/dist/caching.ts.cache +0 -302
  29. package/src/dist/callHTTPHandler.ts.cache +0 -264
  30. package/src/dist/callManager.ts.cache +0 -159
  31. package/src/dist/certStore.ts.cache +0 -59
  32. package/src/dist/createSingleton.ts.cache +0 -62
  33. package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
  34. package/src/dist/forwardPort.ts.cache +0 -222
  35. package/src/dist/https.ts.cache +0 -141
  36. package/src/dist/misc.ts.cache +0 -499
  37. package/src/dist/nodeCache.ts.cache +0 -136
  38. package/src/dist/nodeProxy.ts.cache +0 -57
  39. package/src/dist/protocolNegotiation.ts.cache +0 -101
  40. package/src/dist/tlsParsing.ts.cache +0 -85
  41. package/src/dist/types.ts.cache +0 -9
  42. package/src/dist/webSocketServer.ts.cache +0 -365
  43. package/src/dist/websocketFactory.ts.cache +0 -53
  44. package/src/formatting/dist/colors.ts.cache +0 -98
  45. package/src/formatting/dist/format.ts.cache +0 -396
  46. package/src/formatting/dist/logColors.ts.cache +0 -28
  47. package/src/lz4/dist/LZ4.ts.cache +0 -53
  48. package/src/profiling/dist/getOwnTime.ts.cache +0 -100
  49. package/src/profiling/dist/measure.ts.cache +0 -338
  50. package/src/profiling/dist/stats.ts.cache +0 -202
  51. package/src/profiling/dist/statsFormat.ts.cache +0 -45
  52. package/time/dist/trueTimeShim.ts.cache +0 -707
@@ -1,6 +1,6 @@
1
+ /// <reference path="require/RequireController.d.ts" />
1
2
  /// <reference types="node" />
2
3
  /// <reference types="node" />
3
- /// <reference types="socket-function/require/requirecontroller" />
4
4
  import { SocketExposedInterface, SocketFunctionHook, SocketFunctionClientHook, SocketExposedShape, SocketRegistered, CallerContext, FullCallType, SocketRegisterType } from "./SocketFunctionTypes";
5
5
  import { SocketServerConfig } from "./src/webSocketServer";
6
6
  import { Args, MaybePromise } from "./src/types";
@@ -1,4 +1,4 @@
1
- /// <reference types="socket-function/require/requirecontroller" />
1
+ /// <reference path="require/RequireController.d.ts" />
2
2
  import { getCallObj } from "./src/nodeProxy";
3
3
  import { Args, MaybePromise } from "./src/types";
4
4
  export declare const socket: unique symbol;
@@ -1,5 +1,5 @@
1
- /// <reference types="typenode" />
2
- /// <reference types="socket-function/require/requirecontroller" />
1
+ /// <reference path="../../typenode/index.d.ts" />
2
+ /// <reference path="../require/RequireController.d.ts" />
3
3
  /** Enables some hot reload functionality.
4
4
  * - Triggers a refresh clientside
5
5
  * - Triggers a reload server, for modules marked with `module.hotreload`
@@ -28,7 +28,7 @@ export declare function isHotReloading(): boolean;
28
28
  export declare function hotReloadingGuard(): true;
29
29
  export declare function setExternalHotReloading(value: boolean): void;
30
30
  export declare function onHotReload(callback: (modules: NodeJS.Module[]) => void): void;
31
- export declare const HotReloadController: import("socket-function/SocketFunctionTypes").SocketRegistered<{
31
+ export declare const HotReloadController: import("../SocketFunctionTypes").SocketRegistered<{
32
32
  watchFiles: () => Promise<void>;
33
33
  fileUpdated: (files: string[], changeTime: number) => Promise<void>;
34
34
  }>;
package/index.d.ts CHANGED
@@ -7,9 +7,9 @@ declare module "socket-function/SetProcessVariables" {
7
7
  }
8
8
 
9
9
  declare module "socket-function/SocketFunction" {
10
+ /// <reference path="require/RequireController.d.ts" />
10
11
  /// <reference types="node" />
11
12
  /// <reference types="node" />
12
- /// <reference types="socket-function/require/requirecontroller" />
13
13
  import { SocketExposedInterface, SocketFunctionHook, SocketFunctionClientHook, SocketExposedShape, SocketRegistered, CallerContext, FullCallType, SocketRegisterType } from "socket-function/SocketFunctionTypes";
14
14
  import { SocketServerConfig } from "socket-function/src/webSocketServer";
15
15
  import { Args, MaybePromise } from "socket-function/src/types";
@@ -128,7 +128,7 @@ declare module "socket-function/SocketFunction" {
128
128
  }
129
129
 
130
130
  declare module "socket-function/SocketFunctionTypes" {
131
- /// <reference types="socket-function/require/requirecontroller" />
131
+ /// <reference path="require/RequireController.d.ts" />
132
132
  import { getCallObj } from "socket-function/src/nodeProxy";
133
133
  import { Args, MaybePromise } from "socket-function/src/types";
134
134
  export declare const socket: unique symbol;
@@ -218,8 +218,8 @@ declare module "socket-function/SocketFunctionTypes" {
218
218
  }
219
219
 
220
220
  declare module "socket-function/hot/HotReloadController" {
221
- /// <reference types="typenode" />
222
- /// <reference types="socket-function/require/requirecontroller" />
221
+ /// <reference path="../../typenode/index.d.ts" />
222
+ /// <reference path="../require/RequireController.d.ts" />
223
223
  /** Enables some hot reload functionality.
224
224
  * - Triggers a refresh clientside
225
225
  * - Triggers a reload server, for modules marked with `module.hotreload`
@@ -307,15 +307,15 @@ declare module "socket-function/mobx/promiseToObservable" {
307
307
  }
308
308
 
309
309
  declare module "socket-function/require/CSSShim" {
310
- /// <reference types="socket-function/require/requirecontroller" />
310
+ /// <reference path="RequireController.d.ts" />
311
311
  export {};
312
312
 
313
313
  }
314
314
 
315
315
  declare module "socket-function/require/RequireController" {
316
+ /// <reference path="../../typenode/index.d.ts" />
316
317
  /// <reference types="node" />
317
318
  /// <reference types="node" />
318
- /// <reference types="typenode" />
319
319
  declare global {
320
320
  namespace NodeJS {
321
321
  interface Module {
@@ -430,8 +430,8 @@ declare module "socket-function/require/RequireController" {
430
430
  }
431
431
 
432
432
  declare module "socket-function/require/compileFlags" {
433
+ /// <reference path="RequireController.d.ts" />
433
434
  /// <reference types="node" />
434
- /// <reference types="socket-function/require/requirecontroller" />
435
435
  /**
436
436
  * Adds a global function setFlag(require, "typescript", flag) which sets a flag on the client
437
437
  * - Ex, setFlag(require, "typescript", "allowclient") so allowclient = true on the typescript module.
@@ -453,7 +453,7 @@ declare module "socket-function/require/extMapper" {
453
453
  }
454
454
 
455
455
  declare module "socket-function/require/require" {
456
- /// <reference types="socket-function/src/src" />
456
+ /// <reference path="../src/src.d.ts" />
457
457
  declare global {
458
458
  var onProgressHandler: undefined | ((progress: {
459
459
  type: string;
@@ -789,7 +789,7 @@ declare module "socket-function/src/callHTTPHandler" {
789
789
  }
790
790
 
791
791
  declare module "socket-function/src/callManager" {
792
- /// <reference types="socket-function/hot/hotreloadcontroller" />
792
+ /// <reference path="../hot/HotReloadController.d.ts" />
793
793
  import { CallerContext, CallType, ClientHookContext, FullCallType, FunctionFlags, HookContext, SocketExposedInterface, SocketExposedShape, SocketFunctionClientHook, SocketFunctionHook, SocketRegistered } from "socket-function/SocketFunctionTypes";
794
794
  export declare function getCallFlags(call: CallType): FunctionFlags | undefined;
795
795
  export declare function shouldCompressCall(call: CallType): boolean | "LZ4" | undefined;
@@ -1560,13 +1560,28 @@ declare module "socket-function/time/trueTimeShim" {
1560
1560
  fromTime: number;
1561
1561
  toTime: number;
1562
1562
  };
1563
+ export declare function computeTweenedOffset(components: {
1564
+ systemTime: number;
1565
+ fromOffset: number;
1566
+ toOffset: number;
1567
+ fromTime: number;
1568
+ }): number;
1563
1569
  export declare function getTimeComponents(): {
1564
1570
  systemTime: number;
1565
1571
  offset: number;
1566
1572
  };
1567
1573
  export declare function getTrueTime(): number;
1568
1574
  export declare function getTrueTimeOffset(): number;
1569
- export declare function getTrueTimeProof(): TimeOffsetProof | undefined;
1575
+ export type TrueTimeProof = {
1576
+ systemTime: number;
1577
+ fromOffset: number;
1578
+ toOffset: number;
1579
+ fromTime: number;
1580
+ toTime: number;
1581
+ offset: number;
1582
+ measurement?: TimeOffsetProof;
1583
+ };
1584
+ export declare function getTrueTimeProof(): TrueTimeProof | undefined;
1570
1585
  export declare function waitForFirstTimeSync(): Promise<void> | undefined;
1571
1586
  declare global {
1572
1587
  var TRUE_TIME_ALREADY_SHIMMED: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socket-function",
3
- "version": "1.2.2",
3
+ "version": "1.2.5",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -1,2 +1,2 @@
1
- /// <reference types="socket-function/require/requirecontroller" />
1
+ /// <reference path="RequireController.d.ts" />
2
2
  export {};
@@ -1,6 +1,6 @@
1
+ /// <reference path="../../typenode/index.d.ts" />
1
2
  /// <reference types="node" />
2
3
  /// <reference types="node" />
3
- /// <reference types="typenode" />
4
4
  declare global {
5
5
  namespace NodeJS {
6
6
  interface Module {
@@ -85,7 +85,7 @@ declare global {
85
85
  /** @deprecated, not needed, as this defaults to ".", which is a lot easier to reason about anyways. */
86
86
  export declare function setRequireBootRequire(dir: string): void;
87
87
  export declare function allowAllNodeModules(): void;
88
- export declare const RequireController: import("socket-function/SocketFunctionTypes").SocketRegistered<{
88
+ export declare const RequireController: import("../SocketFunctionTypes").SocketRegistered<{
89
89
  rootResolvePath: "Function has implementation but is not exposed in the SocketFunction.register call";
90
90
  requireHTML: (config?: {
91
91
  requireCalls?: string[];
@@ -1,5 +1,5 @@
1
+ /// <reference path="RequireController.d.ts" />
1
2
  /// <reference types="node" />
2
- /// <reference types="socket-function/require/requirecontroller" />
3
3
  /**
4
4
  * Adds a global function setFlag(require, "typescript", flag) which sets a flag on the client
5
5
  * - Ex, setFlag(require, "typescript", "allowclient") so allowclient = true on the typescript module.
@@ -1,4 +1,4 @@
1
- /// <reference types="socket-function/src/src" />
1
+ /// <reference path="../src/src.d.ts" />
2
2
  declare global {
3
3
  var onProgressHandler: undefined | ((progress: {
4
4
  type: string;
@@ -1,4 +1,4 @@
1
- /// <reference types="socket-function/hot/hotreloadcontroller" />
1
+ /// <reference path="../hot/HotReloadController.d.ts" />
2
2
  import { CallerContext, CallType, ClientHookContext, FullCallType, FunctionFlags, HookContext, SocketExposedInterface, SocketExposedShape, SocketFunctionClientHook, SocketFunctionHook, SocketRegistered } from "../SocketFunctionTypes";
3
3
  export declare function getCallFlags(call: CallType): FunctionFlags | undefined;
4
4
  export declare function shouldCompressCall(call: CallType): boolean | "LZ4" | undefined;
@@ -20,6 +20,12 @@ import { formatTime } from "./formatting/format";
20
20
  import { getExternalIP, testTCPIsListening } from "./networking";
21
21
  import { forwardPort } from "./forwardPort";
22
22
 
23
+ // When a requested port is taken and useAvailablePortIfPortInUse is set, we scan
24
+ // upwards from this base instead of binding a random OS-assigned port, so restarts
25
+ // land on predictable, consistent ports.
26
+ const PORT_SCAN_START = 13000;
27
+ const PORT_SCAN_COUNT = 10000;
28
+
23
29
  export type SocketServerConfig = (
24
30
  https.ServerOptions & {
25
31
  key: string | Buffer;
@@ -311,52 +317,55 @@ export async function startSocketServer(
311
317
 
312
318
  let port = config.port;
313
319
  if (!SocketFunction.silent) {
314
- console.log(yellow(`Trying to listening on ${host}:${port}`));
320
+ console.log(yellow(`Trying to listen on ${host}:${port}`));
315
321
  }
316
322
 
317
- let listeningPromise = waitUntilListening();
318
- listeningPromise.catch(e => { });
319
-
320
- // Return true if we are listening, false if the address is in use, and throws on other errors
321
- async function waitUntilListening() {
323
+ // Attempts to bind realServer to a single port. Resolves true once the server is
324
+ // actually listening, false if the port is already in use, and rejects on any
325
+ // other error. After an EADDRINUSE the server is still usable, so the caller can
326
+ // simply retry listen() on the next candidate.
327
+ async function tryListen(candidatePort: number): Promise<boolean> {
322
328
  return await new Promise<boolean>((resolve, reject) => {
323
- realServer.once("error", e => {
324
- reject(e);
325
- });
326
- realServer.once("listening", () => {
327
- resolve(false);
328
- });
329
- });
330
- }
331
-
332
- if (config.useAvailablePortIfPortInUse && port) {
333
- realServer.listen(port, host);
334
- let isListening = await new Promise<boolean>((resolve, reject) => {
335
- if (realServer.listening) {
336
- resolve(true);
337
- return;
329
+ function cleanup() {
330
+ realServer.removeListener("error", onError);
331
+ realServer.removeListener("listening", onListening);
338
332
  }
339
- realServer.once("error", e => {
340
- if (e.message.includes("EADDRINUSE")) {
341
- resolve(true);
333
+ function onError(e: NodeJS.ErrnoException) {
334
+ cleanup();
335
+ if (e.code === "EADDRINUSE" || e.message.includes("EADDRINUSE")) {
336
+ resolve(false);
342
337
  } else {
343
338
  reject(e);
344
339
  }
345
- });
346
- realServer.once("listening", () => {
347
- resolve(false);
348
- });
340
+ }
341
+ function onListening() {
342
+ cleanup();
343
+ resolve(true);
344
+ }
345
+ realServer.once("error", onError);
346
+ realServer.once("listening", onListening);
347
+ realServer.listen(candidatePort, host);
349
348
  });
350
- if (!isListening) {
351
- port = 0;
352
- realServer.listen(port, host);
353
- listeningPromise = waitUntilListening();
349
+ }
350
+
351
+ let bound = await tryListen(port);
352
+ if (!bound && config.useAvailablePortIfPortInUse) {
353
+ for (let candidate = PORT_SCAN_START; candidate < PORT_SCAN_START + PORT_SCAN_COUNT; candidate++) {
354
+ if (candidate === port) continue;
355
+ if (await tryListen(candidate)) {
356
+ bound = true;
357
+ port = candidate;
358
+ break;
359
+ }
354
360
  }
355
- } else {
356
- realServer.listen(port, host);
361
+ if (!bound) {
362
+ throw new Error(`Could not find an available port in range ${PORT_SCAN_START}-${PORT_SCAN_START + PORT_SCAN_COUNT - 1} (requested ${config.port})`);
363
+ }
364
+ }
365
+ if (!bound) {
366
+ throw new Error(`Port ${port} is already in use (set useAvailablePortIfPortInUse to fall back to another port)`);
357
367
  }
358
368
 
359
- await listeningPromise;
360
369
  port = (realServer.address() as net.AddressInfo).port;
361
370
 
362
371
  if (config.autoForwardPort && config.public) {
package/test.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { getTimeComponentsDetailed, waitForFirstTimeSync } from "./time/trueTimeShim";
1
+ import { computeTweenedOffset, getTimeComponentsDetailed, waitForFirstTimeSync } from "./time/trueTimeShim";
2
2
  import * as fs from "fs";
3
3
  import * as path from "path";
4
4
 
@@ -19,7 +19,6 @@ async function sampleMode() {
19
19
  toOffset: number;
20
20
  fromTime: number;
21
21
  toTime: number;
22
- fraction: number;
23
22
  };
24
23
 
25
24
  const samples: Sample[] = [];
@@ -28,11 +27,8 @@ async function sampleMode() {
28
27
  for (let i = 0; i < SAMPLE_COUNT; i++) {
29
28
  const detailed = getTimeComponentsDetailed();
30
29
 
31
- // Calculate smearing using the same systemTime
32
- const elapsed = detailed.systemTime - detailed.fromTime;
33
- const duration = detailed.toTime - detailed.fromTime;
34
- const fraction = duration > 0 ? Math.min(1, elapsed / duration) : 0;
35
- const offset = detailed.fromOffset + (detailed.toOffset - detailed.fromOffset) * fraction;
30
+ // Calculate the tween using the same systemTime
31
+ const offset = computeTweenedOffset(detailed);
36
32
 
37
33
  samples.push({
38
34
  id: TEST_RUN_ID,
@@ -42,7 +38,6 @@ async function sampleMode() {
42
38
  toOffset: detailed.toOffset,
43
39
  fromTime: detailed.fromTime,
44
40
  toTime: detailed.toTime,
45
- fraction,
46
41
  });
47
42
 
48
43
  if (SAMPLE_INTERVAL_MS > 0) {
@@ -88,7 +83,6 @@ async function verifyMode() {
88
83
  toOffset: number;
89
84
  fromTime: number;
90
85
  toTime: number;
91
- fraction: number;
92
86
  file: string;
93
87
  };
94
88
 
@@ -126,13 +120,13 @@ async function verifyMode() {
126
120
  console.error(` systemTime: ${prev.systemTime}`);
127
121
  console.error(` offset: ${prev.offset}`);
128
122
  console.error(` trueTime: ${prevTrueTime}`);
129
- console.error(` smearing: ${prev.fromOffset} -> ${prev.toOffset} (${(prev.fraction * 100).toFixed(2)}%)`);
123
+ console.error(` tween: ${prev.fromOffset} -> ${prev.toOffset}`);
130
124
  console.error(` timeWindow: ${prev.fromTime} -> ${prev.toTime}`);
131
125
  console.error(` Current [ID: ${sample.id}, file: ${sample.file}]:`);
132
126
  console.error(` systemTime: ${sample.systemTime}`);
133
127
  console.error(` offset: ${sample.offset}`);
134
128
  console.error(` trueTime: ${trueTime}`);
135
- console.error(` smearing: ${sample.fromOffset} -> ${sample.toOffset} (${(sample.fraction * 100).toFixed(2)}%)`);
129
+ console.error(` tween: ${sample.fromOffset} -> ${sample.toOffset}`);
136
130
  console.error(` timeWindow: ${sample.fromTime} -> ${sample.toTime}`);
137
131
  console.error(` Difference: ${trueTime - lastTrueTime}ms`);
138
132
  }
@@ -15,13 +15,28 @@ export declare function getTimeComponentsDetailed(): {
15
15
  fromTime: number;
16
16
  toTime: number;
17
17
  };
18
+ export declare function computeTweenedOffset(components: {
19
+ systemTime: number;
20
+ fromOffset: number;
21
+ toOffset: number;
22
+ fromTime: number;
23
+ }): number;
18
24
  export declare function getTimeComponents(): {
19
25
  systemTime: number;
20
26
  offset: number;
21
27
  };
22
28
  export declare function getTrueTime(): number;
23
29
  export declare function getTrueTimeOffset(): number;
24
- export declare function getTrueTimeProof(): TimeOffsetProof | undefined;
30
+ export type TrueTimeProof = {
31
+ systemTime: number;
32
+ fromOffset: number;
33
+ toOffset: number;
34
+ fromTime: number;
35
+ toTime: number;
36
+ offset: number;
37
+ measurement?: TimeOffsetProof;
38
+ };
39
+ export declare function getTrueTimeProof(): TrueTimeProof | undefined;
25
40
  export declare function waitForFirstTimeSync(): Promise<void> | undefined;
26
41
  declare global {
27
42
  var TRUE_TIME_ALREADY_SHIMMED: boolean;
@@ -27,6 +27,9 @@ const LMDB_MAX_CORRUPTION_FAILURES = 3;
27
27
  // the real time to catch up with it.
28
28
  const MINIMUM_TIME_RATE = 0.5;
29
29
 
30
+ // The offset tweens toward its target at this fraction of elapsed real time, then plateaus once it gets there. Must stay below 1 so output time keeps moving forward even while the offset is shrinking. Tweening across the whole transition window instead would mean a badly-off clock (many seconds) takes the entire window to converge, which breaks transactional consistency with other machines.
31
+ const OFFSET_TWEEN_RATE = 0.5;
32
+
30
33
  const THROW_ON_ERROR = false;
31
34
 
32
35
  // Hugely important as if we don't synchronize between processes, it means our logs are going to be confusing and out of order.
@@ -143,13 +146,24 @@ export function getTimeComponentsDetailed(): {
143
146
  }
144
147
  }
145
148
 
149
+ export function computeTweenedOffset(components: {
150
+ systemTime: number;
151
+ fromOffset: number;
152
+ toOffset: number;
153
+ fromTime: number;
154
+ }): number {
155
+ const elapsed = Math.max(0, components.systemTime - components.fromTime);
156
+ const delta = components.toOffset - components.fromOffset;
157
+ const maxChange = elapsed * OFFSET_TWEEN_RATE;
158
+ if (Math.abs(delta) <= maxChange) {
159
+ return components.toOffset;
160
+ }
161
+ return components.fromOffset + Math.sign(delta) * maxChange;
162
+ }
163
+
146
164
  export function getTimeComponents(): { systemTime: number; offset: number } {
147
165
  const detailed = getTimeComponentsDetailed();
148
- const elapsed = detailed.systemTime - detailed.fromTime;
149
- const duration = detailed.toTime - detailed.fromTime;
150
- const fraction = duration > 0 ? Math.min(1, elapsed / duration) : 0;
151
- const offset = detailed.fromOffset + (detailed.toOffset - detailed.fromOffset) * fraction;
152
- return { systemTime: detailed.systemTime, offset };
166
+ return { systemTime: detailed.systemTime, offset: computeTweenedOffset(detailed) };
153
167
  }
154
168
 
155
169
  export function getTrueTime() {
@@ -179,8 +193,30 @@ export function getTrueTimeOffset() {
179
193
  const { offset } = getTimeComponents();
180
194
  return offset;
181
195
  }
182
- export function getTrueTimeProof(): TimeOffsetProof | undefined {
183
- return cachedTimeOffsetData?.proof;
196
+ export type TrueTimeProof = {
197
+ systemTime: number;
198
+ // The tween endpoints the current offset is moving between. When offset !== toOffset we are still converging.
199
+ fromOffset: number;
200
+ toOffset: number;
201
+ fromTime: number;
202
+ toTime: number;
203
+ offset: number;
204
+ // The raw measurement that produced the newest offset. Undefined if the offset came from a caller-provided base that only returns numbers.
205
+ measurement?: TimeOffsetProof;
206
+ };
207
+ export function getTrueTimeProof(): TrueTimeProof | undefined {
208
+ const data = cachedTimeOffsetData;
209
+ if (!data) return undefined;
210
+ const detailed = getTimeComponentsDetailed();
211
+ return {
212
+ systemTime: detailed.systemTime,
213
+ fromOffset: detailed.fromOffset,
214
+ toOffset: detailed.toOffset,
215
+ fromTime: detailed.fromTime,
216
+ toTime: detailed.toTime,
217
+ offset: computeTweenedOffset(detailed),
218
+ measurement: data.proof,
219
+ };
184
220
  }
185
221
  export function waitForFirstTimeSync(): Promise<void> | undefined {
186
222
  if (didFirstTimeSync) return undefined;
@@ -1,9 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
- module.allowclient = true;
4
- const misc_1 = require("./src/misc");
5
- if (!(0, misc_1.isNode)()) {
6
- process.env.CBOR_NATIVE_ACCELERATION_DISABLED = "true";
7
- }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2V0UHJvY2Vzc1ZhcmlhYmxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlNldFByb2Nlc3NWYXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMxQixxQ0FBb0M7QUFFcEMsSUFBSSxDQUFDLElBQUEsYUFBTSxHQUFFLEVBQUUsQ0FBQztJQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEdBQUcsTUFBTSxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuYWxsb3djbGllbnQgPSB0cnVlO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSBcIi4vc3JjL21pc2NcIjtcblxuaWYgKCFpc05vZGUoKSkge1xuICAgIHByb2Nlc3MuZW52LkNCT1JfTkFUSVZFX0FDQ0VMRVJBVElPTl9ESVNBQkxFRCA9IFwidHJ1ZVwiO1xufSJdfQ=//=
9
- /* _JS_SOURCE_HASH = "17f221dc44d3e6b670edca79d328239589b294826e978bd1870b2edb56a5e5ed"; */