querysub 0.373.0 → 0.375.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.
Files changed (47) hide show
  1. package/package.json +2 -4
  2. package/src/-f-node-discovery/NodeDiscovery.ts +2 -2
  3. package/src/0-path-value-core/PathValueCommitter.ts +1 -1
  4. package/src/0-path-value-core/PathValueController.ts +2 -2
  5. package/src/0-path-value-core/archiveLocks/ArchiveLocks2.ts +12 -12
  6. package/src/0-path-value-core/auditLogs.ts +1 -1
  7. package/src/0-path-value-core/pathValueCore.ts +2 -2
  8. package/src/3-path-functions/PathFunctionRunner.ts +1 -1
  9. package/src/3-path-functions/PathFunctionRunnerMain.ts +1 -1
  10. package/src/4-dom/qreact.tsx +2 -2
  11. package/src/4-querysub/QuerysubController.ts +1 -1
  12. package/src/5-diagnostics/diskValueAudit.ts +1 -1
  13. package/src/deployManager/components/MachineDetailPage.tsx +2 -5
  14. package/src/deployManager/components/ServiceDetailPage.tsx +2 -5
  15. package/src/deployManager/machineApplyMainCode.ts +7 -0
  16. package/src/diagnostics/NodeViewer.tsx +4 -5
  17. package/src/diagnostics/logs/IndexedLogs/BufferIndexHelpers.ts +1 -1
  18. package/src/diagnostics/logs/IndexedLogs/IndexedLogs.ts +7 -7
  19. package/src/diagnostics/logs/IndexedLogs/LogViewer3.tsx +221 -220
  20. package/src/diagnostics/logs/IndexedLogs/LogViewerParams.ts +21 -0
  21. package/src/diagnostics/logs/IndexedLogs/bufferMatcher.ts +3 -3
  22. package/src/diagnostics/logs/diskLogger.ts +1 -39
  23. package/src/diagnostics/logs/diskShimConsoleLogs.ts +2 -0
  24. package/src/diagnostics/logs/errorNotifications2/errorNotifications2.ts +3 -0
  25. package/src/diagnostics/logs/injectFileLocationToConsole.ts +3 -0
  26. package/src/diagnostics/logs/lifeCycleAnalysis/lifeCycles.tsx +32 -22
  27. package/src/diagnostics/managementPages.tsx +0 -18
  28. package/src/diagnostics/watchdog.ts +1 -1
  29. package/src/user-implementation/userData.ts +3 -3
  30. package/test.ts +0 -5
  31. package/bin/error-email.js +0 -8
  32. package/bin/error-im.js +0 -8
  33. package/src/diagnostics/logs/FastArchiveAppendable.ts +0 -843
  34. package/src/diagnostics/logs/FastArchiveController.ts +0 -573
  35. package/src/diagnostics/logs/FastArchiveViewer.tsx +0 -1090
  36. package/src/diagnostics/logs/LogViewer2.tsx +0 -552
  37. package/src/diagnostics/logs/errorNotifications/ErrorDigestPage.tsx +0 -409
  38. package/src/diagnostics/logs/errorNotifications/ErrorNotificationController.ts +0 -756
  39. package/src/diagnostics/logs/errorNotifications/ErrorSuppressionUI.tsx +0 -280
  40. package/src/diagnostics/logs/errorNotifications/ErrorWarning.tsx +0 -254
  41. package/src/diagnostics/logs/errorNotifications/errorDigestEmail.tsx +0 -233
  42. package/src/diagnostics/logs/errorNotifications/errorDigestEntry.tsx +0 -14
  43. package/src/diagnostics/logs/errorNotifications/errorDigests.tsx +0 -292
  44. package/src/diagnostics/logs/errorNotifications/errorWatchEntry.tsx +0 -209
  45. package/src/diagnostics/logs/importLogsEntry.ts +0 -38
  46. package/src/diagnostics/logs/lifeCycleAnalysis/LifeCyclePages.tsx +0 -150
  47. package/src/diagnostics/logs/logViewerExtractField.ts +0 -36
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "querysub",
3
- "version": "0.373.0",
3
+ "version": "0.375.0",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "note1": "note on node-forge fork, see https://github.com/digitalbazaar/forge/issues/744 for details",
@@ -34,9 +34,7 @@
34
34
  "join": "./bin/join.js",
