socket-function 0.154.0 → 0.156.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 (50) hide show
  1. package/SetProcessVariables.d.ts +1 -0
  2. package/SocketFunction.d.ts +104 -0
  3. package/SocketFunctionTypes.d.ts +86 -0
  4. package/generateIndexDts.js +52 -0
  5. package/hot/HotReloadController.d.ts +34 -0
  6. package/index.d.ts +1196 -31
  7. package/mobx/UrlParam.d.ts +13 -0
  8. package/mobx/observer.d.ts +18 -0
  9. package/mobx/promiseToObservable.d.ts +8 -0
  10. package/package.json +4 -1
  11. package/require/CSSShim.d.ts +2 -0
  12. package/require/compileFlags.d.ts +11 -0
  13. package/require/extMapper.d.ts +4 -0
  14. package/require/require.d.ts +14 -0
  15. package/src/CallFactory.d.ts +37 -0
  16. package/src/JSONLACKS/JSONLACKS.d.ts +28 -0
  17. package/src/args.d.ts +9 -0
  18. package/src/batching.d.ts +31 -0
  19. package/src/caching.d.ts +59 -0
  20. package/src/callHTTPHandler.d.ts +26 -0
  21. package/src/callManager.d.ts +21 -0
  22. package/src/certStore.d.ts +6 -0
  23. package/src/corsCheck.d.ts +0 -0
  24. package/src/fixLargeNetworkCalls.d.ts +2 -0
  25. package/src/formatting/colors.d.ts +42 -0
  26. package/src/formatting/format.d.ts +24 -0
  27. package/src/formatting/format.ts +21 -2
  28. package/src/formatting/logColors.d.ts +7 -0
  29. package/src/forwardPort.d.ts +5 -0
  30. package/src/https.d.ts +8 -0
  31. package/src/misc.d.ts +98 -0
  32. package/src/networking.d.ts +11 -0
  33. package/src/nodeCache.d.ts +24 -0
  34. package/src/nodeProxy.d.ts +7 -0
  35. package/src/profiling/getOwnTime.d.ts +12 -0
  36. package/src/profiling/measure.d.ts +59 -0
  37. package/src/profiling/stats.d.ts +54 -0
  38. package/src/profiling/statsFormat.d.ts +7 -0
  39. package/src/profiling/tcpLagProxy.d.ts +18 -0
  40. package/src/promiseRace.d.ts +10 -0
  41. package/src/runPromise.d.ts +7 -0
  42. package/src/sniTest.d.ts +1 -0
  43. package/src/storagePath.d.ts +5 -0
  44. package/src/tlsParsing.d.ts +11 -0
  45. package/src/types.d.ts +6 -0
  46. package/src/webSocketServer.d.ts +30 -0
  47. package/src/websocketFactory.d.ts +9 -0
  48. package/test.d.ts +1 -0
  49. package/time/trueTimeShim.d.ts +6 -0
  50. package/tsconfig.declarations.json +18 -0
