@uengage.io/platform-sdk 0.15.0 → 2.0.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/README.md CHANGED
@@ -114,6 +114,96 @@ await client.audit.flush(); // optional: drain on shutdown
114
114
  - `flush()` resolves when the queue is empty or retries are exhausted.
115
115
  - If `actorVia` is unset, `record()` logs an error and drops the event.
116
116
 
117
+ ## Events client (platform event bus)
118
+
119
+ A **subpath export**, like `/realtime`, and for the same reason: it wraps
120
+ `@aws-sdk/client-sns`, which is declared as an **optional peer dependency** so
121
+ it is installed only by code that actually publishes. Consumers that just read
122
+ businesses or zones — and any frontend bundle touching the root import — pay
123
+ nothing. This mirrors the PHP SDK, where `aws/aws-sdk-php` is a `suggest`.
124
+
125
+ ```bash
126
+ npm install @aws-sdk/client-sns # only if you publish events
127
+ ```
128
+
129
+ ```ts
130
+ import { events, createEventsClient } from '@uengage.io/platform-sdk/events';
131
+
132
+ await events.publish(
133
+ 'order.status_changed',
134
+ { orderId, orderType, status, deliveryStatus, statusRank },
135
+ { tenantId },
136
+ );
137
+
138
+ await events.publishBatch([
139
+ { type: 'order.created', data: { orderId: '1' }, tenantId: '38112' },
140
+ { type: 'order.status_changed', data: { orderId: '1' }, tenantId: '38112' },
141
+ ]);
142
+ ```
143
+
144
+ `events` is a lazy singleton configured from the environment; use
145
+ `createEventsClient({ topicArn, source, snsClient })` for an isolated client.
146
+ It is deliberately **not** on the object returned by `createClient()` — that
147
+ would put the SNS dependency back on the main entry.
148
+
149
+ - The SDK builds the whole envelope: monotonic ULID `id`, `occurredAt`,
150
+ `version`, and `domain` (mapped from the `type` prefix — an explicit map, not
151
+ a pluralisation rule, since `menu`, `loyalty` and `usage` are not plural).
152
+ - `type` / `domain` / `source` are also set as SNS message attributes, which is
153
+ what consumer filter policies match on.
154
+ - Config is env-first: `PLATFORM_EVENTS_TOPIC_ARN`, optionally
155
+ `PLATFORM_EVENTS_SOURCE` (defaults to `SERVICE_NAME`). Region is read from
156
+ the topic ARN.
157
+ - **`publish()` throws** — `ConfigError`, `ValidationError`, or
158
+ `EventPublishError` (which carries `failedEventIds`). Fail-open is the
159
+ caller's decision because it differs by call site: a legacy order flow must
160
+ never block on the bus, a service reconciling state may want to retry. The
161
+ PHP SDK makes that choice for you; here you make it.
162
+ - `publishBatch()` validates and serializes every envelope before publishing
163
+ anything, then chunks by **both** SNS limits: 10 entries and 256 KB per
164
+ request. An envelope over the 256 KB message ceiling throws a
165
+ `ValidationError` naming the event and its size.
166
+
167
+ ## Realtime client (browser)
168
+
169
+ A separate, browser-safe subpath export — **zero runtime dependencies, no Node
170
+ built-ins, ~6 KB minified**. Same client for web and React Native.
171
+
172
+ ```ts
173
+ import { realtime } from '@uengage.io/platform-sdk/realtime';
174
+
175
+ const client = realtime.connect({
176
+ env: 'prod', // resolves endpoints; no URLs in app code
177
+ getToken: () => session.jwt(), // called on connect, resubscribe, and refresh
178
+ });
179
+
180
+ const sub = client.subscribe(`/orders/${orderId}`, {
181
+ onUpdate(event, meta) {
182
+ render(event.data);
183
+ }, // meta.origin: 'snapshot' | 'live'
184
+ onError(err) {
185
+ showOffline(err);
186
+ },
187
+ });
188
+
189
+ sub.unsubscribe();
190
+ ```
191
+
192
+ Channels are the only concept — the realtime layer knows nothing about orders;
193
+ `/orders/{id}` is a naming convention the service's namespace policy enforces.
194
+
195
+ The SDK owns the AppSync Events wire protocol, the keepalive watchdog and
196
+ dead-connection detection, reconnect with jittered backoff, resubscribing every
197
+ channel, token refresh via `getToken`, and ULID-based ordering/dedupe. One
198
+ socket multiplexes all subscriptions.
199
+
200
+ **No manual resync.** The stream cannot replay missed events, so on every
201
+ subscribe _and_ reconnect the SDK opens the subscription first, then fetches the
202
+ channel's last value from `GET /v1/realtime/latest`, and emits whichever is
203
+ newer through the same `onUpdate`. Subscribing first means nothing falls between
204
+ the snapshot and the stream. Pass `getSnapshot` per-subscribe to override where
205
+ that catch-up value comes from.
206
+
117
207
  ## Business client
118
208
 
