logixlysia 6.9.3 → 6.10.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.
- package/CHANGELOG.md +26 -0
- package/dist/ai.d.ts +2 -0
- package/dist/axiom.d.ts +18 -7
- package/dist/axiom.js +3 -3
- package/dist/better-stack.d.ts +18 -7
- package/dist/better-stack.js +3 -3
- package/dist/clickhouse.d.ts +18 -7
- package/dist/clickhouse.js +1 -1
- package/dist/datadog.d.ts +18 -7
- package/dist/datadog.js +3 -3
- package/dist/enrichers.js +3 -3
- package/dist/hyperdx.d.ts +18 -7
- package/dist/hyperdx.js +1 -1
- package/dist/index.d.ts +21 -10
- package/dist/index.js +6 -6
- package/dist/loki.d.ts +18 -7
- package/dist/loki.js +3 -3
- package/dist/otel.d.ts +2 -0
- package/dist/otlp.d.ts +18 -7
- package/dist/otlp.js +1 -1
- package/dist/posthog.d.ts +18 -7
- package/dist/posthog.js +1 -1
- package/dist/sentry.d.ts +18 -7
- package/dist/sentry.js +4 -4
- package/dist/shared/{Logixlysia-x3k2mm9p.js → Logixlysia-pa8v7y86.js} +1 -1
- package/dist/shared/Logixlysia-tqpczh9a.js +6 -0
- package/dist/shared/Logixlysia-xb08zg3q.js +5 -0
- package/package.json +2 -2
- package/dist/shared/Logixlysia-e797097d.js +0 -6
- package/dist/shared/Logixlysia-z6rmszwk.js +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 6.10.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3423143: HTTP adapters no longer cap delivery at one 20-entry batch per round trip. Entries that arrive while a request is in flight wait and go out together in the next request, which starts as soon as the one in flight returns if a full batch (`maxBatchSize`) is waiting and on the `flushIntervalMs` timer otherwise, so light traffic is batched as before and a 50 ms backend now keeps up with thousands of records per second instead of dropping about half of them. Delivery order is unchanged. The new `maxEntriesPerRequest` option (default 500; 100 for Sentry) is the most entries one request carries; it applies to every request, so a `maxBatchSize` above it splits each batch. At most `maxPendingBatches × maxBatchSize` entries wait behind the request in flight, which carries up to `maxEntriesPerRequest` more, so an adapter holds at most 1,140 entries by default (740 for Sentry) where it held about 660; beyond that, entries are dropped, counted and reported once per request. Requests can carry more bytes than before, and vendor byte limits are not enforced. A failure of a request the queue started on its own goes to the adapter's `onError` (or rate-limited stderr), not to `config.onError`, because no `log()` call is awaiting it; a failure of the request started by a `log()` or `flush()` call is still rejected to that caller. `flush()` waits for the entries accepted before the call, not for the queue to go idle, and it resolves rather than rejects when those entries went out in a request the queue started on its own and that request failed, so `flushLogixlysia` no longer passes that failure to `config.onError`. `maxBatchSize` and `maxEntriesPerRequest` must be positive integers, and the adapter throws at construction otherwise; `maxBatchSize: 0` and `Infinity`, which used to mean one request per entry and timer-only batching, now throw too. The built-in HTTP adapters implement `close()`: it stops accepting entries, then flushes, so `flushLogixlysia(options, { close: true })` releases them. `close` is now a required member of the exported `AdapterTransport` type, so an object of your own typed as `AdapterTransport` needs one as well. A transport wrapped in `withRedaction` is not closed through the wrapper yet; it forwards `flush` only.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 9ac4a0a: Compressed rotation archives are created with `logFileMode` (default `0o600`) instead of the process umask, so they are no more readable than the live log. An adapter's "invalid endpoint URL" error no longer echoes the credentials embedded in the URL, in its message or in its `cause`. File write and rotation failures reported on stderr (when `config.onError` is not set) are rate limited to one message every 5 seconds, like transport and formatting failures.
|
|
12
|
+
- ca5fe30: `autoRedact` no longer throws, and therefore no longer drops the record, when an error's `name` or `message` is an inherited accessor (a `DOMException`, an app error class with `get name()`); redacted errors keep `message`, `name` and `stack` non-enumerable, as native errors do. A value with a `toJSON` method (Bun's `CookieMap`, app classes) is redacted as what it serializes to; errors keep their class even when they define `toJSON`, so an `HttpError` stays an `HttpError`. The password of a URL, `Bearer` and `Basic` credentials in any string, sensitive query keys inside an absolute URL in a `referer`, `location` or `content-location` header, and a field named `cookies` are now masked. Redaction and log serialization stop at a depth of 64 with `"[Depth]"`, so a deeply nested client payload no longer costs quadratic time or overflows the stack. Rotation sizes, intervals and retention given with units are rejected when they are zero, as the numeric zero already was.
|
|
13
|
+
- 7b030bc: `LogFilter`, `LogixlysiaConfig`, `LogRotationConfig`, `SinkErrorContext` and `WebSocketLike` are exported from the package root as types, so a config object, a rotation config, an `onError` handler or a `wrapWs` hook can be typed without reaching into the package's internals. No runtime export changes.
|
|
14
|
+
- 665b71b: The access line is now written once per request, after Elysia has produced the final response, so it carries the status the client received for every exit: a `mapResponse` rewrite, an error mapped by an `onError` hook in either registration order, `set.status` followed by a thrown `Error`, a response returned from an `onRequest` hook, and an auth short-circuit. A generator (streaming) handler is logged when its body finishes, so `{duration}` covers the whole stream, and a throw inside the body produces an error line. A plain object with `code` and `response` keys is no longer mistaken for Elysia's `status()` result. A thrown 2xx or 3xx `status()` now logs at INFO, as an access line without its message, where it was an ERROR line carrying the message. With `useAsyncLocalStorage`, `useLogger()` works inside hooks registered after the plugin, inside a generator body, inside a handler that awaits `app.handle()` for another route, and in work that outlives the response; outside a request it is still a no-op. The `X-Request-Id` response header is set as soon as the request starts, so short-circuited responses carry it too. The request boundary is app-wide: once the plugin is mounted anywhere, every request of the application gets a line, including routes defined on parent apps (previously those were silently unlogged); mount the plugin once at the root. Apps running with `aot: false`, or mounting the plugin inside `group()` or `guard()`, keep the previous hook-based behaviour, including a second error line for an error thrown after the handler returned. Consequences for existing expectations: an error thrown after the handler returned, by an `afterHandle` hook or while Elysia builds the response, now produces one error line instead of a success line followed by an error line; when an app-wide `onError` registered before the plugin answers, the plugin never sees the thrown value, so the line is an access line at the level of the status sent, with an empty message and no error payload, where it was an error line carrying the thrown value; an error that a later `onError` maps to a 2xx or 3xx (a redirect to a login page, say) is logged as an error line carrying that status and the thrown message, where it was logged as ERROR 500 before; a custom log made from a hook registered after the plugin replaces the access line, as a custom log from the handler always did, where it was a second line before, and a custom log made from a later `onError` now comes before the error line instead of after it; and with two plugin instances in sibling modules, access lines now go through the first instance's sinks, while a custom log made through a later instance's `log` still reaches that instance's transports, without a request ID, and replaces the access line for that request (create the plugin once and share it).
|
|
15
|
+
- 0fb85de: `store.pino` is defined again. Since 6.7.0 the lazy pino Proxy was dropped by Elysia's `state()` because its target had no keys, so every handler that read `store.pino` threw. Assignments such as `store.pino.level = 'debug'` now reach pino. The plugin rejects at construction a `logFilter.level` that is not an array of `DEBUG`, `INFO`, `WARNING` or `ERROR`, `useTransportsOnly: true` without a transport, and a `flushTimeoutMs` that is not a finite number of milliseconds at or above 0; each of these used to turn logging off or misreport shutdown silently. `useTransportsOnly: true` with an empty `transports` list was previously accepted as an effectively disabled logger; use `disableInternalLogger` and `disableFileLogging` for that. `geoEnricher` ignores non-string fields in a Netlify `x-nf-geo` header instead of throwing. A `requestId.generator` that throws or returns an invalid id no longer produces an error line on every request; the plugin falls back to a generated UUID and reports the failure through `onError`, or on stderr at most once per interval when no hook is set.
|
|
16
|
+
- c7667f2: The HTTP adapters now take a JSON-safe copy of each record's `meta` at the moment it is logged. A later change to a logged object is no longer shipped, which also closes a redaction bypass under `autoRedact` (an adapter wrapped by `withRedaction` takes its copy when the wrapper hands the record over, after its own asynchronous redaction, so that window is unchanged). A value that cannot be serialized (a throwing `toJSON` or getter) is replaced by `"[Unserializable]"` for that field only, where it previously turned a whole Axiom, Better Stack or Datadog batch into that string or rejected a ClickHouse, HyperDX, OTLP, PostHog or Sentry batch. A BigInt anywhere in `meta` is shipped as its decimal string by every adapter, so a BigInt user id now resolves to PostHog's `distinct_id`, and `flattenMeta` no longer renders a nested BigInt or cycle as `[object Object]`.
|
|
17
|
+
- 3373fc1: `wrapWs` no longer discards what a hook returns. A returned string, object, `Buffer`, promise or generator reaches Elysia and is sent to the client exactly as without the wrapper; a hook that returned a value by accident (for example `(ws, m) => ws.send(m)`, whose result is Bun's numeric send status) now has that value sent too, as Elysia does for an unwrapped hook. An `async` hook that rejects is handled by Elysia's error path instead of becoming an unhandled rejection, and its lifecycle line is written after the hook settles.
|
|
18
|
+
|
|
19
|
+
## 6.9.4
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- 83e771c: `autoRedact` now masks values inside `Headers`, `URL`, `URLSearchParams`, `Map`, and `Set` objects. Before, these passed through unchanged and serialized with their original values. Compound key names such as `newPassword`, `apiSecret`, `aws_secret_access_key`, `authToken`, and `X-CSRF-Token` now count as sensitive. Every value of a repeated query parameter and every percent-encoded path segment is checked.
|
|
24
|
+
- d6e5b08: Correct the `useAsyncLocalStorage` documentation: the request-scoped `log` is always available on the handler context. The option only makes `useLogger()` return the current request's logger from anywhere in the request.
|
|
25
|
+
- e5acc3a: A request answered with Elysia's `status()` helper is now logged with the status the client received, not 200 or 500. This covers a returned `status()`, a thrown one, and one returned from `beforeHandle`. The message is the string body, or the status text when the body is not a string. A returned `Response` keeps its own status over `set.status` unless it is 200, as in Elysia. Requests that reach neither `onAfterHandle` nor `onError` now get their log line instead of none. These are an auth `resolve` that returns `status(401)` and an error that an app-wide `onError` registered before the plugin answers.
|
|
26
|
+
- a7ec6d2: Logging no longer fails a request. An error whose message is an object, such as `throw status(401, { error: 'unauthorized' })` in `onRequest`, no longer turns the response into a 500, and a BigInt or circular value in request context no longer crashes requests that print `{context}`. The Axiom, Better Stack, Datadog and Loki adapters write BigInts as strings and circular references as `"[Circular]"` instead of dropping the whole batch. Context-tree keys and structured error fields are sanitized like values. Any other failure while building a log record is reported to `onError` with the new `sink: 'format'`.
|
|
27
|
+
- c197893: WebSocket logging tracks each connection by Elysia's underlying socket (`ws.raw`) instead of the wrapper Elysia creates for every event. Message and close lines report the time since the connection opened instead of about 0 ms, context merged with `mergeContext(ws, …)` in one event is still there in the next, and the connection's state is released on close. `wrapWs` throws a `TypeError` when its first argument is not the route path.
|
|
28
|
+
|
|
3
29
|
## 6.9.3
|
|
4
30
|
|
|
5
31
|
### Patch Changes
|
package/dist/ai.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ type RequestInfo = Request;
|
|
|
28
28
|
type LogLevel = "DEBUG" | "INFO" | "WARNING" | "ERROR";
|
|
29
29
|
interface StoreData {
|
|
30
30
|
beforeTime: bigint;
|
|
31
|
+
/** The status the client received, when the caller resolved it. `handleHttpError` prefers it over the thrown value. */
|
|
32
|
+
status?: number;
|
|
31
33
|
}
|
|
32
34
|
interface AIMetrics {
|
|
33
35
|
calls?: number;
|
package/dist/axiom.d.ts
CHANGED
|
@@ -29,17 +29,26 @@ interface BatchTransportOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
maxBatchSize?: number;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* The most entries one request carries. Lower it for a backend with a
|
|
33
|
+
* per-request item limit. The Sentry adapter defaults to 100.
|
|
34
|
+
* @default 500
|
|
35
|
+
*/
|
|
36
|
+
maxEntriesPerRequest?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Bound on the entries that wait behind the request in flight, as a
|
|
39
|
+
* multiple of `maxBatchSize`: at most `maxPendingBatches × maxBatchSize`
|
|
40
|
+
* entries wait, and entries beyond that are dropped and reported.
|
|
35
41
|
* @default 32
|
|
36
42
|
*/
|
|
37
43
|
maxPendingBatches?: number;
|
|
38
44
|
/**
|
|
39
|
-
* Called when a
|
|
40
|
-
* many
|
|
41
|
-
*
|
|
42
|
-
*
|
|
45
|
+
* Called when a request fails after retries, or when entries are dropped
|
|
46
|
+
* because too many were already waiting. Failures of a request that a
|
|
47
|
+
* `log()` or `flush()` call started are rejected to that caller instead.
|
|
48
|
+
* When omitted, failures go to stderr, rate limited to once every 5
|
|
49
|
+
* seconds. To see every transport failure in one place, forward them to
|
|
50
|
+
* the function you give `config.onError`, as
|
|
51
|
+
* `error => handle({ error, sink: 'transport' })`.
|
|
43
52
|
*/
|
|
44
53
|
onError?: (error: unknown) => void;
|
|
45
54
|
/**
|
|
@@ -55,6 +64,8 @@ interface BatchTransportOptions {
|
|
|
55
64
|
}
|
|
56
65
|
/** A {@link Transport} that batches entries and can be flushed on demand. */
|
|
57
66
|
interface AdapterTransport extends Transport {
|
|
67
|
+
/** Stops accepting entries, then flushes the ones already accepted. Idempotent. */
|
|
68
|
+
close: () => Promise<void>;
|
|
58
69
|
/** Sends any buffered entries immediately. Call before process exit. */
|
|
59
70
|
flush: () => Promise<void>;
|
|
60
71
|
}
|
package/dist/axiom.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as O,d as m,e as x,g as P}from"./shared/Logixlysia-xb08zg3q.js";import{k as N}from"./shared/Logixlysia-tqpczh9a.js";var W="https://api.axiom.co",Z=(k={})=>{let z=k.apiKey??m("AXIOM_API_KEY");if(!z)throw x("Axiom","missing API token. Set AXIOM_API_KEY or pass apiKey to createAxiomTransport()");let C=k.dataset??m("AXIOM_DATASET");if(!C)throw x("Axiom","missing dataset. Set AXIOM_DATASET or pass dataset to createAxiomTransport()");let Q=O(k.baseUrl??m("AXIOM_URL")??W),G=k.orgId??m("AXIOM_ORG_ID"),J={Authorization:`Bearer ${z}`,"Content-Type":"application/json"};if(G)J["X-Axiom-Org-Id"]=G;return P({body:(V)=>N(V.map((q)=>({...q.meta,_time:q.timestamp.toISOString(),level:q.level,message:q.message}))),headers:J,name:"Axiom",options:k,url:`${Q}/v1/datasets/${encodeURIComponent(C)}/ingest`})};export{Z as createAxiomTransport};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# debugId=9DE441F47039740664756E2164756E21
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2F4aW9tLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB7XG4gIGNyZWF0ZUh0dHBUcmFuc3BvcnQsXG4gIGVudlN0cmluZyxcbiAgc3RyaXBUcmFpbGluZ1NsYXNoZXMsXG4gIHRyYW5zcG9ydEVycm9yXG59IGZyb20gJy4vYWRhcHRlcnMvc2hhcmVkJ1xuaW1wb3J0IHR5cGUgeyBBZGFwdGVyVHJhbnNwb3J0LCBCYXRjaFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL2FkYXB0ZXJzL3NoYXJlZCdcbmltcG9ydCB7IHN0cmluZ2lmeUZvckxvZyB9IGZyb20gJy4vdXRpbHMvanNvbidcblxuY29uc3QgREVGQVVMVF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5heGlvbS5jbydcblxuZXhwb3J0IGludGVyZmFjZSBBeGlvbVRyYW5zcG9ydE9wdGlvbnMgZXh0ZW5kcyBCYXRjaFRyYW5zcG9ydE9wdGlvbnMge1xuICAvKipcbiAgICogQXhpb20gQVBJIHRva2VuIHdpdGggaW5nZXN0IHBlcm1pc3Npb24gKGB4YWF0LeKApmApLlxuICAgKiBGYWxscyBiYWNrIHRvIHRoZSBgQVhJT01fQVBJX0tFWWAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqL1xuICBhcGlLZXk/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEFQSSBiYXNlIFVSTC5cbiAgICogRmFsbHMgYmFjayB0byBgQVhJT01fVVJMYC5cbiAgICogQGRlZmF1bHQgJ2h0dHBzOi8vYXBpLmF4aW9tLmNvJ1xuICAgKi9cbiAgYmFzZVVybD86IHN0cmluZ1xuICAvKipcbiAgICogVGFyZ2V0IGRhdGFzZXQgbmFtZS5cbiAgICogRmFsbHMgYmFjayB0byBgQVhJT01fREFUQVNFVGAuXG4gICAqL1xuICBkYXRhc2V0Pzogc3RyaW5nXG4gIC8qKlxuICAgKiBPcmdhbml6YXRpb24gSUQg4oCUIHJlcXVpcmVkIHdoZW4gdXNpbmcgYSBwZXJzb25hbCBhY2Nlc3MgdG9rZW4uXG4gICAqIEZhbGxzIGJhY2sgdG8gYEFYSU9NX09SR19JRGAuXG4gICAqL1xuICBvcmdJZD86IHN0cmluZ1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0cmFuc3BvcnQgdGhhdCBzaGlwcyBsb2dzIHRvIGFuIEF4aW9tIGRhdGFzZXQgdmlhIHRoZSBpbmdlc3QgQVBJLlxuICogRXZlbnRzIGtlZXAgdGhlaXIgbmVzdGVkIHN0cnVjdHVyZSDigJQgQXhpb20gaW5kZXhlcyBldmVyeSBmaWVsZCB3aXRob3V0IGFcbiAqIHNjaGVtYSwgc28gYHJlcXVlc3QubWV0aG9kYCwgYGNvbnRleHQucmVxdWVzdElkYCwgZXRjLiBhcmUgYWxsIHF1ZXJ5YWJsZS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBubyBBUEkgdG9rZW4gb3IgZGF0YXNldCBpcyBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQXhpb21UcmFuc3BvcnQgPSAoXG4gIG9wdGlvbnM6IEF4aW9tVHJhbnNwb3J0T3B0aW9ucyA9IHt9XG4pOiBBZGFwdGVyVHJhbnNwb3J0ID0+IHtcbiAgY29uc3QgYXBpS2V5ID0gb3B0aW9ucy5hcGlLZXkgPz8gZW52U3RyaW5nKCdBWElPTV9BUElfS0VZJylcbiAgaWYgKCFhcGlLZXkpIHtcbiAgICB0aHJvdyB0cmFuc3BvcnRFcnJvcihcbiAgICAgICdBeGlvbScsXG4gICAgICAnbWlzc2luZyBBUEkgdG9rZW4uIFNldCBBWElPTV9BUElfS0VZIG9yIHBhc3MgYXBpS2V5IHRvIGNyZWF0ZUF4aW9tVHJhbnNwb3J0KCknXG4gICAgKVxuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBvcHRpb25zLmRhdGFzZXQgPz8gZW52U3RyaW5nKCdBWElPTV9EQVRBU0VUJylcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgdGhyb3cgdHJhbnNwb3J0RXJyb3IoXG4gICAgICAnQXhpb20nLFxuICAgICAgJ21pc3NpbmcgZGF0YXNldC4gU2V0IEFYSU9NX0RBVEFTRVQgb3IgcGFzcyBkYXRhc2V0IHRvIGNyZWF0ZUF4aW9tVHJhbnNwb3J0KCknXG4gICAgKVxuICB9XG4gIGNvbnN0IGJhc2VVcmwgPSBzdHJpcFRyYWlsaW5nU2xhc2hlcyhcbiAgICBvcHRpb25zLmJhc2VVcmwgPz8gZW52U3RyaW5nKCdBWElPTV9VUkwnKSA/PyBERUZBVUxUX0JBU0VfVVJMXG4gIClcbiAgY29uc3Qgb3JnSWQgPSBvcHRpb25zLm9yZ0lkID8/IGVudlN0cmluZygnQVhJT01fT1JHX0lEJylcblxuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gIH1cbiAgaWYgKG9yZ0lkKSB7XG4gICAgaGVhZGVyc1snWC1BeGlvbS1PcmctSWQnXSA9IG9yZ0lkXG4gIH1cblxuICByZXR1cm4gY3JlYXRlSHR0cFRyYW5zcG9ydCh7XG4gICAgYm9keTogZW50cmllcyA9PlxuICAgICAgc3RyaW5naWZ5Rm9yTG9nKFxuICAgICAgICAvLyBNZXRhIGZpcnN0IHNvIHRoZSBhZGFwdGVyLW93bmVkIGZpZWxkcyBiZWxvdyBhbHdheXMgd2luIG9uIGNvbGxpc2lvbi5cbiAgICAgICAgZW50cmllcy5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICAuLi5lbnRyeS5tZXRhLFxuICAgICAgICAgIF90aW1lOiBlbnRyeS50aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBsZXZlbDogZW50cnkubGV2ZWwsXG4gICAgICAgICAgbWVzc2FnZTogZW50cnkubWVzc2FnZVxuICAgICAgICB9KSlcbiAgICAgICksXG4gICAgaGVhZGVycyxcbiAgICBuYW1lOiAnQXhpb20nLFxuICAgIG9wdGlvbnMsXG4gICAgdXJsOiBgJHtiYXNlVXJsfS92MS9kYXRhc2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudChkYXRhc2V0KX0vaW5nZXN0YFxuICB9KVxufVxuXG5leHBvcnQgdHlwZSB7IEFkYXB0ZXJUcmFuc3BvcnQgfSBmcm9tICcuL2FkYXB0ZXJzL3NoYXJlZCdcbiIKICBdLAogICJtYXBwaW5ncyI6ICJ1SEFTQSxVQUFNLEVBQW1CLHVCQWlDWixFQUF1QixDQUNsQyxFQUFpQyxDQUFDLElBQ2IsQ0FDckIsSUFBTSxFQUFTLEVBQVEsUUFBVSxFQUFVLGVBQWUsRUFDMUQsR0FBSSxDQUFDLEVBQ0gsTUFBTSxFQUNKLFFBQ0EsK0VBQ0YsRUFFRixJQUFNLEVBQVUsRUFBUSxTQUFXLEVBQVUsZUFBZSxFQUM1RCxHQUFJLENBQUMsRUFDSCxNQUFNLEVBQ0osUUFDQSw4RUFDRixFQUVGLElBQU0sRUFBVSxFQUNkLEVBQVEsU0FBVyxFQUFVLFdBQVcsR0FBSyxDQUMvQyxFQUNNLEVBQVEsRUFBUSxPQUFTLEVBQVUsY0FBYyxFQUVqRCxFQUFrQyxDQUN0QyxjQUFlLFVBQVUsSUFDekIsZUFBZ0Isa0JBQ2xCLEVBQ0EsR0FBSSxFQUNGLEVBQVEsa0JBQW9CLEVBRzlCLE9BQU8sRUFBb0IsQ0FDekIsS0FBTSxLQUNKLEVBRUUsRUFBUSxJQUFJLE1BQVUsSUFDakIsRUFBTSxLQUNULE1BQU8sRUFBTSxVQUFVLFlBQVksRUFDbkMsTUFBTyxFQUFNLE1BQ2IsUUFBUyxFQUFNLE9BQ2pCLEVBQUUsQ0FDSixFQUNGLFVBQ0EsS0FBTSxRQUNOLFVBQ0EsSUFBSyxHQUFHLGlCQUF1QixtQkFBbUIsQ0FBTyxVQUMzRCxDQUFDIiwKICAiZGVidWdJZCI6ICI5REU0NDFGNDcwMzk3NDA2NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
package/dist/better-stack.d.ts
CHANGED
|
@@ -29,17 +29,26 @@ interface BatchTransportOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
maxBatchSize?: number;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* The most entries one request carries. Lower it for a backend with a
|
|
33
|
+
* per-request item limit. The Sentry adapter defaults to 100.
|
|
34
|
+
* @default 500
|
|
35
|
+
*/
|
|
36
|
+
maxEntriesPerRequest?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Bound on the entries that wait behind the request in flight, as a
|
|
39
|
+
* multiple of `maxBatchSize`: at most `maxPendingBatches × maxBatchSize`
|
|
40
|
+
* entries wait, and entries beyond that are dropped and reported.
|
|
35
41
|
* @default 32
|
|
36
42
|
*/
|
|
37
43
|
maxPendingBatches?: number;
|
|
38
44
|
/**
|
|
39
|
-
* Called when a
|
|
40
|
-
* many
|
|
41
|
-
*
|
|
42
|
-
*
|
|
45
|
+
* Called when a request fails after retries, or when entries are dropped
|
|
46
|
+
* because too many were already waiting. Failures of a request that a
|
|
47
|
+
* `log()` or `flush()` call started are rejected to that caller instead.
|
|
48
|
+
* When omitted, failures go to stderr, rate limited to once every 5
|
|
49
|
+
* seconds. To see every transport failure in one place, forward them to
|
|
50
|
+
* the function you give `config.onError`, as
|
|
51
|
+
* `error => handle({ error, sink: 'transport' })`.
|
|
43
52
|
*/
|
|
44
53
|
onError?: (error: unknown) => void;
|
|
45
54
|
/**
|
|
@@ -55,6 +64,8 @@ interface BatchTransportOptions {
|
|
|
55
64
|
}
|
|
56
65
|
/** A {@link Transport} that batches entries and can be flushed on demand. */
|
|
57
66
|
interface AdapterTransport extends Transport {
|
|
67
|
+
/** Stops accepting entries, then flushes the ones already accepted. Idempotent. */
|
|
68
|
+
close: () => Promise<void>;
|
|
58
69
|
/** Sends any buffered entries immediately. Call before process exit. */
|
|
59
70
|
flush: () => Promise<void>;
|
|
60
71
|
}
|
package/dist/better-stack.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as G,d as x,e as J,g as K,j as Q}from"./shared/Logixlysia-xb08zg3q.js";import{k as C}from"./shared/Logixlysia-tqpczh9a.js";var V="https://in.logs.betterstack.com",Y=(q={})=>{let z=q.sourceToken??x("BETTER_STACK_SOURCE_TOKEN");if(!z)throw J("Better Stack","missing source token. Set BETTER_STACK_SOURCE_TOKEN or pass sourceToken to createBetterStackTransport()");return K({body:(R)=>C(R.map((m)=>({...m.meta,dt:m.timestamp.toISOString(),level:m.level,message:Q(m)}))),headers:{Authorization:`Bearer ${z}`,"Content-Type":"application/json"},name:"Better Stack",options:q,url:G(q.endpoint??x("BETTER_STACK_INGESTING_HOST")??V)})};export{Y as createBetterStackTransport};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# debugId=45939F6D5FC2E8D764756E2164756E21
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2JldHRlci1zdGFjay50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQge1xuICBjcmVhdGVIdHRwVHJhbnNwb3J0LFxuICBkZWZhdWx0Qm9keSxcbiAgZW52U3RyaW5nLFxuICBzdHJpcFRyYWlsaW5nU2xhc2hlcyxcbiAgdHJhbnNwb3J0RXJyb3Jcbn0gZnJvbSAnLi9hZGFwdGVycy9zaGFyZWQnXG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJUcmFuc3BvcnQsIEJhdGNoVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vYWRhcHRlcnMvc2hhcmVkJ1xuaW1wb3J0IHsgc3RyaW5naWZ5Rm9yTG9nIH0gZnJvbSAnLi91dGlscy9qc29uJ1xuXG5jb25zdCBERUZBVUxUX0VORFBPSU5UID0gJ2h0dHBzOi8vaW4ubG9ncy5iZXR0ZXJzdGFjay5jb20nXG5cbmV4cG9ydCBpbnRlcmZhY2UgQmV0dGVyU3RhY2tUcmFuc3BvcnRPcHRpb25zIGV4dGVuZHMgQmF0Y2hUcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEluZ2VzdGluZyBVUkwgc2hvd24gbmV4dCB0byB0aGUgc291cmNlIHRva2VuIOKAlCBuZXdlciBzb3VyY2VzIGdldCBhXG4gICAqIGRlZGljYXRlZCBob3N0IGxpa2UgYGh0dHBzOi8vczEyMzQ1Ni5ldS1uYmctMi5iZXR0ZXJzdGFja2RhdGEuY29tYC5cbiAgICogRmFsbHMgYmFjayB0byBgQkVUVEVSX1NUQUNLX0lOR0VTVElOR19IT1NUYC5cbiAgICogQGRlZmF1bHQgJ2h0dHBzOi8vaW4ubG9ncy5iZXR0ZXJzdGFjay5jb20nXG4gICAqL1xuICBlbmRwb2ludD86IHN0cmluZ1xuICAvKipcbiAgICogU291cmNlIHRva2VuIGZyb20gdGhlIEJldHRlciBTdGFjayBzb3VyY2Ugc2V0dGluZ3MsIHNlbnQgYXMgYSBCZWFyZXJcbiAgICogdG9rZW4uIEZhbGxzIGJhY2sgdG8gdGhlIGBCRVRURVJfU1RBQ0tfU09VUkNFX1RPS0VOYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHNvdXJjZVRva2VuPzogc3RyaW5nXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyYW5zcG9ydCB0aGF0IHNoaXBzIGxvZ3MgdG8gQmV0dGVyIFN0YWNrIChUZWxlbWV0cnkgLyBMb2dzKS5cbiAqIEVhY2ggbG9nIHBvc3RzIGFzIEpTT04gd2l0aCBhIGBkdGAgdGltZXN0YW1wLCBgbGV2ZWxgLCBgbWVzc2FnZWAsIGFuZCB0aGVcbiAqIGZ1bGwgbWV0YSBvYmplY3Qg4oCUIGFsbCBxdWVyeWFibGUgaW4gTGl2ZSB0YWlsIGFuZCBTUUwuXG4gKlxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gbm8gc291cmNlIHRva2VuIGlzIGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVCZXR0ZXJTdGFja1RyYW5zcG9ydCA9IChcbiAgb3B0aW9uczogQmV0dGVyU3RhY2tUcmFuc3BvcnRPcHRpb25zID0ge31cbik6IEFkYXB0ZXJUcmFuc3BvcnQgPT4ge1xuICBjb25zdCBzb3VyY2VUb2tlbiA9XG4gICAgb3B0aW9ucy5zb3VyY2VUb2tlbiA/PyBlbnZTdHJpbmcoJ0JFVFRFUl9TVEFDS19TT1VSQ0VfVE9LRU4nKVxuICBpZiAoIXNvdXJjZVRva2VuKSB7XG4gICAgdGhyb3cgdHJhbnNwb3J0RXJyb3IoXG4gICAgICAnQmV0dGVyIFN0YWNrJyxcbiAgICAgICdtaXNzaW5nIHNvdXJjZSB0b2tlbi4gU2V0IEJFVFRFUl9TVEFDS19TT1VSQ0VfVE9LRU4gb3IgcGFzcyBzb3VyY2VUb2tlbiB0byBjcmVhdGVCZXR0ZXJTdGFja1RyYW5zcG9ydCgpJ1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVIdHRwVHJhbnNwb3J0KHtcbiAgICBib2R5OiBlbnRyaWVzID0+XG4gICAgICBzdHJpbmdpZnlGb3JMb2coXG4gICAgICAgIC8vIE1ldGEgZmlyc3Qgc28gdGhlIGFkYXB0ZXItb3duZWQgZmllbGRzIGJlbG93IGFsd2F5cyB3aW4gb24gY29sbGlzaW9uLlxuICAgICAgICBlbnRyaWVzLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIC4uLmVudHJ5Lm1ldGEsXG4gICAgICAgICAgZHQ6IGVudHJ5LnRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGxldmVsOiBlbnRyeS5sZXZlbCxcbiAgICAgICAgICBtZXNzYWdlOiBkZWZhdWx0Qm9keShlbnRyeSlcbiAgICAgICAgfSkpXG4gICAgICApLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtzb3VyY2VUb2tlbn1gLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH0sXG4gICAgbmFtZTogJ0JldHRlciBTdGFjaycsXG4gICAgb3B0aW9ucyxcbiAgICB1cmw6IHN0cmlwVHJhaWxpbmdTbGFzaGVzKFxuICAgICAgb3B0aW9ucy5lbmRwb2ludCA/P1xuICAgICAgICBlbnZTdHJpbmcoJ0JFVFRFUl9TVEFDS19JTkdFU1RJTkdfSE9TVCcpID8/XG4gICAgICAgIERFRkFVTFRfRU5EUE9JTlRcbiAgICApXG4gIH0pXG59XG5cbmV4cG9ydCB0eXBlIHsgQWRhcHRlclRyYW5zcG9ydCB9IGZyb20gJy4vYWRhcHRlcnMvc2hhcmVkJ1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjhIQVVBLFVBQU0sRUFBbUIsa0NBd0JaLEVBQTZCLENBQ3hDLEVBQXVDLENBQUMsSUFDbkIsQ0FDckIsSUFBTSxFQUNKLEVBQVEsYUFBZSxFQUFVLDJCQUEyQixFQUM5RCxHQUFJLENBQUMsRUFDSCxNQUFNLEVBQ0osZUFDQSx5R0FDRixFQUdGLE9BQU8sRUFBb0IsQ0FDekIsS0FBTSxLQUNKLEVBRUUsRUFBUSxJQUFJLE1BQVUsSUFDakIsRUFBTSxLQUNULEdBQUksRUFBTSxVQUFVLFlBQVksRUFDaEMsTUFBTyxFQUFNLE1BQ2IsUUFBUyxFQUFZLENBQUssQ0FDNUIsRUFBRSxDQUNKLEVBQ0YsUUFBUyxDQUNQLGNBQWUsVUFBVSxJQUN6QixlQUFnQixrQkFDbEIsRUFDQSxLQUFNLGVBQ04sVUFDQSxJQUFLLEVBQ0gsRUFBUSxVQUNOLEVBQVUsNkJBQTZCLEdBQ3ZDLENBQ0osQ0FDRixDQUFDIiwKICAiZGVidWdJZCI6ICI0NTkzOUY2RDVGQzJFOEQ3NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
package/dist/clickhouse.d.ts
CHANGED
|
@@ -29,17 +29,26 @@ interface BatchTransportOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
maxBatchSize?: number;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* The most entries one request carries. Lower it for a backend with a
|
|
33
|
+
* per-request item limit. The Sentry adapter defaults to 100.
|
|
34
|
+
* @default 500
|
|
35
|
+
*/
|
|
36
|
+
maxEntriesPerRequest?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Bound on the entries that wait behind the request in flight, as a
|
|
39
|
+
* multiple of `maxBatchSize`: at most `maxPendingBatches × maxBatchSize`
|
|
40
|
+
* entries wait, and entries beyond that are dropped and reported.
|
|
35
41
|
* @default 32
|
|
36
42
|
*/
|
|
37
43
|
maxPendingBatches?: number;
|
|
38
44
|
/**
|
|
39
|
-
* Called when a
|
|
40
|
-
* many
|
|
41
|
-
*
|
|
42
|
-
*
|
|
45
|
+
* Called when a request fails after retries, or when entries are dropped
|
|
46
|
+
* because too many were already waiting. Failures of a request that a
|
|
47
|
+
* `log()` or `flush()` call started are rejected to that caller instead.
|
|
48
|
+
* When omitted, failures go to stderr, rate limited to once every 5
|
|
49
|
+
* seconds. To see every transport failure in one place, forward them to
|
|
50
|
+
* the function you give `config.onError`, as
|
|
51
|
+
* `error => handle({ error, sink: 'transport' })`.
|
|
43
52
|
*/
|
|
44
53
|
onError?: (error: unknown) => void;
|
|
45
54
|
/**
|
|
@@ -55,6 +64,8 @@ interface BatchTransportOptions {
|
|
|
55
64
|
}
|
|
56
65
|
/** A {@link Transport} that batches entries and can be flushed on demand. */
|
|
57
66
|
interface AdapterTransport extends Transport {
|
|
67
|
+
/** Stops accepting entries, then flushes the ones already accepted. Idempotent. */
|
|
68
|
+
close: () => Promise<void>;
|
|
58
69
|
/** Sends any buffered entries immediately. Call before process exit. */
|
|
59
70
|
flush: () => Promise<void>;
|
|
60
71
|
}
|
package/dist/clickhouse.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as $,d as G,e as x,g as J,h as M,j as O}from"./shared/Logixlysia-
|
|
1
|
+
import{c as $,d as G,e as x,g as J,h as M,j as O}from"./shared/Logixlysia-xb08zg3q.js";import"./shared/Logixlysia-tqpczh9a.js";var C="http://localhost:8123",N="default",q="logs",B=/^[A-Za-z0-9_]+$/u,Z=(j,z)=>{if(!B.test(j))throw x("ClickHouse",`invalid ${z} '${j}'. Only letters, digits, and underscores are allowed`);return j},H=(j)=>{let z={};for(let[K,Q]of Object.entries(M(j.meta)))z[K]=String(Q);return JSON.stringify({attributes:z,level:j.level,message:O(j),timestamp:j.timestamp.toISOString()})},k=(j={})=>{let z=$(j.url??G("CLICKHOUSE_URL")??C),K=Z(j.database??G("CLICKHOUSE_DATABASE")??N,"database"),Q=Z(j.table??G("CLICKHOUSE_TABLE")??q,"table"),X=j.username??G("CLICKHOUSE_USERNAME"),Y=j.password??G("CLICKHOUSE_PASSWORD"),P=new URLSearchParams({date_time_input_format:"best_effort",query:`INSERT INTO ${K}.${Q} FORMAT JSONEachRow`}),V={"Content-Type":"application/json"};if(X)V["X-ClickHouse-User"]=X;if(Y)V["X-ClickHouse-Key"]=Y;return J({body:(W)=>W.map(H).join(`
|
|
2
2
|
`),headers:V,name:"ClickHouse",options:j,url:`${z}/?${P.toString()}`})};export{k as createClickHouseTransport};
|
|
3
3
|
|
|
4
4
|
//# debugId=1B6FC943015B221464756E2164756E21
|
package/dist/datadog.d.ts
CHANGED
|
@@ -29,17 +29,26 @@ interface BatchTransportOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
maxBatchSize?: number;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* The most entries one request carries. Lower it for a backend with a
|
|
33
|
+
* per-request item limit. The Sentry adapter defaults to 100.
|
|
34
|
+
* @default 500
|
|
35
|
+
*/
|
|
36
|
+
maxEntriesPerRequest?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Bound on the entries that wait behind the request in flight, as a
|
|
39
|
+
* multiple of `maxBatchSize`: at most `maxPendingBatches × maxBatchSize`
|
|
40
|
+
* entries wait, and entries beyond that are dropped and reported.
|
|
35
41
|
* @default 32
|
|
36
42
|
*/
|
|
37
43
|
maxPendingBatches?: number;
|
|
38
44
|
/**
|
|
39
|
-
* Called when a
|
|
40
|
-
* many
|
|
41
|
-
*
|
|
42
|
-
*
|
|
45
|
+
* Called when a request fails after retries, or when entries are dropped
|
|
46
|
+
* because too many were already waiting. Failures of a request that a
|
|
47
|
+
* `log()` or `flush()` call started are rejected to that caller instead.
|
|
48
|
+
* When omitted, failures go to stderr, rate limited to once every 5
|
|
49
|
+
* seconds. To see every transport failure in one place, forward them to
|
|
50
|
+
* the function you give `config.onError`, as
|
|
51
|
+
* `error => handle({ error, sink: 'transport' })`.
|
|
43
52
|
*/
|
|
44
53
|
onError?: (error: unknown) => void;
|
|
45
54
|
/**
|
|
@@ -55,6 +64,8 @@ interface BatchTransportOptions {
|
|
|
55
64
|
}
|
|
56
65
|
/** A {@link Transport} that batches entries and can be flushed on demand. */
|
|
57
66
|
interface AdapterTransport extends Transport {
|
|
67
|
+
/** Stops accepting entries, then flushes the ones already accepted. Idempotent. */
|
|
68
|
+
close: () => Promise<void>;
|
|
58
69
|
/** Sends any buffered entries immediately. Call before process exit. */
|
|
59
70
|
flush: () => Promise<void>;
|
|
60
71
|
}
|
package/dist/datadog.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as
|
|
1
|
+
import{d as z,e as V,g as W,j as X}from"./shared/Logixlysia-xb08zg3q.js";import{k as Q}from"./shared/Logixlysia-tqpczh9a.js";var B="datadoghq.com",N="logixlysia",b=(w={})=>{let G=w.apiKey??z("DD_API_KEY");if(!G)throw V("Datadog","missing API key. Set DD_API_KEY or pass apiKey to createDatadogTransport()");let Y=w.site??z("DD_SITE")??B,Z=w.service??z("DD_SERVICE")??N,J=w.hostname??z("DD_HOSTNAME"),$=w.source??N,M=Object.entries(w.tags??{}).map(([q,x])=>`${q}:${x}`).join(","),j=(q)=>{let x={...q.meta,ddsource:$,message:X(q),service:Z,status:q.level.toLowerCase(),timestamp:q.timestamp.toISOString()};if(M)x.ddtags=M;if(J)x.hostname=J;if(typeof q.meta.status==="number")x.http={status_code:q.meta.status};return x};return W({body:(q)=>Q(q.map(j)),headers:{"Content-Type":"application/json","DD-API-KEY":G},name:"Datadog",options:w,url:`https://http-intake.logs.${Y}/api/v2/logs`})};export{b as createDatadogTransport};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# debugId=2A62BE9F1CA2BFC064756E2164756E21
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2RhdGFkb2cudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHtcbiAgY3JlYXRlSHR0cFRyYW5zcG9ydCxcbiAgZGVmYXVsdEJvZHksXG4gIGVudlN0cmluZyxcbiAgdHJhbnNwb3J0RXJyb3Jcbn0gZnJvbSAnLi9hZGFwdGVycy9zaGFyZWQnXG5pbXBvcnQgdHlwZSB7XG4gIEFkYXB0ZXJUcmFuc3BvcnQsXG4gIEJhdGNoVHJhbnNwb3J0T3B0aW9ucyxcbiAgTG9nRW50cnlcbn0gZnJvbSAnLi9hZGFwdGVycy9zaGFyZWQnXG5pbXBvcnQgeyBzdHJpbmdpZnlGb3JMb2cgfSBmcm9tICcuL3V0aWxzL2pzb24nXG5cbmNvbnN0IERFRkFVTFRfU0lURSA9ICdkYXRhZG9naHEuY29tJ1xuY29uc3QgREVGQVVMVF9TT1VSQ0UgPSAnbG9naXhseXNpYSdcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nVHJhbnNwb3J0T3B0aW9ucyBleHRlbmRzIEJhdGNoVHJhbnNwb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEYXRhZG9nIEFQSSBrZXksIHNlbnQgYXMgdGhlIGBERC1BUEktS0VZYCBoZWFkZXIuXG4gICAqIEZhbGxzIGJhY2sgdG8gdGhlIGBERF9BUElfS0VZYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIGFwaUtleT86IHN0cmluZ1xuICAvKipcbiAgICogSG9zdG5hbWUgcmVwb3J0ZWQgd2l0aCBlYWNoIGxvZy5cbiAgICogRmFsbHMgYmFjayB0byBgRERfSE9TVE5BTUVgOyBvbWl0dGVkIHdoZW4gdW5zZXQuXG4gICAqL1xuICBob3N0bmFtZT86IHN0cmluZ1xuICAvKipcbiAgICogYHNlcnZpY2VgIGZhY2V0IG9uIGVhY2ggbG9nLlxuICAgKiBGYWxscyBiYWNrIHRvIGBERF9TRVJWSUNFYC5cbiAgICogQGRlZmF1bHQgJ2xvZ2l4bHlzaWEnXG4gICAqL1xuICBzZXJ2aWNlPzogc3RyaW5nXG4gIC8qKlxuICAgKiBEYXRhZG9nIHNpdGU6IGBkYXRhZG9naHEuY29tYCAoVVMxKSwgYGRhdGFkb2docS5ldWAgKEVVKSxcbiAgICogYHVzMy5kYXRhZG9naHEuY29tYCwgYHVzNS5kYXRhZG9naHEuY29tYCwgYGFwMS5kYXRhZG9naHEuY29tYCwg4oCmXG4gICAqIEZhbGxzIGJhY2sgdG8gYEREX1NJVEVgLlxuICAgKiBAZGVmYXVsdCAnZGF0YWRvZ2hxLmNvbSdcbiAgICovXG4gIHNpdGU/OiBzdHJpbmdcbiAgLyoqIGBkZHNvdXJjZWAgZmFjZXQgb24gZWFjaCBsb2cuIEBkZWZhdWx0ICdsb2dpeGx5c2lhJyAqL1xuICBzb3VyY2U/OiBzdHJpbmdcbiAgLyoqIFRhZ3MgcmVuZGVyZWQgaW50byBgZGR0YWdzYCBhcyBga2V5OnZhbHVlLGtleTI6dmFsdWUyYC4gKi9cbiAgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJhbnNwb3J0IHRoYXQgc2hpcHMgbG9ncyB0byBEYXRhZG9nIHZpYSB0aGUgdjIgbG9ncyBpbnRha2UgQVBJLlxuICogVGhlIGxvZyBsZXZlbCBsYW5kcyBpbiB0aGUgYHN0YXR1c2AgYXR0cmlidXRlIChEYXRhZG9nJ3MgZGVmYXVsdCBzdGF0dXNcbiAqIHJlbWFwcGVyKSwgYW5kIHRoZSBmdWxsIG1ldGEgb2JqZWN0IHJpZGVzIGFsb25nIGFzIHNlYXJjaGFibGUgYXR0cmlidXRlcy5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBubyBBUEkga2V5IGlzIGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVEYXRhZG9nVHJhbnNwb3J0ID0gKFxuICBvcHRpb25zOiBEYXRhZG9nVHJhbnNwb3J0T3B0aW9ucyA9IHt9XG4pOiBBZGFwdGVyVHJhbnNwb3J0ID0+IHtcbiAgY29uc3QgYXBpS2V5ID0gb3B0aW9ucy5hcGlLZXkgPz8gZW52U3RyaW5nKCdERF9BUElfS0VZJylcbiAgaWYgKCFhcGlLZXkpIHtcbiAgICB0aHJvdyB0cmFuc3BvcnRFcnJvcihcbiAgICAgICdEYXRhZG9nJyxcbiAgICAgICdtaXNzaW5nIEFQSSBrZXkuIFNldCBERF9BUElfS0VZIG9yIHBhc3MgYXBpS2V5IHRvIGNyZWF0ZURhdGFkb2dUcmFuc3BvcnQoKSdcbiAgICApXG4gIH1cbiAgY29uc3Qgc2l0ZSA9IG9wdGlvbnMuc2l0ZSA/PyBlbnZTdHJpbmcoJ0REX1NJVEUnKSA/PyBERUZBVUxUX1NJVEVcbiAgY29uc3Qgc2VydmljZSA9IG9wdGlvbnMuc2VydmljZSA/PyBlbnZTdHJpbmcoJ0REX1NFUlZJQ0UnKSA/PyBERUZBVUxUX1NPVVJDRVxuICBjb25zdCBob3N0bmFtZSA9IG9wdGlvbnMuaG9zdG5hbWUgPz8gZW52U3RyaW5nKCdERF9IT1NUTkFNRScpXG4gIGNvbnN0IHNvdXJjZSA9IG9wdGlvbnMuc291cmNlID8/IERFRkFVTFRfU09VUkNFXG4gIGNvbnN0IGRkdGFncyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudGFncyA/PyB7fSlcbiAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06JHt2YWx1ZX1gKVxuICAgIC5qb2luKCcsJylcblxuICBjb25zdCB0b0V2ZW50ID0gKGVudHJ5OiBMb2dFbnRyeSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgICAvLyBNZXRhIGZpcnN0IHNvIHRoZSBhZGFwdGVyLW93bmVkIGZhY2V0cyBiZWxvdyBhbHdheXMgd2luIOKAlCBhY2Nlc3MtbG9nXG4gICAgLy8gbWV0YSBjYXJyaWVzIGFuIEhUVFAgYHN0YXR1c2AgdGhhdCBtdXN0IG5vdCBjbG9iYmVyIERhdGFkb2cncyBzdGF0dXMuXG4gICAgY29uc3QgZXZlbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgLi4uZW50cnkubWV0YSxcbiAgICAgIGRkc291cmNlOiBzb3VyY2UsXG4gICAgICBtZXNzYWdlOiBkZWZhdWx0Qm9keShlbnRyeSksXG4gICAgICBzZXJ2aWNlLFxuICAgICAgc3RhdHVzOiBlbnRyeS5sZXZlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAudG9JU09TdHJpbmcoKVxuICAgIH1cbiAgICBpZiAoZGR0YWdzKSB7XG4gICAgICBldmVudC5kZHRhZ3MgPSBkZHRhZ3NcbiAgICB9XG4gICAgaWYgKGhvc3RuYW1lKSB7XG4gICAgICBldmVudC5ob3N0bmFtZSA9IGhvc3RuYW1lXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW50cnkubWV0YS5zdGF0dXMgPT09ICdudW1iZXInKSB7XG4gICAgICBldmVudC5odHRwID0geyBzdGF0dXNfY29kZTogZW50cnkubWV0YS5zdGF0dXMgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnRcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVIdHRwVHJhbnNwb3J0KHtcbiAgICBib2R5OiBlbnRyaWVzID0+IHN0cmluZ2lmeUZvckxvZyhlbnRyaWVzLm1hcCh0b0V2ZW50KSksXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdERC1BUEktS0VZJzogYXBpS2V5XG4gICAgfSxcbiAgICBuYW1lOiAnRGF0YWRvZycsXG4gICAgb3B0aW9ucyxcbiAgICB1cmw6IGBodHRwczovL2h0dHAtaW50YWtlLmxvZ3MuJHtzaXRlfS9hcGkvdjIvbG9nc2BcbiAgfSlcbn1cblxuZXhwb3J0IHR5cGUgeyBBZGFwdGVyVHJhbnNwb3J0IH0gZnJvbSAnLi9hZGFwdGVycy9zaGFyZWQnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAidUhBYUEsVUFBTSxFQUFlLGdCQUNmLEVBQWlCLGFBdUNWLEVBQXlCLENBQ3BDLEVBQW1DLENBQUMsSUFDZixDQUNyQixJQUFNLEVBQVMsRUFBUSxRQUFVLEVBQVUsWUFBWSxFQUN2RCxHQUFJLENBQUMsRUFDSCxNQUFNLEVBQ0osVUFDQSw0RUFDRixFQUVGLElBQU0sRUFBTyxFQUFRLE1BQVEsRUFBVSxTQUFTLEdBQUssRUFDL0MsRUFBVSxFQUFRLFNBQVcsRUFBVSxZQUFZLEdBQUssRUFDeEQsRUFBVyxFQUFRLFVBQVksRUFBVSxhQUFhLEVBQ3RELEVBQVMsRUFBUSxRQUFVLEVBQzNCLEVBQVMsT0FBTyxRQUFRLEVBQVEsTUFBUSxDQUFDLENBQUMsRUFDN0MsSUFBSSxFQUFFLEVBQUssS0FBVyxHQUFHLEtBQU8sR0FBTyxFQUN2QyxLQUFLLEdBQUcsRUFFTCxFQUFVLENBQUMsSUFBNkMsQ0FHNUQsSUFBTSxFQUFpQyxJQUNsQyxFQUFNLEtBQ1QsU0FBVSxFQUNWLFFBQVMsRUFBWSxDQUFLLEVBQzFCLFVBQ0EsT0FBUSxFQUFNLE1BQU0sWUFBWSxFQUNoQyxVQUFXLEVBQU0sVUFBVSxZQUFZLENBQ3pDLEVBQ0EsR0FBSSxFQUNGLEVBQU0sT0FBUyxFQUVqQixHQUFJLEVBQ0YsRUFBTSxTQUFXLEVBRW5CLEdBQUksT0FBTyxFQUFNLEtBQUssU0FBVyxTQUMvQixFQUFNLEtBQU8sQ0FBRSxZQUFhLEVBQU0sS0FBSyxNQUFPLEVBRWhELE9BQU8sR0FHVCxPQUFPLEVBQW9CLENBQ3pCLEtBQU0sS0FBVyxFQUFnQixFQUFRLElBQUksQ0FBTyxDQUFDLEVBQ3JELFFBQVMsQ0FDUCxlQUFnQixtQkFDaEIsYUFBYyxDQUNoQixFQUNBLEtBQU0sVUFDTixVQUNBLElBQUssNEJBQTRCLGVBQ25DLENBQUMiLAogICJkZWJ1Z0lkIjogIjJBNjJCRTlGMUNBMkJGQzA2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
package/dist/enrichers.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var B=/^(?<version>[\da-f]{2})-(?<traceId>[\da-f]{32})-(?<spanId>[\da-f]{16})-(?<flags>[\da-f]{2})(?:-.+)?$/u,N="0".repeat(32),A="0".repeat(16);var p=(j={})=>{let J=j.header??"traceparent";return{request(Q){let K=Q.headers.get(J);if(!K)return;let $=K.trim(),U=B.exec($);if(!U)return;let[,W,V,Y,X]=U;if(W==="ff"||V===N||Y===A||W==="00"&&$.length!==55)return;let Z={span_id:Y,trace_flags:X,trace_id:V,trace_sampled:Number.parseInt(X,16)%2===1};if(j.tracestate){let F=Q.headers.get("tracestate");if(F)Z.tracestate=F.slice(0,512)}return Z}}},C=/bot|crawl|spider|slurp|facebookexternalhit|preview|headless/iu,S=/ipad|tablet|playbook|silk|kindle/iu,T=/mobi|iphone|ipod|windows phone/iu,w=/android.*mobile/iu,D=[["Edge",/edg(?:a|ios)?\/(?<version>[\d.]+)/iu],["Opera",/(?:opr|opios|opera)\/(?<version>[\d.]+)/iu],["Samsung Internet",/samsungbrowser\/(?<version>[\d.]+)/iu],["Firefox",/(?:firefox|fxios)\/(?<version>[\d.]+)/iu],["Chrome",/(?:chrome|crios)\/(?<version>[\d.]+)/iu],["Safari",/version\/(?<version>[\d.]+).*safari/iu]],G=[["iOS",/iphone|ipad|ipod/iu],["Android",/android/iu],["ChromeOS",/cros/iu],["Windows",/windows nt/iu],["macOS",/mac os x/iu],["Linux",/linux/iu]],P=(j,J)=>{for(let[Q,K]of j){let $=K.exec(J);if($)return{name:Q,version:$[1]}}},b=(j,J)=>{if(J)return"bot";if(S.test(j))return"tablet";if(T.test(j)||w.test(j))return"mobile";return"desktop"},c=()=>({request(j){let J=j.headers.get("user-agent");if(!J)return;let Q=C.test(J),K=P(D,J),$=P(G,J);return{ua:{bot:Q,...K?{browser:K.name}:{},...K?.version?{browserVersion:K.version}:{},device:b(J,Q),...$?{os:$.name}:{}}}}}),I=[["city",["x-vercel-ip-city","cf-ipcity"]],["country",["x-vercel-ip-country","cf-ipcountry"]],["region",["x-vercel-ip-country-region","cf-region-code","cf-region"]],["timezone",["x-vercel-ip-timezone","cf-timezone"]]],_=[["latitude",["x-vercel-ip-latitude","cf-iplatitude"],[-90,90]],["longitude",["x-vercel-ip-longitude","cf-iplongitude"],[-180,180]]];var H=/^[A-Za-z0-9-]{1,10}$/u,L=(j,J)=>{for(let Q of J){let K=j.headers.get(Q);if(K)return K}},f=(j)=>{try{return decodeURIComponent(j).slice(0,128)}catch{return j.slice(0,128)}},k=(j,J,Q)=>j>=J&&j<=Q,z=(j)=>typeof j==="string"&&j.length>0?j.slice(0,128):void 0,M=(j)=>typeof j==="string"&&H.test(j)?j:void 0,O=(j)=>{let J=j.headers.get("x-nf-geo");if(!J||J.length>2048)return;let Q;try{Q=JSON.parse(atob(J))}catch{return}if(Q===null||typeof Q!=="object")return;let K=Q,$={},U=z(K.city);if(U!==void 0)$.city=U;let W=M(K.country?.code);if(W!==void 0)$.country=W;let V=M(K.subdivision?.code);if(V!==void 0)$.region=V;let Y=z(K.timezone);if(Y!==void 0)$.timezone=Y;if(typeof K.latitude==="number"&&k(K.latitude,-90,90))$.latitude=K.latitude;if(typeof K.longitude==="number"&&k(K.longitude,-180,180))$.longitude=K.longitude;return Object.keys($).length>0?$:void 0},y=new Set(["country","region"]),R=(j,J)=>{for(let[Q,K]of I){let $=L(j,K);if(!$)continue;let U=f($);if(!y.has(Q)||H.test(U))J[Q]=U}},q=(j,J)=>{for(let[Q,K,[$,U]]of _){let W=L(j,K),V=W===void 0?Number.NaN:Number(W);if(Number.isFinite(V)&&k(V,$,U))J[Q]=V}},h=()=>({request(j){let J={};if(R(j,J),q(j,J),Object.keys(J).length>0)return{geo:J};let Q=O(j);return Q?{geo:Q}:void 0}}),x=(j)=>{if(typeof j==="number"&&Number.isFinite(j)&&j>=0)return j;if(typeof j!=="string"||j.length===0)return;let J=Number(j);return Number.isFinite(J)&&J>=0?J:void 0},m=(j,J)=>{for(let[Q,K]of Object.entries(j))if(Q.toLowerCase()===J)return K},E=()=>({request(j){let J=x(j.headers.get("content-length"));return J===void 0?void 0:{requestBytes:J}},response(j){let J=x(m(j.headers,"content-length"));return J===void 0?void 0:{responseBytes:J}}});export{c as userAgentEnricher,p as traceparentEnricher,E as sizeEnricher,h as geoEnricher};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2VucmljaGVycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSB7XG4gIEVucmljaGVyLFxuICBFbnJpY2hlckZpZWxkcyxcbiAgRW5yaWNoZXJSZXNwb25zZUlucHV0XG59IGZyb20gJy4vdHlwZXMvZW5yaWNoZXInXG5cbmV4cG9ydCB0eXBlIHtcbiAgRW5yaWNoZXIsXG4gIEVucmljaGVyRmllbGRzLFxuICBFbnJpY2hlckxpa2UsXG4gIEVucmljaGVyUmVzcG9uc2VJbnB1dFxufSBmcm9tICcuL3R5cGVzL2VucmljaGVyJ1xuXG5jb25zdCBIRVhfUkFESVggPSAxNlxuY29uc3QgTUFYX1RSQUNFU1RBVEVfTEVOR1RIID0gNTEyXG5cbi8vIHZlcnNpb24tdHJhY2VfaWQtcGFyZW50X2lkLWZsYWdzLCB3aXRoIGFuIG9wdGlvbmFsIHRhaWwgZm9yIHZlcnNpb25zID4gMDAuXG5jb25zdCBUUkFDRVBBUkVOVCA9XG4gIC9eKD88dmVyc2lvbj5bXFxkYS1mXXsyfSktKD88dHJhY2VJZD5bXFxkYS1mXXszMn0pLSg/PHNwYW5JZD5bXFxkYS1mXXsxNn0pLSg/PGZsYWdzPltcXGRhLWZdezJ9KSg/Oi0uKyk/JC91XG5jb25zdCBaRVJPX1RSQUNFX0lEID0gJzAnLnJlcGVhdCgzMilcbmNvbnN0IFpFUk9fU1BBTl9JRCA9ICcwJy5yZXBlYXQoMTYpXG5jb25zdCBJTlZBTElEX1ZFUlNJT04gPSAnZmYnXG5jb25zdCBDVVJSRU5UX1ZFUlNJT04gPSAnMDAnXG4vKiogYDAwLWAgKyAzMiArIGAtYCArIDE2ICsgYC1gICsgMjogdmVyc2lvbiAwMCBpcyBleGFjdGx5IHRoZXNlIGZvdXIgZmllbGRzLiAqL1xuY29uc3QgVkVSU0lPTl8wMF9MRU5HVEggPSA1NVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNlcGFyZW50RW5yaWNoZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhlYWRlciB0byByZWFkIHRoZSB0cmFjZSBjb250ZXh0IGZyb20uXG4gICAqIEBkZWZhdWx0ICd0cmFjZXBhcmVudCdcbiAgICovXG4gIGhlYWRlcj86IHN0cmluZ1xuICAvKipcbiAgICogQWxzbyByZWNvcmQgdGhlIHJhdyBgdHJhY2VzdGF0ZWAgaGVhZGVyICh0cnVuY2F0ZWQgdG8gNTEyIGNoYXJhY3RlcnMpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdHJhY2VzdGF0ZT86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBSZWFkcyBXM0MgdHJhY2UgY29udGV4dCBzdHJhaWdodCBvZmYgdGhlIHJlcXVlc3QgaGVhZGVycywgc28gbG9ncyBsaW5rIHRvXG4gKiB0cmFjZXMgaW4gU2VudHJ5LCBIeXBlckRYLCBvciBhbnkgT1RMUCBiYWNrZW5kIHdpdGhvdXQgYW4gT3BlblRlbGVtZXRyeSBTREtcbiAqIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqIFVzZSBgbG9naXhseXNpYS9vdGVsYCBpbnN0ZWFkIHdoZW4geW91IGFscmVhZHkgcnVuIHRoZSBTREsgYW5kIHdhbnQgdGhlIGlkc1xuICogb2YgdGhlICphY3RpdmUgc3BhbiogcmF0aGVyIHRoYW4gdGhlIGlkcyB0aGUgY2FsbGVyIHByb3BhZ2F0ZWQuXG4gKlxuICogQWRkcyBgdHJhY2VfaWRgLCBgc3Bhbl9pZGAsIGB0cmFjZV9mbGFnc2AsIGFuZCBgdHJhY2Vfc2FtcGxlZGAuXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFjZXBhcmVudEVucmljaGVyID0gKFxuICBvcHRpb25zOiBUcmFjZXBhcmVudEVucmljaGVyT3B0aW9ucyA9IHt9XG4pOiBFbnJpY2hlciA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IG9wdGlvbnMuaGVhZGVyID8/ICd0cmFjZXBhcmVudCdcblxuICByZXR1cm4ge1xuICAgIHJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgY29uc3QgcmF3ID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXIpXG4gICAgICBpZiAoIXJhdykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSByYXcudHJpbSgpXG4gICAgICBjb25zdCBtYXRjaCA9IFRSQUNFUEFSRU5ULmV4ZWModmFsdWUpXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBbLCB2ZXJzaW9uLCB0cmFjZUlkLCBzcGFuSWQsIGZsYWdzXSA9IG1hdGNoXG5cbiAgICAgIC8vIGBmZmAgaXMgcmVzZXJ2ZWQsIGFsbC16ZXJvIGlkcyBhcmUgaW52YWxpZCwgYW5kIGEgdmVyc2lvbi0wMCBoZWFkZXJcbiAgICAgIC8vIGNhcnJ5aW5nIGV4dHJhIGZpZWxkcyBpcyBtYWxmb3JtZWQgcmF0aGVyIHRoYW4gZm9yd2FyZC1jb21wYXRpYmxlLlxuICAgICAgaWYgKFxuICAgICAgICB2ZXJzaW9uID09PSBJTlZBTElEX1ZFUlNJT04gfHxcbiAgICAgICAgdHJhY2VJZCA9PT0gWkVST19UUkFDRV9JRCB8fFxuICAgICAgICBzcGFuSWQgPT09IFpFUk9fU1BBTl9JRCB8fFxuICAgICAgICAodmVyc2lvbiA9PT0gQ1VSUkVOVF9WRVJTSU9OICYmIHZhbHVlLmxlbmd0aCAhPT0gVkVSU0lPTl8wMF9MRU5HVEgpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIHNwYW5faWQ6IHNwYW5JZCxcbiAgICAgICAgdHJhY2VfZmxhZ3M6IGZsYWdzLFxuICAgICAgICB0cmFjZV9pZDogdHJhY2VJZCxcbiAgICAgICAgLy8gYHNhbXBsZWRgIGlzIHRoZSBsb3cgYml0IG9mIHRoZSBmbGFncyBieXRlLCBzbyBhbiBvZGQgdmFsdWUgaXMgc2V0LlxuICAgICAgICB0cmFjZV9zYW1wbGVkOiBOdW1iZXIucGFyc2VJbnQoZmxhZ3MsIEhFWF9SQURJWCkgJSAyID09PSAxXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRyYWNlc3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCd0cmFjZXN0YXRlJylcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgZmllbGRzLnRyYWNlc3RhdGUgPSBzdGF0ZS5zbGljZSgwLCBNQVhfVFJBQ0VTVEFURV9MRU5HVEgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkc1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBCT1QgPSAvYm90fGNyYXdsfHNwaWRlcnxzbHVycHxmYWNlYm9va2V4dGVybmFsaGl0fHByZXZpZXd8aGVhZGxlc3MvaXVcbmNvbnN0IFRBQkxFVCA9IC9pcGFkfHRhYmxldHxwbGF5Ym9va3xzaWxrfGtpbmRsZS9pdVxuY29uc3QgTU9CSUxFID0gL21vYml8aXBob25lfGlwb2R8d2luZG93cyBwaG9uZS9pdVxuY29uc3QgQU5EUk9JRF9NT0JJTEUgPSAvYW5kcm9pZC4qbW9iaWxlL2l1XG5cbi8qKiBGaXJzdCBtYXRjaCB3aW5zLCBzbyBtb3JlIHNwZWNpZmljIGVuZ2luZXMgYXJlIGxpc3RlZCBiZWZvcmUgdGhlaXIgYmFzZS4gKi9cbmNvbnN0IEJST1dTRVJTOiByZWFkb25seSBbbmFtZTogc3RyaW5nLCBwYXR0ZXJuOiBSZWdFeHBdW10gPSBbXG4gIFsnRWRnZScsIC9lZGcoPzphfGlvcyk/XFwvKD88dmVyc2lvbj5bXFxkLl0rKS9pdV0sXG4gIFsnT3BlcmEnLCAvKD86b3ByfG9waW9zfG9wZXJhKVxcLyg/PHZlcnNpb24+W1xcZC5dKykvaXVdLFxuICBbJ1NhbXN1bmcgSW50ZXJuZXQnLCAvc2Ftc3VuZ2Jyb3dzZXJcXC8oPzx2ZXJzaW9uPltcXGQuXSspL2l1XSxcbiAgWydGaXJlZm94JywgLyg/OmZpcmVmb3h8Znhpb3MpXFwvKD88dmVyc2lvbj5bXFxkLl0rKS9pdV0sXG4gIFsnQ2hyb21lJywgLyg/OmNocm9tZXxjcmlvcylcXC8oPzx2ZXJzaW9uPltcXGQuXSspL2l1XSxcbiAgWydTYWZhcmknLCAvdmVyc2lvblxcLyg/PHZlcnNpb24+W1xcZC5dKykuKnNhZmFyaS9pdV1cbl1cblxuY29uc3QgT1BFUkFUSU5HX1NZU1RFTVM6IHJlYWRvbmx5IFtuYW1lOiBzdHJpbmcsIHBhdHRlcm46IFJlZ0V4cF1bXSA9IFtcbiAgWydpT1MnLCAvaXBob25lfGlwYWR8aXBvZC9pdV0sXG4gIFsnQW5kcm9pZCcsIC9hbmRyb2lkL2l1XSxcbiAgWydDaHJvbWVPUycsIC9jcm9zL2l1XSxcbiAgWydXaW5kb3dzJywgL3dpbmRvd3MgbnQvaXVdLFxuICBbJ21hY09TJywgL21hYyBvcyB4L2l1XSxcbiAgWydMaW51eCcsIC9saW51eC9pdV1cbl1cblxuY29uc3QgbWF0Y2hOYW1lID0gKFxuICBjYW5kaWRhdGVzOiByZWFkb25seSBbc3RyaW5nLCBSZWdFeHBdW10sXG4gIHZhbHVlOiBzdHJpbmdcbik6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH0gfCB1bmRlZmluZWQgPT4ge1xuICBmb3IgKGNvbnN0IFtuYW1lLCBwYXR0ZXJuXSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWModmFsdWUpXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uOiBtYXRjaFsxXSB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHJlc29sdmVEZXZpY2UgPSAodmFsdWU6IHN0cmluZywgYm90OiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgaWYgKGJvdCkge1xuICAgIHJldHVybiAnYm90J1xuICB9XG4gIGlmIChUQUJMRVQudGVzdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ3RhYmxldCdcbiAgfVxuICBpZiAoTU9CSUxFLnRlc3QodmFsdWUpIHx8IEFORFJPSURfTU9CSUxFLnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuICdtb2JpbGUnXG4gIH1cbiAgcmV0dXJuICdkZXNrdG9wJ1xufVxuXG4vKipcbiAqIFR1cm5zIHRoZSBgdXNlci1hZ2VudGAgaGVhZGVyIGludG8gcXVlcnlhYmxlIGZpZWxkcyB1bmRlciBgdWFgOiBgYnJvd3NlcmAsXG4gKiBgYnJvd3NlclZlcnNpb25gLCBgb3NgLCBgZGV2aWNlYCAoYGRlc2t0b3BgIHwgYG1vYmlsZWAgfCBgdGFibGV0YCB8IGBib3RgKSxcbiAqIGFuZCBgYm90YC5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgYSBoZXVyaXN0aWMg4oCUIHVzZXIgYWdlbnRzIGFyZSBub3QgYSBwYXJzZWFibGUgZ3JhbW1hci4gSXQgaXNcbiAqIGJ1aWx0IGZvciBncm91cGluZyB0cmFmZmljIGluIGEgZGFzaGJvYXJkLCBub3QgZm9yIG1ha2luZyBhY2Nlc3MgZGVjaXNpb25zLlxuICovXG5leHBvcnQgY29uc3QgdXNlckFnZW50RW5yaWNoZXIgPSAoKTogRW5yaWNoZXIgPT4gKHtcbiAgcmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCd1c2VyLWFnZW50JylcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBib3QgPSBCT1QudGVzdCh2YWx1ZSlcbiAgICBjb25zdCBicm93c2VyID0gbWF0Y2hOYW1lKEJST1dTRVJTLCB2YWx1ZSlcbiAgICBjb25zdCBvcyA9IG1hdGNoTmFtZShPUEVSQVRJTkdfU1lTVEVNUywgdmFsdWUpXG5cbiAgICByZXR1cm4ge1xuICAgICAgdWE6IHtcbiAgICAgICAgYm90LFxuICAgICAgICAuLi4oYnJvd3NlciA/IHsgYnJvd3NlcjogYnJvd3Nlci5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihicm93c2VyPy52ZXJzaW9uID8geyBicm93c2VyVmVyc2lvbjogYnJvd3Nlci52ZXJzaW9uIH0gOiB7fSksXG4gICAgICAgIGRldmljZTogcmVzb2x2ZURldmljZSh2YWx1ZSwgYm90KSxcbiAgICAgICAgLi4uKG9zID8geyBvczogb3MubmFtZSB9IDoge30pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG4vKiogSGVhZGVyIGNhbmRpZGF0ZXMgcGVyIGdlbyBmaWVsZCwgaW4gcHJpb3JpdHkgb3JkZXIgYWNyb3NzIHBsYXRmb3Jtcy4gKi9cbmNvbnN0IEdFT19IRUFERVJTOiByZWFkb25seSBbZmllbGQ6IHN0cmluZywgaGVhZGVyczogcmVhZG9ubHkgc3RyaW5nW11dW10gPSBbXG4gIFsnY2l0eScsIFsneC12ZXJjZWwtaXAtY2l0eScsICdjZi1pcGNpdHknXV0sXG4gIFsnY291bnRyeScsIFsneC12ZXJjZWwtaXAtY291bnRyeScsICdjZi1pcGNvdW50cnknXV0sXG4gIFsncmVnaW9uJywgWyd4LXZlcmNlbC1pcC1jb3VudHJ5LXJlZ2lvbicsICdjZi1yZWdpb24tY29kZScsICdjZi1yZWdpb24nXV0sXG4gIFsndGltZXpvbmUnLCBbJ3gtdmVyY2VsLWlwLXRpbWV6b25lJywgJ2NmLXRpbWV6b25lJ11dXG5dXG5cbmNvbnN0IEdFT19OVU1FUklDX0hFQURFUlM6IHJlYWRvbmx5IFtcbiAgZmllbGQ6IHN0cmluZyxcbiAgaGVhZGVyczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHJhbmdlOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdXG5dW10gPSBbXG4gIFsnbGF0aXR1ZGUnLCBbJ3gtdmVyY2VsLWlwLWxhdGl0dWRlJywgJ2NmLWlwbGF0aXR1ZGUnXSwgWy05MCwgOTBdXSxcbiAgWydsb25naXR1ZGUnLCBbJ3gtdmVyY2VsLWlwLWxvbmdpdHVkZScsICdjZi1pcGxvbmdpdHVkZSddLCBbLTE4MCwgMTgwXV1cbl1cblxuY29uc3QgTkVUTElGWV9HRU9fSEVBREVSID0gJ3gtbmYtZ2VvJ1xuY29uc3QgR0VPX1NUUklOR19NQVggPSAxMjhcbmNvbnN0IEdFT19SQVdfSEVBREVSX01BWCA9IDIwNDhcbi8qKiBJU08tMzE2Ni1pc2ggY291bnRyeS9yZWdpb24gY29kZXM6IHNob3J0IGFscGhhbnVtZXJpYyB0b2tlbnMsIG5ldmVyIGZyZWUgdGV4dC4gKi9cbmNvbnN0IEdFT19DT0RFX1JFR0VYID0gL15bQS1aYS16MC05LV17MSwxMH0kL3VcblxuY29uc3QgZmlyc3RIZWFkZXIgPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3QsXG4gIGhlYWRlcnM6IHJlYWRvbmx5IHN0cmluZ1tdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KGhlYWRlcilcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgfVxufVxuXG4vKiogVmVyY2VsIHBlcmNlbnQtZW5jb2RlcyBjaXR5IG5hbWVzLCBzbyBgUyVDMyVBM28lMjBQYXVsb2AgbXVzdCBiZSBkZWNvZGVkLiAqL1xuY29uc3QgZGVjb2RlSGVhZGVyVmFsdWUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkuc2xpY2UoMCwgR0VPX1NUUklOR19NQVgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB2YWx1ZS5zbGljZSgwLCBHRU9fU1RSSU5HX01BWClcbiAgfVxufVxuXG5jb25zdCBpc0luUmFuZ2UgPSAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4XG5cbmludGVyZmFjZSBOZXRsaWZ5R2VvIHtcbiAgY2l0eT86IHN0cmluZ1xuICBjb3VudHJ5PzogeyBjb2RlPzogc3RyaW5nIH1cbiAgbGF0aXR1ZGU/OiBudW1iZXJcbiAgbG9uZ2l0dWRlPzogbnVtYmVyXG4gIHN1YmRpdmlzaW9uPzogeyBjb2RlPzogc3RyaW5nIH1cbiAgdGltZXpvbmU/OiBzdHJpbmdcbn1cblxuY29uc3QgcmVhZE5ldGxpZnlHZW8gPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3Rcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmF3ID0gcmVxdWVzdC5oZWFkZXJzLmdldChORVRMSUZZX0dFT19IRUFERVIpXG4gIGlmICghcmF3IHx8IHJhdy5sZW5ndGggPiBHRU9fUkFXX0hFQURFUl9NQVgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd25cbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGF0b2IocmF3KSlcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAocGFyc2VkID09PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkYXRhID0gcGFyc2VkIGFzIE5ldGxpZnlHZW9cbiAgY29uc3QgZ2VvOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4gIGlmIChkYXRhLmNpdHkpIHtcbiAgICBnZW8uY2l0eSA9IGRhdGEuY2l0eS5zbGljZSgwLCBHRU9fU1RSSU5HX01BWClcbiAgfVxuICBpZiAoZGF0YS5jb3VudHJ5Py5jb2RlICYmIEdFT19DT0RFX1JFR0VYLnRlc3QoZGF0YS5jb3VudHJ5LmNvZGUpKSB7XG4gICAgZ2VvLmNvdW50cnkgPSBkYXRhLmNvdW50cnkuY29kZVxuICB9XG4gIGlmIChkYXRhLnN1YmRpdmlzaW9uPy5jb2RlICYmIEdFT19DT0RFX1JFR0VYLnRlc3QoZGF0YS5zdWJkaXZpc2lvbi5jb2RlKSkge1xuICAgIGdlby5yZWdpb24gPSBkYXRhLnN1YmRpdmlzaW9uLmNvZGVcbiAgfVxuICBpZiAoZGF0YS50aW1lem9uZSkge1xuICAgIGdlby50aW1lem9uZSA9IGRhdGEudGltZXpvbmUuc2xpY2UoMCwgR0VPX1NUUklOR19NQVgpXG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhLmxhdGl0dWRlID09PSAnbnVtYmVyJyAmJiBpc0luUmFuZ2UoZGF0YS5sYXRpdHVkZSwgLTkwLCA5MCkpIHtcbiAgICBnZW8ubGF0aXR1ZGUgPSBkYXRhLmxhdGl0dWRlXG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBkYXRhLmxvbmdpdHVkZSA9PT0gJ251bWJlcicgJiZcbiAgICBpc0luUmFuZ2UoZGF0YS5sb25naXR1ZGUsIC0xODAsIDE4MClcbiAgKSB7XG4gICAgZ2VvLmxvbmdpdHVkZSA9IGRhdGEubG9uZ2l0dWRlXG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmtleXMoZ2VvKS5sZW5ndGggPiAwID8gZ2VvIDogdW5kZWZpbmVkXG59XG5cbi8qKiBGaWVsZHMgd2hvc2UgdmFsdWUgbXVzdCBsb29rIGxpa2UgYSBzaG9ydCBjb3VudHJ5L3JlZ2lvbiBjb2RlLCBub3QgZnJlZSB0ZXh0LiAqL1xuY29uc3QgR0VPX0NPREVfRklFTERTID0gbmV3IFNldChbJ2NvdW50cnknLCAncmVnaW9uJ10pXG5cbmNvbnN0IHJlYWRHZW9TdHJpbmdGaWVsZHMgPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3QsXG4gIGdlbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQgPT4ge1xuICBmb3IgKGNvbnN0IFtmaWVsZCwgaGVhZGVyc10gb2YgR0VPX0hFQURFUlMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGZpcnN0SGVhZGVyKHJlcXVlc3QsIGhlYWRlcnMpXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUhlYWRlclZhbHVlKHZhbHVlKVxuICAgIGlmICghR0VPX0NPREVfRklFTERTLmhhcyhmaWVsZCkgfHwgR0VPX0NPREVfUkVHRVgudGVzdChkZWNvZGVkKSkge1xuICAgICAgZ2VvW2ZpZWxkXSA9IGRlY29kZWRcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcmVhZEdlb051bWVyaWNGaWVsZHMgPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3QsXG4gIGdlbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQgPT4ge1xuICBmb3IgKGNvbnN0IFtmaWVsZCwgaGVhZGVycywgW21pbiwgbWF4XV0gb2YgR0VPX05VTUVSSUNfSEVBREVSUykge1xuICAgIGNvbnN0IHZhbHVlID0gZmlyc3RIZWFkZXIocmVxdWVzdCwgaGVhZGVycylcbiAgICBjb25zdCBwYXJzZWQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gTnVtYmVyLk5hTiA6IE51bWJlcih2YWx1ZSlcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgaXNJblJhbmdlKHBhcnNlZCwgbWluLCBtYXgpKSB7XG4gICAgICBnZW9bZmllbGRdID0gcGFyc2VkXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGdlbyBoZWFkZXJzIHRoZSBlZGdlIGFscmVhZHkgYXR0YWNoZWQg4oCUIFZlcmNlbCwgQ2xvdWRmbGFyZSwgb3JcbiAqIE5ldGxpZnkg4oCUIGludG8gYGdlby5jaXR5YCwgYGdlby5jb3VudHJ5YCwgYGdlby5yZWdpb25gLCBgZ2VvLnRpbWV6b25lYCxcbiAqIGBnZW8ubGF0aXR1ZGVgLCBhbmQgYGdlby5sb25naXR1ZGVgLlxuICpcbiAqIE5vdGhpbmcgaXMgZGVyaXZlZCBmcm9tIHRoZSBJUCBhZGRyZXNzIGl0c2VsZiwgc28gYmVoaW5kIGEgcGxhdGZvcm0gdGhhdFxuICogZG9lcyBub3Qgc2V0IHRoZXNlIGhlYWRlcnMgdGhlIGVucmljaGVyIHNpbXBseSBhZGRzIG5vdGhpbmcuXG4gKlxuICogVGhlc2UgaGVhZGVycyBhcmUgY2xpZW50LXNldHRhYmxlIHVubGVzcyBhbiBlZGdlIGluIGZyb250IG9mIHRoZSBhcHBcbiAqIG92ZXJ3cml0ZXMgdGhlbSBvbiBldmVyeSByZXF1ZXN0IOKAlCB0cnVzdCB0aGUgdmFsdWVzIG9ubHkgYmVoaW5kIHN1Y2ggYW5cbiAqIGVkZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBnZW9FbnJpY2hlciA9ICgpOiBFbnJpY2hlciA9PiAoe1xuICByZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICBjb25zdCBnZW86IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cblxuICAgIHJlYWRHZW9TdHJpbmdGaWVsZHMocmVxdWVzdCwgZ2VvKVxuICAgIHJlYWRHZW9OdW1lcmljRmllbGRzKHJlcXVlc3QsIGdlbylcblxuICAgIGlmIChPYmplY3Qua2V5cyhnZW8pLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7IGdlbyB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV0bGlmeSA9IHJlYWROZXRsaWZ5R2VvKHJlcXVlc3QpXG4gICAgcmV0dXJuIG5ldGxpZnkgPyB7IGdlbzogbmV0bGlmeSB9IDogdW5kZWZpbmVkXG4gIH1cbn0pXG5cbmNvbnN0IHJlYWRDb250ZW50TGVuZ3RoID0gKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSAmJiB2YWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID49IDAgPyBwYXJzZWQgOiB1bmRlZmluZWRcbn1cblxuY29uc3QgZmluZEhlYWRlciA9IChcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG5hbWU6IHN0cmluZ1xuKTogdW5rbm93biA9PiB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWNvcmRzIHBheWxvYWQgc2l6ZXMgYXMgYHJlcXVlc3RCeXRlc2AgYW5kIGByZXNwb25zZUJ5dGVzYC5cbiAqXG4gKiBCb3RoIGNvbWUgZnJvbSBgY29udGVudC1sZW5ndGhgLCB3aGljaCBpcyB0aGUgb25seSBzaXplIHRoZSBwbHVnaW4gY2FuIHJlYWRcbiAqIHdpdGhvdXQgYnVmZmVyaW5nIGEgYm9keS4gQSBjaHVua2VkIG9yIHN0cmVhbWVkIHJlc3BvbnNlIGhhcyBub1xuICogYGNvbnRlbnQtbGVuZ3RoYCwgc28gYHJlc3BvbnNlQnl0ZXNgIGlzIG9taXR0ZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNpemVFbnJpY2hlciA9ICgpOiBFbnJpY2hlciA9PiAoe1xuICByZXF1ZXN0KHJlcXVlc3QpOiBFbnJpY2hlckZpZWxkcyB7XG4gICAgY29uc3QgYnl0ZXMgPSByZWFkQ29udGVudExlbmd0aChyZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKVxuICAgIHJldHVybiBieXRlcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogeyByZXF1ZXN0Qnl0ZXM6IGJ5dGVzIH1cbiAgfSxcbiAgcmVzcG9uc2UoaW5wdXQ6IEVucmljaGVyUmVzcG9uc2VJbnB1dCk6IEVucmljaGVyRmllbGRzIHtcbiAgICBjb25zdCBieXRlcyA9IHJlYWRDb250ZW50TGVuZ3RoKGZpbmRIZWFkZXIoaW5wdXQuaGVhZGVycywgJ2NvbnRlbnQtbGVuZ3RoJykpXG4gICAgcmV0dXJuIGJ5dGVzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHJlc3BvbnNlQnl0ZXM6IGJ5dGVzIH1cbiAgfVxufSlcbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQWlCQSxJQUFNLEVBQ0osd0dBQ0ksRUFBZ0IsSUFBSSxPQUFPLEVBQUUsRUFDN0IsRUFBZSxJQUFJLE9BQU8sRUFBRSxFQTZCM0IsSUFBTSxFQUFzQixDQUNqQyxFQUFzQyxDQUFDLElBQzFCLENBQ2IsSUFBTSxFQUFTLEVBQVEsUUFBVSxjQUVqQyxNQUFPLENBQ0wsT0FBTyxDQUFDLEVBQVMsQ0FDZixJQUFNLEVBQU0s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VUFBWSxFQUFLLFVBR3ZCLE9BQU8sT0FBTyxLQUFLLENBQUcsRUFBRSxPQUFTLEVBQUksRUFBTSxRQUl2QyxFQUFrQixJQUFJLElBQUksQ0FBQyxVQUFXLFFBQVEsQ0FBQyxFQUUvQyxFQUFzQixDQUMxQixFQUNBLElBQ1MsQ0FDVCxRQUFZLEVBQU8sS0FBWSxFQUFhLENBQzFDLElBQU0sRUFBUSxFQUFZLEVBQVMsQ0FBTyxFQUMxQyxHQUFJLENBQUMsRUFDSCxTQUVGLElBQU0sRUFBVSxFQUFrQixDQUFLLEVBQ3ZDLEdBQUksQ0FBQyxFQUFnQixJQUFJLENBQUssR0FBSyxFQUFlLEtBQUssQ0FBTyxFQUM1RCxFQUFJLEdBQVMsSUFLYixFQUF1QixDQUMzQixFQUNBLElBQ1MsQ0FDVCxRQUFZLEVBQU8sR0FBVSxFQUFLLE1BQVMsRUFBcUIsQ0FDOUQsSUFBTSxFQUFRLEVBQVksRUFBUyxDQUFPLEVBQ3BDLEVBQVMsSUFBVSxPQUFZLE9BQU8sSUFBTSxPQUFPLENBQUssRUFDOUQsR0FBSSxPQUFPLFNBQVMsQ0FBTSxHQUFLLEVBQVUsRUFBUSxFQUFLLENBQUcsRUFDdkQsRUFBSSxHQUFTLElBaUJOLEVBQWMsS0FBaUIsQ0FDMUMsT0FBTyxDQUFDLEVBQVMsQ0FDZixJQUFNLEVBQStCLENBQUMsRUFLdEMsR0FIQSxFQUFvQixFQUFTLENBQUcsRUFDaEMsRUFBcUIsRUFBUyxDQUFHLEVBRTdCLE9BQU8sS0FBSyxDQUFHLEVBQUUsT0FBUyxFQUM1QixNQUFPLENBQUUsS0FBSSxFQUdmLElBQU0sRUFBVSxFQUFlLENBQU8sRUFDdEMsT0FBTyxFQUFVLENBQUUsSUFBSyxDQUFRLEVBQUksT0FFeEMsR0FFTSxFQUFvQixDQUFDLElBQXVDLENBQ2hFLEdBQUksT0FBTyxJQUFVLFVBQVksT0FBTyxTQUFTLENBQUssR0FBSyxHQUFTLEVBQ2xFLE9BQU8sRUFFVCxHQUFJLE9BQU8sSUFBVSxVQUFZLEVBQU0sU0FBVyxFQUNoRCxPQUVGLElBQU0sRUFBUyxPQUFPLENBQUssRUFDM0IsT0FBTyxPQUFPLFNBQVMsQ0FBTSxHQUFLLEdBQVUsRUFBSSxFQUFTLFFBR3JELEVBQWEsQ0FDakIsRUFDQSxJQUNZLENBQ1osUUFBWSxFQUFLLEtBQVUsT0FBTyxRQUFRLENBQU8sRUFDL0MsR0FBSSxFQUFJLFlBQVksSUFBTSxFQUN4QixPQUFPLEdBWUEsRUFBZSxLQUFpQixDQUMzQyxPQUFPLENBQUMsRUFBeUIsQ0FDL0IsSUFBTSxFQUFRLEVBQWtCLEVBQVEsUUFBUSxJQUFJLGdCQUFnQixDQUFDLEVBQ3JFLE9BQU8sSUFBVSxPQUFZLE9BQVksQ0FBRSxhQUFjLENBQU0sR0FFakUsUUFBUSxDQUFDLEVBQThDLENBQ3JELElBQU0sRUFBUSxFQUFrQixFQUFXLEVBQU0sUUFBUyxnQkFBZ0IsQ0FBQyxFQUMzRSxPQUFPLElBQVUsT0FBWSxPQUFZLENBQUUsY0FBZSxDQUFNLEVBRXBFIiwKICAiZGVidWdJZCI6ICJCQzc3RkUzNUJGRDE5N0E4NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
3
|
+
//# debugId=F9439F8C6145769D64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2VucmljaGVycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSB7XG4gIEVucmljaGVyLFxuICBFbnJpY2hlckZpZWxkcyxcbiAgRW5yaWNoZXJSZXNwb25zZUlucHV0XG59IGZyb20gJy4vdHlwZXMvZW5yaWNoZXInXG5cbmV4cG9ydCB0eXBlIHtcbiAgRW5yaWNoZXIsXG4gIEVucmljaGVyRmllbGRzLFxuICBFbnJpY2hlckxpa2UsXG4gIEVucmljaGVyUmVzcG9uc2VJbnB1dFxufSBmcm9tICcuL3R5cGVzL2VucmljaGVyJ1xuXG5jb25zdCBIRVhfUkFESVggPSAxNlxuY29uc3QgTUFYX1RSQUNFU1RBVEVfTEVOR1RIID0gNTEyXG5cbi8vIHZlcnNpb24tdHJhY2VfaWQtcGFyZW50X2lkLWZsYWdzLCB3aXRoIGFuIG9wdGlvbmFsIHRhaWwgZm9yIHZlcnNpb25zID4gMDAuXG5jb25zdCBUUkFDRVBBUkVOVCA9XG4gIC9eKD88dmVyc2lvbj5bXFxkYS1mXXsyfSktKD88dHJhY2VJZD5bXFxkYS1mXXszMn0pLSg/PHNwYW5JZD5bXFxkYS1mXXsxNn0pLSg/PGZsYWdzPltcXGRhLWZdezJ9KSg/Oi0uKyk/JC91XG5jb25zdCBaRVJPX1RSQUNFX0lEID0gJzAnLnJlcGVhdCgzMilcbmNvbnN0IFpFUk9fU1BBTl9JRCA9ICcwJy5yZXBlYXQoMTYpXG5jb25zdCBJTlZBTElEX1ZFUlNJT04gPSAnZmYnXG5jb25zdCBDVVJSRU5UX1ZFUlNJT04gPSAnMDAnXG4vKiogYDAwLWAgKyAzMiArIGAtYCArIDE2ICsgYC1gICsgMjogdmVyc2lvbiAwMCBpcyBleGFjdGx5IHRoZXNlIGZvdXIgZmllbGRzLiAqL1xuY29uc3QgVkVSU0lPTl8wMF9MRU5HVEggPSA1NVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNlcGFyZW50RW5yaWNoZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhlYWRlciB0byByZWFkIHRoZSB0cmFjZSBjb250ZXh0IGZyb20uXG4gICAqIEBkZWZhdWx0ICd0cmFjZXBhcmVudCdcbiAgICovXG4gIGhlYWRlcj86IHN0cmluZ1xuICAvKipcbiAgICogQWxzbyByZWNvcmQgdGhlIHJhdyBgdHJhY2VzdGF0ZWAgaGVhZGVyICh0cnVuY2F0ZWQgdG8gNTEyIGNoYXJhY3RlcnMpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdHJhY2VzdGF0ZT86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBSZWFkcyBXM0MgdHJhY2UgY29udGV4dCBzdHJhaWdodCBvZmYgdGhlIHJlcXVlc3QgaGVhZGVycywgc28gbG9ncyBsaW5rIHRvXG4gKiB0cmFjZXMgaW4gU2VudHJ5LCBIeXBlckRYLCBvciBhbnkgT1RMUCBiYWNrZW5kIHdpdGhvdXQgYW4gT3BlblRlbGVtZXRyeSBTREtcbiAqIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqIFVzZSBgbG9naXhseXNpYS9vdGVsYCBpbnN0ZWFkIHdoZW4geW91IGFscmVhZHkgcnVuIHRoZSBTREsgYW5kIHdhbnQgdGhlIGlkc1xuICogb2YgdGhlICphY3RpdmUgc3BhbiogcmF0aGVyIHRoYW4gdGhlIGlkcyB0aGUgY2FsbGVyIHByb3BhZ2F0ZWQuXG4gKlxuICogQWRkcyBgdHJhY2VfaWRgLCBgc3Bhbl9pZGAsIGB0cmFjZV9mbGFnc2AsIGFuZCBgdHJhY2Vfc2FtcGxlZGAuXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFjZXBhcmVudEVucmljaGVyID0gKFxuICBvcHRpb25zOiBUcmFjZXBhcmVudEVucmljaGVyT3B0aW9ucyA9IHt9XG4pOiBFbnJpY2hlciA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IG9wdGlvbnMuaGVhZGVyID8/ICd0cmFjZXBhcmVudCdcblxuICByZXR1cm4ge1xuICAgIHJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgY29uc3QgcmF3ID0gcmVxdWVzdC5oZWFkZXJzLmdldChoZWFkZXIpXG4gICAgICBpZiAoIXJhdykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSByYXcudHJpbSgpXG4gICAgICBjb25zdCBtYXRjaCA9IFRSQUNFUEFSRU5ULmV4ZWModmFsdWUpXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBbLCB2ZXJzaW9uLCB0cmFjZUlkLCBzcGFuSWQsIGZsYWdzXSA9IG1hdGNoXG5cbiAgICAgIC8vIGBmZmAgaXMgcmVzZXJ2ZWQsIGFsbC16ZXJvIGlkcyBhcmUgaW52YWxpZCwgYW5kIGEgdmVyc2lvbi0wMCBoZWFkZXJcbiAgICAgIC8vIGNhcnJ5aW5nIGV4dHJhIGZpZWxkcyBpcyBtYWxmb3JtZWQgcmF0aGVyIHRoYW4gZm9yd2FyZC1jb21wYXRpYmxlLlxuICAgICAgaWYgKFxuICAgICAgICB2ZXJzaW9uID09PSBJTlZBTElEX1ZFUlNJT04gfHxcbiAgICAgICAgdHJhY2VJZCA9PT0gWkVST19UUkFDRV9JRCB8fFxuICAgICAgICBzcGFuSWQgPT09IFpFUk9fU1BBTl9JRCB8fFxuICAgICAgICAodmVyc2lvbiA9PT0gQ1VSUkVOVF9WRVJTSU9OICYmIHZhbHVlLmxlbmd0aCAhPT0gVkVSU0lPTl8wMF9MRU5HVEgpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIHNwYW5faWQ6IHNwYW5JZCxcbiAgICAgICAgdHJhY2VfZmxhZ3M6IGZsYWdzLFxuICAgICAgICB0cmFjZV9pZDogdHJhY2VJZCxcbiAgICAgICAgLy8gYHNhbXBsZWRgIGlzIHRoZSBsb3cgYml0IG9mIHRoZSBmbGFncyBieXRlLCBzbyBhbiBvZGQgdmFsdWUgaXMgc2V0LlxuICAgICAgICB0cmFjZV9zYW1wbGVkOiBOdW1iZXIucGFyc2VJbnQoZmxhZ3MsIEhFWF9SQURJWCkgJSAyID09PSAxXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRyYWNlc3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCd0cmFjZXN0YXRlJylcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgZmllbGRzLnRyYWNlc3RhdGUgPSBzdGF0ZS5zbGljZSgwLCBNQVhfVFJBQ0VTVEFURV9MRU5HVEgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkc1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBCT1QgPSAvYm90fGNyYXdsfHNwaWRlcnxzbHVycHxmYWNlYm9va2V4dGVybmFsaGl0fHByZXZpZXd8aGVhZGxlc3MvaXVcbmNvbnN0IFRBQkxFVCA9IC9pcGFkfHRhYmxldHxwbGF5Ym9va3xzaWxrfGtpbmRsZS9pdVxuY29uc3QgTU9CSUxFID0gL21vYml8aXBob25lfGlwb2R8d2luZG93cyBwaG9uZS9pdVxuY29uc3QgQU5EUk9JRF9NT0JJTEUgPSAvYW5kcm9pZC4qbW9iaWxlL2l1XG5cbi8qKiBGaXJzdCBtYXRjaCB3aW5zLCBzbyBtb3JlIHNwZWNpZmljIGVuZ2luZXMgYXJlIGxpc3RlZCBiZWZvcmUgdGhlaXIgYmFzZS4gKi9cbmNvbnN0IEJST1dTRVJTOiByZWFkb25seSBbbmFtZTogc3RyaW5nLCBwYXR0ZXJuOiBSZWdFeHBdW10gPSBbXG4gIFsnRWRnZScsIC9lZGcoPzphfGlvcyk/XFwvKD88dmVyc2lvbj5bXFxkLl0rKS9pdV0sXG4gIFsnT3BlcmEnLCAvKD86b3ByfG9waW9zfG9wZXJhKVxcLyg/PHZlcnNpb24+W1xcZC5dKykvaXVdLFxuICBbJ1NhbXN1bmcgSW50ZXJuZXQnLCAvc2Ftc3VuZ2Jyb3dzZXJcXC8oPzx2ZXJzaW9uPltcXGQuXSspL2l1XSxcbiAgWydGaXJlZm94JywgLyg/OmZpcmVmb3h8Znhpb3MpXFwvKD88dmVyc2lvbj5bXFxkLl0rKS9pdV0sXG4gIFsnQ2hyb21lJywgLyg/OmNocm9tZXxjcmlvcylcXC8oPzx2ZXJzaW9uPltcXGQuXSspL2l1XSxcbiAgWydTYWZhcmknLCAvdmVyc2lvblxcLyg/PHZlcnNpb24+W1xcZC5dKykuKnNhZmFyaS9pdV1cbl1cblxuY29uc3QgT1BFUkFUSU5HX1NZU1RFTVM6IHJlYWRvbmx5IFtuYW1lOiBzdHJpbmcsIHBhdHRlcm46IFJlZ0V4cF1bXSA9IFtcbiAgWydpT1MnLCAvaXBob25lfGlwYWR8aXBvZC9pdV0sXG4gIFsnQW5kcm9pZCcsIC9hbmRyb2lkL2l1XSxcbiAgWydDaHJvbWVPUycsIC9jcm9zL2l1XSxcbiAgWydXaW5kb3dzJywgL3dpbmRvd3MgbnQvaXVdLFxuICBbJ21hY09TJywgL21hYyBvcyB4L2l1XSxcbiAgWydMaW51eCcsIC9saW51eC9pdV1cbl1cblxuY29uc3QgbWF0Y2hOYW1lID0gKFxuICBjYW5kaWRhdGVzOiByZWFkb25seSBbc3RyaW5nLCBSZWdFeHBdW10sXG4gIHZhbHVlOiBzdHJpbmdcbik6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH0gfCB1bmRlZmluZWQgPT4ge1xuICBmb3IgKGNvbnN0IFtuYW1lLCBwYXR0ZXJuXSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWModmFsdWUpXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uOiBtYXRjaFsxXSB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHJlc29sdmVEZXZpY2UgPSAodmFsdWU6IHN0cmluZywgYm90OiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgaWYgKGJvdCkge1xuICAgIHJldHVybiAnYm90J1xuICB9XG4gIGlmIChUQUJMRVQudGVzdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ3RhYmxldCdcbiAgfVxuICBpZiAoTU9CSUxFLnRlc3QodmFsdWUpIHx8IEFORFJPSURfTU9CSUxFLnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuICdtb2JpbGUnXG4gIH1cbiAgcmV0dXJuICdkZXNrdG9wJ1xufVxuXG4vKipcbiAqIFR1cm5zIHRoZSBgdXNlci1hZ2VudGAgaGVhZGVyIGludG8gcXVlcnlhYmxlIGZpZWxkcyB1bmRlciBgdWFgOiBgYnJvd3NlcmAsXG4gKiBgYnJvd3NlclZlcnNpb25gLCBgb3NgLCBgZGV2aWNlYCAoYGRlc2t0b3BgIHwgYG1vYmlsZWAgfCBgdGFibGV0YCB8IGBib3RgKSxcbiAqIGFuZCBgYm90YC5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgYSBoZXVyaXN0aWMg4oCUIHVzZXIgYWdlbnRzIGFyZSBub3QgYSBwYXJzZWFibGUgZ3JhbW1hci4gSXQgaXNcbiAqIGJ1aWx0IGZvciBncm91cGluZyB0cmFmZmljIGluIGEgZGFzaGJvYXJkLCBub3QgZm9yIG1ha2luZyBhY2Nlc3MgZGVjaXNpb25zLlxuICovXG5leHBvcnQgY29uc3QgdXNlckFnZW50RW5yaWNoZXIgPSAoKTogRW5yaWNoZXIgPT4gKHtcbiAgcmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCd1c2VyLWFnZW50JylcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBib3QgPSBCT1QudGVzdCh2YWx1ZSlcbiAgICBjb25zdCBicm93c2VyID0gbWF0Y2hOYW1lKEJST1dTRVJTLCB2YWx1ZSlcbiAgICBjb25zdCBvcyA9IG1hdGNoTmFtZShPUEVSQVRJTkdfU1lTVEVNUywgdmFsdWUpXG5cbiAgICByZXR1cm4ge1xuICAgICAgdWE6IHtcbiAgICAgICAgYm90LFxuICAgICAgICAuLi4oYnJvd3NlciA/IHsgYnJvd3NlcjogYnJvd3Nlci5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihicm93c2VyPy52ZXJzaW9uID8geyBicm93c2VyVmVyc2lvbjogYnJvd3Nlci52ZXJzaW9uIH0gOiB7fSksXG4gICAgICAgIGRldmljZTogcmVzb2x2ZURldmljZSh2YWx1ZSwgYm90KSxcbiAgICAgICAgLi4uKG9zID8geyBvczogb3MubmFtZSB9IDoge30pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG4vKiogSGVhZGVyIGNhbmRpZGF0ZXMgcGVyIGdlbyBmaWVsZCwgaW4gcHJpb3JpdHkgb3JkZXIgYWNyb3NzIHBsYXRmb3Jtcy4gKi9cbmNvbnN0IEdFT19IRUFERVJTOiByZWFkb25seSBbZmllbGQ6IHN0cmluZywgaGVhZGVyczogcmVhZG9ubHkgc3RyaW5nW11dW10gPSBbXG4gIFsnY2l0eScsIFsneC12ZXJjZWwtaXAtY2l0eScsICdjZi1pcGNpdHknXV0sXG4gIFsnY291bnRyeScsIFsneC12ZXJjZWwtaXAtY291bnRyeScsICdjZi1pcGNvdW50cnknXV0sXG4gIFsncmVnaW9uJywgWyd4LXZlcmNlbC1pcC1jb3VudHJ5LXJlZ2lvbicsICdjZi1yZWdpb24tY29kZScsICdjZi1yZWdpb24nXV0sXG4gIFsndGltZXpvbmUnLCBbJ3gtdmVyY2VsLWlwLXRpbWV6b25lJywgJ2NmLXRpbWV6b25lJ11dXG5dXG5cbmNvbnN0IEdFT19OVU1FUklDX0hFQURFUlM6IHJlYWRvbmx5IFtcbiAgZmllbGQ6IHN0cmluZyxcbiAgaGVhZGVyczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHJhbmdlOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdXG5dW10gPSBbXG4gIFsnbGF0aXR1ZGUnLCBbJ3gtdmVyY2VsLWlwLWxhdGl0dWRlJywgJ2NmLWlwbGF0aXR1ZGUnXSwgWy05MCwgOTBdXSxcbiAgWydsb25naXR1ZGUnLCBbJ3gtdmVyY2VsLWlwLWxvbmdpdHVkZScsICdjZi1pcGxvbmdpdHVkZSddLCBbLTE4MCwgMTgwXV1cbl1cblxuY29uc3QgTkVUTElGWV9HRU9fSEVBREVSID0gJ3gtbmYtZ2VvJ1xuY29uc3QgR0VPX1NUUklOR19NQVggPSAxMjhcbmNvbnN0IEdFT19SQVdfSEVBREVSX01BWCA9IDIwNDhcbi8qKiBJU08tMzE2Ni1pc2ggY291bnRyeS9yZWdpb24gY29kZXM6IHNob3J0IGFscGhhbnVtZXJpYyB0b2tlbnMsIG5ldmVyIGZyZWUgdGV4dC4gKi9cbmNvbnN0IEdFT19DT0RFX1JFR0VYID0gL15bQS1aYS16MC05LV17MSwxMH0kL3VcblxuY29uc3QgZmlyc3RIZWFkZXIgPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3QsXG4gIGhlYWRlcnM6IHJlYWRvbmx5IHN0cmluZ1tdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KGhlYWRlcilcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgfVxufVxuXG4vKiogVmVyY2VsIHBlcmNlbnQtZW5jb2RlcyBjaXR5IG5hbWVzLCBzbyBgUyVDMyVBM28lMjBQYXVsb2AgbXVzdCBiZSBkZWNvZGVkLiAqL1xuY29uc3QgZGVjb2RlSGVhZGVyVmFsdWUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkuc2xpY2UoMCwgR0VPX1NUUklOR19NQVgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB2YWx1ZS5zbGljZSgwLCBHRU9fU1RSSU5HX01BWClcbiAgfVxufVxuXG5jb25zdCBpc0luUmFuZ2UgPSAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4XG5cbmludGVyZmFjZSBOZXRsaWZ5R2VvIHtcbiAgY2l0eT86IHN0cmluZ1xuICBjb3VudHJ5PzogeyBjb2RlPzogc3RyaW5nIH1cbiAgbGF0aXR1ZGU/OiBudW1iZXJcbiAgbG9uZ2l0dWRlPzogbnVtYmVyXG4gIHN1YmRpdmlzaW9uPzogeyBjb2RlPzogc3RyaW5nIH1cbiAgdGltZXpvbmU/OiBzdHJpbmdcbn1cblxuLyoqIEEgbm9uLWVtcHR5IHN0cmluZyBmaWVsZCwgYm91bmRlZDsgYW55IG90aGVyIHR5cGUgaXMgaWdub3JlZC4gKi9cbmNvbnN0IGdlb1RleHQgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwXG4gICAgPyB2YWx1ZS5zbGljZSgwLCBHRU9fU1RSSU5HX01BWClcbiAgICA6IHVuZGVmaW5lZFxuXG4vKiogQSBzdHJpbmcgdGhhdCBpcyBhIHNob3J0IGNvdW50cnkgb3IgcmVnaW9uIGNvZGU7IGFueSBvdGhlciB2YWx1ZSBpcyBpZ25vcmVkLiAqL1xuY29uc3QgZ2VvQ29kZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PlxuICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIEdFT19DT0RFX1JFR0VYLnRlc3QodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWRcblxuY29uc3QgcmVhZE5ldGxpZnlHZW8gPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3Rcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmF3ID0gcmVxdWVzdC5oZWFkZXJzLmdldChORVRMSUZZX0dFT19IRUFERVIpXG4gIGlmICghcmF3IHx8IHJhdy5sZW5ndGggPiBHRU9fUkFXX0hFQURFUl9NQVgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd25cbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGF0b2IocmF3KSlcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAocGFyc2VkID09PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkYXRhID0gcGFyc2VkIGFzIE5ldGxpZnlHZW9cbiAgY29uc3QgZ2VvOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4gIGNvbnN0IGNpdHkgPSBnZW9UZXh0KGRhdGEuY2l0eSlcbiAgaWYgKGNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgIGdlby5jaXR5ID0gY2l0eVxuICB9XG4gIGNvbnN0IGNvdW50cnkgPSBnZW9Db2RlKGRhdGEuY291bnRyeT8uY29kZSlcbiAgaWYgKGNvdW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgIGdlby5jb3VudHJ5ID0gY291bnRyeVxuICB9XG4gIGNvbnN0IHJlZ2lvbiA9IGdlb0NvZGUoZGF0YS5zdWJkaXZpc2lvbj8uY29kZSlcbiAgaWYgKHJlZ2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZ2VvLnJlZ2lvbiA9IHJlZ2lvblxuICB9XG4gIGNvbnN0IHRpbWV6b25lID0gZ2VvVGV4dChkYXRhLnRpbWV6b25lKVxuICBpZiAodGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuICAgIGdlby50aW1lem9uZSA9IHRpbWV6b25lXG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhLmxhdGl0dWRlID09PSAnbnVtYmVyJyAmJiBpc0luUmFuZ2UoZGF0YS5sYXRpdHVkZSwgLTkwLCA5MCkpIHtcbiAgICBnZW8ubGF0aXR1ZGUgPSBkYXRhLmxhdGl0dWRlXG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBkYXRhLmxvbmdpdHVkZSA9PT0gJ251bWJlcicgJiZcbiAgICBpc0luUmFuZ2UoZGF0YS5sb25naXR1ZGUsIC0xODAsIDE4MClcbiAgKSB7XG4gICAgZ2VvLmxvbmdpdHVkZSA9IGRhdGEubG9uZ2l0dWRlXG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmtleXMoZ2VvKS5sZW5ndGggPiAwID8gZ2VvIDogdW5kZWZpbmVkXG59XG5cbi8qKiBGaWVsZHMgd2hvc2UgdmFsdWUgbXVzdCBsb29rIGxpa2UgYSBzaG9ydCBjb3VudHJ5L3JlZ2lvbiBjb2RlLCBub3QgZnJlZSB0ZXh0LiAqL1xuY29uc3QgR0VPX0NPREVfRklFTERTID0gbmV3IFNldChbJ2NvdW50cnknLCAncmVnaW9uJ10pXG5cbmNvbnN0IHJlYWRHZW9TdHJpbmdGaWVsZHMgPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3QsXG4gIGdlbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQgPT4ge1xuICBmb3IgKGNvbnN0IFtmaWVsZCwgaGVhZGVyc10gb2YgR0VPX0hFQURFUlMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGZpcnN0SGVhZGVyKHJlcXVlc3QsIGhlYWRlcnMpXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUhlYWRlclZhbHVlKHZhbHVlKVxuICAgIGlmICghR0VPX0NPREVfRklFTERTLmhhcyhmaWVsZCkgfHwgR0VPX0NPREVfUkVHRVgudGVzdChkZWNvZGVkKSkge1xuICAgICAgZ2VvW2ZpZWxkXSA9IGRlY29kZWRcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcmVhZEdlb051bWVyaWNGaWVsZHMgPSAoXG4gIHJlcXVlc3Q6IFJlcXVlc3QsXG4gIGdlbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQgPT4ge1xuICBmb3IgKGNvbnN0IFtmaWVsZCwgaGVhZGVycywgW21pbiwgbWF4XV0gb2YgR0VPX05VTUVSSUNfSEVBREVSUykge1xuICAgIGNvbnN0IHZhbHVlID0gZmlyc3RIZWFkZXIocmVxdWVzdCwgaGVhZGVycylcbiAgICBjb25zdCBwYXJzZWQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gTnVtYmVyLk5hTiA6IE51bWJlcih2YWx1ZSlcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgaXNJblJhbmdlKHBhcnNlZCwgbWluLCBtYXgpKSB7XG4gICAgICBnZW9bZmllbGRdID0gcGFyc2VkXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGdlbyBoZWFkZXJzIHRoZSBlZGdlIGFscmVhZHkgYXR0YWNoZWQg4oCUIFZlcmNlbCwgQ2xvdWRmbGFyZSwgb3JcbiAqIE5ldGxpZnkg4oCUIGludG8gYGdlby5jaXR5YCwgYGdlby5jb3VudHJ5YCwgYGdlby5yZWdpb25gLCBgZ2VvLnRpbWV6b25lYCxcbiAqIGBnZW8ubGF0aXR1ZGVgLCBhbmQgYGdlby5sb25naXR1ZGVgLlxuICpcbiAqIE5vdGhpbmcgaXMgZGVyaXZlZCBmcm9tIHRoZSBJUCBhZGRyZXNzIGl0c2VsZiwgc28gYmVoaW5kIGEgcGxhdGZvcm0gdGhhdFxuICogZG9lcyBub3Qgc2V0IHRoZXNlIGhlYWRlcnMgdGhlIGVucmljaGVyIHNpbXBseSBhZGRzIG5vdGhpbmcuXG4gKlxuICogVGhlc2UgaGVhZGVycyBhcmUgY2xpZW50LXNldHRhYmxlIHVubGVzcyBhbiBlZGdlIGluIGZyb250IG9mIHRoZSBhcHBcbiAqIG92ZXJ3cml0ZXMgdGhlbSBvbiBldmVyeSByZXF1ZXN0IOKAlCB0cnVzdCB0aGUgdmFsdWVzIG9ubHkgYmVoaW5kIHN1Y2ggYW5cbiAqIGVkZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBnZW9FbnJpY2hlciA9ICgpOiBFbnJpY2hlciA9PiAoe1xuICByZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICBjb25zdCBnZW86IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cblxuICAgIHJlYWRHZW9TdHJpbmdGaWVsZHMocmVxdWVzdCwgZ2VvKVxuICAgIHJlYWRHZW9OdW1lcmljRmllbGRzKHJlcXVlc3QsIGdlbylcblxuICAgIGlmIChPYmplY3Qua2V5cyhnZW8pLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7IGdlbyB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV0bGlmeSA9IHJlYWROZXRsaWZ5R2VvKHJlcXVlc3QpXG4gICAgcmV0dXJuIG5ldGxpZnkgPyB7IGdlbzogbmV0bGlmeSB9IDogdW5kZWZpbmVkXG4gIH1cbn0pXG5cbmNvbnN0IHJlYWRDb250ZW50TGVuZ3RoID0gKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSAmJiB2YWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID49IDAgPyBwYXJzZWQgOiB1bmRlZmluZWRcbn1cblxuY29uc3QgZmluZEhlYWRlciA9IChcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG5hbWU6IHN0cmluZ1xuKTogdW5rbm93biA9PiB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWNvcmRzIHBheWxvYWQgc2l6ZXMgYXMgYHJlcXVlc3RCeXRlc2AgYW5kIGByZXNwb25zZUJ5dGVzYC5cbiAqXG4gKiBCb3RoIGNvbWUgZnJvbSBgY29udGVudC1sZW5ndGhgLCB3aGljaCBpcyB0aGUgb25seSBzaXplIHRoZSBwbHVnaW4gY2FuIHJlYWRcbiAqIHdpdGhvdXQgYnVmZmVyaW5nIGEgYm9keS4gQSBjaHVua2VkIG9yIHN0cmVhbWVkIHJlc3BvbnNlIGhhcyBub1xuICogYGNvbnRlbnQtbGVuZ3RoYCwgc28gYHJlc3BvbnNlQnl0ZXNgIGlzIG9taXR0ZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNpemVFbnJpY2hlciA9ICgpOiBFbnJpY2hlciA9PiAoe1xuICByZXF1ZXN0KHJlcXVlc3QpOiBFbnJpY2hlckZpZWxkcyB7XG4gICAgY29uc3QgYnl0ZXMgPSByZWFkQ29udGVudExlbmd0aChyZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKVxuICAgIHJldHVybiBieXRlcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogeyByZXF1ZXN0Qnl0ZXM6IGJ5dGVzIH1cbiAgfSxcbiAgcmVzcG9uc2UoaW5wdXQ6IEVucmljaGVyUmVzcG9uc2VJbnB1dCk6IEVucmljaGVyRmllbGRzIHtcbiAgICBjb25zdCBieXRlcyA9IHJlYWRDb250ZW50TGVuZ3RoKGZpbmRIZWFkZXIoaW5wdXQuaGVhZGVycywgJ2NvbnRlbnQtbGVuZ3RoJykpXG4gICAgcmV0dXJuIGJ5dGVzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHJlc3BvbnNlQnl0ZXM6IGJ5dGVzIH1cbiAgfVxufSlcbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQWlCQSxJQUFNLEVBQ0osd0dBQ0ksRUFBZ0IsSUFBSSxPQUFPLEVBQUUsRUFDN0IsRUFBZSxJQUFJLE9BQU8sRUFBRSxFQTZCM0IsSUFBTSxFQUFzQixDQUNqQyxFQUFzQyxDQUFDLElBQzFCLENBQ2IsSUFBTSxFQUFTLEVBQVEsUUFBVSxjQUVqQyxNQUFPLENBQ0wsT0FBTyxDQUFDLEVBQVMsQ0FDZixJQUFNLEVBQU0sRUFBUSxRQUFRLElBQUksQ0FBTSxFQUN0QyxHQUFJLENBQUMsRUFDSCxPQUdGLElBQU0sRUFBUSxFQUFJLEtBQUssRUFDakIsRUFBUSxFQUFZLEtBQUssQ0FBSyxFQUNwQyxHQUFJLENBQUMsRUFDSCxPQUdGLEtBQVMsRUFBUyxFQUFTLEVBQVEsR0FBUyxFQUk1QyxHQUNFLElBbkRnQixNQW9EaEIsSUFBWSxHQUNaLElBQVcsR0FDVixJQXJEZSxNQXFEZ0IsRUFBTSxTQW5EcEIsR0FxRGxCLE9BR0YsSUFBTSxFQUFrQyxDQUN0QyxRQUFTLEVBQ1QsWUFBYSxFQUNiLFNBQVUsRUFFVixjQUFlLE9BQU8sU0FBUyxFQXhFckIsRUF3RXFDLEVBQUksSUFBTSxDQUMzRCxFQUVBLEdBQUksRUFBUSxXQUFZLENBQ3RCLElBQU0sRUFBUSxFQUFRLFFBQVEsSUFBSSxZQUFZLEVBQzlDLEdBQUksRUFDRixFQUFPLFdBQWEsRUFBTSxNQUFNLEVBN0VaLEdBNkVvQyxF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
|
package/dist/hyperdx.d.ts
CHANGED
|
@@ -29,17 +29,26 @@ interface BatchTransportOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
maxBatchSize?: number;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* The most entries one request carries. Lower it for a backend with a
|
|
33
|
+
* per-request item limit. The Sentry adapter defaults to 100.
|
|
34
|
+
* @default 500
|
|
35
|
+
*/
|
|
36
|
+
maxEntriesPerRequest?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Bound on the entries that wait behind the request in flight, as a
|
|
39
|
+
* multiple of `maxBatchSize`: at most `maxPendingBatches × maxBatchSize`
|
|
40
|
+
* entries wait, and entries beyond that are dropped and reported.
|
|
35
41
|
* @default 32
|
|
36
42
|
*/
|
|
37
43
|
maxPendingBatches?: number;
|
|
38
44
|
/**
|
|
39
|
-
* Called when a
|
|
40
|
-
* many
|
|
41
|
-
*
|
|
42
|
-
*
|
|
45
|
+
* Called when a request fails after retries, or when entries are dropped
|
|
46
|
+
* because too many were already waiting. Failures of a request that a
|
|
47
|
+
* `log()` or `flush()` call started are rejected to that caller instead.
|
|
48
|
+
* When omitted, failures go to stderr, rate limited to once every 5
|
|
49
|
+
* seconds. To see every transport failure in one place, forward them to
|
|
50
|
+
* the function you give `config.onError`, as
|
|
51
|
+
* `error => handle({ error, sink: 'transport' })`.
|
|
43
52
|
*/
|
|
44
53
|
onError?: (error: unknown) => void;
|
|
45
54
|
/**
|
|
@@ -55,6 +64,8 @@ interface BatchTransportOptions {
|
|
|
55
64
|
}
|
|
56
65
|
/** A {@link Transport} that batches entries and can be flushed on demand. */
|
|
57
66
|
interface AdapterTransport extends Transport {
|
|
67
|
+
/** Stops accepting entries, then flushes the ones already accepted. Idempotent. */
|
|
68
|
+
close: () => Promise<void>;
|
|
58
69
|
/** Sends any buffered entries immediately. Call before process exit. */
|
|
59
70
|
flush: () => Promise<void>;
|
|
60
71
|
}
|
package/dist/hyperdx.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as V}from"./shared/Logixlysia-
|
|
1
|
+
import{a as V}from"./shared/Logixlysia-pa8v7y86.js";import{c as G,d as z,e as Q}from"./shared/Logixlysia-xb08zg3q.js";import"./shared/Logixlysia-tqpczh9a.js";var Z="https://in-otel.hyperdx.io",w=(j={})=>{let B=j.apiKey??z("HYPERDX_API_KEY");if(!B)throw Q("HyperDX","missing API key. Set HYPERDX_API_KEY or pass apiKey to createHyperDXTransport()");let Y=G(j.endpoint??z("HYPERDX_OTLP_ENDPOINT")??Z);return V({headers:{authorization:B},name:"HyperDX",options:j,resourceAttributes:j.resourceAttributes??{},serviceName:j.serviceName??z("HYPERDX_SERVICE_NAME")??z("OTEL_SERVICE_NAME")??"logixlysia",url:`${Y}/v1/logs`})};export{w as createHyperDXTransport};
|
|
2
2
|
|
|
3
3
|
//# debugId=F0CC0AB3AC4FB4E264756E2164756E21
|
|
4
4
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2h5cGVyZHgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHsgY3JlYXRlT3RscENvcmUgfSBmcm9tICcuL2FkYXB0ZXJzL290bHAtY29yZSdcbmltcG9ydCB7XG4gIGVudlN0cmluZyxcbiAgc3RyaXBUcmFpbGluZ1NsYXNoZXMsXG4gIHRyYW5zcG9ydEVycm9yXG59IGZyb20gJy4vYWRhcHRlcnMvc2hhcmVkJ1xuaW1wb3J0IHR5cGUgeyBBZGFwdGVyVHJhbnNwb3J0LCBCYXRjaFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL2FkYXB0ZXJzL3NoYXJlZCdcblxuY29uc3QgREVGQVVMVF9FTkRQT0lOVCA9ICdodHRwczovL2luLW90ZWwuaHlwZXJkeC5pbydcblxuZXhwb3J0IGludGVyZmFjZSBIeXBlckRYVHJhbnNwb3J0T3B0aW9ucyBleHRlbmRzIEJhdGNoVHJhbnNwb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIeXBlckRYIGluZ2VzdGlvbiBBUEkga2V5LCBzZW50IGFzIHRoZSBgYXV0aG9yaXphdGlvbmAgaGVhZGVyLlxuICAgKiBGYWxscyBiYWNrIHRvIHRoZSBgSFlQRVJEWF9BUElfS0VZYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIGFwaUtleT86IHN0cmluZ1xuICAvKipcbiAgICogT1RMUCBIVFRQIGJhc2UgVVJMIOKAlCB0aGUgYWRhcHRlciBhcHBlbmRzIGAvdjEvbG9nc2AuIEZvciBzZWxmLWhvc3RlZFxuICAgKiBjb2xsZWN0b3JzIHBhc3MgdGhlIGJhc2UgVVJMIG9ubHkgKHBvcnQgNDMxOCBieSBkZWZhdWx0KS5cbiAgICogRmFsbHMgYmFjayB0byBgSFlQRVJEWF9PVExQX0VORFBPSU5UYC5cbiAgICogQGRlZmF1bHQgJ2h0dHBzOi8vaW4tb3RlbC5oeXBlcmR4LmlvJ1xuICAgKi9cbiAgZW5kcG9pbnQ/OiBzdHJpbmdcbiAgLyoqIEV4dHJhIE9UTFAgcmVzb3VyY2UgYXR0cmlidXRlcyBtZXJnZWQgbmV4dCB0byBgc2VydmljZS5uYW1lYC4gKi9cbiAgcmVzb3VyY2VBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGBzZXJ2aWNlLm5hbWVgIHJlc291cmNlIGF0dHJpYnV0ZS5cbiAgICogRmFsbHMgYmFjayB0byBgSFlQRVJEWF9TRVJWSUNFX05BTUVgLCB0aGVuIGBPVEVMX1NFUlZJQ0VfTkFNRWAuXG4gICAqIEBkZWZhdWx0ICdsb2dpeGx5c2lhJ1xuICAgKi9cbiAgc2VydmljZU5hbWU/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJhbnNwb3J0IHRoYXQgc2hpcHMgbG9ncyB0byBIeXBlckRYIGFzIE9UTFAgSlNPTlxuICogKGBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3RgKSBvdmVyIEhUVFAuIE1ldGEgZmllbGRzIGJlY29tZSBkb3Qtbm90YXRpb24gbG9nXG4gKiBhdHRyaWJ1dGVzIChgcmVxdWVzdC5tZXRob2RgLCBgY29udGV4dC5yZXF1ZXN0SWRgLCDigKYpIHNvIHRoZXkgYXJlIHNlYXJjaGFibGVcbiAqIGluIHRoZSBIeXBlckRYIFVJLlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIG5vIEFQSSBrZXkgaXMgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUh5cGVyRFhUcmFuc3BvcnQgPSAoXG4gIG9wdGlvbnM6IEh5cGVyRFhUcmFuc3BvcnRPcHRpb25zID0ge31cbik6IEFkYXB0ZXJUcmFuc3BvcnQgPT4ge1xuICBjb25zdCBhcGlLZXkgPSBvcHRpb25zLmFwaUtleSA/PyBlbnZTdHJpbmcoJ0hZUEVSRFhfQVBJX0tFWScpXG4gIGlmICghYXBpS2V5KSB7XG4gICAgdGhyb3cgdHJhbnNwb3J0RXJyb3IoXG4gICAgICAnSHlwZXJEWCcsXG4gICAgICAnbWlzc2luZyBBUEkga2V5LiBTZXQgSFlQRVJEWF9BUElfS0VZIG9yIHBhc3MgYXBpS2V5IHRvIGNyZWF0ZUh5cGVyRFhUcmFuc3BvcnQoKSdcbiAgICApXG4gIH1cblxuICBjb25zdCBlbmRwb2ludCA9IHN0cmlwVHJhaWxpbmdTbGFzaGVzKFxuICAgIG9wdGlvbnMuZW5kcG9pbnQgPz8gZW52U3RyaW5nKCdIWVBFUkRYX09UTFBfRU5EUE9JTlQnKSA/PyBERUZBVUxUX0VORFBPSU5UXG4gIClcblxuICByZXR1cm4gY3JlYXRlT3RscENvcmUoe1xuICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYXBpS2V5IH0sXG4gICAgbmFtZTogJ0h5cGVyRFgnLFxuICAgIG9wdGlvbnMsXG4gICAgcmVzb3VyY2VBdHRyaWJ1dGVzOiBvcHRpb25zLnJlc291cmNlQXR0cmlidXRlcyA/PyB7fSxcbiAgICBzZXJ2aWNlTmFtZTpcbiAgICAgIG9wdGlvbnMuc2VydmljZU5hbWUgPz9cbiAgICAgIGVudlN0cmluZygnSFlQRVJEWF9TRVJWSUNFX05BTUUnKSA/P1xuICAgICAgZW52U3RyaW5nKCdPVEVMX1NFUlZJQ0VfTkFNRScpID8/XG4gICAgICAnbG9naXhseXNpYScsXG4gICAgdXJsOiBgJHtlbmRwb2ludH0vdjEvbG9nc2BcbiAgfSlcbn1cblxuZXhwb3J0IHR5cGUgeyBBZGFwdGVyVHJhbnNwb3J0IH0gZnJvbSAnLi9hZGFwdGVycy9zaGFyZWQnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAia0pBUUEsVUFBTSxRQUFtQiw2QkFpQ1osRUFBeUIsQ0FDcEMsRUFBbUMsQ0FBQyxJQUNmLENBQ3JCLElBQU0sRUFBUyxFQUFRLFFBQVUsRUFBVSxpQkFBaUIsRUFDNUQsR0FBSSxDQUFDLEVBQ0gsTUFBTSxFQUNKLFVBQ0EsaUZBQ0YsRUFHRixJQUFNLEVBQVcsRUFDZixFQUFRLFVBQVksRUFBVSx1QkFBdUIsR0FBSyxDQUM1RCxFQUVBLE9BQU8sRUFBZSxDQUNwQixRQUFTLENBQUUsY0FBZSxDQUFPLEVBQ2pDLEtBQU0sVUFDTixVQUNBLG1CQUFvQixFQUFRLG9CQUFzQixDQUFDLEVBQ25ELFlBQ0UsRUFBUSxhQUNSLEVBQVUsc0JBQXNCLEdBQ2hDLEVBQVUsbUJBQW1CLEdBQzdCLGFBQ0YsSUFBSyxHQUFHLFdBQ1YsQ0FBQyIsCiAgImRlYnVnSWQiOiAiRjBDQzBBQjNBQzRGQjRFMjY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|