35
35
  "join-public": "./bin/join-public.js",
36
36
  "movelogs": "./bin/movelogs.js",
37
- "addsuperuser": "./bin/addsuperuser.js",
38
- "error-email": "./bin/error-email.js",
39
- "error-im": "./bin/error-im.js"
37
+ "addsuperuser": "./bin/addsuperuser.js"
40
38
  },
41
39
  "dependencies": {
42
40
  "@types/fs-ext": "^2.0.3",
@@ -185,7 +185,7 @@ function addNodeIdBase(nodeId: string) {
185
185
  function setNodeIds(nodeIds: string[]) {
186
186
  nodeIds = nodeIds.filter(x => x !== SPECIAL_NODE_ID_FOR_UNMOUNTED_NODE);
187
187
 
188
- logDisk("log", "setNodeIds", { nodeIds });
188
+ console.info("setNodeIds", { nodeIds });
189
189
  // Also try all localhost ports, if we are developing and not in public mode
190
190
  if (isNode() && !isPublic() && isDevDebugbreak()) {
191
191
  let ports = new Set(nodeIds.map(nodeId => decodeNodeId(nodeId)?.port).filter(isDefined));
@@ -350,7 +350,7 @@ async function runHeartbeatAuditLoop() {
350
350
  }
351
351
  } else {
352
352
  deadCount.delete(nodeId);
353
- logDisk("log", "Read node heartbeat", { nodeId, lastTime });
353
+ console.info("Read node heartbeat", { nodeId, lastTime });
354
354
  }
355
355
  }
356
356
  if (pendingDeadCount) {
@@ -177,7 +177,7 @@ class PathValueCommitter {
177
177
  markArrayAsSplitable(values);
178
178
  const { Querysub } = await import("../4-querysub/Querysub");
179
179
  let serializedValues = await pathValueSerializer.serialize(values, { compress: Querysub.COMPRESS_NETWORK });
180
- logDisk("log", "Send PathValues to server", { valueCount: values.length, targetId: otherAuthority, });
180
+ console.info("Send PathValues to server", { valueCount: values.length, targetId: otherAuthority, });
181
181
  let forwardPromise = PathValueController.nodes[otherAuthority].forwardWrites(
182
182
  serializedValues,
183
183
  undefined,
@@ -86,9 +86,9 @@ class PathValueControllerBase {
86
86
  auditLog("RECEIVE VALUE", { path: value.path, time: value.time.time, sourceNodeId });
87
87
  }
88
88
  }
89
- logDisk("log", "Received PathValues via forwardWrites", { valueCount: values.length, callerId, });
89
+ console.info("Received PathValues via forwardWrites", { valueCount: values.length, callerId, });
90
90
  for (let value of values) {
91
- logDisk("log", "Received PathValue for path", { path: value.path, time: value.time.time, callerId });
91
+ console.info("Received PathValue for path", { path: value.path, time: value.time.time, callerId });
92
92
  }
93
93
 
94
94
  if (isCoreQuiet) {
@@ -309,7 +309,7 @@ class TransactionLocker {
309
309
  }
310
310
  public async createConfirm(key: string) {
311
311
  let path = this.getConfirmKey(key);
312
- logDisk("log", "Creating confirmation for ${key}");
312
+ console.info("Creating confirmation for ${key}");
313
313
  await this.storage.setValue(path, Buffer.from(""));
314
314
  return path;
315
315
  }
@@ -362,7 +362,7 @@ class TransactionLocker {
362
362
  delete: ellipsize(deletes.map(a => debugFileInfo(a.key)).join(","), 50),
363
363
  });
364
364
 
365
- logDisk("log", "Writing transaction", {
365
+ console.info("Writing transaction", {
366
366
  name,
367
367
  ops: transaction.ops.length,
368
368
  });
@@ -488,7 +488,7 @@ class TransactionLocker {
488
488
  }
489
489
  }
490
490
 
491
- logDisk("log", "Read archive state", {
491
+ console.info("Read archive state", {
492
492
  rawFilesCount: files.length,
493
493
  confirmedCount: currentDataFiles.size,
494
494
  rawFiles: files.map(a => a.file),
@@ -507,7 +507,7 @@ class TransactionLocker {
507
507
  let result = await tryToRead();
508
508
  if (result) {
509
509
  let timeToRead = Date.now() - startTime;
510
- logDisk("log", `Read data state in ${formatTime(timeToRead)}`);
510
+ console.info(`Read data state in ${formatTime(timeToRead)}`);
511
511
  return result;
512
512
  }
513
513
  }
@@ -546,7 +546,7 @@ class TransactionLocker {
546
546
  let rawLookup = new Set(Array.from(rawDataFiles).map(a => a.file));
547
547
  // If any creates are not confirmed, it must not have been applied
548
548
  if (transaction.ops.some(a => a.type === "create" && rawLookup.has(a.key) && !confirmedKeys.has(a.key))) {
549
- logDisk("log", `Transaction not applied (has pending confirmations of creates)`, {
549
+ console.info(`Transaction not applied (has pending confirmations of creates)`, {
550
550
  keys: transaction.ops
551
551
  .filter(a => a.type === "create" && rawLookup.has(a.key) && !confirmedKeys.has(a.key))
552
552
  .map(a => a.key)
@@ -555,7 +555,7 @@ class TransactionLocker {
555
555
  }
556
556
  // If any deletes still exist, it must not have been applied
557
557
  if (transaction.ops.some(a => a.type === "delete" && confirmedKeys.has(a.key))) {
558
- logDisk("log", `Transaction not applied (has pending deletes)`, {
558
+ console.info(`Transaction not applied (has pending deletes)`, {
559
559
  keys: transaction.ops
560
560
  .filter(a => a.type === "delete" && confirmedKeys.has(a.key))
561
561
  .map(a => a.key)
@@ -568,7 +568,7 @@ class TransactionLocker {
568
568
  let createCount = transaction.ops.filter(a => a.type === "create").length;
569
569
  let deleteCount = transaction.ops.filter(a => a.type === "delete").length;
570
570
  let lockedFiles = transaction.lockedFilesMustEqual?.length;
571
- logDisk("log", `Applying transaction with ${createCount} file creates and ${deleteCount} file deletes. ${lockedFiles !== undefined && `Lock state depends on ${lockedFiles} files` || ""}`, {
571
+ console.info(`Applying transaction with ${createCount} file creates and ${deleteCount} file deletes. ${lockedFiles !== undefined && `Lock state depends on ${lockedFiles} files` || ""}`, {
572
572
  transactions: transaction.ops.map(x => JSON.stringify(x)),
573
573
  });
574
574
  logNodeStats(`archives|TΔ Apply`, formatNumber, 1);
@@ -594,7 +594,7 @@ class TransactionLocker {
594
594
  };
595
595
  await Promise.all(list(CONCURRENT_WRITE_COUNT).map(runThread));
596
596
 
597
- logDisk("log", `Applied transaction with ${createCount} file creates and file ${deleteCount} deletes. ${lockedFiles !== undefined && `Lock state depends on ${lockedFiles} files` || ""}`, {
597
+ console.info(`Applied transaction with ${createCount} file creates and file ${deleteCount} deletes. ${lockedFiles !== undefined && `Lock state depends on ${lockedFiles} files` || ""}`, {
598
598
  transactions: transaction.ops.map(x => JSON.stringify(x)),
599
599
  });
600
600
  }
@@ -660,7 +660,7 @@ class TransactionLocker {
660
660
  let threshold = activeT.createTime + this.storage.propagationTime;
661
661
  if (Date.now() < threshold) {
662
662
  let waitTime = threshold - Date.now();
663
- logDisk("log", `Waiting ${formatTime(waitTime)} for transaction ${activeT.seqNum} to settle.`);
663
+ console.info(`Waiting ${formatTime(waitTime)} for transaction ${activeT.seqNum} to settle.`);
664
664
  await new Promise(resolve => setTimeout(resolve, waitTime));
665
665
  return this.getFilesBase();
666
666
  }
@@ -768,7 +768,7 @@ class TransactionLocker {
768
768
  let dels = transaction.ops.filter(a => a.type === "delete").length;
769
769
  let creates = transaction.ops.filter(a => a.type === "create").length;
770
770
  let createBytes = transaction.ops.map(a => a.type === "create" && a.value?.length || 0).reduce((a, b) => a + b, 0);
771
- logDisk("log", `Starting transaction with ${creates} file creates and ${dels} file deletes, ${formatNumber(createBytes)}B`, {
771
+ console.info(`Starting transaction with ${creates} file creates and ${dels} file deletes, ${formatNumber(createBytes)}B`, {
772
772
  createFilesNames: transaction.ops.filter(a => a.type === "create").map(a => a.key),
773
773
  deleteFilesNames: transaction.ops.filter(a => a.type === "delete").map(a => a.key),
774
774
  });
@@ -797,7 +797,7 @@ class TransactionLocker {
797
797
  let beforeData = await this.getFilesBase();
798
798
  if (!this.isTransactionValid(transaction, beforeData.dataFiles, beforeData.rawDataFiles)) {
799
799
  logNodeStats(`archives|TΔ Rejected`, formatNumber, 1);
800
- logDisk("log", `Finished transaction with rejection, ${transaction.ops.length} ops`);
800
+ console.info(`Finished transaction with rejection, ${transaction.ops.length} ops`);
801
801
  return "rejected";
802
802
  }
803
803
 
@@ -806,7 +806,7 @@ class TransactionLocker {
806
806
  let afterData = await this.getFilesBase();
807
807
  if (this.wasTransactionApplied(transaction, afterData.dataFiles, afterData.rawDataFiles)) {
808
808
  logNodeStats(`archives|TΔ Accepted`, formatNumber, 1);
809
- logDisk("log", `Finished transaction with ${transaction.ops.length} ops`);
809
+ console.info(`Finished transaction with ${transaction.ops.length} ops`);
810
810
  return "accepted";
811
811
  }
812
812
  }
@@ -58,7 +58,7 @@ function debugLogBase(type: string, values: { [key: string]: unknown }) {
58
58
  return;
59
59
  }
60
60
  if (isDiskAudit()) {
61
- logDisk("log", type, values, { "diskAudit": true });
61
+ console.info(type, values, { "diskAudit": true });
62
62
  }
63
63
  let newEntry: DebugLog = { type, time: Date.now(), values };
64
64
  logHistory.push(newEntry);
@@ -1261,7 +1261,7 @@ class PathWatcher {
1261
1261
  auditLog("new non-local WATCH PARENT", { path, watcher: config.callback });
1262
1262
  }
1263
1263
  }
1264
- logDisk("log", `New PathValue watches`, {
1264
+ console.info(`New PathValue watches`, {
1265
1265
  newPathsWatched: newPathsWatched.size,
1266
1266
  newParentsWatched: newParentsWatched.size,
1267
1267
  });
@@ -1394,7 +1394,7 @@ class PathWatcher {
1394
1394
  }
1395
1395
 
1396
1396
  if (fullyUnwatched.paths.length > 0 || fullyUnwatched.parentPaths.length > 0) {
1397
- logDisk("log", `Unwatched PathValue watches`, {
1397
+ console.info(`Unwatched PathValue watches`, {
1398
1398
  unwatchedPaths: fullyUnwatched.paths.length,
1399
1399
  unwatchedParents: fullyUnwatched.parentPaths.length,
1400
1400
  });
@@ -689,7 +689,7 @@ export class PathFunctionRunner {
689
689
  let syncTime = wallTime - evalTime;
690
690
 
691
691
 
692
- logDisk("log", "Finished FunctionRunner function", {
692
+ console.info("Finished FunctionRunner function", {
693
693
  ...callPath, argsEncoded: "", functionSpec,
694
694
  wallTime, syncTime, evalTime,
695
695
  loops: runCount,
@@ -41,7 +41,7 @@ async function main() {
41
41
  await Querysub.hostService("PathFunctionRunnerMain");
42
42
 
43
43
  if (!isPublic()) {
44
- IndexedLogs.runLogMoveLoop();
44
+ void IndexedLogs.runLogMoveLoop();
45
45
  }
46
46
 
47
47
  // Use a fairly high stick time (the default is 10s), because having wait to sync data is very slow,
@@ -2119,7 +2119,7 @@ function updateDOMNodeFields(domNode: DOMNode, vNode: VirtualDOM, prevVNode: Vir
2119
2119
  if (name === "blur") {
2120
2120
  let target = args[0].currentTarget as HTMLElement;
2121
2121
  if (!target.getAttribute("data-blur-on-unmount") && !target.isConnected) {
2122
- logDisk("log", "Ignoring blur for disconnected element. You can use data-blur-on-unmount to re-enable blurs on this element.", target);
2122
+ console.info("Ignoring blur for disconnected element. You can use data-blur-on-unmount to re-enable blurs on this element.", target);
2123
2123
  return;
2124
2124
  }
2125
2125
  }
@@ -2428,7 +2428,7 @@ function blurFixOnMouseDownHack(event: MouseEvent) {
2428
2428
 
2429
2429
  // Looks like we are going to blur, so blur now
2430
2430
  if (selected instanceof HTMLElement && !selected.hasAttribute("data-no-early-blur")) {
2431
- logDisk("log", `Simulating early blur to prevent blur from firing after mousedown. This solves a problem where mousedown changes the UI, and then the blur fires on the wrong element. You can use data-no-early-blur to opt-out of this feature`, selected);
2431
+ console.info(`Simulating early blur to prevent blur from firing after mousedown. This solves a problem where mousedown changes the UI, and then the blur fires on the wrong element. You can use data-no-early-blur to opt-out of this feature`, selected);
2432
2432
  selected.blur();
2433
2433
  }
2434
2434
  }
@@ -480,7 +480,7 @@ export class QuerysubControllerBase {
480
480
  // make the UI look cleaner (instead of showing stale values, it shows nothing)?
481
481
  let undefinedValues: PathValue[] = newPathsNotAllowed.map(path => ({ path, value: undefined, canGCValue: true, isTransparent: true, time: epochTime, locks: [], lockCount: 0, valid: true, event: false }));
482
482
 
483
- logDisk("log", "Disallowing PathValue watches due to disallowed permissions", { count: newPathsNotAllowed.length, callerId });
483
+ console.info("Disallowing PathValue watches due to disallowed permissions", { count: newPathsNotAllowed.length, callerId });
484
484
 
485
485
  ignoreErrors(pathValueSerializer.serialize(undefinedValues, { compress: Querysub.COMPRESS_NETWORK }).then(buffers =>
486
486
  PathValueController.nodes[callerId].forwardWrites(
@@ -188,7 +188,7 @@ async function checkAuthority(authority: AuthorityPath, threshold: number) {
188
188
  console.error(`Value mismatch between disk and memory for ${formatNumber(changedValues.size)} values. Ex: ${firstValue.path}`);
189
189
  }
190
190
  if (removedValues.size > 0) {
191
- logDisk("log", green(`Removing ${formatNumber(removedValues.size)} paths from memory which have been GCed on the disk.`));
191
+ console.info(green(`Removing ${formatNumber(removedValues.size)} paths from memory which have been GCed on the disk.`));
192
192
  }
193
193
  if (changedValues.size > 0 || removedValues.size > 0) {
194
194
  let allValues = new Set([...changedValues, ...removedValues]);
@@ -7,10 +7,10 @@ import { formatNumber, formatVeryNiceDateTime } from "socket-function/src/format
7
7
  import { sort } from "socket-function/src/misc";
8
8
  import { ATag, Anchor } from "../../library-components/ATag";
9
9
  import { ShowMore } from "../../library-components/ShowMore";
10
- import { filterParam } from "../../diagnostics/logs/FastArchiveViewer";
11
10
  import { managementPageURL } from "../../diagnostics/managementPages";
12
11
  import { t } from "../../2-proxy/schema2";
13
12
  import { Querysub } from "../../4-querysub/QuerysubController";
13
+ import { getLogViewerParams } from "../../diagnostics/logs/IndexedLogs/LogViewerParams";
14
14
 
15
15
  export class MachineDetailPage extends qreact.Component {
16
16
  render() {
@@ -105,10 +105,7 @@ export class MachineDetailPage extends qreact.Component {
105
105
  <div>
106
106
  Apply Node ID: {machine.applyNodeId}
107
107
  </div>
108
- <ATag values={[
109
- managementPageURL.getOverride("LogViewer2"),
110
- filterParam.getOverride(`__machineId = ${machineInfo.machineId}`),
111
- ]}>
108
+ <ATag values={getLogViewerParams({ __machineId: machineInfo.machineId })}>
112
109
  Machine Logs
113
110
  </ATag>
114
111
  </div>
@@ -20,8 +20,8 @@ import { PrimitiveDisplay } from "../../diagnostics/logs/ObjectDisplay";
20
20
  import { parseAnsiColors, rgbToHsl } from "../../diagnostics/logs/ansiFormat";
21
21
  import { RenderGitRefInfo, UpdateServiceButtons, bigEmoji, buttonStyle } from "./deployButtons";
22
22
  import { TypedConfigEditor } from "../../library-components/TypedConfigEditor";
23
- import { filterParam } from "../../diagnostics/logs/FastArchiveViewer";
24
23
  import { managementPageURL } from "../../diagnostics/managementPages";
24
+ import { getLogViewerParams } from "../../diagnostics/logs/IndexedLogs/LogViewerParams";
25
25
 
26
26
 
27
27
 
@@ -401,10 +401,7 @@ export class ServiceDetailPage extends qreact.Component {
401
401
  {isWatching ? "Stop Watching Output" : "Watch Screen Output"}
402
402
  </div>
403
403
 
404
- <ATag values={[
405
- managementPageURL.getOverride("LogViewer2"),
406
- filterParam.getOverride(`__machineId = ${machineId}`),
407
- ]}>
404
+ <ATag values={getLogViewerParams({ __machineId: machineId })}>
408
405
  Machine Logs
409
406
  </ATag>
410
407
  </div>
@@ -866,6 +866,13 @@ export async function machineApplyMain() {
866
866
  if (await quickIsOutdated()) {
867
867
  console.log(magenta("Likely outdated, resyncing now"));
868
868
  await resyncServices();
869
+ } else {
870
+ let config = await machineInfos.get(getOwnMachineId());
871
+ if (config) {
872
+ config.heartbeat = Date.now();
873
+ console.log(magenta(`Updating heartbeat for ${getOwnMachineId()} to ${config.heartbeat}`));
874
+ await machineInfos.set(getOwnMachineId(), config);
875
+ }
869
876
  }
870
877
  });
871
878
 
@@ -36,8 +36,8 @@ import { SocketRegistered } from "socket-function/SocketFunctionTypes";
36
36
  import { ATag } from "../library-components/ATag";
37
37
  import { getSyncedController } from "../library-components/SyncedController";
38
38
  import child_process from "child_process";
39
- import { filterParam } from "./logs/FastArchiveViewer";
40
39
  import { getHTTPSKeyCert } from "../-e-certs/certAuthority";
40
+ import { getLogViewerParams } from "./logs/IndexedLogs/LogViewerParams";
41
41
 
42
42
 
43
43
  type NodeData = {
@@ -296,10 +296,9 @@ export class NodeViewer extends qreact.Component {
296
296
  if (str.startsWith("http")) return formatValue(obj);
297
297
 
298
298
  return (
299
- <ATag values={[
300
- managementPageURL.getOverride("LogViewer2"),
301
- filterParam.getOverride(`__nodeId = ${str}`),
302
- ]}>
299
+ <ATag values={getLogViewerParams({
300
+ __nodeId: str,
301
+ })}>
303
302
  Logs
304
303
  </ATag>
305
304
  );
@@ -16,7 +16,7 @@ export type SearchParams = {
16
16
  findBuffer: Buffer;
17
17
  pathOverrides?: TimeFilePathWithSize[];
18
18
  only?: "local" | "public";
19
- forceReadPublic?: boolean;
19
+ forceReadProduction?: boolean;
20
20
  };
21
21
 
22
22
  export type Unit = number;
@@ -272,10 +272,10 @@ export class IndexedLogs<T> {
272
272
  startTime: number;
273
273
  endTime: number;
274
274
  only?: "local" | "public";
275
- forceReadPublic?: boolean;
275
+ forceReadProduction?: boolean;
276
276
  }): Promise<TimeFilePathWithSize[]> {
277
277
  let finalPaths: TimeFilePathWithSize[] = [];
278
- if (config.forceReadPublic && !isPublic()) {
278
+ if (config.forceReadProduction && !isPublic()) {
279
279
  let machineNodes = await this.getMachineNodes();
280
280
  if (machineNodes.length === 0) throw new Error(`Cannot find any public nodes to read from`);
281
281
  return await IndexedLogShimController.nodes[machineNodes[0]].getPaths({
@@ -352,7 +352,7 @@ export class IndexedLogs<T> {
352
352
  onResults?: (results: IndexedLogResults) => Promise<boolean>;
353
353
  }): Promise<IndexedLogResults> {
354
354
 
355
- if (config.params.forceReadPublic && !isPublic()) {
355
+ if (config.params.forceReadProduction && !isPublic()) {
356
356
  let machineNodes = await this.getMachineNodes();
357
357
  if (machineNodes.length === 0) throw new Error(`Cannot find any public nodes to read from`);
358
358
  return await this.clientFind({
@@ -649,7 +649,7 @@ export class IndexedLogs<T> {
649
649
  startTime: number;
650
650
  endTime: number;
651
651
  only?: "local" | "public";
652
- forceReadPublic?: boolean;
652
+ forceReadProduction?: boolean;
653
653
 
654
654
  }): Promise<TimeFilePathWithSize[]> {
655
655
  let controller = IndexedLogShimController.nodes[SocketFunction.getBrowserNodeId()];
@@ -658,7 +658,7 @@ export class IndexedLogs<T> {
658
658
  startTime: config.startTime,
659
659
  endTime: config.endTime,
660
660
  only: config.only,
661
- forceReadPublic: config.forceReadPublic,
661
+ forceReadProduction: config.forceReadProduction,
662
662
  });
663
663
  }
664
664
  public onFindResult(config: {
@@ -778,7 +778,7 @@ class IndexedLogShim {
778
778
  startTime: number;
779
779
  endTime: number;
780
780
  only?: "local" | "public";
781
- forceReadPublic?: boolean;
781
+ forceReadProduction?: boolean;
782
782
  }): Promise<TimeFilePathWithSize[]> {
783
783
  let indexedLogs = loggerByName.get(config.indexedLogsName);
784
784
  if (!indexedLogs) throw new Error(`Indexed logs ${config.indexedLogsName} not found`);
@@ -786,7 +786,7 @@ class IndexedLogShim {
786
786
  startTime: config.startTime,
787
787
  endTime: config.endTime,
788
788
  only: config.only,
789
- forceReadPublic: config.forceReadPublic,
789
+ forceReadProduction: config.forceReadProduction,
790
790
  });
791
791
  }
792
792