119
209
  ```ts
package/dist/client.d.ts CHANGED
@@ -2,6 +2,7 @@ import { type AuditClient } from './audit/client';
2
2
  import { type BusinessClient } from './business/client';
3
3
  import { type ZonesClient } from './zones/client';
4
4
  import { type WalletClient } from './wallet/client';
5
+ import { type UpsellClient } from './upsell/client';
5
6
  import { auth as authNamespace } from './auth';
6
7
  /**
7
8
  * Caller-facing config for `createClient(...)`.
@@ -91,11 +92,23 @@ export interface ClientConfig {
91
92
  expiryBufferMs?: number;
92
93
  fetchFn?: typeof fetch;
93
94
  }
95
+ /**
96
+ * The namespaces that reach the platform HTTP API.
97
+ *
98
+ * `events` is deliberately NOT here. It publishes straight to SNS, so
99
+ * wiring it onto this client would make `@aws-sdk/client-sns` a hard
100
+ * dependency of the SDK's main entry — paid by every consumer that only
101
+ * reads businesses or zones, and by every frontend bundle that touches
102
+ * the root import. It lives at the `@uengage.io/platform-sdk/events`
103
+ * subpath instead, alongside `/realtime`, and is configured from the
104
+ * environment (`PLATFORM_EVENTS_TOPIC_ARN`) or `createEventsClient(...)`.
105
+ */
94
106
  export interface PlatformClient {
95
107
  business: BusinessClient;
96
108
  audit: AuditClient;
97
109
  zones: ZonesClient;
98
110
  wallet: WalletClient;
111
+ upsell: UpsellClient;
99
112
  auth: typeof authNamespace;
100
113
  /**
101
114
  * Resolve the current access token, minting via the configured auth
package/dist/client.js CHANGED
@@ -5,6 +5,7 @@ const client_1 = require("./audit/client");
5
5
  const client_2 = require("./business/client");
6
6
  const client_3 = require("./zones/client");
7
7
  const client_4 = require("./wallet/client");
8
+ const client_5 = require("./upsell/client");
8
9
  const auth_1 = require("./auth");
9
10
  const token_source_1 = require("./token-source");
10
11
  const errors_1 = require("./errors");
@@ -35,11 +36,13 @@ function buildClient(input) {
35
36
  });
36
37
  const zonesClient = (0, client_3.createZonesClient)({ baseUrl, fetchFn: input.fetchFn, auth });
37
38
  const walletClient = (0, client_4.createWalletClient)({ baseUrl, fetchFn: input.fetchFn, auth });
39
+ const upsellClient = (0, client_5.createUpsellClient)({ baseUrl, fetchFn: input.fetchFn, auth });
38
40
  return {
39
41
  business: businessClient,
40
42
  audit: auditClient,
41
43
  zones: zonesClient,
42
44
  wallet: walletClient,
45
+ upsell: upsellClient,
43
46
  auth: auth_1.auth,
44
47
  getAccessToken: async () => {
45
48
  if (!tokenSourceState) {
@@ -243,4 +246,4 @@ function warnIfBrowserSecret(config) {
243
246
  'Use `authToken` (a Bearer obtained via OAuth) or `sessionToken` instead.');
244
247
  }
245
248
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStIQSxvQ0FJQztBQW5JRCwyQ0FBcUU7QUFDckUsOENBQThFO0FBQzlFLDJDQUFxRTtBQUNyRSw0Q0FBd0U7QUFDeEUsaUNBQStDO0FBQy9DLGlEQUl3QjtBQUN4QixxQ0FBNEQ7QUE2RzVELE1BQU0sZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFFM0Q7Ozs7O0dBS0c7QUFDSCxTQUFnQixZQUFZLENBQUMsUUFBc0IsRUFBRTtJQUNuRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQW1CO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUM7SUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsTUFBTSxJQUFJLEdBQTZCLGdCQUFnQjtRQUNyRCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtRQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsTUFBTSxjQUFjLEdBQUcsSUFBQSw2QkFBb0IsRUFBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sV0FBVyxHQUFHLElBQUEsMEJBQWlCLEVBQUM7UUFDcEMsT0FBTztRQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixJQUFJO1FBQ0osUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUks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QjtZQUNFLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVztZQUNyQyxZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZO1lBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSTtZQUNyRCxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQy9CLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVE7U0FDaEMsRUFDRCxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQ2pFLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsTUFBb0I7SUFDL0MsTUFBTSxDQUFDLEdBQUcsVUFBaUQsQ0FBQztJQUM1RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDO0lBQzlGLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTztJQUN2QixJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsSUFBSSxDQUNWLG1GQUFtRjtZQUNqRiwrREFBK0Q7WUFDL0QsMEVBQTBFLENBQzdFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUF1ZGl0Q2xpZW50LCB0eXBlIEF1ZGl0Q2xpZW50IH0gZnJvbSAnLi9hdWRpdC9jbGllbnQnO1xuaW1wb3J0IHsgY3JlYXRlQnVzaW5lc3NDbGllbnQsIHR5cGUgQnVzaW5lc3NDbGllbnQgfSBmcm9tICcuL2J1c2luZXNzL2NsaWVudCc7XG5pbXBvcnQgeyBjcmVhdGVab25lc0NsaWVudCwgdHlwZSBab25lc0NsaWVudCB9IGZyb20gJy4vem9uZXMvY2xpZW50JztcbmltcG9ydCB7IGNyZWF0ZVdhbGxldENsaWVudCwgdHlwZSBXYWxsZXRDbGllbnQgfSBmcm9tICcuL3dhbGxldC9jbGllbnQnO1xuaW1wb3J0IHsgYXV0aCBhcyBhdXRoTmFtZXNwYWNlIH0gZnJvbSAnLi9hdXRoJztcbmltcG9ydCB7XG4gIGdldEFjY2Vzc1Rva2VuIGFzIHJlc29sdmVBY2Nlc3NUb2tlbixcbiAgbWFrZVRva2VuU291cmNlU3RhdGUsXG4gIHR5cGUgVG9rZW5Tb3VyY2VTdGF0ZSxcbn0gZnJvbSAnLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHsgQ29uZmlnRXJyb3IsIEF1dGhlbnRpY2F0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFBsYXRmb3JtQXV0aCB9IGZyb20gJy4vY29uZmlnJztcblxuLyoqXG4gKiBDYWxsZXItZmFjaW5nIGNvbmZpZyBmb3IgYGNyZWF0ZUNsaWVudCguLi4pYC5cbiAqXG4gKiBgY3JlYXRlQ2xpZW50KClgIChubyBhcmdzKSByZWFkcyBldmVyeXRoaW5nIGZyb20gdGhlIHN0YW5kYXJkXG4gKiBgVUVOR0FHRV8qYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMg4oCUIGNvbnZlbmllbnQgZm9yIExhbWJkYXMgdGhhdFxuICogYWxyZWFkeSBoYXZlIHRoZWlyIGNvbmZpZyBpbmplY3RlZCBieSB0aGUgZGVwbG95IHN0YWNrLiBBbnkgZmllbGRcbiAqIHBhc3NlZCBleHBsaWNpdGx5IG92ZXJyaWRlcyB0aGUgbWF0Y2hpbmcgZW52IGRlZmF1bHQgZm9yIHRoYXQgb25lXG4gKiBjYWxsIG9ubHkgKG5vIHNoYXJlZCBtdXRhYmxlIHN0YXRlLCBubyBzaW5nbGV0b24pLlxuICpcbiAqIEF1dGgtbW9kZSBmaWVsZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gUGljayBvbmU6XG4gKiAgIC0gYHNlcnZpY2VJZGAgKyBgc2VydmljZVNlY3JldGAgIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMuXG4gKiAgIC0gYGF1dGhUb2tlbmAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBCZWFyZXIgdG9rZW4sIG9yIGFzeW5jXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBvbmUuXG4gKiAgIC0gYHNlc3Npb246IHtpZCwgdG9rZW59YCAgICAgICAgIGxlZ2FjeSB1RW5nYWdlIChpZCwgYXBpVG9rZW4pIC9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlkLCBhZGRvX2NvbnRhY3RzX21hcHBpbmcudG9rZW4pXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIuIFRoZSBTREsgcHJvYmVzIHRoZSBidXNpbmVzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJmYWNlICh1c2VycykgZmlyc3QsIGZhbGxzIGJhY2tcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGN1c3RvbWVyIHN1cmZhY2VcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZG9fY29udGFjdHNfbWFwcGluZykgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c2luZXNzIHByb2JlIHJldHVybnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGludmFsaWRfZ3JhbnRgLCBhbmQgY2FjaGVzIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgSldULlxuICpcbiAqIFBhc3NpbmcgbW9yZSB0aGFuIG9uZSBleHBsaWNpdGx5IGlzIGEgYENvbmZpZ0Vycm9yYC4gUGFzc2luZyBhbnkgb25lXG4gKiBvZiB0aGVtIHN1cHByZXNzZXMgZXZlcnkgZW52LWRlcml2ZWQgYXV0aCBkZWZhdWx0LCBzbyBhIGNhbGxlcidzXG4gKiBleHBsaWNpdCBvdmVycmlkZSBpcyBuZXZlciBzaWxlbnRseSBtZXJnZWQgd2l0aCBlbnYgY3JlZGVudGlhbHMgb2ZcbiAqIGEgZGlmZmVyZW50IG1vZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50Q29uZmlnIHtcbiAgYmFzZVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIEF1dGggc3VyZmFjZSBiYXNlIHVzZWQgdG8gYm9vdHN0cmFwIHRoZSBmaXJzdCBjbGllbnRfY3JlZGVudGlhbHNcbiAgICogbWludC4gRGVmYXVsdHMgdG8gYCR7YmFzZVVybH0vYXV0aC9idXNpbmVzc2AuXG4gICAqL1xuICBhdXRoQmFzZVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIEN1c3RvbWVyIGF1dGggc3VyZmFjZSBiYXNlIHVzZWQgYnkgYHNlc3Npb25gIGV4Y2hhbmdlcy4gRGVmYXVsdHMgdG9cbiAgICogYCR7YmFzZVVybH0vYXV0aC9jdXN0b21lcmAuXG4gICAqL1xuICBjdXN0b21lckF1dGhCYXNlVXJsPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgOKUgCBBdXRoIG1vZGVzIChtdXR1YWxseSBleGNsdXNpdmUpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogT0F1dGgyIGBjbGllbnRfY3JlZGVudGlhbHNgIGNsaWVudElkLiBQYWlyIHdpdGggYHNlcnZpY2VTZWNyZXRgLiAqL1xuICBzZXJ2aWNlSWQ/OiBzdHJpbmc7XG4gIC8qKiBPQXV0aDIgYGNsaWVudF9jcmVkZW50aWFsc2AgY2xpZW50U2VjcmV0LiBQYWlyIHdpdGggYHNlcnZpY2VJZGAuICovXG4gIHNlcnZpY2VTZWNyZXQ/OiBzdHJpbmc7XG4gIC8qKiBTcGFjZS1zZXBhcmF0ZWQgc2NvcGUgbGlzdCB0byByZXF1ZXN0IHdoZW4gbWludGluZyB2aWEgY2xpZW50X2NyZWRlbnRpYWxzLiAqL1xuICBzY29wZT86IHN0cmluZztcbiAgLyoqIFN0YXRpYyBCZWFyZXIgSldULCBvciBhc3luYyBjYWxsYmFjayB0aGF0IHJldHVybnMgb25lLiAqL1xuICBhdXRoVG9rZW4/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTtcbiAgLyoqXG4gICAqIExlZ2FjeSB1RW5nYWdlIChpZCwgdG9rZW4pIHBhaXIuIGBpZGAgaXMgYHVzZXJzLnVzZXJJZGAgZm9yIHN0YWZmXG4gICAqIHVzZXJzIChtYXRjaGVkIHZpYSB0aGUgYnVzaW5lc3Mgc3VyZmFjZSkgb3JcbiAgICogYGFkZG9fY29udGFjdHNfbWFwcGluZy5pZGAvYGNvbnRhY3RJZGAgZm9yIGN1c3RvbWVycyAobWF0Y2hlZCB2aWFcbiAgICogdGhlIGN1c3RvbWVyIHN1cmZhY2UpLiBUaGUgU0RLIHByb2JlcyB0aGUgYnVzaW5lc3Mgc3VyZmFjZSBmaXJzdFxuICAgKiBhbmQgZmFsbHMgYmFjayB0byBjdXN0b21lciBvbiBgaW52YWxpZF9ncmFudGAuXG4gICAqL1xuICBzZXNzaW9uPzogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyB0b2tlbjogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBgKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pYCBwYWlyIGZyb20gYSBmaW5pc2hlZCBsb2dpbiBmbG93XG4gICAqIChgYXV0aC5sb2dpbldpdGhQYXNzd29yZCguLi4pYCwgYGF1dGgudmVyaWZ5T3RwKC4uLilgLCBldGMpLiBUaGVcbiAgICogU0RLIHVzZXMgdGhlIGFjY2VzcyB0b2tlbiB1bnRpbCBpdCBleHBpcmVzLCB0aGVuIHJvdGF0ZXMgdmlhXG4gICAqIGBhdXRoLnJlZnJlc2goLi4uKWAgdHJhbnNwYXJlbnRseS4gYG9uUm90YXRlYCBmaXJlcyBhZnRlciBldmVyeVxuICAgKiByb3RhdGlvbiBzbyBjYWxsZXJzIGNhbiBwZXJzaXN0IHRoZSBuZXcgcGFpci5cbiAgICovXG4gIHRva2Vucz86IHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgIC8qKiBBY2Nlc3MgdG9rZW4gVFRMIChzZWNvbmRzKSwgYXMgcmV0dXJuZWQgYnkgdGhlIGF1dGggc3VyZmFjZS4gKi9cbiAgICBleHBpcmVzSW46IG51bWJlcjtcbiAgICAvKiogT0F1dGggY2xpZW50IGlkIHVzZWQgZHVyaW5nIHRoZSBvcmlnaW5hbCBsb2dpbiAocmVxdWlyZWQgYnkgdGhlIHJlZnJlc2ggaGFuZGxlcikuICovXG4gICAgY2xpZW50SWQ6IHN0cmluZztcbiAgICBvblJvdGF0ZT86IChwYWlyOiB7XG4gICAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICB9KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgfTtcblxuICAvKipcbiAgICogU2VydmljZSBpZGVudGlmaWVyIHRoZSBhdWRpdCBjbGllbnQgc2hvdWxkIHN0YW1wIGludG8gYGFjdG9yLnZpYWBcbiAgICogb24gZW1pdHRlZCBldmVudHMuIERlZmF1bHRzIHRvIGBzZXJ2aWNlSWRgIHdoZW4gc2V0OyBvdGhlcndpc2VcbiAgICogYXVkaXQgYHJlY29yZCgpYCBjYWxscyBsb2cgYW4gZXJyb3IgYW5kIGRyb3AgdGhlIGV2ZW50LlxuICAgKi9cbiAgYWN0b3JWaWE/OiBzdHJpbmc7XG4gIGV4cGlyeUJ1ZmZlck1zPzogbnVtYmVyO1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQ2xpZW50IHtcbiAgYnVzaW5lc3M6IEJ1c2luZXNzQ2xpZW50O1xuICBhdWRpdDogQXVkaXRDbGllbnQ7XG4gIHpvbmVzOiBab25lc0NsaWVudDtcbiAgd2FsbGV0OiBXYWxsZXRDbGllbnQ7XG4gIGF1dGg6IHR5cGVvZiBhdXRoTmFtZXNwYWNlO1xuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgY3VycmVudCBhY2Nlc3MgdG9rZW4sIG1pbnRpbmcgdmlhIHRoZSBjb25maWd1cmVkIGF1dGhcbiAgICogbW9kZSBpZiB0aGUgY2FjaGUgaXMgY29sZC4gVXNlZnVsIGZvciBgYXV0aC52ZXJpZnlBY2Nlc3NUb2tlbiguLi4pYFxuICAgKiByb3VuZC10cmlwcyBhbmQgZm9yIGNhbGxlcnMgdGhhdCB3YW50IHRvIGxvZyAvIGZvcndhcmQgdGhlIGJlYXJlclxuICAgKiB0byBhIGRvd25zdHJlYW0gc2VydmljZS5cbiAgICpcbiAgICogVGhyb3dzIGBDb25maWdFcnJvcmAgd2hlbiB0aGUgY2xpZW50IHdhcyBidWlsdCB3aXRoIG5vIGF1dGggbW9kZS5cbiAgICovXG4gIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuY29uc3QgREVGQVVMVF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvJztcblxuLyoqXG4gKiBCdWlsZCBhIGZyZXNoLCBpc29sYXRlZCBjbGllbnQuIFdpdGggbm8gYXJncywgcmVhZHMgYFVFTkdBR0VfKmBcbiAqIGVudiB2YXJzOyBleHBsaWNpdCBmaWVsZHMgb3ZlcnJpZGUgcGVyIGNhbGwuIEVhY2ggY2FsbCBnZXRzIGl0cyBvd25cbiAqIFRva2VuU291cmNlIHN0YXRlIOKAlCBjb25jdXJyZW50IGBjcmVhdGVDbGllbnQoLi4uKWAgdXNlIGRvZXMgbm90XG4gKiBzdGFtcGVkZSB0aGUgY2FjaGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGllbnQoaW5wdXQ6IENsaWVudENvbmZpZyA9IHt9KTogUGxhdGZvcm1DbGllbnQge1xuICBjb25zdCBtZXJnZWQgPSBtZXJnZVdpdGhFbnYoaW5wdXQpO1xuICB3YXJuSWZCcm93c2VyU2VjcmV0KG1lcmdlZCk7XG4gIHJldHVybiBidWlsZENsaWVudChtZXJnZWQpO1xufVxuXG5mdW5jdGlvbiBidWlsZENsaWVudChpbnB1dDogQ2xpZW50Q29uZmlnKTogUGxhdGZvcm1DbGllbnQge1xuICBjb25zdCBiYXNlVXJsID0gaW5wdXQuYmFzZVVybCA/PyBERUZBVUxUX0JBU0VfVVJMO1xuICBjb25zdCB0b2tlblNvdXJjZVN0YXRlID0gcmVzb2x2ZVRva2VuU291cmNlKGlucHV0LCBiYXNlVXJsKTtcbiAgY29uc3QgYXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkID0gdG9rZW5Tb3VyY2VTdGF0ZVxuICAgID8geyB0eXBlOiAndG9rZW4tc291cmNlJywgc3RhdGU6IHRva2VuU291cmNlU3RhdGUgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJ1c2luZXNzQ2xpZW50ID0gY3JlYXRlQnVzaW5lc3NDbGllbnQoeyBiYXNlVXJsLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuLCBhdXRoIH0pO1xuICBjb25zdCBhdWRpdENsaWVudCA9IGNyZWF0ZUF1ZGl0Q2xpZW50KHtcbiAgICBiYXNlVXJsLFxuICAgIGZldGNoRm46IGlucHV0LmZldGNoRm4sXG4gICAgYXV0aCxcbiAgICBhY3RvclZpYTogaW5wdXQuYWN0b3JWaWEgPz8gaW5wdXQuc2VydmljZUlkLFxuICB9KTtcbiAgY29uc3Qgem9uZXNDbGllbnQgPSBjcmVhdGVab25lc0NsaWVudCh7IGJhc2VVcmwsIGZldGNoRm46IGlucHV0LmZldGNoRm4sIGF1dGggfSk7XG4gIGNvbnN0IHdhbGxldENsaWVudCA9IGNyZWF0ZVdhbGxldENsaWVudCh7IGJhc2VVcmwsIGZldGNoRm46IGlucHV0LmZldGNoRm4sIGF1dGggfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBidXNpbmVzczogYnVzaW5lc3NDbGllbnQsXG4gICAgYXVkaXQ6IGF1ZGl0Q2xpZW50LFxuICAgIHpvbmVzOiB6b25lc0NsaWVudCxcbiAgICB3YWxsZXQ6IHdhbGxldENsaWVudCxcbiAgICBhdXRoOiBhdXRoTmFtZXNwYWNlLFxuICAgIGdldEFjY2Vzc1Rva2VuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXRva2VuU291cmNlU3RhdGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgICAgICdnZXRBY2Nlc3NUb2tlbjogbm8gYXV0aCBtb2RlIGNvbmZpZ3VyZWQuIFBhc3Mge3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0gfCB7YXV0aFRva2VufSB8IHtzZXNzaW9ufS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmVBY2Nlc3NUb2tlbih0b2tlblNvdXJjZVN0YXRlKTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBBVVRIX01PREVfRklFTERTID0gW1xuICAnc2VydmljZUlkJyxcbiAgJ3NlcnZpY2VTZWNyZXQnLFxuICAnc2NvcGUnLFxuICAnYXV0aFRva2VuJyxcbiAgJ3Nlc3Npb24nLFxuICAndG9rZW5zJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogTWVyZ2UgZW52LWRlcml2ZWQgZGVmYXVsdHMgd2l0aCB0aGUgY2FsbGVyJ3MgZXhwbGljaXQgaW5wdXQuIEFueVxuICogZXhwbGljaXQgYXV0aC1tb2RlIGZpZWxkIHN1cHByZXNzZXMgKmFsbCogZW52LWRlcml2ZWQgYXV0aCBkZWZhdWx0cyxcbiAqIHNvIGFuIGV4cGxpY2l0IGB7YXV0aFRva2VufWAgb3ZlcnJpZGUgZG9lc24ndCBhY2NpZGVudGFsbHkgaW5oZXJpdFxuICogYHNlcnZpY2VJZGAvYHNlcnZpY2VTZWNyZXRgIGZyb20gZW52LiBOb24tYXV0aCBmaWVsZHMgZmFsbCB0aHJvdWdoXG4gKiBub3JtYWxseSAoY2FsbGVyIGBiYXNlVXJsYCBvdmVycmlkZXMgZW52IGJhc2VVcmw7IGFic2VudCBpbnB1dCBrZWVwc1xuICogZW52IGJhc2VVcmwpLlxuICovXG5mdW5jdGlvbiBtZXJnZVdpdGhFbnYoaW5wdXQ6IENsaWVudENvbmZpZyk6IENsaWVudENvbmZpZyB7XG4gIGNvbnN0IGVudiA9IHJlYWRFbnZEZWZhdWx0cygpO1xuICBjb25zdCBpbnB1dEhhc0F1dGggPSBpbnB1dEhhc0F1dGhNb2RlKGlucHV0KTtcbiAgY29uc3QgZW52Rm9yTWVyZ2UgPSBpbnB1dEhhc0F1dGggPyB3aXRob3V0QXV0aEZpZWxkcyhlbnYpIDogZW52O1xuXG4gIGNvbnN0IG1lcmdlZDogQ2xpZW50Q29uZmlnID0ge1xuICAgIGJhc2VVcmw6IGlucHV0LmJhc2VVcmwgPz8gZW52Rm9yTWVyZ2UuYmFzZVVybCxcbiAgICBhdXRoQmFzZVVybDogaW5wdXQuYXV0aEJhc2VVcmwgPz8gZW52Rm9yTWVyZ2UuYXV0aEJhc2VVcmwsXG4gICAgY3VzdG9tZXJBdXRoQmFzZVVybDogaW5wdXQuY3VzdG9tZXJBdXRoQmFzZVVybCA/PyBlbnZGb3JNZXJnZS5jdXN0b21lckF1dGhCYXNlVXJsLFxuICAgIHNlcnZpY2VJZDogaW5wdXQuc2VydmljZUlkID8/IGVudkZvck1lcmdlLnNlcnZpY2VJZCxcbiAgICBzZXJ2aWNlU2VjcmV0OiBpbnB1dC5zZXJ2aWNlU2VjcmV0ID8/IGVudkZvck1lcmdlLnNlcnZpY2VTZWNyZXQsXG4gICAgc2NvcGU6IGlucHV0LnNjb3BlID8/IGVudkZvck1lcmdlLnNjb3BlLFxuICAgIGF1dGhUb2tlbjogaW5wdXQuYXV0aFRva2VuID8/IGVudkZvck1lcmdlLmF1dGhUb2tlbixcbiAgICBzZXNzaW9uOiBpbnB1dC5zZXNzaW9uID8/IGVudkZvck1lcmdlLnNlc3Npb24sXG4gICAgdG9rZW5zOiBpbnB1dC50b2tlbnMsXG4gICAgYWN0b3JWaWE6IGlucHV0LmFjdG9yVmlhID8/IGVudkZvck1lcmdlLmFjdG9yVmlhLFxuICAgIGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcyA/PyBlbnZGb3JNZXJnZS5leHBpcnlCdWZmZXJNcyxcbiAgICBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuLFxuICB9O1xuICBhc3NlcnRFeGFjdGx5T25lQXV0aE1vZGUobWVyZ2VkKTtcbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gcmVhZEVudkRlZmF1bHRzKCk6IENsaWVudENvbmZpZyB7XG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7fTtcbiAgY29uc3QgZSA9IChwcm9jZXNzIGFzIHsgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB9KS5lbnYgPz8ge307XG4gIGNvbnN0IGV4cGlyeSA9IGUuVUVOR0FHRV9FWFBJUllfQlVGRkVSX01TID8gTnVtYmVyKGUuVUVOR0FHRV9FWFBJUllfQlVGRkVSX01TKSA6IHVuZGVmaW5lZDtcbiAgLy8gVUVOR0FHRV9TRVNTSU9OX0lEICsgVUVOR0FHRV9TRVNTSU9OX1RPS0VOIG11c3QgYmUgcGFpcmVkOyBlaXRoZXIgYWxvbmUgaXMgaWdub3JlZFxuICAvLyBzbyBhbiBlbnYtb25seSBzZXR1cCBuZXZlciBwcm9kdWNlcyBhIGhhbGYtY29uZmlndXJlZCBzZXNzaW9uLlxuICBjb25zdCBzZXNzaW9uID1cbiAgICBlLlVFTkdBR0VfU0VTU0lPTl9JRCAmJiBlLlVFTkdBR0VfU0VTU0lPTl9UT0tFTlxuICAgICAgPyB7IGlkOiBlLlVFTkdBR0VfU0VTU0lPTl9JRCwgdG9rZW46IGUuVUVOR0FHRV9TRVNTSU9OX1RPS0VOIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IGUuVUVOR0FHRV9CQVNFX1VSTCxcbiAgICBhdXRoQmFzZVVybDogZS5VRU5HQUdFX0FVVEhfQkFTRV9VUkwsXG4gICAgY3VzdG9tZXJBdXRoQmFzZVVybDogZS5VRU5HQUdFX0NVU1RPTUVSX0FVVEhfQkFTRV9VUkwsXG4gICAgc2VydmljZUlkOiBlLlVFTkdBR0VfU0VSVklDRV9JRCxcbiAgICBzZXJ2aWNlU2VjcmV0OiBlLlVFTkdBR0VfU0VSVklDRV9TRUNSRVQsXG4gICAgc2NvcGU6IGUuVUVOR0FHRV9TQ09QRSxcbiAgICBhdXRoVG9rZW46IGUuVUVOR0FHRV9BVVRIX1RPS0VOLFxuICAgIHNlc3Npb24sXG4gICAgYWN0b3JWaWE6IGUuVUVOR0FHRV9BQ1RPUl9WSUEsXG4gICAgZXhwaXJ5QnVmZmVyTXM6IE51bWJlci5pc0Zpbml0ZShleHBpcnkpID8gKGV4cGlyeSBhcyBudW1iZXIpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnB1dEhhc0F1dGhNb2RlKGlucHV0OiBDbGllbnRDb25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFVVEhfTU9ERV9GSUVMRFMuc29tZSgoZikgPT4gaW5wdXRbZl0gIT09IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdpdGhvdXRBdXRoRmllbGRzKGM6IENsaWVudENvbmZpZyk6IENsaWVudENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uYyxcbiAgICBzZXJ2aWNlSWQ6IHVuZGVmaW5lZCxcbiAgICBzZXJ2aWNlU2VjcmV0OiB1bmRlZmluZWQsXG4gICAgc2NvcGU6IHVuZGVmaW5lZCxcbiAgICBhdXRoVG9rZW46IHVuZGVmaW5lZCxcbiAgICBzZXNzaW9uOiB1bmRlZmluZWQsXG4gICAgdG9rZW5zOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydEV4YWN0bHlPbmVBdXRoTW9kZShpbnB1dDogQ2xpZW50Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IG1vZGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoaW5wdXQuYXV0aFRva2VuICE9PSB1bmRlZmluZWQpIG1vZGVzLnB1c2goJ2F1dGhUb2tlbicpO1xuICBpZiAoaW5wdXQuc2Vzc2lvbiAhPT0gdW5kZWZpbmVkKSBtb2Rlcy5wdXNoKCdzZXNzaW9uJyk7XG4gIGlmIChpbnB1dC50b2tlbnMgIT09IHVuZGVmaW5lZCkgbW9kZXMucHVzaCgndG9rZW5zJyk7XG4gIGlmIChpbnB1dC5zZXJ2aWNlSWQgIT09IHVuZGVmaW5lZCB8fCBpbnB1dC5zZXJ2aWNlU2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBtb2Rlcy5wdXNoKCdzZXJ2aWNlSWQrc2VydmljZVNlY3JldCcpO1xuICB9XG4gIGlmIChtb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgYGNyZWF0ZUNsaWVudDogcGljayBleGFjdGx5IG9uZSBhdXRoIG1vZGUuIEdvdCAke21vZGVzLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgJ1VzZSBvbmUgb2Yge3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0gfCB7YXV0aFRva2VufSB8IHtzZXNzaW9ufSB8IHt0b2tlbnN9LicsXG4gICAgKTtcbiAgfVxuICAvLyBaZXJvIG1vZGVzIGlzIGFsbG93ZWQg4oCUIGNhbGxlciBtYXkgd2FudCBhIGZ1bGx5LWFub255bW91cyBjbGllbnQgZm9yXG4gIC8vIHB1YmxpYyBlbmRwb2ludHMuIFRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgbmVlZHMgYXV0aCB3aWxsIHN1cmZhY2UgYVxuICAvLyBDb25maWdFcnJvciBkb3duc3RyZWFtLlxufVxuXG4vKipcbiAqIFByb2JlIHRoZSBidXNpbmVzcyBgbGVnYWN5X3Nlc3Npb25gIGdyYW50IGZpcnN0LCBmYWxsIGJhY2sgdG8gY3VzdG9tZXJcbiAqIG9uIGBpbnZhbGlkX2dyYW50YC4gRWl0aGVyIHN1cmZhY2UgbWludHMgYSBKV1Qg4oCUIHRoZSBTREsgZG9lc24ndCBjYXJlXG4gKiB3aGljaCBzaWRlIGFuc3dlcmVkLlxuICpcbiAqIFdoeSBwcm9iZSBib3RoOiBgaWRgIChudW1lcmljKSBvdmVybGFwcyB1c2Vycy51c2VySWQgdnNcbiAqIGFkZG9fY29udGFjdHNfbWFwcGluZy5pZC9jb250YWN0SWQuIENhbGxlcnMgdXN1YWxseSBkb24ndCBrbm93IHdoaWNoXG4gKiB0YWJsZSB0aGVpciAoaWQsIHRva2VuKSBwYWlyIGJlbG9uZ3MgdG8uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlTGVnYWN5U2Vzc2lvbihcbiAgc2Vzc2lvbjogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyB0b2tlbjogc3RyaW5nIH0sXG4gIGF1dGhCYXNlVXJsOiBzdHJpbmcsXG4gIGN1c3RvbWVyQXV0aEJhc2VVcmw6IHN0cmluZyxcbiAgZmV0Y2hGbjogdHlwZW9mIGZldGNoLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGdyYW50X3R5cGU6ICdsZWdhY3lfc2Vzc2lvbicsXG4gICAgaWQ6IFN0cmluZyhzZXNzaW9uLmlkKSxcbiAgICB0b2tlbjogc2Vzc2lvbi50b2tlbixcbiAgfSkudG9TdHJpbmcoKTtcblxuICBjb25zdCBidXNpbmVzc1JlcyA9IGF3YWl0IGZldGNoRm4oYCR7YXV0aEJhc2VVcmx9L29hdXRoL3Rva2VuYCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgYm9keSxcbiAgfSk7XG4gIGlmIChidXNpbmVzc1Jlcy5vaykge1xuICAgIHJldHVybiBwYXJzZUFjY2Vzc1Rva2VuKGJ1c2luZXNzUmVzKTtcbiAgfVxuICBpZiAoYXdhaXQgaXNJbnZhbGlkR3JhbnQoYnVzaW5lc3NSZXMpKSB7XG4gICAgY29uc3QgY3VzdG9tZXJSZXMgPSBhd2FpdCBmZXRjaEZuKGAke2N1c3RvbWVyQXV0aEJhc2VVcmx9L29hdXRoL3Rva2VuYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICBpZiAoY3VzdG9tZXJSZXMub2spIHtcbiAgICAgIHJldHVybiBwYXJzZUFjY2Vzc1Rva2VuKGN1c3RvbWVyUmVzKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGN1c3RvbWVyUmVzLnRleHQoKS5jYXRjaCgoKSA9PiAnJyk7XG4gICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoXG4gICAgICBgbGVnYWN5X3Nlc3Npb24gZXhjaGFuZ2UgZmFpbGVkIG9uIGJvdGggc3VyZmFjZXM6IGN1c3RvbWVyIEhUVFAgJHtjdXN0b21lclJlcy5zdGF0dXN9ICR7dGV4dH1gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgdGV4dCA9IGF3YWl0IGJ1c2luZXNzUmVzLnRleHQoKS5jYXRjaCgoKSA9PiAnJyk7XG4gIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKFxuICAgIGBsZWdhY3lfc2Vzc2lvbiBleGNoYW5nZSBmYWlsZWQ6IEhUVFAgJHtidXNpbmVzc1Jlcy5zdGF0dXN9ICR7dGV4dH1gLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0ludmFsaWRHcmFudChyZXM6IFJlc3BvbnNlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChyZXMuc3RhdHVzICE9PSA0MDApIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2xvbmVkID0gcmVzLmNsb25lKCk7XG4gIGNvbnN0IGpzb24gPSAoYXdhaXQgY2xvbmVkLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMgeyBlcnJvcj86IHN0cmluZyB9O1xuICByZXR1cm4ganNvbi5lcnJvciA9PT0gJ2ludmFsaWRfZ3JhbnQnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUFjY2Vzc1Rva2VuKHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBqc29uID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHsgYWNjZXNzX3Rva2VuPzogc3RyaW5nIH07XG4gIGlmICghanNvbi5hY2Nlc3NfdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoJ2xlZ2FjeV9zZXNzaW9uIGV4Y2hhbmdlIHJlc3BvbnNlIG1pc3NpbmcgYWNjZXNzX3Rva2VuJyk7XG4gIH1cbiAgcmV0dXJuIGpzb24uYWNjZXNzX3Rva2VuO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVG9rZW5Tb3VyY2UoaW5wdXQ6IENsaWVudENvbmZpZywgYmFzZVVybDogc3RyaW5nKTogVG9rZW5Tb3VyY2VTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGF1dGhCYXNlVXJsID0gaW5wdXQuYXV0aEJhc2VVcmwgPz8gYCR7YmFzZVVybH0vYXV0aC9idXNpbmVzc2A7XG4gIGNvbnN0IGZldGNoRm4gPSBpbnB1dC5mZXRjaEZuID8/IChnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCk7XG5cbiAgaWYgKGlucHV0LmF1dGhUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dC5hdXRoVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHsga2luZDogJ3N0YXRpYy1zdHJpbmcnLCB0b2tlbjogaW5wdXQuYXV0aFRva2VuIH0sXG4gICAgICAgIHsgZXhwaXJ5QnVmZmVyTXM6IGlucHV0LmV4cGlyeUJ1ZmZlck1zLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuIH0sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICB7IGtpbmQ6ICdjYWxsYmFjaycsIGdldFRva2VuOiBpbnB1dC5hdXRoVG9rZW4gfSxcbiAgICAgIHsgZXhwaXJ5QnVmZmVyTXM6IGlucHV0LmV4cGlyeUJ1ZmZlck1zLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuIH0sXG4gICAgKTtcbiAgfVxuICBpZiAoaW5wdXQuc2Vzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY3VzdG9tZXJBdXRoQmFzZVVybCA9IGlucHV0LmN1c3RvbWVyQXV0aEJhc2VVcmwgPz8gYCR7YmFzZVVybH0vYXV0aC9jdXN0b21lcmA7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGlucHV0LnNlc3Npb247XG4gICAgcmV0dXJuIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICAgICAge1xuICAgICAgICBraW5kOiAnY2FsbGJhY2snLFxuICAgICAgICBnZXRUb2tlbjogKCkgPT4gZXhjaGFuZ2VMZWdhY3lTZXNzaW9uKHNlc3Npb24sIGF1dGhCYXNlVXJsLCBjdXN0b21lckF1dGhCYXNlVXJsLCBmZXRjaEZuKSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0LnNlcnZpY2VJZCAmJiBpbnB1dC5zZXJ2aWNlU2VjcmV0KSB7XG4gICAgcmV0dXJuIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICAgICAge1xuICAgICAgICBraW5kOiAnc2VydmljZS1jcmVkZW50aWFscycsXG4gICAgICAgIGNsaWVudElkOiBpbnB1dC5zZXJ2aWNlSWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogaW5wdXQuc2VydmljZVNlY3JldCxcbiAgICAgICAgYXV0aEJhc2VVcmwsXG4gICAgICAgIHNjb3BlOiBpbnB1dC5zY29wZSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0LnRva2Vucykge1xuICAgIHJldHVybiBtYWtlVG9rZW5Tb3VyY2VTdGF0ZShcbiAgICAgIHtcbiAgICAgICAga2luZDogJ2FjY2Vzcy1yZWZyZXNoLXBhaXInLFxuICAgICAgICBhY2Nlc3NUb2tlbjogaW5wdXQudG9rZW5zLmFjY2Vzc1Rva2VuLFxuICAgICAgICByZWZyZXNoVG9rZW46IGlucHV0LnRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIGlucHV0LnRva2Vucy5leHBpcmVzSW4gKiAxMDAwLFxuICAgICAgICBjbGllbnRJZDogaW5wdXQudG9rZW5zLmNsaWVudElkLFxuICAgICAgICBvblJvdGF0ZTogaW5wdXQudG9rZW5zLm9uUm90YXRlLFxuICAgICAgfSxcbiAgICAgIHsgZXhwaXJ5QnVmZmVyTXM6IGlucHV0LmV4cGlyeUJ1ZmZlck1zLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuIH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZCcm93c2VyU2VjcmV0KGNvbmZpZzogQ2xpZW50Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIHsgd2luZG93PzogeyBkb2N1bWVudD86IHVua25vd24gfSB9O1xuICBjb25zdCBpbkJyb3dzZXIgPSB0eXBlb2YgZy53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnLndpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG4gIGlmICghaW5Ccm93c2VyKSByZXR1cm47XG4gIGlmIChjb25maWcuc2VydmljZVNlY3JldCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdbdWVuZ2FnZS1wbGF0Zm9ybS1zZGtdIHNlcnZpY2VTZWNyZXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzLiAnICtcbiAgICAgICAgJ1NlcnZpY2UgY3JlZGVudGlhbHMgaW4gYnJvd3NlciBidW5kbGVzIGFyZSBwdWJsaWNseSB2aXNpYmxlLiAnICtcbiAgICAgICAgJ1VzZSBgYXV0aFRva2VuYCAoYSBCZWFyZXIgb2J0YWluZWQgdmlhIE9BdXRoKSBvciBgc2Vzc2lvblRva2VuYCBpbnN0ZWFkLicsXG4gICAgKTtcbiAgfVxufVxuIl19
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRJQSxvQ0FJQztBQWhKRCwyQ0FBcUU7QUFDckUsOENBQThFO0FBQzlFLDJDQUFxRTtBQUNyRSw0Q0FBd0U7QUFDeEUsNENBQXdFO0FBQ3hFLGlDQUErQztBQUMvQyxpREFJd0I7QUFDeEIscUNBQTREO0FBeUg1RCxNQUFNLGdCQUFnQixHQUFHLGlDQUFpQyxDQUFDO0FBRTNEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLFFBQXNCLEVBQUU7SUFDbkQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFtQjtJQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDO0lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELE1BQU0sSUFBSSxHQUE2QixnQkFBZ0I7UUFDckQsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7UUFDbkQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVkLE1BQU0sY0FBYyxHQUFHLElBQUEsNkJBQW9CLEVBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RixNQUFNLFdBQVcsR0FBRyxJQUFBLDBCQUFpQixFQUFDO1FBQ3BDLE9BQU87UUFDUCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsSUFBSTtRQUNKLFFBQVEsRUFBRSxLQUFLLENB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QXVkaXRDbGllbnQgfSBmcm9tICcuL2F1ZGl0L2NsaWVudCc7XG5pbXBvcnQgeyBjcmVhdGVCdXNpbmVzc0NsaWVudCwgdHlwZSBCdXNpbmVzc0NsaWVudCB9IGZyb20gJy4vYnVzaW5lc3MvY2xpZW50JztcbmltcG9ydCB7IGNyZWF0ZVpvbmVzQ2xpZW50LCB0eXBlIFpvbmVzQ2xpZW50IH0gZnJvbSAnLi96b25lcy9jbGllbnQnO1xuaW1wb3J0IHsgY3JlYXRlV2FsbGV0Q2xpZW50LCB0eXBlIFdhbGxldENsaWVudCB9IGZyb20gJy4vd2FsbGV0L2NsaWVudCc7XG5pbXBvcnQgeyBjcmVhdGVVcHNlbGxDbGllbnQsIHR5cGUgVXBzZWxsQ2xpZW50IH0gZnJvbSAnLi91cHNlbGwvY2xpZW50JztcbmltcG9ydCB7IGF1dGggYXMgYXV0aE5hbWVzcGFjZSB9IGZyb20gJy4vYXV0aCc7XG5pbXBvcnQge1xuICBnZXRBY2Nlc3NUb2tlbiBhcyByZXNvbHZlQWNjZXNzVG9rZW4sXG4gIG1ha2VUb2tlblNvdXJjZVN0YXRlLFxuICB0eXBlIFRva2VuU291cmNlU3RhdGUsXG59IGZyb20gJy4vdG9rZW4tc291cmNlJztcbmltcG9ydCB7IENvbmZpZ0Vycm9yLCBBdXRoZW50aWNhdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUF1dGggfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICogQ2FsbGVyLWZhY2luZyBjb25maWcgZm9yIGBjcmVhdGVDbGllbnQoLi4uKWAuXG4gKlxuICogYGNyZWF0ZUNsaWVudCgpYCAobm8gYXJncykgcmVhZHMgZXZlcnl0aGluZyBmcm9tIHRoZSBzdGFuZGFyZFxuICogYFVFTkdBR0VfKmAgZW52aXJvbm1lbnQgdmFyaWFibGVzIOKAlCBjb252ZW5pZW50IGZvciBMYW1iZGFzIHRoYXRcbiAqIGFscmVhZHkgaGF2ZSB0aGVpciBjb25maWcgaW5qZWN0ZWQgYnkgdGhlIGRlcGxveSBzdGFjay4gQW55IGZpZWxkXG4gKiBwYXNzZWQgZXhwbGljaXRseSBvdmVycmlkZXMgdGhlIG1hdGNoaW5nIGVudiBkZWZhdWx0IGZvciB0aGF0IG9uZVxuICogY2FsbCBvbmx5IChubyBzaGFyZWQgbXV0YWJsZSBzdGF0ZSwgbm8gc2luZ2xldG9uKS5cbiAqXG4gKiBBdXRoLW1vZGUgZmllbGRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIFBpY2sgb25lOlxuICogICAtIGBzZXJ2aWNlSWRgICsgYHNlcnZpY2VTZWNyZXRgICBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzLlxuICogICAtIGBhdXRoVG9rZW5gICAgICAgICAgICAgICAgICAgICBzdGF0aWMgQmVhcmVyIHRva2VuLCBvciBhc3luY1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayB0aGF0IHJldHVybnMgb25lLlxuICogICAtIGBzZXNzaW9uOiB7aWQsIHRva2VufWAgICAgICAgICBsZWdhY3kgdUVuZ2FnZSAoaWQsIGFwaVRva2VuKSAvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZCwgYWRkb19jb250YWN0c19tYXBwaW5nLnRva2VuKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyLiBUaGUgU0RLIHByb2JlcyB0aGUgYnVzaW5lc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZSAodXNlcnMpIGZpcnN0LCBmYWxscyBiYWNrXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjdXN0b21lciBzdXJmYWNlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRvX2NvbnRhY3RzX21hcHBpbmcpIGlmIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNpbmVzcyBwcm9iZSByZXR1cm5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBpbnZhbGlkX2dyYW50YCwgYW5kIGNhY2hlcyB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIEpXVC5cbiAqXG4gKiBQYXNzaW5nIG1vcmUgdGhhbiBvbmUgZXhwbGljaXRseSBpcyBhIGBDb25maWdFcnJvcmAuIFBhc3NpbmcgYW55IG9uZVxuICogb2YgdGhlbSBzdXBwcmVzc2VzIGV2ZXJ5IGVudi1kZXJpdmVkIGF1dGggZGVmYXVsdCwgc28gYSBjYWxsZXInc1xuICogZXhwbGljaXQgb3ZlcnJpZGUgaXMgbmV2ZXIgc2lsZW50bHkgbWVyZ2VkIHdpdGggZW52IGNyZWRlbnRpYWxzIG9mXG4gKiBhIGRpZmZlcmVudCBtb2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudENvbmZpZyB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdXRoIHN1cmZhY2UgYmFzZSB1c2VkIHRvIGJvb3RzdHJhcCB0aGUgZmlyc3QgY2xpZW50X2NyZWRlbnRpYWxzXG4gICAqIG1pbnQuIERlZmF1bHRzIHRvIGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgLlxuICAgKi9cbiAgYXV0aEJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDdXN0b21lciBhdXRoIHN1cmZhY2UgYmFzZSB1c2VkIGJ5IGBzZXNzaW9uYCBleGNoYW5nZXMuIERlZmF1bHRzIHRvXG4gICAqIGAke2Jhc2VVcmx9L2F1dGgvY3VzdG9tZXJgLlxuICAgKi9cbiAgY3VzdG9tZXJBdXRoQmFzZVVybD86IHN0cmluZztcblxuICAvLyDilIDilIDilIAgQXV0aCBtb2RlcyAobXV0dWFsbHkgZXhjbHVzaXZlKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIE9BdXRoMiBgY2xpZW50X2NyZWRlbnRpYWxzYCBjbGllbnRJZC4gUGFpciB3aXRoIGBzZXJ2aWNlU2VjcmV0YC4gKi9cbiAgc2VydmljZUlkPzogc3RyaW5nO1xuICAvKiogT0F1dGgyIGBjbGllbnRfY3JlZGVudGlhbHNgIGNsaWVudFNlY3JldC4gUGFpciB3aXRoIGBzZXJ2aWNlSWRgLiAqL1xuICBzZXJ2aWNlU2VjcmV0Pzogc3RyaW5nO1xuICAvKiogU3BhY2Utc2VwYXJhdGVkIHNjb3BlIGxpc3QgdG8gcmVxdWVzdCB3aGVuIG1pbnRpbmcgdmlhIGNsaWVudF9jcmVkZW50aWFscy4gKi9cbiAgc2NvcGU/OiBzdHJpbmc7XG4gIC8qKiBTdGF0aWMgQmVhcmVyIEpXVCwgb3IgYXN5bmMgY2FsbGJhY2sgdGhhdCByZXR1cm5zIG9uZS4gKi9cbiAgYXV0aFRva2VuPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPik7XG4gIC8qKlxuICAgKiBMZWdhY3kgdUVuZ2FnZSAoaWQsIHRva2VuKSBwYWlyLiBgaWRgIGlzIGB1c2Vycy51c2VySWRgIGZvciBzdGFmZlxuICAgKiB1c2VycyAobWF0Y2hlZCB2aWEgdGhlIGJ1c2luZXNzIHN1cmZhY2UpIG9yXG4gICAqIGBhZGRvX2NvbnRhY3RzX21hcHBpbmcuaWRgL2Bjb250YWN0SWRgIGZvciBjdXN0b21lcnMgKG1hdGNoZWQgdmlhXG4gICAqIHRoZSBjdXN0b21lciBzdXJmYWNlKS4gVGhlIFNESyBwcm9iZXMgdGhlIGJ1c2luZXNzIHN1cmZhY2UgZmlyc3RcbiAgICogYW5kIGZhbGxzIGJhY2sgdG8gY3VzdG9tZXIgb24gYGludmFsaWRfZ3JhbnRgLlxuICAgKi9cbiAgc2Vzc2lvbj86IHsgaWQ6IHN0cmluZyB8IG51bWJlcjsgdG9rZW46IHN0cmluZyB9O1xuICAvKipcbiAgICogYChhY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuKWAgcGFpciBmcm9tIGEgZmluaXNoZWQgbG9naW4gZmxvd1xuICAgKiAoYGF1dGgubG9naW5XaXRoUGFzc3dvcmQoLi4uKWAsIGBhdXRoLnZlcmlmeU90cCguLi4pYCwgZXRjKS4gVGhlXG4gICAqIFNESyB1c2VzIHRoZSBhY2Nlc3MgdG9rZW4gdW50aWwgaXQgZXhwaXJlcywgdGhlbiByb3RhdGVzIHZpYVxuICAgKiBgYXV0aC5yZWZyZXNoKC4uLilgIHRyYW5zcGFyZW50bHkuIGBvblJvdGF0ZWAgZmlyZXMgYWZ0ZXIgZXZlcnlcbiAgICogcm90YXRpb24gc28gY2FsbGVycyBjYW4gcGVyc2lzdCB0aGUgbmV3IHBhaXIuXG4gICAqL1xuICB0b2tlbnM/OiB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICAvKiogQWNjZXNzIHRva2VuIFRUTCAoc2Vjb25kcyksIGFzIHJldHVybmVkIGJ5IHRoZSBhdXRoIHN1cmZhY2UuICovXG4gICAgZXhwaXJlc0luOiBudW1iZXI7XG4gICAgLyoqIE9BdXRoIGNsaWVudCBpZCB1c2VkIGR1cmluZyB0aGUgb3JpZ2luYWwgbG9naW4gKHJlcXVpcmVkIGJ5IHRoZSByZWZyZXNoIGhhbmRsZXIpLiAqL1xuICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgb25Sb3RhdGU/OiAocGFpcjoge1xuICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIH07XG5cbiAgLyoqXG4gICAqIFNlcnZpY2UgaWRlbnRpZmllciB0aGUgYXVkaXQgY2xpZW50IHNob3VsZCBzdGFtcCBpbnRvIGBhY3Rvci52aWFgXG4gICAqIG9uIGVtaXR0ZWQgZXZlbnRzLiBEZWZhdWx0cyB0byBgc2VydmljZUlkYCB3aGVuIHNldDsgb3RoZXJ3aXNlXG4gICAqIGF1ZGl0IGByZWNvcmQoKWAgY2FsbHMgbG9nIGFuIGVycm9yIGFuZCBkcm9wIHRoZSBldmVudC5cbiAgICovXG4gIGFjdG9yVmlhPzogc3RyaW5nO1xuICBleHBpcnlCdWZmZXJNcz86IG51bWJlcjtcbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbn1cblxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlcyB0aGF0IHJlYWNoIHRoZSBwbGF0Zm9ybSBIVFRQIEFQSS5cbiAqXG4gKiBgZXZlbnRzYCBpcyBkZWxpYmVyYXRlbHkgTk9UIGhlcmUuIEl0IHB1Ymxpc2hlcyBzdHJhaWdodCB0byBTTlMsIHNvXG4gKiB3aXJpbmcgaXQgb250byB0aGlzIGNsaWVudCB3b3VsZCBtYWtlIGBAYXdzLXNkay9jbGllbnQtc25zYCBhIGhhcmRcbiAqIGRlcGVuZGVuY3kgb2YgdGhlIFNESydzIG1haW4gZW50cnkg4oCUIHBhaWQgYnkgZXZlcnkgY29uc3VtZXIgdGhhdCBvbmx5XG4gKiByZWFkcyBidXNpbmVzc2VzIG9yIHpvbmVzLCBhbmQgYnkgZXZlcnkgZnJvbnRlbmQgYnVuZGxlIHRoYXQgdG91Y2hlc1xuICogdGhlIHJvb3QgaW1wb3J0LiBJdCBsaXZlcyBhdCB0aGUgYEB1ZW5nYWdlLmlvL3BsYXRmb3JtLXNkay9ldmVudHNgXG4gKiBzdWJwYXRoIGluc3RlYWQsIGFsb25nc2lkZSBgL3JlYWx0aW1lYCwgYW5kIGlzIGNvbmZpZ3VyZWQgZnJvbSB0aGVcbiAqIGVudmlyb25tZW50IChgUExBVEZPUk1fRVZFTlRTX1RPUElDX0FSTmApIG9yIGBjcmVhdGVFdmVudHNDbGllbnQoLi4uKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1DbGllbnQge1xuICBidXNpbmVzczogQnVzaW5lc3NDbGllbnQ7XG4gIGF1ZGl0OiBBdWRpdENsaWVudDtcbiAgem9uZXM6IFpvbmVzQ2xpZW50O1xuICB3YWxsZXQ6IFdhbGxldENsaWVudDtcbiAgdXBzZWxsOiBVcHNlbGxDbGllbnQ7XG4gIGF1dGg6IHR5cGVvZiBhdXRoTmFtZXNwYWNlO1xuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgY3VycmVudCBhY2Nlc3MgdG9rZW4sIG1pbnRpbmcgdmlhIHRoZSBjb25maWd1cmVkIGF1dGhcbiAgICogbW9kZSBpZiB0aGUgY2FjaGUgaXMgY29sZC4gVXNlZnVsIGZvciBgYXV0aC52ZXJpZnlBY2Nlc3NUb2tlbiguLi4pYFxuICAgKiByb3VuZC10cmlwcyBhbmQgZm9yIGNhbGxlcnMgdGhhdCB3YW50IHRvIGxvZyAvIGZvcndhcmQgdGhlIGJlYXJlclxuICAgKiB0byBhIGRvd25zdHJlYW0gc2VydmljZS5cbiAgICpcbiAgICogVGhyb3dzIGBDb25maWdFcnJvcmAgd2hlbiB0aGUgY2xpZW50IHdhcyBidWlsdCB3aXRoIG5vIGF1dGggbW9kZS5cbiAgICovXG4gIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuY29uc3QgREVGQVVMVF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvJztcblxuLyoqXG4gKiBCdWlsZCBhIGZyZXNoLCBpc29sYXRlZCBjbGllbnQuIFdpdGggbm8gYXJncywgcmVhZHMgYFVFTkdBR0VfKmBcbiAqIGVudiB2YXJzOyBleHBsaWNpdCBmaWVsZHMgb3ZlcnJpZGUgcGVyIGNhbGwuIEVhY2ggY2FsbCBnZXRzIGl0cyBvd25cbiAqIFRva2VuU291cmNlIHN0YXRlIOKAlCBjb25jdXJyZW50IGBjcmVhdGVDbGllbnQoLi4uKWAgdXNlIGRvZXMgbm90XG4gKiBzdGFtcGVkZSB0aGUgY2FjaGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGllbnQoaW5wdXQ6IENsaWVudENvbmZpZyA9IHt9KTogUGxhdGZvcm1DbGllbnQge1xuICBjb25zdCBtZXJnZWQgPSBtZXJnZVdpdGhFbnYoaW5wdXQpO1xuICB3YXJuSWZCcm93c2VyU2VjcmV0KG1lcmdlZCk7XG4gIHJldHVybiBidWlsZENsaWVudChtZXJnZWQpO1xufVxuXG5mdW5jdGlvbiBidWlsZENsaWVudChpbnB1dDogQ2xpZW50Q29uZmlnKTogUGxhdGZvcm1DbGllbnQge1xuICBjb25zdCBiYXNlVXJsID0gaW5wdXQuYmFzZVVybCA/PyBERUZBVUxUX0JBU0VfVVJMO1xuICBjb25zdCB0b2tlblNvdXJjZVN0YXRlID0gcmVzb2x2ZVRva2VuU291cmNlKGlucHV0LCBiYXNlVXJsKTtcbiAgY29uc3QgYXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkID0gdG9rZW5Tb3VyY2VTdGF0ZVxuICAgID8geyB0eXBlOiAndG9rZW4tc291cmNlJywgc3RhdGU6IHRva2VuU291cmNlU3RhdGUgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJ1c2luZXNzQ2xpZW50ID0gY3JlYXRlQnVzaW5lc3NDbGllbnQoeyBiYXNlVXJsLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuLCBhdXRoIH0pO1xuICBjb25zdCBhdWRpdENsaWVudCA9IGNyZWF0ZUF1ZGl0Q2xpZW50KHtcbiAgICBiYXNlVXJsLFxuICAgIGZldGNoRm46IGlucHV0LmZldGNoRm4sXG4gICAgYXV0aCxcbiAgICBhY3RvclZpYTogaW5wdXQuYWN0b3JWaWEgPz8gaW5wdXQuc2VydmljZUlkLFxuICB9KTtcbiAgY29uc3Qgem9uZXNDbGllbnQgPSBjcmVhdGVab25lc0NsaWVudCh7IGJhc2VVcmwsIGZldGNoRm46IGlucHV0LmZldGNoRm4sIGF1dGggfSk7XG4gIGNvbnN0IHdhbGxldENsaWVudCA9IGNyZWF0ZVdhbGxldENsaWVudCh7IGJhc2VVcmwsIGZldGNoRm46IGlucHV0LmZldGNoRm4sIGF1dGggfSk7XG4gIGNvbnN0IHVwc2VsbENsaWVudCA9IGNyZWF0ZVVwc2VsbENsaWVudCh7IGJhc2VVcmwsIGZldGNoRm46IGlucHV0LmZldGNoRm4sIGF1dGggfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBidXNpbmVzczogYnVzaW5lc3NDbGllbnQsXG4gICAgYXVkaXQ6IGF1ZGl0Q2xpZW50LFxuICAgIHpvbmVzOiB6b25lc0NsaWVudCxcbiAgICB3YWxsZXQ6IHdhbGxldENsaWVudCxcbiAgICB1cHNlbGw6IHVwc2VsbENsaWVudCxcbiAgICBhdXRoOiBhdXRoTmFtZXNwYWNlLFxuICAgIGdldEFjY2Vzc1Rva2VuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXRva2VuU291cmNlU3RhdGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgICAgICdnZXRBY2Nlc3NUb2tlbjogbm8gYXV0aCBtb2RlIGNvbmZpZ3VyZWQuIFBhc3Mge3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0gfCB7YXV0aFRva2VufSB8IHtzZXNzaW9ufS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmVBY2Nlc3NUb2tlbih0b2tlblNvdXJjZVN0YXRlKTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBBVVRIX01PREVfRklFTERTID0gW1xuICAnc2VydmljZUlkJyxcbiAgJ3NlcnZpY2VTZWNyZXQnLFxuICAnc2NvcGUnLFxuICAnYXV0aFRva2VuJyxcbiAgJ3Nlc3Npb24nLFxuICAndG9rZW5zJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogTWVyZ2UgZW52LWRlcml2ZWQgZGVmYXVsdHMgd2l0aCB0aGUgY2FsbGVyJ3MgZXhwbGljaXQgaW5wdXQuIEFueVxuICogZXhwbGljaXQgYXV0aC1tb2RlIGZpZWxkIHN1cHByZXNzZXMgKmFsbCogZW52LWRlcml2ZWQgYXV0aCBkZWZhdWx0cyxcbiAqIHNvIGFuIGV4cGxpY2l0IGB7YXV0aFRva2VufWAgb3ZlcnJpZGUgZG9lc24ndCBhY2NpZGVudGFsbHkgaW5oZXJpdFxuICogYHNlcnZpY2VJZGAvYHNlcnZpY2VTZWNyZXRgIGZyb20gZW52LiBOb24tYXV0aCBmaWVsZHMgZmFsbCB0aHJvdWdoXG4gKiBub3JtYWxseSAoY2FsbGVyIGBiYXNlVXJsYCBvdmVycmlkZXMgZW52IGJhc2VVcmw7IGFic2VudCBpbnB1dCBrZWVwc1xuICogZW52IGJhc2VVcmwpLlxuICovXG5mdW5jdGlvbiBtZXJnZVdpdGhFbnYoaW5wdXQ6IENsaWVudENvbmZpZyk6IENsaWVudENvbmZpZyB7XG4gIGNvbnN0IGVudiA9IHJlYWRFbnZEZWZhdWx0cygpO1xuICBjb25zdCBpbnB1dEhhc0F1dGggPSBpbnB1dEhhc0F1dGhNb2RlKGlucHV0KTtcbiAgY29uc3QgZW52Rm9yTWVyZ2UgPSBpbnB1dEhhc0F1dGggPyB3aXRob3V0QXV0aEZpZWxkcyhlbnYpIDogZW52O1xuXG4gIGNvbnN0IG1lcmdlZDogQ2xpZW50Q29uZmlnID0ge1xuICAgIGJhc2VVcmw6IGlucHV0LmJhc2VVcmwgPz8gZW52Rm9yTWVyZ2UuYmFzZVVybCxcbiAgICBhdXRoQmFzZVVybDogaW5wdXQuYXV0aEJhc2VVcmwgPz8gZW52Rm9yTWVyZ2UuYXV0aEJhc2VVcmwsXG4gICAgY3VzdG9tZXJBdXRoQmFzZVVybDogaW5wdXQuY3VzdG9tZXJBdXRoQmFzZVVybCA/PyBlbnZGb3JNZXJnZS5jdXN0b21lckF1dGhCYXNlVXJsLFxuICAgIHNlcnZpY2VJZDogaW5wdXQuc2VydmljZUlkID8/IGVudkZvck1lcmdlLnNlcnZpY2VJZCxcbiAgICBzZXJ2aWNlU2VjcmV0OiBpbnB1dC5zZXJ2aWNlU2VjcmV0ID8/IGVudkZvck1lcmdlLnNlcnZpY2VTZWNyZXQsXG4gICAgc2NvcGU6IGlucHV0LnNjb3BlID8/IGVudkZvck1lcmdlLnNjb3BlLFxuICAgIGF1dGhUb2tlbjogaW5wdXQuYXV0aFRva2VuID8/IGVudkZvck1lcmdlLmF1dGhUb2tlbixcbiAgICBzZXNzaW9uOiBpbnB1dC5zZXNzaW9uID8/IGVudkZvck1lcmdlLnNlc3Npb24sXG4gICAgdG9rZW5zOiBpbnB1dC50b2tlbnMsXG4gICAgYWN0b3JWaWE6IGlucHV0LmFjdG9yVmlhID8/IGVudkZvck1lcmdlLmFjdG9yVmlhLFxuICAgIGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcyA/PyBlbnZGb3JNZXJnZS5leHBpcnlCdWZmZXJNcyxcbiAgICBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuLFxuICB9O1xuICBhc3NlcnRFeGFjdGx5T25lQXV0aE1vZGUobWVyZ2VkKTtcbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gcmVhZEVudkRlZmF1bHRzKCk6IENsaWVudENvbmZpZyB7XG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7fTtcbiAgY29uc3QgZSA9IChwcm9jZXNzIGFzIHsgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB9KS5lbnYgPz8ge307XG4gIGNvbnN0IGV4cGlyeSA9IGUuVUVOR0FHRV9FWFBJUllfQlVGRkVSX01TID8gTnVtYmVyKGUuVUVOR0FHRV9FWFBJUllfQlVGRkVSX01TKSA6IHVuZGVmaW5lZDtcbiAgLy8gVUVOR0FHRV9TRVNTSU9OX0lEICsgVUVOR0FHRV9TRVNTSU9OX1RPS0VOIG11c3QgYmUgcGFpcmVkOyBlaXRoZXIgYWxvbmUgaXMgaWdub3JlZFxuICAvLyBzbyBhbiBlbnYtb25seSBzZXR1cCBuZXZlciBwcm9kdWNlcyBhIGhhbGYtY29uZmlndXJlZCBzZXNzaW9uLlxuICBjb25zdCBzZXNzaW9uID1cbiAgICBlLlVFTkdBR0VfU0VTU0lPTl9JRCAmJiBlLlVFTkdBR0VfU0VTU0lPTl9UT0tFTlxuICAgICAgPyB7IGlkOiBlLlVFTkdBR0VfU0VTU0lPTl9JRCwgdG9rZW46IGUuVUVOR0FHRV9TRVNTSU9OX1RPS0VOIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IGUuVUVOR0FHRV9CQVNFX1VSTCxcbiAgICBhdXRoQmFzZVVybDogZS5VRU5HQUdFX0FVVEhfQkFTRV9VUkwsXG4gICAgY3VzdG9tZXJBdXRoQmFzZVVybDogZS5VRU5HQUdFX0NVU1RPTUVSX0FVVEhfQkFTRV9VUkwsXG4gICAgc2VydmljZUlkOiBlLlVFTkdBR0VfU0VSVklDRV9JRCxcbiAgICBzZXJ2aWNlU2VjcmV0OiBlLlVFTkdBR0VfU0VSVklDRV9TRUNSRVQsXG4gICAgc2NvcGU6IGUuVUVOR0FHRV9TQ09QRSxcbiAgICBhdXRoVG9rZW46IGUuVUVOR0FHRV9BVVRIX1RPS0VOLFxuICAgIHNlc3Npb24sXG4gICAgYWN0b3JWaWE6IGUuVUVOR0FHRV9BQ1RPUl9WSUEsXG4gICAgZXhwaXJ5QnVmZmVyTXM6IE51bWJlci5pc0Zpbml0ZShleHBpcnkpID8gKGV4cGlyeSBhcyBudW1iZXIpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnB1dEhhc0F1dGhNb2RlKGlucHV0OiBDbGllbnRDb25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFVVEhfTU9ERV9GSUVMRFMuc29tZSgoZikgPT4gaW5wdXRbZl0gIT09IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdpdGhvdXRBdXRoRmllbGRzKGM6IENsaWVudENvbmZpZyk6IENsaWVudENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uYyxcbiAgICBzZXJ2aWNlSWQ6IHVuZGVmaW5lZCxcbiAgICBzZXJ2aWNlU2VjcmV0OiB1bmRlZmluZWQsXG4gICAgc2NvcGU6IHVuZGVmaW5lZCxcbiAgICBhdXRoVG9rZW46IHVuZGVmaW5lZCxcbiAgICBzZXNzaW9uOiB1bmRlZmluZWQsXG4gICAgdG9rZW5zOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydEV4YWN0bHlPbmVBdXRoTW9kZShpbnB1dDogQ2xpZW50Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IG1vZGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoaW5wdXQuYXV0aFRva2VuICE9PSB1bmRlZmluZWQpIG1vZGVzLnB1c2goJ2F1dGhUb2tlbicpO1xuICBpZiAoaW5wdXQuc2Vzc2lvbiAhPT0gdW5kZWZpbmVkKSBtb2Rlcy5wdXNoKCdzZXNzaW9uJyk7XG4gIGlmIChpbnB1dC50b2tlbnMgIT09IHVuZGVmaW5lZCkgbW9kZXMucHVzaCgndG9rZW5zJyk7XG4gIGlmIChpbnB1dC5zZXJ2aWNlSWQgIT09IHVuZGVmaW5lZCB8fCBpbnB1dC5zZXJ2aWNlU2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBtb2Rlcy5wdXNoKCdzZXJ2aWNlSWQrc2VydmljZVNlY3JldCcpO1xuICB9XG4gIGlmIChtb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgYGNyZWF0ZUNsaWVudDogcGljayBleGFjdGx5IG9uZSBhdXRoIG1vZGUuIEdvdCAke21vZGVzLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgJ1VzZSBvbmUgb2Yge3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0gfCB7YXV0aFRva2VufSB8IHtzZXNzaW9ufSB8IHt0b2tlbnN9LicsXG4gICAgKTtcbiAgfVxuICAvLyBaZXJvIG1vZGVzIGlzIGFsbG93ZWQg4oCUIGNhbGxlciBtYXkgd2FudCBhIGZ1bGx5LWFub255bW91cyBjbGllbnQgZm9yXG4gIC8vIHB1YmxpYyBlbmRwb2ludHMuIFRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgbmVlZHMgYXV0aCB3aWxsIHN1cmZhY2UgYVxuICAvLyBDb25maWdFcnJvciBkb3duc3RyZWFtLlxufVxuXG4vKipcbiAqIFByb2JlIHRoZSBidXNpbmVzcyBgbGVnYWN5X3Nlc3Npb25gIGdyYW50IGZpcnN0LCBmYWxsIGJhY2sgdG8gY3VzdG9tZXJcbiAqIG9uIGBpbnZhbGlkX2dyYW50YC4gRWl0aGVyIHN1cmZhY2UgbWludHMgYSBKV1Qg4oCUIHRoZSBTREsgZG9lc24ndCBjYXJlXG4gKiB3aGljaCBzaWRlIGFuc3dlcmVkLlxuICpcbiAqIFdoeSBwcm9iZSBib3RoOiBgaWRgIChudW1lcmljKSBvdmVybGFwcyB1c2Vycy51c2VySWQgdnNcbiAqIGFkZG9fY29udGFjdHNfbWFwcGluZy5pZC9jb250YWN0SWQuIENhbGxlcnMgdXN1YWxseSBkb24ndCBrbm93IHdoaWNoXG4gKiB0YWJsZSB0aGVpciAoaWQsIHRva2VuKSBwYWlyIGJlbG9uZ3MgdG8uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlTGVnYWN5U2Vzc2lvbihcbiAgc2Vzc2lvbjogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyB0b2tlbjogc3RyaW5nIH0sXG4gIGF1dGhCYXNlVXJsOiBzdHJpbmcsXG4gIGN1c3RvbWVyQXV0aEJhc2VVcmw6IHN0cmluZyxcbiAgZmV0Y2hGbjogdHlwZW9mIGZldGNoLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGdyYW50X3R5cGU6ICdsZWdhY3lfc2Vzc2lvbicsXG4gICAgaWQ6IFN0cmluZyhzZXNzaW9uLmlkKSxcbiAgICB0b2tlbjogc2Vzc2lvbi50b2tlbixcbiAgfSkudG9TdHJpbmcoKTtcblxuICBjb25zdCBidXNpbmVzc1JlcyA9IGF3YWl0IGZldGNoRm4oYCR7YXV0aEJhc2VVcmx9L29hdXRoL3Rva2VuYCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgYm9keSxcbiAgfSk7XG4gIGlmIChidXNpbmVzc1Jlcy5vaykge1xuICAgIHJldHVybiBwYXJzZUFjY2Vzc1Rva2VuKGJ1c2luZXNzUmVzKTtcbiAgfVxuICBpZiAoYXdhaXQgaXNJbnZhbGlkR3JhbnQoYnVzaW5lc3NSZXMpKSB7XG4gICAgY29uc3QgY3VzdG9tZXJSZXMgPSBhd2FpdCBmZXRjaEZuKGAke2N1c3RvbWVyQXV0aEJhc2VVcmx9L29hdXRoL3Rva2VuYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICBpZiAoY3VzdG9tZXJSZXMub2spIHtcbiAgICAgIHJldHVybiBwYXJzZUFjY2Vzc1Rva2VuKGN1c3RvbWVyUmVzKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGN1c3RvbWVyUmVzLnRleHQoKS5jYXRjaCgoKSA9PiAnJyk7XG4gICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoXG4gICAgICBgbGVnYWN5X3Nlc3Npb24gZXhjaGFuZ2UgZmFpbGVkIG9uIGJvdGggc3VyZmFjZXM6IGN1c3RvbWVyIEhUVFAgJHtjdXN0b21lclJlcy5zdGF0dXN9ICR7dGV4dH1gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgdGV4dCA9IGF3YWl0IGJ1c2luZXNzUmVzLnRleHQoKS5jYXRjaCgoKSA9PiAnJyk7XG4gIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKFxuICAgIGBsZWdhY3lfc2Vzc2lvbiBleGNoYW5nZSBmYWlsZWQ6IEhUVFAgJHtidXNpbmVzc1Jlcy5zdGF0dXN9ICR7dGV4dH1gLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0ludmFsaWRHcmFudChyZXM6IFJlc3BvbnNlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChyZXMuc3RhdHVzICE9PSA0MDApIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2xvbmVkID0gcmVzLmNsb25lKCk7XG4gIGNvbnN0IGpzb24gPSAoYXdhaXQgY2xvbmVkLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMgeyBlcnJvcj86IHN0cmluZyB9O1xuICByZXR1cm4ganNvbi5lcnJvciA9PT0gJ2ludmFsaWRfZ3JhbnQnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUFjY2Vzc1Rva2VuKHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBqc29uID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHsgYWNjZXNzX3Rva2VuPzogc3RyaW5nIH07XG4gIGlmICghanNvbi5hY2Nlc3NfdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoJ2xlZ2FjeV9zZXNzaW9uIGV4Y2hhbmdlIHJlc3BvbnNlIG1pc3NpbmcgYWNjZXNzX3Rva2VuJyk7XG4gIH1cbiAgcmV0dXJuIGpzb24uYWNjZXNzX3Rva2VuO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVG9rZW5Tb3VyY2UoaW5wdXQ6IENsaWVudENvbmZpZywgYmFzZVVybDogc3RyaW5nKTogVG9rZW5Tb3VyY2VTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGF1dGhCYXNlVXJsID0gaW5wdXQuYXV0aEJhc2VVcmwgPz8gYCR7YmFzZVVybH0vYXV0aC9idXNpbmVzc2A7XG4gIGNvbnN0IGZldGNoRm4gPSBpbnB1dC5mZXRjaEZuID8/IChnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCk7XG5cbiAgaWYgKGlucHV0LmF1dGhUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dC5hdXRoVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHsga2luZDogJ3N0YXRpYy1zdHJpbmcnLCB0b2tlbjogaW5wdXQuYXV0aFRva2VuIH0sXG4gICAgICAgIHsgZXhwaXJ5QnVmZmVyTXM6IGlucHV0LmV4cGlyeUJ1ZmZlck1zLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuIH0sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICB7IGtpbmQ6ICdjYWxsYmFjaycsIGdldFRva2VuOiBpbnB1dC5hdXRoVG9rZW4gfSxcbiAgICAgIHsgZXhwaXJ5QnVmZmVyTXM6IGlucHV0LmV4cGlyeUJ1ZmZlck1zLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuIH0sXG4gICAgKTtcbiAgfVxuICBpZiAoaW5wdXQuc2Vzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY3VzdG9tZXJBdXRoQmFzZVVybCA9IGlucHV0LmN1c3RvbWVyQXV0aEJhc2VVcmwgPz8gYCR7YmFzZVVybH0vYXV0aC9jdXN0b21lcmA7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGlucHV0LnNlc3Npb247XG4gICAgcmV0dXJuIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICAgICAge1xuICAgICAgICBraW5kOiAnY2FsbGJhY2snLFxuICAgICAgICBnZXRUb2tlbjogKCkgPT4gZXhjaGFuZ2VMZWdhY3lTZXNzaW9uKHNlc3Npb24sIGF1dGhCYXNlVXJsLCBjdXN0b21lckF1dGhCYXNlVXJsLCBmZXRjaEZuKSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0LnNlcnZpY2VJZCAmJiBpbnB1dC5zZXJ2aWNlU2VjcmV0KSB7XG4gICAgcmV0dXJuIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICAgICAge1xuICAgICAgICBraW5kOiAnc2VydmljZS1jcmVkZW50aWFscycsXG4gICAgICAgIGNsaWVudElkOiBpbnB1dC5zZXJ2aWNlSWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogaW5wdXQuc2VydmljZVNlY3JldCxcbiAgICAgICAgYXV0aEJhc2VVcmwsXG4gICAgICAgIHNjb3BlOiBpbnB1dC5zY29wZSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0LnRva2Vucykge1xuICAgIHJldHVybiBtYWtlVG9rZW5Tb3VyY2VTdGF0ZShcbiAgICAgIHtcbiAgICAgICAga2luZDogJ2FjY2Vzcy1yZWZyZXNoLXBhaXInLFxuICAgICAgICBhY2Nlc3NUb2tlbjogaW5wdXQudG9rZW5zLmFjY2Vzc1Rva2VuLFxuICAgICAgICByZWZyZXNoVG9rZW46IGlucHV0LnRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIGlucHV0LnRva2Vucy5leHBpcmVzSW4gKiAxMDAwLFxuICAgICAgICBjbGllbnRJZDogaW5wdXQudG9rZW5zLmNsaWVudElkLFxuICAgICAgICBvblJvdGF0ZTogaW5wdXQudG9rZW5zLm9uUm90YXRlLFxuICAgICAgfSxcbiAgICAgIHsgZXhwaXJ5QnVmZmVyTXM6IGlucHV0LmV4cGlyeUJ1ZmZlck1zLCBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuIH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZCcm93c2VyU2VjcmV0KGNvbmZpZzogQ2xpZW50Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIHsgd2luZG93PzogeyBkb2N1bWVudD86IHVua25vd24gfSB9O1xuICBjb25zdCBpbkJyb3dzZXIgPSB0eXBlb2YgZy53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnLndpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG4gIGlmICghaW5Ccm93c2VyKSByZXR1cm47XG4gIGlmIChjb25maWcuc2VydmljZVNlY3JldCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdbdWVuZ2FnZS1wbGF0Zm9ybS1zZGtdIHNlcnZpY2VTZWNyZXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzLiAnICtcbiAgICAgICAgJ1NlcnZpY2UgY3JlZGVudGlhbHMgaW4gYnJvd3NlciBidW5kbGVzIGFyZSBwdWJsaWNseSB2aXNpYmxlLiAnICtcbiAgICAgICAgJ1VzZSBgYXV0aFRva2VuYCAoYSBCZWFyZXIgb2J0YWluZWQgdmlhIE9BdXRoKSBvciBgc2Vzc2lvblRva2VuYCBpbnN0ZWFkLicsXG4gICAgKTtcbiAgfVxufVxuIl19
package/dist/config.d.ts CHANGED
@@ -31,11 +31,6 @@ export interface PlatformConfigInput {
31
31
  export interface PlatformAuthInput {
32
32
  token?: string;
33
33
  }
34
- /**
35
- * Resolve env-defaulted config. Re-read on every call so that callers can
36
- * set env vars after the SDK has been imported and still pick them up on
37
- * the next request.
38
- */
39
34
  export declare function envDefaults(): PlatformConfig;
40
35
  /**
41
36
  * Coerce `.auth()` input or `config({auth})` input into a typed
package/dist/config.js CHANGED
@@ -9,15 +9,26 @@ exports.DEFAULT_BASE_URL = 'https://api.platform.uengage.io';
9
9
  * set env vars after the SDK has been imported and still pick them up on
10
10
  * the next request.
11
11
  */
12
+ /**
13
+ * Read `process.env` defensively: in a browser bundle `process` is not
14
+ * defined at all, and touching it throws a ReferenceError rather than
15
+ * yielding undefined. The SDK is used from browsers (the
16
+ * `whitelabel_web` channel), so every env read goes through here.
17
+ */
18
+ function env(name) {
19
+ if (typeof process === 'undefined')
20
+ return undefined;
21
+ return process.env?.[name];
22
+ }
12
23
  function envDefaults() {
13
24
  return {
14
- baseUrl: process.env.UENGAGE_BASE_URL ?? exports.DEFAULT_BASE_URL,
25
+ baseUrl: env('UENGAGE_BASE_URL') ?? exports.DEFAULT_BASE_URL,
15
26
  auth: envAuth(),
16
27
  fetchFn: globalThis.fetch,
17
28
  };
18
29
  }
19
30
  function envAuth() {
20
- const token = process.env.UENGAGE_AUTH_TOKEN;
31
+ const token = env('UENGAGE_AUTH_TOKEN');
21
32
  if (token)
22
33
  return { type: 'bearer', token };
23
34
  return undefined;
@@ -76,4 +87,4 @@ class ConfigState {
76
87
  }
77
88
  }
78
89
  exports.ConfigState = ConfigState;
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3Q0Esa0NBTUM7QUFpQkQsc0NBUUM7QUFwRVksUUFBQSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQWdDbEU7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVc7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixJQUFJLHdCQUFnQjtRQUN6RCxJQUFJLEVBQUUsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFxQjtLQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsT0FBTztJQUNkLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7SUFDN0MsSUFBSSxLQUFLO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEtBQXVDO0lBQ25FLElBQUksTUFBTSxJQUFJLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNJQUFzSSxDQUN2SSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxXQUFXO0lBQ2QsU0FBUyxHQUF3QixFQUFFLENBQUM7SUFDcEMsWUFBWSxDQUEyQjtJQUN2QyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssQ0FBQyxLQUEwQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXVDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDekQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBaUI7WUFDaEUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBNEI7U0FDcEQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdCRCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0B1ZW5nYWdlLmlvL2pzLWxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IFRva2VuU291cmNlU3RhdGUgfSBmcm9tICcuL3Rva2VuLXNvdXJjZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8nO1xuXG4vKipcbiAqIFJlc29sdmVkIGF1dGggc3RhdGUuIERpc2NyaW1pbmF0ZWQgYnkgYHR5cGVgIHNvIGNvbnN1bWVycyBjYW4gbmFycm93LlxuICovXG5leHBvcnQgdHlwZSBQbGF0Zm9ybUF1dGggPVxuICB8IHsgdHlwZTogJ2JlYXJlcic7IHRva2VuOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3Rva2VuLXNvdXJjZSc7IHN0YXRlOiBUb2tlblNvdXJjZVN0YXRlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWcge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm46IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQ29uZmlnSW5wdXQge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBhdXRoPzogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm4/OiB0eXBlb2YgZmV0Y2g7XG4gIGxvZ2dlcj86IExvZ2dlcjtcbn1cblxuLyoqXG4gKiBgLmF1dGgoKWAgc2hhcGUuIFBhc3MgYHt0b2tlbn1gIGZvciBhIHN0YXRpYyBCZWFyZXIgYWNjZXNzIHRva2VuLlxuICogT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyBsaXZlIGF0IGBjcmVhdGVDbGllbnQoKWAgY29uZmlnLXRpbWVcbiAqIChgc2VydmljZUlkYCArIGBzZXJ2aWNlU2VjcmV0YCBmaWVsZHMpLCBub3QgdmlhIGAuYXV0aCgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybUF1dGhJbnB1dCB7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgZW52LWRlZmF1bHRlZCBjb25maWcuIFJlLXJlYWQgb24gZXZlcnkgY2FsbCBzbyB0aGF0IGNhbGxlcnMgY2FuXG4gKiBzZXQgZW52IHZhcnMgYWZ0ZXIgdGhlIFNESyBoYXMgYmVlbiBpbXBvcnRlZCBhbmQgc3RpbGwgcGljayB0aGVtIHVwIG9uXG4gKiB0aGUgbmV4dCByZXF1ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52RGVmYXVsdHMoKTogUGxhdGZvcm1Db25maWcge1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IHByb2Nlc3MuZW52LlVFTkdBR0VfQkFTRV9VUkwgPz8gREVGQVVMVF9CQVNFX1VSTCxcbiAgICBhdXRoOiBlbnZBdXRoKCksXG4gICAgZmV0Y2hGbjogZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVudkF1dGgoKTogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5VRU5HQUdFX0FVVEhfVE9LRU47XG4gIGlmICh0b2tlbikgcmV0dXJuIHsgdHlwZTogJ2JlYXJlcicsIHRva2VuIH07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29lcmNlIGAuYXV0aCgpYCBpbnB1dCBvciBgY29uZmlnKHthdXRofSlgIGlucHV0IGludG8gYSB0eXBlZFxuICogUGxhdGZvcm1BdXRoLiBUaHJvd3Mgd2hlbiB0aGUgaW5wdXQgaGFzIG5vIHVzYWJsZSBjcmVkZW50aWFscy5cbiAqXG4gKiBUb2RheSB0aGlzIG9ubHkgYWNjZXB0cyBge3Rva2VufWAgb3IgYSBwcmUtc2hhcGVkIGBQbGF0Zm9ybUF1dGhgLlxuICogRm9yIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMgdXNlIGBjcmVhdGVDbGllbnQoe3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0pYFxuICogaW5zdGVhZCDigJQgdGhhdCBidWlsZHMgYSBUb2tlblNvdXJjZSB3aGljaCBtaW50cyArIGNhY2hlcyBCZWFyZXJcbiAqIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogUGxhdGZvcm1BdXRoIHtcbiAgaWYgKCd0eXBlJyBpbiBpbnB1dCkgcmV0dXJuIGlucHV0O1xuICBpZiAoaW5wdXQudG9rZW4pIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW46IGlucHV0LnRva2VuIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdhdXRoKCk6IHBhc3Mge3Rva2VufSBmb3IgYSBzdGF0aWMgQmVhcmVyIGFjY2VzcyB0b2tlbiwgb3IgdXNlIGNyZWF0ZUNsaWVudCh7c2VydmljZUlkLCBzZXJ2aWNlU2VjcmV0fSkgZm9yIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMnLFxuICApO1xufVxuXG4vKipcbiAqIE11dGFibGUgY29uZmlnIHNoYXJlZCBieSBjbGllbnRzLiBgYXBwbHkoKWAgYW5kIGBzZXRBdXRoKClgIGFyZSBob3cgdGhlXG4gKiBjaGFpbmFibGUgYC5jb25maWcoKWAgLyBgLmF1dGgoKWAgbWV0aG9kcyB3cml0ZSBiYWNrLiBgcmVzb2x2ZSgpYCBwcm9kdWNlc1xuICogdGhlIGVmZmVjdGl2ZSBjb25maWcgZm9yIG9uZSByZXF1ZXN0LCBmYWxsaW5nIGJhY2sgdG8gY3VycmVudCBlbnYgc3RhdGVcbiAqIGZvciBmaWVsZHMgdGhlIGNhbGxlciBoYXNuJ3QgcGlubmVkLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnU3RhdGUge1xuICBwcml2YXRlIG92ZXJyaWRlczogUGxhdGZvcm1Db25maWdJbnB1dCA9IHt9O1xuICBwcml2YXRlIGV4cGxpY2l0QXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc0V4cGxpY2l0QXV0aCA9IGZhbHNlO1xuXG4gIGFwcGx5KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogdm9pZCB7XG4gICAgaWYgKGlucHV0LmJhc2VVcmwgIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuYmFzZVVybCA9IGlucHV0LmJhc2VVcmw7XG4gICAgaWYgKGlucHV0LmZldGNoRm4gIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA9IGlucHV0LmZldGNoRm47XG4gICAgaWYgKGlucHV0LmxvZ2dlciAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgPSBpbnB1dC5sb2dnZXI7XG4gICAgaWYgKGlucHV0LmF1dGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0LmF1dGgpO1xuICAgICAgdGhpcy5oYXNFeHBsaWNpdEF1dGggPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldEF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogdm9pZCB7XG4gICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0KTtcbiAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gIH1cblxuICByZXNvbHZlKCk6IFBsYXRmb3JtQ29uZmlnIHtcbiAgICBjb25zdCBlbnYgPSBlbnZEZWZhdWx0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlVXJsOiB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID8/IGVudi5iYXNlVXJsLFxuICAgICAgYXV0aDogdGhpcy5oYXNFeHBsaWNpdEF1dGggPyB0aGlzLmV4cGxpY2l0QXV0aCA6IGVudi5hdXRoLFxuICAgICAgZmV0Y2hGbjogKHRoaXMub3ZlcnJpZGVzLmZldGNoRm4gPz8gZW52LmZldGNoRm4pIGFzIHR5cGVvZiBmZXRjaCxcbiAgICAgIGxvZ2dlcjogdGhpcy5vdmVycmlkZXMubG9nZ2VyIGFzIExvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtREEsa0NBTUM7QUFpQkQsc0NBUUM7QUEvRVksUUFBQSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQWdDbEU7Ozs7R0FJRztBQUNIOzs7OztHQUtHO0FBQ0gsU0FBUyxHQUFHLENBQUMsSUFBWTtJQUN2QixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVc7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNyRCxPQUFRLE9BQXdELENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQWdCLFdBQVc7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSx3QkFBZ0I7UUFDcEQsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBcUI7S0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLE9BQU87SUFDZCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUs7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM1QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBdUM7SUFDbkUsSUFBSSxNQUFNLElBQUksS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2xDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isc0lBQXNJLENBQ3ZJLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFdBQVc7SUFDZCxTQUFTLEdBQXdCLEVBQUUsQ0FBQztJQUNwQyxZQUFZLENBQTJCO0lBQ3ZDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFFaEMsS0FBSyxDQUFDLEtBQTBCO1FBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3JFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBdUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEdBQUcsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUN6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFpQjtZQUNoRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUE0QjtTQUNwRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBN0JELGtDQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQHVlbmdhZ2UuaW8vanMtbG9nZ2VyJztcbmltcG9ydCB0eXBlIHsgVG9rZW5Tb3VyY2VTdGF0ZSB9IGZyb20gJy4vdG9rZW4tc291cmNlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbyc7XG5cbi8qKlxuICogUmVzb2x2ZWQgYXV0aCBzdGF0ZS4gRGlzY3JpbWluYXRlZCBieSBgdHlwZWAgc28gY29uc3VtZXJzIGNhbiBuYXJyb3cuXG4gKi9cbmV4cG9ydCB0eXBlIFBsYXRmb3JtQXV0aCA9XG4gIHwgeyB0eXBlOiAnYmVhcmVyJzsgdG9rZW46IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAndG9rZW4tc291cmNlJzsgc3RhdGU6IFRva2VuU291cmNlU3RhdGUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybUNvbmZpZyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXV0aD86IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbjogdHlwZW9mIGZldGNoO1xuICBsb2dnZXI/OiBMb2dnZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGhJbnB1dCB8IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIGAuYXV0aCgpYCBzaGFwZS4gUGFzcyBge3Rva2VufWAgZm9yIGEgc3RhdGljIEJlYXJlciBhY2Nlc3MgdG9rZW4uXG4gKiBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzIGxpdmUgYXQgYGNyZWF0ZUNsaWVudCgpYCBjb25maWctdGltZVxuICogKGBzZXJ2aWNlSWRgICsgYHNlcnZpY2VTZWNyZXRgIGZpZWxkcyksIG5vdCB2aWEgYC5hdXRoKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQXV0aElucHV0IHtcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBlbnYtZGVmYXVsdGVkIGNvbmZpZy4gUmUtcmVhZCBvbiBldmVyeSBjYWxsIHNvIHRoYXQgY2FsbGVycyBjYW5cbiAqIHNldCBlbnYgdmFycyBhZnRlciB0aGUgU0RLIGhhcyBiZWVuIGltcG9ydGVkIGFuZCBzdGlsbCBwaWNrIHRoZW0gdXAgb25cbiAqIHRoZSBuZXh0IHJlcXVlc3QuXG4gKi9cbi8qKlxuICogUmVhZCBgcHJvY2Vzcy5lbnZgIGRlZmVuc2l2ZWx5OiBpbiBhIGJyb3dzZXIgYnVuZGxlIGBwcm9jZXNzYCBpcyBub3RcbiAqIGRlZmluZWQgYXQgYWxsLCBhbmQgdG91Y2hpbmcgaXQgdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3IgcmF0aGVyIHRoYW5cbiAqIHlpZWxkaW5nIHVuZGVmaW5lZC4gVGhlIFNESyBpcyB1c2VkIGZyb20gYnJvd3NlcnMgKHRoZVxuICogYHdoaXRlbGFiZWxfd2ViYCBjaGFubmVsKSwgc28gZXZlcnkgZW52IHJlYWQgZ29lcyB0aHJvdWdoIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIGVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gKHByb2Nlc3MgYXMgeyBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IH0pLmVudj8uW25hbWVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW52RGVmYXVsdHMoKTogUGxhdGZvcm1Db25maWcge1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IGVudignVUVOR0FHRV9CQVNFX1VSTCcpID8/IERFRkFVTFRfQkFTRV9VUkwsXG4gICAgYXV0aDogZW52QXV0aCgpLFxuICAgIGZldGNoRm46IGdsb2JhbFRoaXMuZmV0Y2ggYXMgdHlwZW9mIGZldGNoLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbnZBdXRoKCk6IFBsYXRmb3JtQXV0aCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRva2VuID0gZW52KCdVRU5HQUdFX0FVVEhfVE9LRU4nKTtcbiAgaWYgKHRva2VuKSByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW4gfTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYC5hdXRoKClgIGlucHV0IG9yIGBjb25maWcoe2F1dGh9KWAgaW5wdXQgaW50byBhIHR5cGVkXG4gKiBQbGF0Zm9ybUF1dGguIFRocm93cyB3aGVuIHRoZSBpbnB1dCBoYXMgbm8gdXNhYmxlIGNyZWRlbnRpYWxzLlxuICpcbiAqIFRvZGF5IHRoaXMgb25seSBhY2NlcHRzIGB7dG9rZW59YCBvciBhIHByZS1zaGFwZWQgYFBsYXRmb3JtQXV0aGAuXG4gKiBGb3IgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyB1c2UgYGNyZWF0ZUNsaWVudCh7c2VydmljZUlkLCBzZXJ2aWNlU2VjcmV0fSlgXG4gKiBpbnN0ZWFkIOKAlCB0aGF0IGJ1aWxkcyBhIFRva2VuU291cmNlIHdoaWNoIG1pbnRzICsgY2FjaGVzIEJlYXJlclxuICogdG9rZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiBQbGF0Zm9ybUF1dGgge1xuICBpZiAoJ3R5cGUnIGluIGlucHV0KSByZXR1cm4gaW5wdXQ7XG4gIGlmIChpbnB1dC50b2tlbikge1xuICAgIHJldHVybiB7IHR5cGU6ICdiZWFyZXInLCB0b2tlbjogaW5wdXQudG9rZW4gfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ2F1dGgoKTogcGFzcyB7dG9rZW59IGZvciBhIHN0YXRpYyBCZWFyZXIgYWNjZXNzIHRva2VuLCBvciB1c2UgY3JlYXRlQ2xpZW50KHtzZXJ2aWNlSWQsIHNlcnZpY2VTZWNyZXR9KSBmb3IgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscycsXG4gICk7XG59XG5cbi8qKlxuICogTXV0YWJsZSBjb25maWcgc2hhcmVkIGJ5IGNsaWVudHMuIGBhcHBseSgpYCBhbmQgYHNldEF1dGgoKWAgYXJlIGhvdyB0aGVcbiAqIGNoYWluYWJsZSBgLmNvbmZpZygpYCAvIGAuYXV0aCgpYCBtZXRob2RzIHdyaXRlIGJhY2suIGByZXNvbHZlKClgIHByb2R1Y2VzXG4gKiB0aGUgZWZmZWN0aXZlIGNvbmZpZyBmb3Igb25lIHJlcXVlc3QsIGZhbGxpbmcgYmFjayB0byBjdXJyZW50IGVudiBzdGF0ZVxuICogZm9yIGZpZWxkcyB0aGUgY2FsbGVyIGhhc24ndCBwaW5uZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWdTdGF0ZSB7XG4gIHByaXZhdGUgb3ZlcnJpZGVzOiBQbGF0Zm9ybUNvbmZpZ0lucHV0ID0ge307XG4gIHByaXZhdGUgZXhwbGljaXRBdXRoOiBQbGF0Zm9ybUF1dGggfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaGFzRXhwbGljaXRBdXRoID0gZmFsc2U7XG5cbiAgYXBwbHkoaW5wdXQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQpOiB2b2lkIHtcbiAgICBpZiAoaW5wdXQuYmFzZVVybCAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID0gaW5wdXQuYmFzZVVybDtcbiAgICBpZiAoaW5wdXQuZmV0Y2hGbiAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5mZXRjaEZuID0gaW5wdXQuZmV0Y2hGbjtcbiAgICBpZiAoaW5wdXQubG9nZ2VyICE9PSB1bmRlZmluZWQpIHRoaXMub3ZlcnJpZGVzLmxvZ2dlciA9IGlucHV0LmxvZ2dlcjtcbiAgICBpZiAoaW5wdXQuYXV0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmV4cGxpY2l0QXV0aCA9IG5vcm1hbGl6ZUF1dGgoaW5wdXQuYXV0aCk7XG4gICAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2V0QXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGxpY2l0QXV0aCA9IG5vcm1hbGl6ZUF1dGgoaW5wdXQpO1xuICAgIHRoaXMuaGFzRXhwbGljaXRBdXRoID0gdHJ1ZTtcbiAgfVxuXG4gIHJlc29sdmUoKTogUGxhdGZvcm1Db25maWcge1xuICAgIGNvbnN0IGVudiA9IGVudkRlZmF1bHRzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VVcmw6IHRoaXMub3ZlcnJpZGVzLmJhc2VVcmwgPz8gZW52LmJhc2VVcmwsXG4gICAgICBhdXRoOiB0aGlzLmhhc0V4cGxpY2l0QXV0aCA/IHRoaXMuZXhwbGljaXRBdXRoIDogZW52LmF1dGgsXG4gICAgICBmZXRjaEZuOiAodGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA/PyBlbnYuZmV0Y2hGbikgYXMgdHlwZW9mIGZldGNoLFxuICAgICAgbG9nZ2VyOiB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgYXMgTG9nZ2VyIHwgdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
package/dist/errors.d.ts CHANGED
@@ -55,6 +55,23 @@ export declare class RateLimitError extends PlatformError {
55
55
  export declare class TokenExpiredError extends PlatformError {
56
56
  constructor(message?: string);
57
57
  }
58
+ /**
59
+ * Thrown when publishing to the platform event bus fails.
60
+ *
61
+ * The events client does NOT swallow publish failures — fail-open is the
62
+ * caller's decision, and it differs by call site (a legacy order flow
63
+ * must never block on the bus; a platform service reconciling state may
64
+ * well want to retry). `failed` carries the per-event breakdown for a
65
+ * partially-failed `publishBatch`.
66
+ */
67
+ export declare class EventPublishError extends PlatformError {
68
+ /** Envelope ids that did not make it onto the bus. */
69
+ readonly failedEventIds: string[];
70
+ constructor(message?: string, opts?: {
71
+ failedEventIds?: string[];
72
+ cause?: unknown;
73
+ });
74
+ }
58
75
  /** Thrown for missing / inconsistent SDK configuration. */
59
76
  export declare class ConfigError extends PlatformError {
60
77
  constructor(message: string);
package/dist/errors.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConfigError = exports.TokenExpiredError = exports.RateLimitError = exports.ValidationError = exports.NotFoundError = exports.AuthorizationError = exports.AuthenticationError = exports.PlatformError = void 0;
3
+ exports.ConfigError = exports.EventPublishError = exports.TokenExpiredError = exports.RateLimitError = exports.ValidationError = exports.NotFoundError = exports.AuthorizationError = exports.AuthenticationError = exports.PlatformError = void 0;
4
4
  /**
5
5
  * Platform-SDK error hierarchy. Consumers should `instanceof`-check
6
6
  * against `PlatformError` for the catch-all and the specific subclasses
@@ -75,6 +75,25 @@ class TokenExpiredError extends PlatformError {
75
75
  }
76
76
  }
77
77
  exports.TokenExpiredError = TokenExpiredError;
78
+ /**
79
+ * Thrown when publishing to the platform event bus fails.
80
+ *
81
+ * The events client does NOT swallow publish failures — fail-open is the
82
+ * caller's decision, and it differs by call site (a legacy order flow
83
+ * must never block on the bus; a platform service reconciling state may
84
+ * well want to retry). `failed` carries the per-event breakdown for a
85
+ * partially-failed `publishBatch`.
86
+ */
87
+ class EventPublishError extends PlatformError {
88
+ /** Envelope ids that did not make it onto the bus. */
89
+ failedEventIds;
90
+ constructor(message = 'event publish failed', opts) {
91
+ super(message, { cause: opts?.cause });
92
+ this.name = 'EventPublishError';
93
+ this.failedEventIds = opts?.failedEventIds ?? [];
94
+ }
95
+ }
96
+ exports.EventPublishError = EventPublishError;
78
97
  /** Thrown for missing / inconsistent SDK configuration. */
79
98
  class ConfigError extends PlatformError {
80
99
  constructor(message) {
@@ -83,4 +102,4 @@ class ConfigError extends PlatformError {
83
102
  }
84
103
  }
85
104
  exports.ConfigError = ConfigError;
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxLQUFLO0lBQzdCLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQVc7SUFDekIsWUFBWSxPQUFlLEVBQUUsSUFBMkM7UUFDdEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFURCxzQ0FTQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsYUFBYTtJQUNwRCxZQUFZLE9BQU8sR0FBRyx1QkFBdUIsRUFBRSxJQUEwQjtRQUN2RSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFMRCxrREFLQztBQUVELE1BQWEsa0JBQW1CLFNBQVEsYUFBYTtJQUNuRCwyRUFBMkU7SUFDbEUsYUFBYSxDQUFVO0lBQ2hDLFlBQ0UsT0FBTyxHQUFHLHNCQUFzQixFQUNoQyxJQUFrRDtRQUVsRCxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksRUFBRSxhQUFhLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBWEQsZ0RBV0M7QUFFRCxNQUFhLGFBQWMsU0FBUSxhQUFhO0lBQzlDLFlBQVksT0FBTyxHQUFHLFdBQVcsRUFBRSxJQUEwQjtRQUMzRCxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsc0NBS0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsYUFBYTtJQUNoRCx3RUFBd0U7SUFDL0QsTUFBTSxDQUFhO0lBQzVCLFlBQVksT0FBTyxHQUFHLG1CQUFtQixFQUFFLElBQThDO1FBQ3ZGLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFSRCwwQ0FRQztBQUVELE1BQWEsY0FBZSxTQUFRLGFBQWE7SUFDL0MsaUVBQWlFO0lBQ3hELFVBQVUsQ0FBVTtJQUM3QixZQUFZLE9BQU8sR0FBRyxjQUFjLEVBQUUsSUFBK0M7UUFDbkYsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQVJELHdDQVFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsYUFBYTtJQUNsRCxZQUFZLE9BQU8sR0FBRywwQkFBMEI7UUFDOUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTEQsOENBS0M7QUFFRCwyREFBMkQ7QUFDM0QsTUFBYSxXQUFZLFNBQVEsYUFBYTtJQUM1QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBTEQsa0NBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBsYXRmb3JtLVNESyBlcnJvciBoaWVyYXJjaHkuIENvbnN1bWVycyBzaG91bGQgYGluc3RhbmNlb2ZgLWNoZWNrXG4gKiBhZ2FpbnN0IGBQbGF0Zm9ybUVycm9yYCBmb3IgdGhlIGNhdGNoLWFsbCBhbmQgdGhlIHNwZWNpZmljIHN1YmNsYXNzZXNcbiAqIGZvciB0aGUgY2FzZXMgdGhleSBjYXJlIGFib3V0LiBTdGF0dXMgY29kZXMgbWlycm9yIHRoZSBIVFRQIHJlc3BvbnNlc1xuICogdGhlIHBsYXRmb3JtIEFQSSBhY3R1YWxseSBlbWl0cywgc28gYGVycm9yLnN0YXR1c2AgaXMgdGhlIHNpbXBsZXN0XG4gKiByb3V0aW5nIHNpZ25hbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsYXRmb3JtRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY2F1c2U/OiB1bmtub3duO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiB7IHN0YXR1cz86IG51bWJlcjsgY2F1c2U/OiB1bmtub3duIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnUGxhdGZvcm1FcnJvcic7XG4gICAgdGhpcy5zdGF0dXMgPSBvcHRzPy5zdGF0dXM7XG4gICAgdGhpcy5jYXVzZSA9IG9wdHM/LmNhdXNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yIGV4dGVuZHMgUGxhdGZvcm1FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnYXV0aGVudGljYXRpb24gZmFpbGVkJywgb3B0cz86IHsgY2F1c2U/OiB1bmtub3duIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDAxLCBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ0F1dGhlbnRpY2F0aW9uRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgLyoqIFdoZW4gdGhlIEFQSSByZXR1cm5zIGEgYHJlcXVpcmVkU2NvcGVgLCBzdXJmYWNlIGl0IGZvciB0aGUgY29uc3VtZXIuICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkU2NvcGU/OiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2UgPSAnYXV0aG9yaXphdGlvbiBmYWlsZWQnLFxuICAgIG9wdHM/OiB7IHJlcXVpcmVkU2NvcGU/OiBzdHJpbmc7IGNhdXNlPzogdW5rbm93biB9LFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDAzLCBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ0F1dGhvcml6YXRpb25FcnJvcic7XG4gICAgdGhpcy5yZXF1aXJlZFNjb3BlID0gb3B0cz8ucmVxdWlyZWRTY29wZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ25vdCBmb3VuZCcsIG9wdHM/OiB7IGNhdXNlPzogdW5rbm93biB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQwNCwgY2F1c2U6IG9wdHM/LmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdOb3RGb3VuZEVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgUGxhdGZvcm1FcnJvciB7XG4gIC8qKiBQZXItZmllbGQgaXNzdWVzIGluIHRoZSBwbGF0Zm9ybSdzIHN0YW5kYXJkIGBpc3N1ZXNgIGFycmF5IHNoYXBlLiAqL1xuICByZWFkb25seSBpc3N1ZXM/OiB1bmtub3duW107XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAndmFsaWRhdGlvbiBmYWlsZWQnLCBvcHRzPzogeyBpc3N1ZXM/OiB1bmtub3duW107IGNhdXNlPzogdW5rbm93biB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQyMiwgY2F1c2U6IG9wdHM/LmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdWYWxpZGF0aW9uRXJyb3InO1xuICAgIHRoaXMuaXNzdWVzID0gb3B0cz8uaXNzdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYXRlTGltaXRFcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICAvKiogU2Vjb25kcyB0aGUgY29uc3VtZXIgc2hvdWxkIGJhY2sgb2ZmIChmcm9tIGBSZXRyeS1BZnRlcmApLiAqL1xuICByZWFkb25seSByZXRyeUFmdGVyPzogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ3JhdGUgbGltaXRlZCcsIG9wdHM/OiB7IHJldHJ5QWZ0ZXI/OiBudW1iZXI7IGNhdXNlPzogdW5rbm93biB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQyOSwgY2F1c2U6IG9wdHM/LmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdSYXRlTGltaXRFcnJvcic7XG4gICAgdGhpcy5yZXRyeUFmdGVyID0gb3B0cz8ucmV0cnlBZnRlcjtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSBTREsgZGV0ZWN0cyBhbiBleHBpcmVkIGFjY2VzcyB0b2tlbiBiZWZvcmUgdGhlIHJlcXVlc3RcbiAqIGlzIHNlbnQuIENhbGxlcnMgdXNpbmcgYSBzdGF0aWMgZXh0ZXJuYWxseS1zdXBwbGllZCB0b2tlbiBtdXN0IHVwZGF0ZVxuICogdGhlIGNvbmZpZyB3aXRoIGEgZnJlc2ggb25lLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW5FeHBpcmVkRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdhY2Nlc3MgdG9rZW4gaGFzIGV4cGlyZWQnKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnVG9rZW5FeHBpcmVkRXJyb3InO1xuICB9XG59XG5cbi8qKiBUaHJvd24gZm9yIG1pc3NpbmcgLyBpbmNvbnNpc3RlbnQgU0RLIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgY2xhc3MgQ29uZmlnRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ0Vycm9yJztcbiAgfVxufVxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxLQUFLO0lBQzdCLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQVc7SUFDekIsWUFBWSxPQUFlLEVBQUUsSUFBMkM7UUFDdEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFURCxzQ0FTQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsYUFBYTtJQUNwRCxZQUFZLE9BQU8sR0FBRyx1QkFBdUIsRUFBRSxJQUEwQjtRQUN2RSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFMRCxrREFLQztBQUVELE1BQWEsa0JBQW1CLFNBQVEsYUFBYTtJQUNuRCwyRUFBMkU7SUFDbEUsYUFBYSxDQUFVO0lBQ2hDLFlBQ0UsT0FBTyxHQUFHLHNCQUFzQixFQUNoQyxJQUFrRDtRQUVsRCxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksRUFBRSxhQUFhLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBWEQsZ0RBV0M7QUFFRCxNQUFhLGFBQWMsU0FBUSxhQUFhO0lBQzlDLFlBQVksT0FBTyxHQUFHLFdBQVcsRUFBRSxJQUEwQjtRQUMzRCxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsc0NBS0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsYUFBYTtJQUNoRCx3RUFBd0U7SUFDL0QsTUFBTSxDQUFhO0lBQzVCLFlBQVksT0FBTyxHQUFHLG1CQUFtQixFQUFFLElBQThDO1FBQ3ZGLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFSRCwwQ0FRQztBQUVELE1BQWEsY0FBZSxTQUFRLGFBQWE7SUFDL0MsaUVBQWlFO0lBQ3hELFVBQVUsQ0FBVTtJQUM3QixZQUFZLE9BQU8sR0FBRyxjQUFjLEVBQUUsSUFBK0M7UUFDbkYsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQVJELHdDQVFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsYUFBYTtJQUNsRCxZQUFZLE9BQU8sR0FBRywwQkFBMEI7UUFDOUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTEQsOENBS0M7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsYUFBYTtJQUNsRCxzREFBc0Q7SUFDN0MsY0FBYyxDQUFXO0lBQ2xDLFlBQ0UsT0FBTyxHQUFHLHNCQUFzQixFQUNoQyxJQUFxRDtRQUVyRCxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFYRCw4Q0FXQztBQUVELDJEQUEyRDtBQUMzRCxNQUFhLFdBQVksU0FBUSxhQUFhO0lBQzVDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFMRCxrQ0FLQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGxhdGZvcm0tU0RLIGVycm9yIGhpZXJhcmNoeS4gQ29uc3VtZXJzIHNob3VsZCBgaW5zdGFuY2VvZmAtY2hlY2tcbiAqIGFnYWluc3QgYFBsYXRmb3JtRXJyb3JgIGZvciB0aGUgY2F0Y2gtYWxsIGFuZCB0aGUgc3BlY2lmaWMgc3ViY2xhc3Nlc1xuICogZm9yIHRoZSBjYXNlcyB0aGV5IGNhcmUgYWJvdXQuIFN0YXR1cyBjb2RlcyBtaXJyb3IgdGhlIEhUVFAgcmVzcG9uc2VzXG4gKiB0aGUgcGxhdGZvcm0gQVBJIGFjdHVhbGx5IGVtaXRzLCBzbyBgZXJyb3Iuc3RhdHVzYCBpcyB0aGUgc2ltcGxlc3RcbiAqIHJvdXRpbmcgc2lnbmFsLlxuICovXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgc3RhdHVzPzogbnVtYmVyO1xuICByZWFkb25seSBjYXVzZT86IHVua25vd247XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgb3B0cz86IHsgc3RhdHVzPzogbnVtYmVyOyBjYXVzZT86IHVua25vd24gfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdQbGF0Zm9ybUVycm9yJztcbiAgICB0aGlzLnN0YXR1cyA9IG9wdHM/LnN0YXR1cztcbiAgICB0aGlzLmNhdXNlID0gb3B0cz8uY2F1c2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdhdXRoZW50aWNhdGlvbiBmYWlsZWQnLCBvcHRzPzogeyBjYXVzZT86IHVua25vd24gfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UsIHsgc3RhdHVzOiA0MDEsIGNhdXNlOiBvcHRzPy5jYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQXV0aGVudGljYXRpb25FcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhvcml6YXRpb25FcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICAvKiogV2hlbiB0aGUgQVBJIHJldHVybnMgYSBgcmVxdWlyZWRTY29wZWAsIHN1cmZhY2UgaXQgZm9yIHRoZSBjb25zdW1lci4gKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRTY29wZT86IHN0cmluZztcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZSA9ICdhdXRob3JpemF0aW9uIGZhaWxlZCcsXG4gICAgb3B0cz86IHsgcmVxdWlyZWRTY29wZT86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH0sXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UsIHsgc3RhdHVzOiA0MDMsIGNhdXNlOiBvcHRzPy5jYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQXV0aG9yaXphdGlvbkVycm9yJztcbiAgICB0aGlzLnJlcXVpcmVkU2NvcGUgPSBvcHRzPy5yZXF1aXJlZFNjb3BlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgUGxhdGZvcm1FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnbm90IGZvdW5kJywgb3B0cz86IHsgY2F1c2U/OiB1bmtub3duIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDA0LCBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ05vdEZvdW5kRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgLyoqIFBlci1maWVsZCBpc3N1ZXMgaW4gdGhlIHBsYXRmb3JtJ3Mgc3RhbmRhcmQgYGlzc3Vlc2AgYXJyYXkgc2hhcGUuICovXG4gIHJlYWRvbmx5IGlzc3Vlcz86IHVua25vd25bXTtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCcsIG9wdHM/OiB7IGlzc3Vlcz86IHVua25vd25bXTsgY2F1c2U/OiB1bmtub3duIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDIyLCBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gICAgdGhpcy5pc3N1ZXMgPSBvcHRzPy5pc3N1ZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhdGVMaW1pdEVycm9yIGV4dGVuZHMgUGxhdGZvcm1FcnJvciB7XG4gIC8qKiBTZWNvbmRzIHRoZSBjb25zdW1lciBzaG91bGQgYmFjayBvZmYgKGZyb20gYFJldHJ5LUFmdGVyYCkuICovXG4gIHJlYWRvbmx5IHJldHJ5QWZ0ZXI/OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAncmF0ZSBsaW1pdGVkJywgb3B0cz86IHsgcmV0cnlBZnRlcj86IG51bWJlcjsgY2F1c2U/OiB1bmtub3duIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDI5LCBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ1JhdGVMaW1pdEVycm9yJztcbiAgICB0aGlzLnJldHJ5QWZ0ZXIgPSBvcHRzPy5yZXRyeUFmdGVyO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gdGhlIFNESyBkZXRlY3RzIGFuIGV4cGlyZWQgYWNjZXNzIHRva2VuIGJlZm9yZSB0aGUgcmVxdWVzdFxuICogaXMgc2VudC4gQ2FsbGVycyB1c2luZyBhIHN0YXRpYyBleHRlcm5hbGx5LXN1cHBsaWVkIHRva2VuIG11c3QgdXBkYXRlXG4gKiB0aGUgY29uZmlnIHdpdGggYSBmcmVzaCBvbmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbkV4cGlyZWRFcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ2FjY2VzcyB0b2tlbiBoYXMgZXhwaXJlZCcpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDAxIH0pO1xuICAgIHRoaXMubmFtZSA9ICdUb2tlbkV4cGlyZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBwdWJsaXNoaW5nIHRvIHRoZSBwbGF0Zm9ybSBldmVudCBidXMgZmFpbHMuXG4gKlxuICogVGhlIGV2ZW50cyBjbGllbnQgZG9lcyBOT1Qgc3dhbGxvdyBwdWJsaXNoIGZhaWx1cmVzIOKAlCBmYWlsLW9wZW4gaXMgdGhlXG4gKiBjYWxsZXIncyBkZWNpc2lvbiwgYW5kIGl0IGRpZmZlcnMgYnkgY2FsbCBzaXRlIChhIGxlZ2FjeSBvcmRlciBmbG93XG4gKiBtdXN0IG5ldmVyIGJsb2NrIG9uIHRoZSBidXM7IGEgcGxhdGZvcm0gc2VydmljZSByZWNvbmNpbGluZyBzdGF0ZSBtYXlcbiAqIHdlbGwgd2FudCB0byByZXRyeSkuIGBmYWlsZWRgIGNhcnJpZXMgdGhlIHBlci1ldmVudCBicmVha2Rvd24gZm9yIGFcbiAqIHBhcnRpYWxseS1mYWlsZWQgYHB1Ymxpc2hCYXRjaGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudFB1Ymxpc2hFcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICAvKiogRW52ZWxvcGUgaWRzIHRoYXQgZGlkIG5vdCBtYWtlIGl0IG9udG8gdGhlIGJ1cy4gKi9cbiAgcmVhZG9ubHkgZmFpbGVkRXZlbnRJZHM6IHN0cmluZ1tdO1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlID0gJ2V2ZW50IHB1Ymxpc2ggZmFpbGVkJyxcbiAgICBvcHRzPzogeyBmYWlsZWRFdmVudElkcz86IHN0cmluZ1tdOyBjYXVzZT86IHVua25vd24gfSxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ0V2ZW50UHVibGlzaEVycm9yJztcbiAgICB0aGlzLmZhaWxlZEV2ZW50SWRzID0gb3B0cz8uZmFpbGVkRXZlbnRJZHMgPz8gW107XG4gIH1cbn1cblxuLyoqIFRocm93biBmb3IgbWlzc2luZyAvIGluY29uc2lzdGVudCBTREsgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWdFcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29uZmlnRXJyb3InO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,81 @@
1
+ import { SNSClient } from '@aws-sdk/client-sns';
2
+ import { type PlatformEvent } from './schema';
3
+ /** What a call site supplies; the SDK derives everything else. */
4
+ export interface PublishOptions {
5
+ /** uEngage business id the event belongs to. */
6
+ tenantId: string;
7
+ /**
8
+ * When the thing happened, if it wasn't now — e.g. replaying a
9
+ * transition read back off a DB row. UTC ISO 8601. Defaults to the
10
+ * moment `publish()` was called.
11
+ */
12
+ occurredAt?: string;
13
+ /** Overrides the client-level `source` for this one event. */
14
+ source?: string;
15
+ }
16
+ export interface PublishBatchInput extends PublishOptions {
17
+ type: string;
18
+ data: Record<string, unknown>;
19
+ }
20
+ export interface EventsClientInput {
21
+ /**
22
+ * Bus topic ARN. Defaults to `PLATFORM_EVENTS_TOPIC_ARN`.
23
+ */
24
+ topicArn?: string;
25
+ /**
26
+ * AWS region. Defaults to the region embedded in `topicArn`, then
27
+ * `AWS_REGION` / `AWS_DEFAULT_REGION`. Rarely needs setting.
28
+ */
29
+ region?: string;
30
+ /**
31
+ * Which system is emitting. Defaults to `PLATFORM_EVENTS_SOURCE`, then
32
+ * `SERVICE_NAME` (set on every platform Lambda by `LambdaService`),
33
+ * then `'platform-sdk'`.
34
+ */
35
+ source?: string;
36
+ /** Inject a pre-built SNS client (tests, custom credentials/retry config). */
37
+ snsClient?: SNSClient;
38
+ }
39
+ export interface EventsClient {
40
+ /**
41
+ * Publish one event onto the platform event bus.
42
+ *
43
+ * Builds the envelope (monotonic ULID `id`, `occurredAt`, `version`,
44
+ * `domain` derived from the `type` prefix), validates it, and publishes
45
+ * with `type` / `domain` / `source` set as SNS message attributes so
46
+ * consumer filter policies match without deserialising the body.
47
+ *
48
+ * THROWS on failure — it does not fail open. Fail-open is the caller's
49
+ * call and it differs by call site: a legacy order-status transition
50
+ * must never be blocked by a bus outage (wrap in try/catch and log),
51
+ * whereas a service that needs the event delivered may want to retry.
52
+ * The PHP SDK's buffered client makes the fail-open choice explicitly
53
+ * for the legacy request path.
54
+ *
55
+ * @throws {ConfigError} no topic ARN configured
56
+ * @throws {ValidationError} the envelope failed schema validation
57
+ * @throws {EventPublishError} SNS rejected or errored on the publish
58
+ */
59
+ publish(type: string, data: Record<string, unknown>, opts: PublishOptions): Promise<PlatformEvent>;
60
+ /**
61
+ * Publish many events in one round trip, chunked at SNS's 10-per-call
62
+ * `PublishBatch` limit.
63
+ *
64
+ * All-or-nothing it is NOT: chunks are attempted independently, and a
65
+ * partial failure throws `EventPublishError` carrying the ids that did
66
+ * not land in `failedEventIds`. Envelope validation runs over the whole
67
+ * input first, so a malformed event fails the call before anything is
68
+ * published.
69
+ *
70
+ * @throws {ConfigError} no topic ARN configured
71
+ * @throws {ValidationError} any envelope failed schema validation
72
+ * @throws {EventPublishError} one or more events did not reach the bus
73
+ */
74
+ publishBatch(events: PublishBatchInput[]): Promise<PlatformEvent[]>;
75
+ }
76
+ /**
77
+ * Build an isolated events client. Reads `PLATFORM_EVENTS_TOPIC_ARN` and
78
+ * friends from the environment for anything not passed explicitly, so a
79
+ * Lambda whose deploy stack injected the ARN needs no arguments.
80
+ */
81
+ export declare function createEventsClient(input?: EventsClientInput): EventsClient;