@@ -0,0 +1,13 @@
1
+ export declare class UrlParam<T> {
2
+ private key;
3
+ private defaultValue;
4
+ constructor(key: string, defaultValue: T);
5
+ valueSeqNum: {
6
+ value: number;
7
+ };
8
+ get(): T;
9
+ set(value: T): void;
10
+ reset(): void;
11
+ get value(): T;
12
+ set value(value: T);
13
+ }
@@ -0,0 +1,18 @@
1
+ import type preact from "preact";
2
+ import { Reaction } from "mobx";
3
+ export declare function observer<T extends {
4
+ new (...args: any[]): {
5
+ render(): preact.ComponentChild;
6
+ forceUpdate(callback?: () => void): void;
7
+ componentWillUnmount?(): void;
8
+ };
9
+ }>(Constructor: T): {
10
+ new (...args: any[]): {
11
+ constructOrder: number;
12
+ reaction: Reaction;
13
+ componentWillUnmount(): void;
14
+ render(): preact.ComponentChild;
15
+ forceUpdate(callback?: () => void): void;
16
+ };
17
+ readonly name: string;
18
+ } & T;
@@ -0,0 +1,8 @@
1
+ export interface InternalResult {
2
+ result: {
3
+ value: unknown;
4
+ } | undefined;
5
+ }
6
+ export declare function promiseToObservable<T>(promise: Promise<T>, staleValue?: T): {
7
+ value: T | undefined;
8
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socket-function",
3
- "version": "0.154.0",
3
+ "version": "0.156.0",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -17,6 +17,9 @@
17
17
  "scripts": {
18
18
  "test": "yarn typenode ./test/server.ts",
19
19
  "type": "yarn tsc --noEmit",
20
+ "emit-dts": "yarn tsc --project tsconfig.declarations.json || exit 0",
21
+ "generate-index-dts": "node ./generateIndexDts.js",
22
+ "update-typings": "yarn generate-index-dts && yarn emit-dts",
20
23
  "testsni": "yarn typenode ./src/sniTest.ts"
21
24
  },
22
25
  "devDependencies": {
@@ -0,0 +1,2 @@
1
+ /// <reference path="RequireController.d.ts" />
2
+ export {};
@@ -0,0 +1,11 @@
1
+ /// <reference path="RequireController.d.ts" />
2
+ /// <reference types="node" />
3
+ /**
4
+ * Adds a global function setFlag(require, "typescript", flag) which sets a flag on the client
5
+ * - Ex, setFlag(require, "typescript", "allowclient") so allowclient = true on the typescript module.
6
+ * - Passing true as the fourth argument sets it recursively
7
+ */
8
+ export declare const forceModule = true;
9
+ declare global {
10
+ }
11
+ export declare function setFlag(require: NodeRequire, request: string, flag: string, recursive?: boolean): void;
@@ -0,0 +1,4 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ export declare function getExtContentType(ext: string): string;
4
+ export declare function getContentTypeFromBuffer(buffer: Buffer): string | undefined;
@@ -0,0 +1,14 @@
1
+ /// <reference path="../index.d.ts" />
2
+ declare global {
3
+ var onProgressHandler: undefined | ((progress: {
4
+ type: string;
5
+ addValue: number;
6
+ addMax: number;
7
+ }) => void);
8
+ var onErrorHandler: undefined | ((error: string) => void);
9
+ var BOOT_TIME: number;
10
+ var builtInModuleExports: {
11
+ [key: string]: unknown;
12
+ };
13
+ }
14
+ export declare function requireMain(): void;
@@ -0,0 +1,37 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import { CallType } from "../SocketFunctionTypes";
5
+ import * as ws from "ws";
6
+ import * as tls from "tls";
7
+ export interface CallFactory {
8
+ nodeId: string;
9
+ lastClosed: number;
10
+ closedForever?: boolean;
11
+ isConnected?: boolean;
12
+ performCall(call: CallType): Promise<unknown>;
13
+ onNextDisconnect(callback: () => void): void;
14
+ connectionId: {
15
+ nodeId: string;
16
+ };
17
+ }
18
+ export interface SenderInterface {
19
+ nodeId?: string;
20
+ _socket?: tls.TLSSocket;
21
+ send(data: string | Buffer): void;
22
+ addEventListener(event: "open", listener: () => void): void;
23
+ addEventListener(event: "close", listener: () => void): void;
24
+ addEventListener(event: "error", listener: (err: {
25
+ message: string;
26
+ }) => void): void;
27
+ addEventListener(event: "message", listener: (data: ws.RawData | ws.MessageEvent | string) => void): void;
28
+ readyState: number;
29
+ ping?(): void;
30
+ }
31
+ export declare function harvestFailedCallCount(): number;
32
+ export declare function getPendingCallCount(): number;
33
+ export declare function harvestCallTimes(): {
34
+ start: number;
35
+ end: number;
36
+ }[];
37
+ export declare function createCallFactory(webSocketBase: SenderInterface | undefined, nodeId: string, localNodeId?: string): Promise<CallFactory>;
@@ -0,0 +1,28 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ export interface JSONLACKS_ParseConfig {
4
+ extended?: boolean;
5
+ discardMissingReferences?: boolean;
6
+ }
7
+ export interface JSONLACKS_StringifyConfig {
8
+ allowObjectMutation?: boolean;
9
+ }
10
+ interface HydrateState {
11
+ references: Map<string, unknown>;
12
+ visited: Set<unknown>;
13
+ }
14
+ export declare class JSONLACKS {
15
+ static readonly LACKS_KEY = "__JSONLACKS__98cfb4a05fa34d828661cae15b8779ce__";
16
+ /** If set to true parses non-quoted field names, comments, trailing commas, etc */
17
+ static EXTENDED_PARSER: boolean;
18
+ static IGNORE_MISSING_REFERENCES: boolean;
19
+ static stringify(obj: unknown, config?: JSONLACKS_StringifyConfig): string;
20
+ /** Is useful when serializing an array to a file with one object per line */
21
+ static stringifyFile(obj: unknown[], config?: JSONLACKS_StringifyConfig): Promise<Buffer>;
22
+ static stringifyFileSync(obj: unknown[], config?: JSONLACKS_StringifyConfig): Buffer;
23
+ static parse<T>(text: string, config?: JSONLACKS_ParseConfig, hydrateState?: HydrateState): T;
24
+ static parseLines<T>(buffer: Buffer, config?: JSONLACKS_ParseConfig): Promise<T[]>;
25
+ private static escapeSpecialObjects;
26
+ private static hydrateSpecialObjects;
27
+ }
28
+ export {};
package/src/args.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export declare const getArgs: {
2
+ (): {
3
+ [key: string]: string | undefined;
4
+ };
5
+ reset(): void;
6
+ set(newValue: {
7
+ [key: string]: string | undefined;
8
+ }): void;
9
+ };
@@ -0,0 +1,31 @@
1
+ import { AnyFunction } from "./types";
2
+ export type DelayType = (number | "afterio" | "immediate" | "afterpromises" | "paintLoop" | "afterPaint");
3
+ export declare function delay(delayTime: DelayType, immediateShortDelays?: "immediateShortDelays"): Promise<void>;
4
+ export declare function batchFunctionNone<Arg, Result = void>(config: unknown, fnc: (arg: Arg[]) => (Promise<Result> | Result)): (arg: Arg) => Promise<Result>;
5
+ export declare function batchFunction<Arg, Result = void>(config: {
6
+ delay: DelayType;
7
+ /** Instead of immediately waiting delay, starts by waiting 0ms, and every call increments the delay factor
8
+ * by 1. Delay is `factor * (delay / throttleWindow)`. For every delay interval we have no calls, we decrease by
9
+ * no_calls/delay.
10
+ * - This essentially turns delay into a `calls per second` type indicator (ex, 10ms is 100 callers
11
+ * per second, 500ms is 2 calls, etc), which is accurate over delay * throttleWindow time.
12
+ */
13
+ throttleWindow?: number;
14
+ name?: string;
15
+ noMeasure?: boolean;
16
+ }, fnc: (arg: Arg[]) => (Promise<Result> | Result)): (arg: Arg) => Promise<Result>;
17
+ export declare function runInSerial<T extends (...args: any[]) => Promise<any>>(fnc: T): T;
18
+ export declare function runInParallel<T extends (...args: any[]) => Promise<any>>(config: {
19
+ parallelCount: number;
20
+ callTimeout?: number;
21
+ }, fnc: T): T;
22
+ export declare function runInfinitePoll(delayTime: number, fnc: () => Promise<void> | void): void;
23
+ export declare function runInfinitePollCallAtStart(delayTime: number, fnc: () => Promise<void> | void): Promise<void>;
24
+ /** Disables polling, called on shutdown. Blocks until all pending poll loops finish */
25
+ export declare function shutdownPolling(): Promise<void>;
26
+ export declare function retryFunctional<T extends AnyFunction>(fnc: T, config?: {
27
+ maxRetries?: number;
28
+ shouldRetry?: (message: string) => boolean;
29
+ minDelay?: number;
30
+ maxDelay?: number;
31
+ }): T;
@@ -0,0 +1,59 @@
1
+ import { AnyFunction, Args } from "./types";
2
+ export declare function lazy<T>(factory: () => T): {
3
+ (): T;
4
+ reset(): void;
5
+ set(newValue: T): void;
6
+ };
7
+ export declare function cacheEmptyArray<T>(array: T[]): T[];
8
+ export declare function cache<Output, Key, Untracked extends unknown[]>(getValue: (key: Key, ...untracked: Untracked) => Output): {
9
+ (key: Key, ...untracked: Untracked): Output;
10
+ clear(key: Key): void;
11
+ clearAll(): void;
12
+ forceSet(key: Key, value: Output): void;
13
+ getAllKeys(): Key[];
14
+ get(key: Key): Output | undefined;
15
+ };
16
+ /** Makes a cache that limits the number of entries, allowing you to put arbitrary data in it
17
+ * without worrying about leaking memory
18
+ */
19
+ export declare function cacheLimited<Output, Key>(maxCount: number, getValue: (key: Key) => Output): {
20
+ (input: Key): Output;
21
+ forceSet(key: Key, value: Output): void;
22
+ clearKey(key: Key): void;
23
+ clear(): void;
24
+ };
25
+ export declare function cacheWeak<Output, Key extends object>(getValue: (key: Key) => Output): (key: Key) => Output;
26
+ export declare function cacheList<Value>(getLength: () => number, getValue: (index: number) => Value): {
27
+ (index: number): Value;
28
+ };
29
+ /** A cache half way between caching based on === and caching based on hash. Caches
30
+ * based on arrayEqual, which does === on all values in an array. Requires localized
31
+ * caching (as the comparisons don't scale with many candidates, unlike hashing),
32
+ * however works with non trival transformations (ex, resolving many persisted overrides
33
+ * to get a value), unlike cache().
34
+ * Also, limits itself, more of a performance optimization than memory optimization, as it scales
35
+ * very poorly with the number of candidates.
36
+ *
37
+ * TIMING: About 6us with limit = 100, array size = 294, and the cache being full.
38
+ */
39
+ export declare function cacheArrayEqual<Input extends unknown[] | undefined, Output>(map: (arrays: Input) => Output, limit?: number): {
40
+ (array: Input): Output;
41
+ clear(array: Input): void;
42
+ clearAll(): void;
43
+ };
44
+ /** Caches when arguments are ===. See cacheArrayEqual */
45
+ export declare function cacheArgsEqual<Fnc extends AnyFunction>(fnc: Fnc, limit?: number): Fnc & {
46
+ clear(...args: Args<Fnc>): void;
47
+ };
48
+ export declare function cacheJSONArgsEqual<Fnc extends AnyFunction>(fnc: Fnc, limit?: number): Fnc & {
49
+ clear(...args: unknown[]): void;
50
+ clearAll(): void;
51
+ };
52
+ export declare function cacheShallowConfigArgEqual<Fnc extends AnyFunction>(fnc: Fnc, limit?: number): Fnc & {
53
+ clear(configObj: Args<Fnc>[0]): void;
54
+ clearAll(): void;
55
+ };
56
+ export declare function externalCache<Key, Value>(): {
57
+ get: (key: Key) => Value | undefined;
58
+ set: (key: Key, value: Value) => void;
59
+ };
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import http from "http";
5
+ import { CallType } from "../SocketFunctionTypes";
6
+ export declare function setDefaultHTTPCall(call: CallType): void;
7
+ export declare function getServerLocationFromRequest(request: http.IncomingMessage): {
8
+ address: string;
9
+ port: number;
10
+ };
11
+ export declare function getNodeIdsFromRequest(request: http.IncomingMessage): {
12
+ nodeId: string;
13
+ localNodeId: string;
14
+ };
15
+ export declare function getCurrentHTTPRequest(): http.IncomingMessage | undefined;
16
+ export declare function httpCallHandler(request: http.IncomingMessage, response: http.ServerResponse): Promise<void>;
17
+ declare const resultHeaders: unique symbol;
18
+ type HTTPResultType = Buffer & {
19
+ [resultHeaders]?: {
20
+ [header: string]: string;
21
+ };
22
+ };
23
+ export declare function setHTTPResultHeaders(result: HTTPResultType, headers: {
24
+ [header: string]: string;
25
+ }): HTTPResultType;
26
+ export {};
@@ -0,0 +1,21 @@
1
+ /// <reference path="../hot/HotReloadController.d.ts" />
2
+ import { CallerContext, CallType, ClientHookContext, FullCallType, FunctionFlags, HookContext, SocketExposedInterface, SocketExposedShape, SocketFunctionClientHook, SocketFunctionHook, SocketRegistered } from "../SocketFunctionTypes";
3
+ export declare function getCallFlags(call: CallType): FunctionFlags | undefined;
4
+ export declare function shouldCompressCall(call: CallType): boolean;
5
+ export declare function performLocalCall(config: {
6
+ call: FullCallType;
7
+ caller: CallerContext;
8
+ }): Promise<unknown>;
9
+ export declare function isDataImmutable(call: CallType): boolean;
10
+ export declare function registerClass(classGuid: string, controller: SocketExposedInterface, shape: SocketExposedShape, config?: {
11
+ noFunctionMeasure?: boolean;
12
+ }): void;
13
+ export declare function exposeClass(exposedClass: SocketRegistered): void;
14
+ export declare function registerGlobalHook(hook: SocketFunctionHook): void;
15
+ export declare function unregisterGlobalHook(hook: SocketFunctionHook): void;
16
+ export declare function registerGlobalClientHook(hook: SocketFunctionClientHook): void;
17
+ export declare function unregisterGlobalClientHook(hook: SocketFunctionClientHook): void;
18
+ export declare const runClientHooks: (callType: FullCallType, hooks: Exclude<SocketExposedShape[""], undefined>, connectionId: {
19
+ nodeId: string;
20
+ }) => Promise<ClientHookContext>;
21
+ export declare const runServerHooks: (callType: FullCallType, caller: CallerContext, hooks: Exclude<SocketExposedShape[""], undefined>) => Promise<HookContext>;
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /** Must be populated before the server starts */
4
+ export declare function trustCertificate(cert: string | Buffer): void;
5
+ export declare function getTrustedCertificates(): string[];
6
+ export declare function watchTrustedCertificates(callback: (certs: string[]) => void): () => boolean;
File without changes
@@ -0,0 +1,2 @@
1
+ export declare function markArrayAsSplitable<T>(data: T[]): T[];
2
+ export declare function isSplitableArray<T>(data: T): data is T & (unknown[]);
@@ -0,0 +1,42 @@
1
+ export type HSL = {
2
+ h: number;
3
+ s: number;
4
+ l: number;
5
+ };
6
+ export declare function hslText(color: HSL): string;
7
+ export declare function hslToRGB(color: HSL): {
8
+ r: number;
9
+ g: number;
10
+ b: number;
11
+ };
12
+ export declare function hslToHex(color: HSL): string;
13
+ export declare function hslLightenGamma(hsl: HSL, fraction: number): {
14
+ h: number;
15
+ s: number;
16
+ l: number;
17
+ };
18
+ export declare function hslLightenLinear(hsl: HSL, lightness: number): {
19
+ h: number;
20
+ s: number;
21
+ l: number;
22
+ };
23
+ export declare function hslDarkenGamma(hsl: HSL, fraction: number): {
24
+ h: number;
25
+ s: number;
26
+ l: number;
27
+ };
28
+ export declare function hslDarkenLinear(hsl: HSL, lightness: number): {
29
+ h: number;
30
+ s: number;
31
+ l: number;
32
+ };
33
+ export declare function hslAddSaturate(hsl: HSL, saturation: number): {
34
+ h: number;
35
+ s: number;
36
+ l: number;
37
+ };
38
+ export declare function hslSetSaturate(hsl: HSL, saturation: number): {
39
+ h: number;
40
+ s: number;
41
+ l: number;
42
+ };
@@ -0,0 +1,24 @@
1
+ export declare function formatTime(milliseconds: number | undefined, maxAbsoluteValue?: number): string;
2
+ export declare function getTargetDecimals(maxAbsoluteValue: number, targetDigits: number): number;
3
+ /** Adds decimal digits to reach digits. If the number is simply too large, it won't remove
4
+ * digits, there will instead just be no decimal point.
5
+ */
6
+ export declare function formatMaxDecimals(num: number, targetDigits: number, maxAbsoluteValue?: number, exactDecimals?: number): string;
7
+ /** Actually formats any number, including decimals, by using K, M and B suffixes to get smaller values
8
+ * TODO: Support uK, uM and uB suffixes for very small numbers?
9
+ * <= 6 characters (<= 5 if positive)
10
+ */
11
+ export declare function formatNumber(count: number | undefined, maxAbsoluteValue?: number, noDecimal?: boolean, specialCurrency?: boolean): string;
12
+ export declare function formatBinaryNumber(count: number | undefined, maxAbsoluteValue?: number, noDecimal?: boolean, specialCurrency?: boolean): string;
13
+ /** YYYY/MM/DD HH:MM:SS PM/AM */
14
+ export declare function formatDateTime(time: number): string;
15
+ export declare function formatDateTimeDetailed(time: number): string;
16
+ export declare function formatFileTimestampLocal(time: number): string;
17
+ /** 2024 January 1, Monday, 12:53:02pm */
18
+ export declare function formatNiceDateTime(time: number): string;
19
+ /** 2024 January 1, Monday, 12:53:02pm (4 months ago) */
20
+ export declare function formatVeryNiceDateTime(time: number): string;
21
+ /** YYYY/MM/DD */
22
+ export declare function formatDate(time: number): string;
23
+ /** <= 6 characters (<= 5 if positive) */
24
+ export declare function formatPercent(value: number): string;
@@ -132,7 +132,7 @@ export function formatNumber(count: number | undefined, maxAbsoluteValue?: numbe
132
132
 
133
133
  maxAbsoluteValue = maxAbsoluteValue ?? Math.abs(count);
134
134
 
135
- let maxDecimals = noDecimal ? 0 : 3;
135
+ let maxDecimals = 3;
136
136
 
137
137
  // NOTE: We don't switch units as soon as we possible can, because...
138
138
  // 3.594 vs 3.584 is harder to quickly distinguish compared to 3594 and 3584,
@@ -146,7 +146,23 @@ export function formatNumber(count: number | undefined, maxAbsoluteValue?: numbe
146
146
  let divisor = 1;
147
147
  let suffix = "";
148
148
  let currencyDecimalsNeeded = false;
149
- if (maxAbsoluteValue < 1000 * extraFactor) {
149
+ if (maxAbsoluteValue < 0.00000001) {
150
+ maxDecimals = 12;
151
+ } else if (maxAbsoluteValue < 0.0000001) {
152
+ maxDecimals = 11;
153
+ } else if (maxAbsoluteValue < 0.000001) {
154
+ maxDecimals = 10;
155
+ } else if (maxAbsoluteValue < 0.00001) {
156
+ maxDecimals = 9;
157
+ } else if (maxAbsoluteValue < 0.0001) {
158
+ maxDecimals = 8;
159
+ } else if (maxAbsoluteValue < 0.001) {
160
+ maxDecimals = 7;
161
+ } else if (maxAbsoluteValue < 0.01) {
162
+ maxDecimals = 6;
163
+ } else if (maxAbsoluteValue < 0.1) {
164
+ maxDecimals = 5;
165
+ } else if (maxAbsoluteValue < 1000 * extraFactor) {
150
166
  if (specialCurrency) {
151
167
  currencyDecimalsNeeded = true;
152
168
  }
@@ -168,6 +184,9 @@ export function formatNumber(count: number | undefined, maxAbsoluteValue?: numbe
168
184
  }
169
185
  count /= divisor;
170
186
  maxAbsoluteValue /= divisor;
187
+ if (noDecimal) {
188
+ maxDecimals = 0;
189
+ }
171
190
 
172
191
  return formatMaxDecimals(count, maxDecimals, maxAbsoluteValue, currencyDecimalsNeeded ? 2 : undefined) + suffix;
173
192
  }
@@ -0,0 +1,7 @@
1
+ export declare const blue: (text: string) => string;
2
+ export declare const red: (text: string) => string;
3
+ export declare const green: (text: string) => string;
4
+ export declare const yellow: (text: string) => string;
5
+ export declare const white: (text: string) => string;
6
+ export declare const gray: (text: string) => string;
7
+ export declare const magenta: (text: string) => string;
@@ -0,0 +1,5 @@
1
+ export declare function forwardPort(config: {
2
+ externalPort: number;
3
+ internalPort: number;
4
+ duration?: number;
5
+ }): Promise<void>;
package/src/https.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ export declare function httpsRequest(url: string, payload?: Buffer | Buffer[], method?: string, sendSessionCookies?: boolean, config?: {
4
+ headers?: {
5
+ [key: string]: string | undefined;
6
+ };
7
+ cancel?: Promise<void>;
8
+ }): Promise<Buffer>;
package/src/misc.d.ts ADDED
@@ -0,0 +1,98 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { MaybePromise } from "./types";
4
+ export declare const timeInSecond = 1000;
5
+ export declare const timeInMinute: number;
6
+ export declare const timeInHour: number;
7
+ export declare const timeInDay: number;
8
+ export declare const timeInWeek: number;
9
+ export declare const timeInYear: number;
10
+ export type Watchable<T> = (callback: (value: T) => void) => MaybePromise<void>;
11
+ export declare function convertErrorStackToError(error: string): Error;
12
+ export declare function sha256Hash(buffer: Buffer | string): string;
13
+ export declare function sha256HashBuffer(buffer: Buffer | string): Buffer;
14
+ /** Async, but works both clientside and serverside. */
15
+ export declare function sha256HashPromise(buffer: Buffer): Promise<any>;
16
+ export declare function sha256BufferPromise(buffer: Buffer): Promise<Buffer>;
17
+ export declare function arrayEqual(a: {
18
+ [key: number]: unknown;
19
+ length: number;
20
+ }, b: {
21
+ [key: number]: unknown;
22
+ length: number;
23
+ }): boolean;
24
+ export declare function isNode(): boolean;
25
+ export declare function isNodeTrue(): true;
26
+ export declare function formatNumberSuffixed(count: number): string;
27
+ export declare function list(count: number): number[];
28
+ export declare function recursiveFreeze<T>(obj: T): T;
29
+ export type ArrayBufferViewTypes = Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | BigUint64Array | BigInt64Array | Float64Array | Float32Array | Uint8ClampedArray;
30
+ export type BufferType = ArrayBuffer | SharedArrayBuffer | ArrayBufferViewTypes;
31
+ export declare function isBufferType(obj: unknown): obj is BufferType;
32
+ export declare function getKeys(obj: unknown): PropertyKey[];
33
+ export declare function getStringKeys<T extends {}>(obj: T): ((keyof T) & string)[];
34
+ export declare function keyBy<T, K>(arr: T[], getKey: (value: T) => K): Map<K, T>;
35
+ export declare function keyByArray<T, K>(arr: T[], getKey: (value: T) => K): Map<K, T[]>;
36
+ export declare function deepCloneJSON<T>(obj: T): T;
37
+ export declare class PromiseObj<T = void> {
38
+ promise: Promise<T>;
39
+ value: {
40
+ value?: T;
41
+ error?: string;
42
+ } | undefined;
43
+ /** Resolve called does not mean the value is ready, as it may be resolved with a promise. */
44
+ resolveCalled?: boolean;
45
+ resolve: (value: T | Promise<T>) => void;
46
+ reject: (error: any) => void;
47
+ private baseResolve;
48
+ private baseReject;
49
+ constructor();
50
+ }
51
+ export declare function promiseObj<T = void>(): PromiseObj<T>;
52
+ export declare function throttleFunction<Args extends any[]>(delay: number, fnc: (...args: Args) => MaybePromise<void>): (...args: Args) => Promise<void>;
53
+ export declare function nextId(): string;
54
+ export declare function arrayFromOrderObject<T>(obj: {
55
+ [order: number]: T;
56
+ }): T[];
57
+ export declare function last<T>(arr: T[]): T | undefined;
58
+ export type ObjectValues<T> = T[keyof T];
59
+ export declare function entries<Obj extends {
60
+ [key: string]: unknown;
61
+ }>(obj: Obj): [keyof Obj, ObjectValues<Obj>][];
62
+ export declare function keys<Obj extends {
63
+ [key: string]: unknown;
64
+ }>(obj: Obj): (keyof Obj)[];
65
+ export declare function sort<T>(arr: T[], sortKey: (obj: T) => unknown): T[];
66
+ export declare function getRootDomain(hostname: string): string;
67
+ export declare class QueueLimited<T> {
68
+ private readonly maxCount;
69
+ private items;
70
+ private nextIndex;
71
+ constructor(maxCount: number);
72
+ push(item: T): void;
73
+ getAllUnordered(): T[];
74
+ reset(): void;
75
+ clear(): void;
76
+ getOldest(): T | undefined;
77
+ }
78
+ export declare function binarySearchBasic<T, V>(array: T[], getVal: (val: T) => V, searchValue: V): number;
79
+ export declare function binarySearchBasic2<T, V>(array: T[], getVal: (val: T) => V, searchValue: T): number;
80
+ /**
81
+ * Searches indexes, allowing you to query structures that aren't arrays. To search an array, use:
82
+ * `binarySearchIndex(array.length, i => compare(array[i], searchValue))`
83
+ *
84
+ * NOTE: If there are duplicates, returns the first match.
85
+ *
86
+ * NOTE: If the value can't be found, returns the bitwise negation of the index where it should be inserted.
87
+ *
88
+ * NOTE: With `if (index < 0) index = ~index;` you will get an index of the value >= the target value.
89
+ */
90
+ export declare function binarySearchIndex(listCount: number, compare: (lhsIndex: number) => number): number;
91
+ export declare function compare(lhs: unknown, rhs: unknown): number;
92
+ export declare function compareArray(lhs: unknown[], rhs: unknown[]): number;
93
+ export declare function insertIntoSortedList<T>(list: T[], map: (val: T) => string | number, element: T): void;
94
+ export declare function removeFromSortedList<T>(list: T[], map: (val: T) => string | number, searchValue: string | number): void;
95
+ export declare function timeoutToError<T>(time: number, p: Promise<T>, err: () => Error): Promise<T>;
96
+ export declare function timeoutToUndefined<T>(time: number, p: Promise<T>): Promise<T | undefined>;
97
+ export declare function timeoutToUndefinedSilent<T>(time: number, p: Promise<T>): Promise<T | undefined>;
98
+ export declare function errorToWarning<T>(promise: Promise<T>): void;
@@ -0,0 +1,11 @@
1
+ export declare const testTCPIsListening: (host: string, port: number) => Promise<boolean>;
2
+ export declare const getExternalIP: {
3
+ (): Promise<string>;
4
+ reset(): void;
5
+ set(newValue: Promise<string>): void;
6
+ };
7
+ export declare const getPublicIP: {
8
+ (): Promise<string>;
9
+ reset(): void;
10
+ set(newValue: Promise<string>): void;
11
+ };
@@ -0,0 +1,24 @@
1
+ import { CallFactory } from "./CallFactory";
2
+ import { MaybePromise } from "./types";
3
+ export declare function getNodeId(domain: string, port: number): string;
4
+ /** @deprecated, call getBrowserUrlNode instead, which does important additional checks. */
5
+ export declare function getNodeIdFromLocation(): string;
6
+ /** A nodeId not available for reconnecting. */
7
+ export declare function getClientNodeId(address: string): string;
8
+ export declare function isClientNodeId(nodeId: string): boolean;
9
+ /** Will always be available, even if getNodeIdLocation is not (as we don't always have the port,
10
+ * but we should always have an address).
11
+ * - Rarely used, as for logging you can just log the nodeId. ALSO, it isn't sufficient to reconnect, as the port is also needed!
12
+ * */
13
+ export declare function getNodeIdIP(nodeId: string): string;
14
+ export declare function getNodeIdLocation(nodeId: string): {
15
+ address: string;
16
+ port: number;
17
+ } | undefined;
18
+ export declare function getNodeIdDomain(nodeId: string): string;
19
+ export declare function getNodeIdDomainMaybeUndefined(nodeId: string): string | undefined;
20
+ export declare function registerNodeClient(callFactory: CallFactory): void;
21
+ export declare function getCreateCallFactory(nodeId: string): MaybePromise<CallFactory>;
22
+ export declare function getCallFactory(nodeId: string): MaybePromise<CallFactory | undefined>;
23
+ export declare function resetAllNodeCallFactories(): void;
24
+ export declare function countOpenConnections(): number;
@@ -0,0 +1,7 @@
1
+ import { FullCallType, SocketInternalInterface } from "../SocketFunctionTypes";
2
+ type CallProxyType = {
3
+ [nodeId: string]: SocketInternalInterface;
4
+ };
5
+ export declare const getCallObj: unique symbol;
6
+ export declare function getCallProxy(id: string, callback: (callType: FullCallType) => Promise<unknown>): CallProxyType;
7
+ export {};
@@ -0,0 +1,12 @@
1
+ export type OwnTimeObj = {
2
+ name: string;
3
+ time: number;
4
+ ownTime: number;
5
+ };
6
+ export type OwnTimeObjInternal = OwnTimeObj & {
7
+ lastStartTime: number;
8
+ firstStartTime: number;
9
+ };
10
+ export declare function getOpenTimesBase(): OwnTimeObjInternal[];
11
+ export declare const measureOverheadTime: number;
12
+ export declare function getOwnTime<T>(name: string, code: () => T, onTime: (obj: OwnTimeObj) => void): T;