@reliantlabs/forge-web-runtime 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -0
- package/dist/node-exception.d.ts +73 -0
- package/dist/node-exception.js +278 -0
- package/dist/node-exception.js.map +1 -0
- package/dist/node-otlp.d.ts +168 -0
- package/dist/node-otlp.js +235 -0
- package/dist/node-otlp.js.map +1 -0
- package/dist/node-trace.d.ts +41 -0
- package/dist/node-trace.js +331 -0
- package/dist/node-trace.js.map +1 -0
- package/dist/node.d.ts +153 -0
- package/dist/node.js +576 -0
- package/dist/node.js.map +1 -0
- package/dist/service-name.d.ts +2 -0
- package/dist/service-name.js +14 -0
- package/dist/service-name.js.map +1 -0
- package/package.json +16 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-trace.js","sourceRoot":"","sources":["../src/node-trace.ts"],"names":[],"mappings":"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","sourcesContent":["// Part of @reliantlabs/forge-web-runtime — the web twin of forge/pkg.\n//\n// Spans for the `/node` entry: a TracerProvider behind @opentelemetry/api, an\n// AsyncLocalStorage context manager, and the W3C traceparent propagator. Every\n// span is recorded and sampled (a desktop app's main process opens few), and a\n// finished span is handed to the exporter's queue.\n//\n// This is the part of the OpenTelemetry SDK `/node` needs and no more; see\n// node-otlp.ts for why the SDK itself is not a dependency.\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { randomBytes } from \"node:crypto\";\n\nimport {\n type Context,\n type ContextManager,\n type Exception,\n type HrTime,\n type Link,\n ROOT_CONTEXT,\n type Span,\n type SpanAttributes,\n type SpanAttributeValue,\n type SpanContext,\n SpanKind,\n type SpanOptions,\n SpanStatusCode,\n type SpanStatus,\n type TextMapGetter,\n type TextMapPropagator,\n type TextMapSetter,\n type TimeInput,\n trace,\n TraceFlags,\n type Tracer,\n type TracerProvider,\n} from \"@opentelemetry/api\";\n\nimport {\n type Attributes,\n encodeAttributes,\n MAX_ATTRIBUTES,\n nowMs,\n type Scope,\n type SpanRecord,\n unixNanos,\n} from \"./node-otlp.js\";\nimport { TRACEPARENT_RE } from \"./trace.js\";\n\n/** Most events kept on one span. */\nexport const MAX_SPAN_EVENTS = 128;\n/** Most links kept on one span. */\nexport const MAX_SPAN_LINKS = 128;\n\nconst ZERO_TRACE = \"0\".repeat(32);\nconst ZERO_SPAN = \"0\".repeat(16);\n\nfunction hexId(bytes: number, zero: string): string {\n let id = randomBytes(bytes).toString(\"hex\");\n while (id === zero) {\n id = randomBytes(bytes).toString(\"hex\");\n }\n return id;\n}\n\n/** Epoch milliseconds for an OTel TimeInput, as the SDK reads one. */\nexport function timeInputMs(t: TimeInput | undefined): number {\n if (t === undefined) {\n return nowMs();\n }\n if (t instanceof Date) {\n return t.getTime();\n }\n if (Array.isArray(t)) {\n const [s, ns] = t as HrTime;\n return s * 1000 + ns / 1e6;\n }\n // The SDK's rule: a number below the process's time origin is a\n // performance.now() reading, anything else is epoch milliseconds.\n return t < performance.timeOrigin ? performance.timeOrigin + t : t;\n}\n\nfunction isTimeInput(v: unknown): v is TimeInput {\n return (\n typeof v === \"number\" ||\n v instanceof Date ||\n (Array.isArray(v) && v.length === 2 && typeof v[0] === \"number\")\n );\n}\n\ntype Sink = (span: SpanRecord) => void;\n\n/** The values every span carries, set once by the entry (app.client, userId). */\nexport type GlobalAttributes = () => Attributes;\n\nclass RecordingSpan implements Span {\n private ended = false;\n private readonly attributes: Attributes = {};\n private droppedAttributes = 0;\n private readonly events: SpanRecord[\"events\"] = [];\n private readonly links: SpanRecord[\"links\"] = [];\n private status: SpanStatus = { code: SpanStatusCode.UNSET };\n\n constructor(\n private readonly ctx: SpanContext,\n private readonly parentSpanId: string | undefined,\n private name: string,\n private readonly kind: SpanKind,\n private readonly startMs: number,\n private readonly scope: Scope,\n private readonly sink: Sink,\n ) {}\n\n spanContext(): SpanContext {\n return this.ctx;\n }\n\n setAttribute(key: string, value: SpanAttributeValue): this {\n if (this.ended || value === undefined || value === null) {\n return this;\n }\n if (\n !(key in this.attributes) &&\n Object.keys(this.attributes).length >= MAX_ATTRIBUTES\n ) {\n this.droppedAttributes++;\n return this;\n }\n this.attributes[key] = value as Attributes[string];\n return this;\n }\n\n setAttributes(attributes: SpanAttributes): this {\n for (const [k, v] of Object.entries(attributes)) {\n if (v !== undefined) {\n this.setAttribute(k, v);\n }\n }\n return this;\n }\n\n addEvent(\n name: string,\n attributesOrStartTime?: SpanAttributes | TimeInput,\n startTime?: TimeInput,\n ): this {\n if (this.ended || this.events.length >= MAX_SPAN_EVENTS) {\n return this;\n }\n let attrs: SpanAttributes | undefined;\n let time = startTime;\n if (isTimeInput(attributesOrStartTime)) {\n time = attributesOrStartTime;\n } else {\n attrs = attributesOrStartTime;\n }\n this.events.push({\n timeUnixNano: unixNanos(timeInputMs(time)),\n name,\n attributes: encodeAttributes(attrs as Attributes | undefined),\n });\n return this;\n }\n\n addLink(link: Link): this {\n if (!this.ended && this.links.length < MAX_SPAN_LINKS) {\n this.links.push({\n traceId: link.context.traceId,\n spanId: link.context.spanId,\n attributes: encodeAttributes(link.attributes as Attributes | undefined),\n });\n }\n return this;\n }\n\n addLinks(links: Link[]): this {\n for (const l of links) {\n this.addLink(l);\n }\n return this;\n }\n\n setStatus(status: SpanStatus): this {\n if (this.ended) {\n return this;\n }\n // OK is final, as in the SDK: a later ERROR does not overwrite it.\n if (this.status.code === SpanStatusCode.OK) {\n return this;\n }\n this.status = status;\n return this;\n }\n\n updateName(name: string): this {\n if (!this.ended) {\n this.name = name;\n }\n return this;\n }\n\n recordException(exception: Exception, time?: TimeInput): void {\n const attrs: SpanAttributes = {};\n if (typeof exception === \"string\") {\n attrs[\"exception.message\"] = exception;\n } else if (exception) {\n const e = exception as {\n name?: unknown;\n message?: unknown;\n stack?: unknown;\n code?: unknown;\n };\n if (typeof e.name === \"string\") attrs[\"exception.type\"] = e.name;\n else if (typeof e.code === \"string\" || typeof e.code === \"number\")\n attrs[\"exception.type\"] = String(e.code);\n if (typeof e.message === \"string\") attrs[\"exception.message\"] = e.message;\n if (typeof e.stack === \"string\") attrs[\"exception.stacktrace\"] = e.stack;\n }\n this.addEvent(\"exception\", attrs, time);\n }\n\n end(endTime?: TimeInput): void {\n if (this.ended) {\n return;\n }\n this.ended = true;\n const endMs = Math.max(this.startMs, timeInputMs(endTime));\n this.sink({\n traceId: this.ctx.traceId,\n spanId: this.ctx.spanId,\n parentSpanId: this.parentSpanId,\n name: this.name,\n // OTLP's SpanKind is the API's plus one (0 is UNSPECIFIED on the wire).\n kind: this.kind + 1,\n startTimeUnixNano: unixNanos(this.startMs),\n endTimeUnixNano: unixNanos(endMs),\n attributes: encodeAttributes(this.attributes),\n droppedAttributesCount: this.droppedAttributes || undefined,\n events: this.events,\n links: this.links,\n status:\n this.status.message !== undefined\n ? { code: this.status.code, message: this.status.message }\n : { code: this.status.code },\n scope: this.scope,\n });\n }\n\n isRecording(): boolean {\n return !this.ended;\n }\n}\n\n/** The context operations a tracer runs on: the global API's, or a manager's own. */\nexport interface ContextOps {\n active(): Context;\n with<T>(ctx: Context, fn: () => T): T;\n}\n\nclass NodeTracer implements Tracer {\n constructor(\n private readonly scope: Scope,\n private readonly sink: Sink,\n private readonly globals: GlobalAttributes,\n private readonly ctx: ContextOps,\n ) {}\n\n startSpan(name: string, options: SpanOptions = {}, ctx?: Context): Span {\n const parentCtx = options.root\n ? undefined\n : trace.getSpanContext(ctx ?? this.ctx.active());\n const parent =\n parentCtx && trace.isSpanContextValid(parentCtx) ? parentCtx : undefined;\n const spanContext: SpanContext = {\n traceId: parent?.traceId ?? hexId(16, ZERO_TRACE),\n spanId: hexId(8, ZERO_SPAN),\n traceFlags: TraceFlags.SAMPLED,\n };\n const span = new RecordingSpan(\n spanContext,\n parent?.spanId,\n name,\n options.kind ?? SpanKind.INTERNAL,\n timeInputMs(options.startTime),\n this.scope,\n this.sink,\n );\n for (const [k, v] of Object.entries(this.globals())) {\n if (v !== undefined) span.setAttribute(k, v as SpanAttributeValue);\n }\n if (options.attributes) {\n span.setAttributes(options.attributes);\n }\n if (options.links) {\n span.addLinks(options.links);\n }\n return span;\n }\n\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n a?: SpanOptions | F,\n b?: Context | F,\n c?: F,\n ): ReturnType<F> {\n let options: SpanOptions = {};\n let parent: Context | undefined;\n let fn: F;\n if (typeof a === \"function\") {\n fn = a;\n } else if (typeof b === \"function\") {\n options = a ?? {};\n fn = b;\n } else {\n options = a ?? {};\n parent = b;\n fn = c as F;\n }\n const base = parent ?? this.ctx.active();\n const span = this.startSpan(name, options, base);\n const ctx = trace.setSpan(base, span);\n return this.ctx.with(ctx, () => fn(span)) as ReturnType<F>;\n }\n}\n\n/** A TracerProvider whose spans go to `sink`. */\nexport class NodeTracerProvider implements TracerProvider {\n private readonly tracers = new Map<string, Tracer>();\n\n constructor(\n private readonly sink: Sink,\n private readonly globals: GlobalAttributes,\n private readonly ctx: ContextOps,\n ) {}\n\n getTracer(name: string, version?: string): Tracer {\n const key = `${name}\\u001f${version ?? \"\"}`;\n let t = this.tracers.get(key);\n if (!t) {\n t = new NodeTracer(\n version ? { name, version } : { name },\n this.sink,\n this.globals,\n this.ctx,\n );\n this.tracers.set(key, t);\n }\n return t;\n }\n}\n\n/** The OTel ContextManager over AsyncLocalStorage: context follows async calls. */\nexport class AsyncLocalContextManager implements ContextManager {\n private store = new AsyncLocalStorage<Context>();\n\n active(): Context {\n return this.store.getStore() ?? ROOT_CONTEXT;\n }\n\n with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n const cb = thisArg == null ? fn : fn.bind(thisArg);\n return this.store.run(\n context,\n cb as (...args: A) => ReturnType<F>,\n ...args,\n );\n }\n\n bind<T>(context: Context, target: T): T {\n if (typeof target !== \"function\") {\n return target;\n }\n const self = this;\n const fn = target as unknown as (...args: unknown[]) => unknown;\n return function (this: unknown, ...args: unknown[]) {\n return self.with(context, () => fn.apply(this, args));\n } as unknown as T;\n }\n\n enable(): this {\n return this;\n }\n\n disable(): this {\n this.store.disable();\n this.store = new AsyncLocalStorage<Context>();\n return this;\n }\n}\n\n/** W3C Trace Context: `traceparent` in and out. */\nexport class TraceparentPropagator implements TextMapPropagator {\n inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n const sc = trace.getSpanContext(context);\n if (!sc || !trace.isSpanContextValid(sc)) {\n return;\n }\n const flags =\n (sc.traceFlags & TraceFlags.SAMPLED) === TraceFlags.SAMPLED ? \"01\" : \"00\";\n setter.set(\n carrier,\n \"traceparent\",\n `00-${sc.traceId}-${sc.spanId}-${flags}`,\n );\n }\n\n extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n const raw = getter.get(carrier, \"traceparent\");\n const value = (Array.isArray(raw) ? raw[0] : raw)?.trim();\n if (!value || !TRACEPARENT_RE.test(value)) {\n return context;\n }\n const [, traceId, spanId, flags] = value.split(\"-\");\n if (!traceId || !spanId || traceId === ZERO_TRACE || spanId === ZERO_SPAN) {\n return context;\n }\n return trace.setSpanContext(context, {\n traceId,\n spanId,\n traceFlags: parseInt(flags ?? \"00\", 16) & TraceFlags.SAMPLED,\n isRemote: true,\n });\n }\n\n fields(): string[] {\n return [\"traceparent\"];\n }\n}\n"]}
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { type Tracer } from "@opentelemetry/api";
|
|
2
|
+
import { type FetchLike, type SeverityText } from "./node-otlp.js";
|
|
3
|
+
export { frontendServiceName } from "./service-name.js";
|
|
4
|
+
export { CODE_FILE, CODE_FUNCTION, CODE_LINE, ERROR_GROUP, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, exceptionAttributes, type PathScrub, } from "./node-exception.js";
|
|
5
|
+
/** The instrumentation scope of every log record this entry writes. */
|
|
6
|
+
export declare const NODE_SCOPE_NAME = "@reliantlabs/forge-web-runtime/node";
|
|
7
|
+
/** Body of the record for an uncaught exception. */
|
|
8
|
+
export declare const UNCAUGHT_EXCEPTION_BODY = "uncaught exception";
|
|
9
|
+
/** Body of the record for an unhandled rejection. */
|
|
10
|
+
export declare const UNHANDLED_REJECTION_BODY = "unhandled rejection";
|
|
11
|
+
/** Body of the record for an error passed to reportError / reportException. */
|
|
12
|
+
export declare const REPORTED_EXCEPTION_BODY = "caught exception";
|
|
13
|
+
/** Longest log body. */
|
|
14
|
+
export declare const MAX_BODY_CHARS = 4096;
|
|
15
|
+
/** Longest user id, as the browser entry bounds it. */
|
|
16
|
+
export declare const MAX_USER_ID_CHARS = 128;
|
|
17
|
+
export declare const DEFAULT_FLUSH_TIMEOUT_MS = 2000;
|
|
18
|
+
export declare const DEFAULT_BATCH_DELAY_MS = 5000;
|
|
19
|
+
export declare const DEFAULT_MAX_BATCH = 256;
|
|
20
|
+
export declare const DEFAULT_MAX_QUEUE = 2048;
|
|
21
|
+
export declare const DEFAULT_EXPORT_TIMEOUT_MS = 10000;
|
|
22
|
+
/**
|
|
23
|
+
* Most records of ONE fatal error (same type, message and frame) per minute.
|
|
24
|
+
* A handler that throws while handling — an EPIPE logger writing to the pipe
|
|
25
|
+
* that just broke — raises the same exception in a tight loop, and each one
|
|
26
|
+
* would otherwise be a record and a request.
|
|
27
|
+
*/
|
|
28
|
+
export declare const MAX_REPEATS_PER_MINUTE = 5;
|
|
29
|
+
/** A value a caller may attach to a log record; anything else is dropped. */
|
|
30
|
+
export type LogAttributes = Record<string, unknown>;
|
|
31
|
+
export interface NodeTelemetryConfig {
|
|
32
|
+
/** `service.name`. For a forge frontend: frontendServiceName(project, frontend). */
|
|
33
|
+
serviceName: string;
|
|
34
|
+
/** `service.version` — the release. */
|
|
35
|
+
serviceVersion?: string;
|
|
36
|
+
/** `service.namespace`, conventionally the project name. */
|
|
37
|
+
serviceNamespace?: string;
|
|
38
|
+
/** Emitted as `deployment.environment.name` and the legacy `deployment.environment`. */
|
|
39
|
+
environment?: string;
|
|
40
|
+
/** The forge frontend this process belongs to, as `forge.frontend`. */
|
|
41
|
+
frontend?: string;
|
|
42
|
+
/** `app.client` on every record and span (`electron`, `cli`, ...). */
|
|
43
|
+
appClient?: string;
|
|
44
|
+
/**
|
|
45
|
+
* The OTLP base URL: `${endpoint}/v1/logs` and `/v1/traces` are posted to.
|
|
46
|
+
* The keyed ingest is `https://<ingest host>/k/<key>`. Unset, empty, `off`
|
|
47
|
+
* or not an absolute http(s) URL disables telemetry: init returns null and
|
|
48
|
+
* installs nothing.
|
|
49
|
+
*/
|
|
50
|
+
endpoint?: string;
|
|
51
|
+
/**
|
|
52
|
+
* The `Origin` header sent with every export. The keyed ingest admits a
|
|
53
|
+
* request only when its Origin is EXACTLY one of the key's allowed origins,
|
|
54
|
+
* so a desktop app sends its renderer's origin (`app://bundle`).
|
|
55
|
+
*/
|
|
56
|
+
origin?: string;
|
|
57
|
+
/** Extra request headers. */
|
|
58
|
+
headers?: Record<string, string>;
|
|
59
|
+
/** Files below it are reported relative to it. Electron: app.getAppPath(). Default process.cwd(). */
|
|
60
|
+
appRoot?: string;
|
|
61
|
+
/** Extra resource attributes. They cannot override `service.name`. */
|
|
62
|
+
resourceAttributes?: Record<string, string>;
|
|
63
|
+
/** Record uncaught exceptions and unhandled rejections. Default true. */
|
|
64
|
+
captureProcessErrors?: boolean;
|
|
65
|
+
/** Register the tracer, context manager and propagator globally. Default true. */
|
|
66
|
+
registerGlobal?: boolean;
|
|
67
|
+
/** Least severe level the logger exports. Default `INFO`. */
|
|
68
|
+
minSeverity?: SeverityText;
|
|
69
|
+
/** How long a record may wait for its batch. Default 5s. */
|
|
70
|
+
batchDelayMs?: number;
|
|
71
|
+
/** Most records in one request. Default 256. */
|
|
72
|
+
maxBatchSize?: number;
|
|
73
|
+
/** Most records held per signal; more are dropped and counted. Default 2048. */
|
|
74
|
+
maxQueueSize?: number;
|
|
75
|
+
/** One request's budget. Default 10s. */
|
|
76
|
+
exportTimeoutMs?: number;
|
|
77
|
+
/** How long a fatal error's record may delay the process's default exit. Default 2s. */
|
|
78
|
+
fatalFlushTimeoutMs?: number;
|
|
79
|
+
/** Told when a batch is dropped (the ingest refused it or was unreachable). */
|
|
80
|
+
onExportError?: (error: Error) => void;
|
|
81
|
+
/** Test seam: the fetch exports go through. Default globalThis.fetch. */
|
|
82
|
+
fetch?: FetchLike;
|
|
83
|
+
}
|
|
84
|
+
export interface NodeLogger {
|
|
85
|
+
debug(body: string, attributes?: LogAttributes): void;
|
|
86
|
+
info(body: string, attributes?: LogAttributes): void;
|
|
87
|
+
warn(body: string, attributes?: LogAttributes): void;
|
|
88
|
+
/** An ERROR record. An Error among the attributes supplies its exception.* keys. */
|
|
89
|
+
error(body: string, attributes?: LogAttributes): void;
|
|
90
|
+
}
|
|
91
|
+
export interface NodeTelemetry {
|
|
92
|
+
readonly logger: NodeLogger;
|
|
93
|
+
/** The tracer to open spans on (also the global one, unless registerGlobal is false). */
|
|
94
|
+
readonly tracer: Tracer;
|
|
95
|
+
/** One ERROR record for an error the app caught. */
|
|
96
|
+
reportError(error: unknown, attributes?: LogAttributes): void;
|
|
97
|
+
/** The opaque `userId` on every later record and span; null clears it. Never an email. */
|
|
98
|
+
setUser(id: string | null): void;
|
|
99
|
+
/** Export everything queued; resolves by `timeoutMs` (default 2s) whatever the network does. */
|
|
100
|
+
flush(timeoutMs?: number): Promise<void>;
|
|
101
|
+
/** Flush, then stop: every later call is a no-op. init may run again afterwards. */
|
|
102
|
+
shutdown(timeoutMs?: number): Promise<void>;
|
|
103
|
+
/** Records refused because a queue was full. */
|
|
104
|
+
readonly dropped: number;
|
|
105
|
+
}
|
|
106
|
+
/** The running instance, or null before init / after shutdown. */
|
|
107
|
+
export declare function getNodeTelemetry(): NodeTelemetry | null;
|
|
108
|
+
/**
|
|
109
|
+
* The absolute OTLP base for `endpoint`, or null when telemetry is off: unset,
|
|
110
|
+
* empty, `off`, or not an absolute http(s) URL. Trailing slashes are dropped.
|
|
111
|
+
*/
|
|
112
|
+
export declare function resolveNodeIngestUrl(endpoint: string | undefined): string | null;
|
|
113
|
+
/**
|
|
114
|
+
* The resource every record and span carries. Pure given its inputs;
|
|
115
|
+
* exported for tests and for an app that wants to see exactly what is sent.
|
|
116
|
+
*/
|
|
117
|
+
export declare function buildNodeResource(config: Pick<NodeTelemetryConfig, "serviceName" | "serviceVersion" | "serviceNamespace" | "environment" | "frontend" | "resourceAttributes">, runtime: {
|
|
118
|
+
versions: Record<string, string | undefined>;
|
|
119
|
+
platform: string;
|
|
120
|
+
arch: string;
|
|
121
|
+
}, version?: string): Record<string, string>;
|
|
122
|
+
/** What `--unhandled-rejections` says Node does with a rejection nobody handles. */
|
|
123
|
+
export declare function unhandledRejectionMode(execArgv: readonly string[], nodeOptions: string | undefined): string;
|
|
124
|
+
/**
|
|
125
|
+
* initNodeTelemetry starts telemetry for this process and returns it, or null
|
|
126
|
+
* when it is off (no usable endpoint, no fetch, not Node). Idempotent: a
|
|
127
|
+
* second call returns the running instance and ignores its config. Never
|
|
128
|
+
* throws.
|
|
129
|
+
*/
|
|
130
|
+
export declare function initNodeTelemetry(config: NodeTelemetryConfig): NodeTelemetry | null;
|
|
131
|
+
/** The slice of Electron's `app` flushOnQuit needs. */
|
|
132
|
+
export interface QuitApp {
|
|
133
|
+
on(event: "before-quit", listener: (event: {
|
|
134
|
+
preventDefault(): void;
|
|
135
|
+
}) => void): unknown;
|
|
136
|
+
removeListener?(event: "before-quit", listener: (event: {
|
|
137
|
+
preventDefault(): void;
|
|
138
|
+
}) => void): unknown;
|
|
139
|
+
quit(): void;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Hold Electron's quit until the running telemetry has flushed (bounded by
|
|
143
|
+
* `timeoutMs`, default 2s), then quit. Returns a function that removes the
|
|
144
|
+
* hook.
|
|
145
|
+
*
|
|
146
|
+
* It defers the FIRST quit and calls app.quit() again when the flush is done.
|
|
147
|
+
* An app that already defers quit for its own shutdown (stops a backend, then
|
|
148
|
+
* exits) should instead `await telemetry.flush()` as the last step of that
|
|
149
|
+
* sequence: two listeners that each defer and re-quit cut each other short.
|
|
150
|
+
*/
|
|
151
|
+
export declare function flushOnQuit(app: QuitApp, options?: {
|
|
152
|
+
timeoutMs?: number;
|
|
153
|
+
}): () => void;
|