querysub 0.2.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 (169) hide show
  1. package/.dependency-cruiser.js +304 -0
  2. package/.eslintrc.js +51 -0
  3. package/.github/copilot-instructions.md +1 -0
  4. package/.vscode/settings.json +25 -0
  5. package/bin/deploy.js +4 -0
  6. package/bin/function.js +4 -0
  7. package/bin/server.js +4 -0
  8. package/costsBenefits.txt +112 -0
  9. package/deploy.ts +3 -0
  10. package/inject.ts +1 -0
  11. package/package.json +60 -0
  12. package/prompts.txt +54 -0
  13. package/spec.txt +820 -0
  14. package/src/-a-archives/archiveCache.ts +913 -0
  15. package/src/-a-archives/archives.ts +148 -0
  16. package/src/-a-archives/archivesBackBlaze.ts +792 -0
  17. package/src/-a-archives/archivesDisk.ts +418 -0
  18. package/src/-a-archives/copyLocalToBackblaze.ts +24 -0
  19. package/src/-a-auth/certs.ts +517 -0
  20. package/src/-a-auth/der.ts +122 -0
  21. package/src/-a-auth/ed25519.ts +1015 -0
  22. package/src/-a-auth/node-forge-ed25519.d.ts +17 -0
  23. package/src/-b-authorities/dnsAuthority.ts +203 -0
  24. package/src/-b-authorities/emailAuthority.ts +57 -0
  25. package/src/-c-identity/IdentityController.ts +200 -0
  26. package/src/-d-trust/NetworkTrust2.ts +150 -0
  27. package/src/-e-certs/EdgeCertController.ts +288 -0
  28. package/src/-e-certs/certAuthority.ts +192 -0
  29. package/src/-f-node-discovery/NodeDiscovery.ts +543 -0
  30. package/src/-g-core-values/NodeCapabilities.ts +134 -0
  31. package/src/-g-core-values/oneTimeForward.ts +91 -0
  32. package/src/-h-path-value-serialize/PathValueSerializer.ts +769 -0
  33. package/src/-h-path-value-serialize/stringSerializer.ts +176 -0
  34. package/src/0-path-value-core/LoggingClient.tsx +24 -0
  35. package/src/0-path-value-core/NodePathAuthorities.ts +978 -0
  36. package/src/0-path-value-core/PathController.ts +1 -0
  37. package/src/0-path-value-core/PathValueCommitter.ts +565 -0
  38. package/src/0-path-value-core/PathValueController.ts +231 -0
  39. package/src/0-path-value-core/archiveLocks/ArchiveLocks.ts +154 -0
  40. package/src/0-path-value-core/archiveLocks/ArchiveLocks2.ts +820 -0
  41. package/src/0-path-value-core/archiveLocks/archiveSnapshots.ts +180 -0
  42. package/src/0-path-value-core/debugLogs.ts +90 -0
  43. package/src/0-path-value-core/pathValueArchives.ts +483 -0
  44. package/src/0-path-value-core/pathValueCore.ts +2217 -0
  45. package/src/1-path-client/RemoteWatcher.ts +558 -0
  46. package/src/1-path-client/pathValueClientWatcher.ts +702 -0
  47. package/src/2-proxy/PathValueProxyWatcher.ts +1857 -0
  48. package/src/2-proxy/archiveMoveHarness.ts +376 -0
  49. package/src/2-proxy/garbageCollection.ts +753 -0
  50. package/src/2-proxy/pathDatabaseProxyBase.ts +37 -0
  51. package/src/2-proxy/pathValueProxy.ts +139 -0
  52. package/src/2-proxy/schema2.ts +518 -0
  53. package/src/3-path-functions/PathFunctionHelpers.ts +129 -0
  54. package/src/3-path-functions/PathFunctionRunner.ts +619 -0
  55. package/src/3-path-functions/PathFunctionRunnerMain.ts +67 -0
  56. package/src/3-path-functions/deployBlock.ts +10 -0
  57. package/src/3-path-functions/deployCheck.ts +7 -0
  58. package/src/3-path-functions/deployMain.ts +160 -0
  59. package/src/3-path-functions/pathFunctionLoader.ts +282 -0
  60. package/src/3-path-functions/syncSchema.ts +475 -0
  61. package/src/3-path-functions/tests/functionsTest.ts +135 -0
  62. package/src/3-path-functions/tests/rejectTest.ts +77 -0
  63. package/src/4-dom/css.tsx +29 -0
  64. package/src/4-dom/cssTypes.d.ts +212 -0
  65. package/src/4-dom/qreact.tsx +2322 -0
  66. package/src/4-dom/qreactTest.tsx +417 -0
  67. package/src/4-querysub/Querysub.ts +877 -0
  68. package/src/4-querysub/QuerysubController.ts +620 -0
  69. package/src/4-querysub/copyEvent.ts +0 -0
  70. package/src/4-querysub/permissions.ts +289 -0
  71. package/src/4-querysub/permissionsShared.ts +1 -0
  72. package/src/4-querysub/querysubPrediction.ts +525 -0
  73. package/src/5-diagnostics/FullscreenModal.tsx +67 -0
  74. package/src/5-diagnostics/GenericFormat.tsx +165 -0
  75. package/src/5-diagnostics/Modal.tsx +79 -0
  76. package/src/5-diagnostics/Table.tsx +183 -0
  77. package/src/5-diagnostics/TimeGrouper.tsx +114 -0
  78. package/src/5-diagnostics/diskValueAudit.ts +216 -0
  79. package/src/5-diagnostics/memoryValueAudit.ts +442 -0
  80. package/src/5-diagnostics/nodeMetadata.ts +135 -0
  81. package/src/5-diagnostics/qreactDebug.tsx +309 -0
  82. package/src/5-diagnostics/shared.ts +26 -0
  83. package/src/5-diagnostics/synchronousLagTracking.ts +47 -0
  84. package/src/TestController.ts +35 -0
  85. package/src/allowclient.flag +0 -0
  86. package/src/bits.ts +86 -0
  87. package/src/buffers.ts +69 -0
  88. package/src/config.ts +53 -0
  89. package/src/config2.ts +48 -0
  90. package/src/diagnostics/ActionsHistory.ts +56 -0
  91. package/src/diagnostics/NodeViewer.tsx +503 -0
  92. package/src/diagnostics/SizeLimiter.ts +62 -0
  93. package/src/diagnostics/TimeDebug.tsx +18 -0
  94. package/src/diagnostics/benchmark.ts +139 -0
  95. package/src/diagnostics/errorLogs/ErrorLogController.ts +515 -0
  96. package/src/diagnostics/errorLogs/ErrorLogCore.ts +274 -0
  97. package/src/diagnostics/errorLogs/LogClassifiers.tsx +302 -0
  98. package/src/diagnostics/errorLogs/LogFilterUI.tsx +84 -0
  99. package/src/diagnostics/errorLogs/LogNotify.tsx +101 -0
  100. package/src/diagnostics/errorLogs/LogTimeSelector.tsx +724 -0
  101. package/src/diagnostics/errorLogs/LogViewer.tsx +757 -0
  102. package/src/diagnostics/errorLogs/hookErrors.ts +60 -0
  103. package/src/diagnostics/errorLogs/logFiltering.tsx +149 -0
  104. package/src/diagnostics/heapTag.ts +13 -0
  105. package/src/diagnostics/listenOnDebugger.ts +77 -0
  106. package/src/diagnostics/logs/DiskLoggerPage.tsx +572 -0
  107. package/src/diagnostics/logs/ObjectDisplay.tsx +165 -0
  108. package/src/diagnostics/logs/ansiFormat.ts +108 -0
  109. package/src/diagnostics/logs/diskLogGlobalContext.ts +38 -0
  110. package/src/diagnostics/logs/diskLogger.ts +305 -0
  111. package/src/diagnostics/logs/diskShimConsoleLogs.ts +32 -0
  112. package/src/diagnostics/logs/injectFileLocationToConsole.ts +50 -0
  113. package/src/diagnostics/logs/logGitHashes.ts +30 -0
  114. package/src/diagnostics/managementPages.tsx +289 -0
  115. package/src/diagnostics/periodic.ts +89 -0
  116. package/src/diagnostics/runSaturationTest.ts +416 -0
  117. package/src/diagnostics/satSchema.ts +64 -0
  118. package/src/diagnostics/trackResources.ts +82 -0
  119. package/src/diagnostics/watchdog.ts +55 -0
  120. package/src/errors.ts +132 -0
  121. package/src/forceProduction.ts +3 -0
  122. package/src/fs.ts +72 -0
  123. package/src/heapDumps.ts +666 -0
  124. package/src/https.ts +2 -0
  125. package/src/inject.ts +1 -0
  126. package/src/library-components/ATag.tsx +84 -0
  127. package/src/library-components/Button.tsx +344 -0
  128. package/src/library-components/ButtonSelector.tsx +64 -0
  129. package/src/library-components/DropdownCustom.tsx +151 -0
  130. package/src/library-components/DropdownSelector.tsx +32 -0
  131. package/src/library-components/Input.tsx +334 -0
  132. package/src/library-components/InputLabel.tsx +198 -0
  133. package/src/library-components/InputPicker.tsx +125 -0
  134. package/src/library-components/LazyComponent.tsx +62 -0
  135. package/src/library-components/MeasureHeightCSS.tsx +48 -0
  136. package/src/library-components/MeasuredDiv.tsx +47 -0
  137. package/src/library-components/ShowMore.tsx +51 -0
  138. package/src/library-components/SyncedController.ts +171 -0
  139. package/src/library-components/TimeRangeSelector.tsx +407 -0
  140. package/src/library-components/URLParam.ts +263 -0
  141. package/src/library-components/colors.tsx +14 -0
  142. package/src/library-components/drag.ts +114 -0
  143. package/src/library-components/icons.tsx +692 -0
  144. package/src/library-components/niceStringify.ts +50 -0
  145. package/src/library-components/renderToString.ts +52 -0
  146. package/src/misc/PromiseRace.ts +101 -0
  147. package/src/misc/color.ts +30 -0
  148. package/src/misc/getParentProcessId.cs +53 -0
  149. package/src/misc/getParentProcessId.ts +53 -0
  150. package/src/misc/hash.ts +83 -0
  151. package/src/misc/ipPong.js +13 -0
  152. package/src/misc/networking.ts +2 -0
  153. package/src/misc/random.ts +45 -0
  154. package/src/misc.ts +19 -0
  155. package/src/noserverhotreload.flag +0 -0
  156. package/src/path.ts +226 -0
  157. package/src/persistentLocalStore.ts +37 -0
  158. package/src/promise.ts +15 -0
  159. package/src/server.ts +73 -0
  160. package/src/src.d.ts +1 -0
  161. package/src/test/heapProcess.ts +36 -0
  162. package/src/test/mongoSatTest.tsx +55 -0
  163. package/src/test/satTest.ts +193 -0
  164. package/src/test/test.tsx +552 -0
  165. package/src/zip.ts +92 -0
  166. package/src/zipThreaded.ts +106 -0
  167. package/src/zipThreadedWorker.js +19 -0
  168. package/tsconfig.json +27 -0
  169. package/yarnSpec.txt +56 -0
@@ -0,0 +1,148 @@
1
+ import { isNode } from "socket-function/src/misc";
2
+ import { getDomain, isNoNetwork } from "../config";
3
+ import { getStorageDir, getSubFolder } from "../fs";
4
+ import { getArchivesBackblaze, hasBackblazePermissions } from "./archivesBackBlaze";
5
+ import { getArchivesLocal } from "./archivesDisk";
6
+ import { magenta } from "socket-function/src/formatting/logColors";
7
+ import debugbreak from "debugbreak";
8
+ import { isClient } from "../config2";
9
+ import { wrapArchivesWithCache } from "./archiveCache";
10
+ // https://www.backblaze.com/apidocs/b2-start-large-file
11
+ // https://www.backblaze.com/apidocs/b2-upload-part
12
+ // https://www.backblaze.com/apidocs/b2-finish-large-file
13
+
14
+ export interface Archives {
15
+ getDebugName(): string;
16
+
17
+ get(path: string, config?: { range?: { start: number; end: number; }; retryCount?: number }): Promise<Buffer | undefined>;
18
+ set(path: string, data: Buffer): Promise<void>;
19
+ del(path: string): Promise<void>;
20
+
21
+ getInfo(path: string): Promise<{ writeTime: number; size: number; } | undefined>;
22
+
23
+ setLargeFile(config: { path: string; getNextData(): Promise<Buffer | undefined>; }): Promise<void>;
24
+
25
+ // For example findFileNames("ips/")
26
+ find(
27
+ prefix: string,
28
+ config?: {
29
+ shallow?: boolean;
30
+ // Defaults to files
31
+ type: "files" | "folders";
32
+ }
33
+ ): Promise<string[]>;
34
+ findInfo(
35
+ prefix: string,
36
+ config?: {
37
+ shallow?: boolean;
38
+ // Defaults to files
39
+ type: "files" | "folders";
40
+ }
41
+ ): Promise<{ path: string; createTime: number; size: number; }[]>;
42
+
43
+ move(config: {
44
+ path: string;
45
+ target: Archives;
46
+ targetPath: string;
47
+ }): Promise<void>;
48
+ copy(config: {
49
+ path: string;
50
+ target: Archives;
51
+ targetPath: string;
52
+ }): Promise<void>;
53
+
54
+
55
+ enableLogging(): void;
56
+
57
+ /** Might throw due to too long of a length. Should never throw due to characters, as we can always encode special characters. */
58
+ assertPathValid(path: string): Promise<void>;
59
+
60
+ getBaseArchives?: () => { parentPath: string; archives: Archives; } | undefined;
61
+ }
62
+
63
+ export function nestArchives(path: string, archives: Archives): Archives {
64
+ if (!path) return archives;
65
+ if (!path.endsWith("/")) {
66
+ path = path + "/";
67
+ }
68
+ function stripFilePrefix(file: string) {
69
+ if (file.startsWith("/")) {
70
+ return file.slice(1);
71
+ }
72
+ return file;
73
+ }
74
+ return {
75
+ getDebugName: () => archives.getDebugName() + "/" + path,
76
+ get: (fileName: string, config) => archives.get(path + stripFilePrefix(fileName), config),
77
+ setLargeFile: (config) => archives.setLargeFile({ ...config, path: path + stripFilePrefix(config.path) }),
78
+ set: (fileName: string, data: Buffer) => archives.set(path + stripFilePrefix(fileName), data),
79
+ del: (fileName: string) => archives.del(path + stripFilePrefix(fileName)),
80
+ getInfo: (fileName: string) => archives.getInfo(path + stripFilePrefix(fileName)),
81
+ find: async (prefix: string, config) => archives.find(path + prefix, config).then(x => x.map(x => x.slice(path.length))),
82
+ findInfo: async (prefix: string, config) => archives.findInfo(path + prefix, config).then(x => x.map(x => ({ path: x.path.slice(path.length), createTime: x.createTime, size: x.size }))),
83
+ enableLogging: () => archives.enableLogging(),
84
+ move: (config) => archives.move({
85
+ path: path + config.path,
86
+ target: config.target,
87
+ targetPath: config.targetPath,
88
+ }),
89
+ copy: (config) => archives.copy({
90
+ path: path + config.path,
91
+ target: config.target,
92
+ targetPath: config.targetPath,
93
+ }),
94
+ assertPathValid: (path: string) => archives.assertPathValid(path),
95
+ getBaseArchives: () => ({ parentPath: path, archives }),
96
+ };
97
+ }
98
+
99
+ let archivesLogging = false;
100
+ export function enableArchivesLogging() {
101
+ archivesLogging = true;
102
+ }
103
+
104
+ let cached = new Map<string, Archives>();
105
+ export function getArchives(rootPath = ""): Archives {
106
+ let value = cached.get(rootPath);
107
+ if (!value) {
108
+ value = getArchivesBase(rootPath);
109
+ cached.set(rootPath, value);
110
+ }
111
+ return value;
112
+ }
113
+ export function getArchivesBase(rootPath = ""): Archives {
114
+ let archives: Archives;
115
+ let domain = getDomain();
116
+ if (isNoNetwork()) {
117
+ archives = getArchivesLocal(domain);
118
+ archives = nestArchives(rootPath, archives);
119
+ } else {
120
+ archives = getArchivesBackblaze(domain);
121
+ archives = nestArchives(rootPath, archives);
122
+ // Why did we think we should always cache? We absolutely should not. Even if we were checking
123
+ // file hashes on every read (which we do not), it would still potentially fill the cache up
124
+ // with large temporary files we have no intention of using (which might evict entries we
125
+ // intend to use).
126
+ //archives = wrapArchivesWithCache(archives);
127
+ }
128
+ if (archivesLogging) {
129
+ archives.enableLogging();
130
+ }
131
+ return archives;
132
+ }
133
+
134
+ export function hasArchivesPermissions() {
135
+ if (isNoNetwork()) {
136
+ return true;
137
+ }
138
+ return hasBackblazePermissions();
139
+ }
140
+
141
+ if (isNode()) {
142
+ if (isNoNetwork()) {
143
+ console.log("Primary data storage: " + magenta(getStorageDir()));
144
+ } else {
145
+ console.log("Config storage path: " + magenta(getStorageDir()));
146
+ console.log("Primary data storage: " + magenta(`backblaze:${getDomain()}`));
147
+ }
148
+ }