@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.
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEventsClient = createEventsClient;
4
+ const client_sns_1 = require("@aws-sdk/client-sns");
5
+ const ulid_1 = require("ulid");
6
+ const errors_1 = require("../errors");
7
+ const schema_1 = require("./schema");
8
+ /** SNS caps PublishBatch at 10 entries per call. */
9
+ const SNS_BATCH_MAX = 10;
10
+ /**
11
+ * SNS caps a single message at 256 KB, and a whole PublishBatch request
12
+ * at the same 256 KB across all its entries.
13
+ */
14
+ const SNS_MAX_BYTES = 262_144;
15
+ /**
16
+ * Headroom left for the `type` / `domain` / `source` message attributes,
17
+ * which count toward the limit alongside the body. A few hundred bytes
18
+ * covers them; being conservative here costs nothing, since an envelope
19
+ * anywhere near the cap is a call-site mistake either way.
20
+ */
21
+ const ATTRIBUTE_ALLOWANCE_BYTES = 1_024;
22
+ const MAX_MESSAGE_BYTES = SNS_MAX_BYTES - ATTRIBUTE_ALLOWANCE_BYTES;
23
+ /**
24
+ * Byte length of a UTF-8 string. `TextEncoder` rather than
25
+ * `Buffer.byteLength` so this file carries no Node built-in.
26
+ */
27
+ const encoder = new TextEncoder();
28
+ function byteLength(value) {
29
+ return encoder.encode(value).length;
30
+ }
31
+ /**
32
+ * Monotonic within this process: two events minted in the same
33
+ * millisecond still sort in emission order. Downstream consumers use the
34
+ * envelope `id` as the ordering and dedupe key, so this is load-bearing,
35
+ * not a nicety.
36
+ */
37
+ const nextUlid = (0, ulid_1.monotonicFactory)();
38
+ /**
39
+ * Build an isolated events client. Reads `PLATFORM_EVENTS_TOPIC_ARN` and
40
+ * friends from the environment for anything not passed explicitly, so a
41
+ * Lambda whose deploy stack injected the ARN needs no arguments.
42
+ */
43
+ function createEventsClient(input = {}) {
44
+ let client = input.snsClient;
45
+ function topicArn() {
46
+ const arn = input.topicArn ?? env('PLATFORM_EVENTS_TOPIC_ARN');
47
+ if (!arn) {
48
+ throw new errors_1.ConfigError('events.publish: no topic ARN. Pass {topicArn} to createEventsClient or set PLATFORM_EVENTS_TOPIC_ARN.');
49
+ }
50
+ return arn;
51
+ }
52
+ function sns() {
53
+ if (!client) {
54
+ const region = input.region ?? regionFromArn(topicArn()) ?? env('AWS_REGION') ?? env('AWS_DEFAULT_REGION');
55
+ client = new client_sns_1.SNSClient(region ? { region } : {});
56
+ }
57
+ return client;
58
+ }
59
+ function source(override) {
60
+ return (override ??
61
+ input.source ??
62
+ env('PLATFORM_EVENTS_SOURCE') ??
63
+ env('SERVICE_NAME') ??
64
+ 'platform-sdk');
65
+ }
66
+ function buildEnvelope(type, data, opts) {
67
+ const domain = (0, schema_1.domainForEventType)(type);
68
+ if (!domain) {
69
+ throw new errors_1.ValidationError(`events.publish: cannot route event type "${type}". It must be a dotted ` +
70
+ '"<resource>.<operation>" name whose resource maps to a known bus domain ' +
71
+ '(order, customer, menu, offer, loyalty, usage). Adding a domain is a one-line ' +
72
+ 'edit in events/schema.ts and its two mirrors.');
73
+ }
74
+ const candidate = {
75
+ id: nextUlid(),
76
+ type,
77
+ domain,
78
+ source: source(opts.source),
79
+ version: schema_1.PLATFORM_EVENT_VERSION,
80
+ occurredAt: opts.occurredAt ?? isoNow(),
81
+ tenantId: opts.tenantId,
82
+ data,
83
+ };
84
+ const result = schema_1.platformEventSchema.safeParse(candidate);
85
+ if (!result.success) {
86
+ throw new errors_1.ValidationError(`events.publish: invalid envelope for "${type}"`, {
87
+ issues: result.error.issues,
88
+ });
89
+ }
90
+ return result.data;
91
+ }
92
+ /**
93
+ * Serialize and size-check one envelope.
94
+ *
95
+ * Checked before the publish rather than after the rejection because
96
+ * SNS's own error for an oversized message names neither the event nor
97
+ * the offending field, and on the PHP side the same failure disappears
98
+ * into `error_log`. Better to say which event and how big.
99
+ */
100
+ function serialize(event) {
101
+ const message = JSON.stringify(event);
102
+ const size = byteLength(message);
103
+ if (size > MAX_MESSAGE_BYTES) {
104
+ throw new errors_1.ValidationError(`events.publish: event ${event.id} ("${event.type}") serializes to ${size} bytes, ` +
105
+ `over the ${MAX_MESSAGE_BYTES}-byte ceiling (SNS caps a message at 256KB including ` +
106
+ 'attributes). Put the payload somewhere addressable and reference it from `data`.');
107
+ }
108
+ return message;
109
+ }
110
+ return {
111
+ async publish(type, data, opts) {
112
+ const event = buildEnvelope(type, data, opts);
113
+ const message = serialize(event);
114
+ const arn = topicArn();
115
+ try {
116
+ await sns().send(new client_sns_1.PublishCommand({
117
+ TopicArn: arn,
118
+ Message: message,
119
+ MessageAttributes: messageAttributes(event),
120
+ }));
121
+ }
122
+ catch (err) {
123
+ throw new errors_1.EventPublishError(`events.publish: SNS publish failed for "${type}"`, {
124
+ failedEventIds: [event.id],
125
+ cause: err,
126
+ });
127
+ }
128
+ return event;
129
+ },
130
+ async publishBatch(events) {
131
+ if (events.length === 0)
132
+ return [];
133
+ const envelopes = events.map((e) => buildEnvelope(e.type, e.data, e));
134
+ // Serialize (and size-check) everything up front, so an oversized
135
+ // event fails the call before any of its siblings are published.
136
+ const messages = new Map(envelopes.map((event) => [event.id, serialize(event)]));
137
+ const arn = topicArn();
138
+ const failed = [];
139
+ let firstError;
140
+ for (const group of chunkByBytes(envelopes, messages)) {
141
+ const entries = group.map((event) => ({
142
+ Id: event.id,
143
+ Message: messages.get(event.id),
144
+ MessageAttributes: messageAttributes(event),
145
+ }));
146
+ try {
147
+ const resp = await sns().send(new client_sns_1.PublishBatchCommand({ TopicArn: arn, PublishBatchRequestEntries: entries }));
148
+ for (const f of resp.Failed ?? []) {
149
+ if (f.Id)
150
+ failed.push(f.Id);
151
+ }
152
+ }
153
+ catch (err) {
154
+ firstError = firstError ?? err;
155
+ for (const event of group)
156
+ failed.push(event.id);
157
+ }
158
+ }
159
+ if (failed.length > 0) {
160
+ throw new errors_1.EventPublishError(`events.publishBatch: ${failed.length}/${envelopes.length} event(s) did not reach the bus`, { failedEventIds: failed, cause: firstError });
161
+ }
162
+ return envelopes;
163
+ },
164
+ };
165
+ }
166
+ function messageAttributes(event) {
167
+ return {
168
+ type: { DataType: 'String', StringValue: event.type },
169
+ domain: { DataType: 'String', StringValue: event.domain },
170
+ source: { DataType: 'String', StringValue: event.source },
171
+ };
172
+ }
173
+ /** `arn:aws:sns:<region>:<account>:<name>` → `<region>`. */
174
+ function regionFromArn(arn) {
175
+ const parts = arn.split(':');
176
+ return parts.length >= 4 && parts[3] ? parts[3] : undefined;
177
+ }
178
+ /** UTC ISO 8601, seconds precision — the format the envelope schema pins. */
179
+ function isoNow() {
180
+ return new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
181
+ }
182
+ function env(name) {
183
+ if (typeof process === 'undefined')
184
+ return undefined;
185
+ const value = process.env?.[name];
186
+ return value === '' ? undefined : value;
187
+ }
188
+ /**
189
+ * Group envelopes into PublishBatch calls bounded by BOTH limits: at most
190
+ * 10 entries, and at most 256 KB of combined payload.
191
+ *
192
+ * The byte bound matters as soon as payloads get rich — ten 30 KB
193
+ * envelopes are each individually legal and collectively over the
194
+ * request cap, and SNS rejects the whole call rather than the overflow.
195
+ */
196
+ function chunkByBytes(envelopes, messages) {
197
+ const out = [];
198
+ let current = [];
199
+ let currentBytes = 0;
200
+ for (const event of envelopes) {
201
+ const size = byteLength(messages.get(event.id)) + ATTRIBUTE_ALLOWANCE_BYTES;
202
+ const full = current.length >= SNS_BATCH_MAX;
203
+ const wouldOverflow = current.length > 0 && currentBytes + size > SNS_MAX_BYTES;
204
+ if (full || wouldOverflow) {
205
+ out.push(current);
206
+ current = [];
207
+ currentBytes = 0;
208
+ }
209
+ current.push(event);
210
+ currentBytes += size;
211
+ }
212
+ if (current.length > 0)
213
+ out.push(current);
214
+ return out;
215
+ }
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEySUEsZ0RBa0pDO0FBN1JELG9EQU02QjtBQUM3QiwrQkFBd0M7QUFDeEMsc0NBQTRFO0FBQzVFLHFDQUtrQjtBQUVsQixvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBRXpCOzs7R0FHRztBQUNILE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUU5Qjs7Ozs7R0FLRztBQUNILE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBRXhDLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxHQUFHLHlCQUF5QixDQUFDO0FBRXBFOzs7R0FHRztBQUNILE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFbEMsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUMvQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sUUFBUSxHQUFHLElBQUEsdUJBQWdCLEdBQUUsQ0FBQztBQW1GcEM7Ozs7R0FJRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFFBQTJCLEVBQUU7SUFDOUQsSUFBSSxNQUFNLEdBQTBCLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFFcEQsU0FBUyxRQUFRO1FBQ2YsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxNQUFNLElBQUksb0JBQVcsQ0FDbkIsdUdBQXVHLENBQ3hHLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsU0FBUyxHQUFHO1FBQ1YsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1os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RSxDQUFDO0lBQ2xDLElBQUksT0FBTyxHQUFvQixFQUFFLENBQUM7SUFDbEMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRXJCLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBVyxDQUFDLEdBQUcseUJBQXlCLENBQUM7UUFDdEYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksWUFBWSxHQUFHLElBQUksR0FBRyxhQUFhLENBQUM7UUFDaEYsSUFBSSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7WUFDMUIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQixPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixZQUFZLElBQUksSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgU05TQ2xpZW50LFxuICBQdWJsaXNoQ29tbWFuZCxcbiAgUHVibGlzaEJhdGNoQ29tbWFuZCxcbiAgdHlwZSBQdWJsaXNoQmF0Y2hSZXF1ZXN0RW50cnksXG4gIHR5cGUgTWVzc2FnZUF0dHJpYnV0ZVZhbHVlLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc25zJztcbmltcG9ydCB7IG1vbm90b25pY0ZhY3RvcnkgfSBmcm9tICd1bGlkJztcbmltcG9ydCB7IENvbmZpZ0Vycm9yLCBFdmVudFB1Ymxpc2hFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7XG4gIGRvbWFpbkZvckV2ZW50VHlwZSxcbiAgcGxhdGZvcm1FdmVudFNjaGVtYSxcbiAgUExBVEZPUk1fRVZFTlRfVkVSU0lPTixcbiAgdHlwZSBQbGF0Zm9ybUV2ZW50LFxufSBmcm9tICcuL3NjaGVtYSc7XG5cbi8qKiBTTlMgY2FwcyBQdWJsaXNoQmF0Y2ggYXQgMTAgZW50cmllcyBwZXIgY2FsbC4gKi9cbmNvbnN0IFNOU19CQVRDSF9NQVggPSAxMDtcblxuLyoqXG4gKiBTTlMgY2FwcyBhIHNpbmdsZSBtZXNzYWdlIGF0IDI1NiBLQiwgYW5kIGEgd2hvbGUgUHVibGlzaEJhdGNoIHJlcXVlc3RcbiAqIGF0IHRoZSBzYW1lIDI1NiBLQiBhY3Jvc3MgYWxsIGl0cyBlbnRyaWVzLlxuICovXG5jb25zdCBTTlNfTUFYX0JZVEVTID0gMjYyXzE0NDtcblxuLyoqXG4gKiBIZWFkcm9vbSBsZWZ0IGZvciB0aGUgYHR5cGVgIC8gYGRvbWFpbmAgLyBgc291cmNlYCBtZXNzYWdlIGF0dHJpYnV0ZXMsXG4gKiB3aGljaCBjb3VudCB0b3dhcmQgdGhlIGxpbWl0IGFsb25nc2lkZSB0aGUgYm9keS4gQSBmZXcgaHVuZHJlZCBieXRlc1xuICogY292ZXJzIHRoZW07IGJlaW5nIGNvbnNlcnZhdGl2ZSBoZXJlIGNvc3RzIG5vdGhpbmcsIHNpbmNlIGFuIGVudmVsb3BlXG4gKiBhbnl3aGVyZSBuZWFyIHRoZSBjYXAgaXMgYSBjYWxsLXNpdGUgbWlzdGFrZSBlaXRoZXIgd2F5LlxuICovXG5jb25zdCBBVFRSSUJVVEVfQUxMT1dBTkNFX0JZVEVTID0gMV8wMjQ7XG5cbmNvbnN0IE1BWF9NRVNTQUdFX0JZVEVTID0gU05TX01BWF9CWVRFUyAtIEFUVFJJQlVURV9BTExPV0FOQ0VfQllURVM7XG5cbi8qKlxuICogQnl0ZSBsZW5ndGggb2YgYSBVVEYtOCBzdHJpbmcuIGBUZXh0RW5jb2RlcmAgcmF0aGVyIHRoYW5cbiAqIGBCdWZmZXIuYnl0ZUxlbmd0aGAgc28gdGhpcyBmaWxlIGNhcnJpZXMgbm8gTm9kZSBidWlsdC1pbi5cbiAqL1xuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG5mdW5jdGlvbiBieXRlTGVuZ3RoKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gZW5jb2Rlci5lbmNvZGUodmFsdWUpLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBNb25vdG9uaWMgd2l0aGluIHRoaXMgcHJvY2VzczogdHdvIGV2ZW50cyBtaW50ZWQgaW4gdGhlIHNhbWVcbiAqIG1pbGxpc2Vjb25kIHN0aWxsIHNvcnQgaW4gZW1pc3Npb24gb3JkZXIuIERvd25zdHJlYW0gY29uc3VtZXJzIHVzZSB0aGVcbiAqIGVudmVsb3BlIGBpZGAgYXMgdGhlIG9yZGVyaW5nIGFuZCBkZWR1cGUga2V5LCBzbyB0aGlzIGlzIGxvYWQtYmVhcmluZyxcbiAqIG5vdCBhIG5pY2V0eS5cbiAqL1xuY29uc3QgbmV4dFVsaWQgPSBtb25vdG9uaWNGYWN0b3J5KCk7XG5cbi8qKiBXaGF0IGEgY2FsbCBzaXRlIHN1cHBsaWVzOyB0aGUgU0RLIGRlcml2ZXMgZXZlcnl0aGluZyBlbHNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaXNoT3B0aW9ucyB7XG4gIC8qKiB1RW5nYWdlIGJ1c2luZXNzIGlkIHRoZSBldmVudCBiZWxvbmdzIHRvLiAqL1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0aGUgdGhpbmcgaGFwcGVuZWQsIGlmIGl0IHdhc24ndCBub3cg4oCUIGUuZy4gcmVwbGF5aW5nIGFcbiAgICogdHJhbnNpdGlvbiByZWFkIGJhY2sgb2ZmIGEgREIgcm93LiBVVEMgSVNPIDg2MDEuIERlZmF1bHRzIHRvIHRoZVxuICAgKiBtb21lbnQgYHB1Ymxpc2goKWAgd2FzIGNhbGxlZC5cbiAgICovXG4gIG9jY3VycmVkQXQ/OiBzdHJpbmc7XG4gIC8qKiBPdmVycmlkZXMgdGhlIGNsaWVudC1sZXZlbCBgc291cmNlYCBmb3IgdGhpcyBvbmUgZXZlbnQuICovXG4gIHNvdXJjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaXNoQmF0Y2hJbnB1dCBleHRlbmRzIFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogc3RyaW5nO1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudHNDbGllbnRJbnB1dCB7XG4gIC8qKlxuICAgKiBCdXMgdG9waWMgQVJOLiBEZWZhdWx0cyB0byBgUExBVEZPUk1fRVZFTlRTX1RPUElDX0FSTmAuXG4gICAqL1xuICB0b3BpY0Fybj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFXUyByZWdpb24uIERlZmF1bHRzIHRvIHRoZSByZWdpb24gZW1iZWRkZWQgaW4gYHRvcGljQXJuYCwgdGhlblxuICAgKiBgQVdTX1JFR0lPTmAgLyBgQVdTX0RFRkFVTFRfUkVHSU9OYC4gUmFyZWx5IG5lZWRzIHNldHRpbmcuXG4gICAqL1xuICByZWdpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGljaCBzeXN0ZW0gaXMgZW1pdHRpbmcuIERlZmF1bHRzIHRvIGBQTEFURk9STV9FVkVOVFNfU09VUkNFYCwgdGhlblxuICAgKiBgU0VSVklDRV9OQU1FYCAoc2V0IG9uIGV2ZXJ5IHBsYXRmb3JtIExhbWJkYSBieSBgTGFtYmRhU2VydmljZWApLFxuICAgKiB0aGVuIGAncGxhdGZvcm0tc2RrJ2AuXG4gICAqL1xuICBzb3VyY2U/OiBzdHJpbmc7XG4gIC8qKiBJbmplY3QgYSBwcmUtYnVpbHQgU05TIGNsaWVudCAodGVzdHMsIGN1c3RvbSBjcmVkZW50aWFscy9yZXRyeSBjb25maWcpLiAqL1xuICBzbnNDbGllbnQ/OiBTTlNDbGllbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRzQ2xpZW50IHtcbiAgLyoqXG4gICAqIFB1Ymxpc2ggb25lIGV2ZW50IG9udG8gdGhlIHBsYXRmb3JtIGV2ZW50IGJ1cy5cbiAgICpcbiAgICogQnVpbGRzIHRoZSBlbnZlbG9wZSAobW9ub3RvbmljIFVMSUQgYGlkYCwgYG9jY3VycmVkQXRgLCBgdmVyc2lvbmAsXG4gICAqIGBkb21haW5gIGRlcml2ZWQgZnJvbSB0aGUgYHR5cGVgIHByZWZpeCksIHZhbGlkYXRlcyBpdCwgYW5kIHB1Ymxpc2hlc1xuICAgKiB3aXRoIGB0eXBlYCAvIGBkb21haW5gIC8gYHNvdXJjZWAgc2V0IGFzIFNOUyBtZXNzYWdlIGF0dHJpYnV0ZXMgc29cbiAgICogY29uc3VtZXIgZmlsdGVyIHBvbGljaWVzIG1hdGNoIHdpdGhvdXQgZGVzZXJpYWxpc2luZyB0aGUgYm9keS5cbiAgICpcbiAgICogVEhST1dTIG9uIGZhaWx1cmUg4oCUIGl0IGRvZXMgbm90IGZhaWwgb3Blbi4gRmFpbC1vcGVuIGlzIHRoZSBjYWxsZXInc1xuICAgKiBjYWxsIGFuZCBpdCBkaWZmZXJzIGJ5IGNhbGwgc2l0ZTogYSBsZWdhY3kgb3JkZXItc3RhdHVzIHRyYW5zaXRpb25cbiAgICogbXVzdCBuZXZlciBiZSBibG9ja2VkIGJ5IGEgYnVzIG91dGFnZSAod3JhcCBpbiB0cnkvY2F0Y2ggYW5kIGxvZyksXG4gICAqIHdoZXJlYXMgYSBzZXJ2aWNlIHRoYXQgbmVlZHMgdGhlIGV2ZW50IGRlbGl2ZXJlZCBtYXkgd2FudCB0byByZXRyeS5cbiAgICogVGhlIFBIUCBTREsncyBidWZmZXJlZCBjbGllbnQgbWFrZXMgdGhlIGZhaWwtb3BlbiBjaG9pY2UgZXhwbGljaXRseVxuICAgKiBmb3IgdGhlIGxlZ2FjeSByZXF1ZXN0IHBhdGguXG4gICAqXG4gICAqIEB0aHJvd3Mge0NvbmZpZ0Vycm9yfSBubyB0b3BpYyBBUk4gY29uZmlndXJlZFxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IHRoZSBlbnZlbG9wZSBmYWlsZWQgc2NoZW1hIHZhbGlkYXRpb25cbiAgICogQHRocm93cyB7RXZlbnRQdWJsaXNoRXJyb3J9IFNOUyByZWplY3RlZCBvciBlcnJvcmVkIG9uIHRoZSBwdWJsaXNoXG4gICAqL1xuICBwdWJsaXNoKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBvcHRzOiBQdWJsaXNoT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxQbGF0Zm9ybUV2ZW50PjtcbiAgLyoqXG4gICAqIFB1Ymxpc2ggbWFueSBldmVudHMgaW4gb25lIHJvdW5kIHRyaXAsIGNodW5rZWQgYXQgU05TJ3MgMTAtcGVyLWNhbGxcbiAgICogYFB1Ymxpc2hCYXRjaGAgbGltaXQuXG4gICAqXG4gICAqIEFsbC1vci1ub3RoaW5nIGl0IGlzIE5PVDogY2h1bmtzIGFyZSBhdHRlbXB0ZWQgaW5kZXBlbmRlbnRseSwgYW5kIGFcbiAgICogcGFydGlhbCBmYWlsdXJlIHRocm93cyBgRXZlbnRQdWJsaXNoRXJyb3JgIGNhcnJ5aW5nIHRoZSBpZHMgdGhhdCBkaWRcbiAgICogbm90IGxhbmQgaW4gYGZhaWxlZEV2ZW50SWRzYC4gRW52ZWxvcGUgdmFsaWRhdGlvbiBydW5zIG92ZXIgdGhlIHdob2xlXG4gICAqIGlucHV0IGZpcnN0LCBzbyBhIG1hbGZvcm1lZCBldmVudCBmYWlscyB0aGUgY2FsbCBiZWZvcmUgYW55dGhpbmcgaXNcbiAgICogcHVibGlzaGVkLlxuICAgKlxuICAgKiBAdGhyb3dzIHtDb25maWdFcnJvcn0gbm8gdG9waWMgQVJOIGNvbmZpZ3VyZWRcbiAgICogQHRocm93cyB7VmFsaWRhdGlvbkVycm9yfSBhbnkgZW52ZWxvcGUgZmFpbGVkIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAqIEB0aHJvd3Mge0V2ZW50UHVibGlzaEVycm9yfSBvbmUgb3IgbW9yZSBldmVudHMgZGlkIG5vdCByZWFjaCB0aGUgYnVzXG4gICAqL1xuICBwdWJsaXNoQmF0Y2goZXZlbnRzOiBQdWJsaXNoQmF0Y2hJbnB1dFtdKTogUHJvbWlzZTxQbGF0Zm9ybUV2ZW50W10+O1xufVxuXG4vKipcbiAqIEJ1aWxkIGFuIGlzb2xhdGVkIGV2ZW50cyBjbGllbnQuIFJlYWRzIGBQTEFURk9STV9FVkVOVFNfVE9QSUNfQVJOYCBhbmRcbiAqIGZyaWVuZHMgZnJvbSB0aGUgZW52aXJvbm1lbnQgZm9yIGFueXRoaW5nIG5vdCBwYXNzZWQgZXhwbGljaXRseSwgc28gYVxuICogTGFtYmRhIHdob3NlIGRlcGxveSBzdGFjayBpbmplY3RlZCB0aGUgQVJOIG5lZWRzIG5vIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50c0NsaWVudChpbnB1dDogRXZlbnRzQ2xpZW50SW5wdXQgPSB7fSk6IEV2ZW50c0NsaWVudCB7XG4gIGxldCBjbGllbnQ6IFNOU0NsaWVudCB8IHVuZGVmaW5lZCA9IGlucHV0LnNuc0NsaWVudDtcblxuICBmdW5jdGlvbiB0b3BpY0FybigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFybiA9IGlucHV0LnRvcGljQXJuID8/IGVudignUExBVEZPUk1fRVZFTlRTX1RPUElDX0FSTicpO1xuICAgIGlmICghYXJuKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoXG4gICAgICAgICdldmVudHMucHVibGlzaDogbm8gdG9waWMgQVJOLiBQYXNzIHt0b3BpY0Fybn0gdG8gY3JlYXRlRXZlbnRzQ2xpZW50IG9yIHNldCBQTEFURk9STV9FVkVOVFNfVE9QSUNfQVJOLicsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gc25zKCk6IFNOU0NsaWVudCB7XG4gICAgaWYgKCFjbGllbnQpIHtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9XG4gICAgICAgIGlucHV0LnJlZ2lvbiA/PyByZWdpb25Gcm9tQXJuKHRvcGljQXJuKCkpID8/IGVudignQVdTX1JFR0lPTicpID8/IGVudignQVdTX0RFRkFVTFRfUkVHSU9OJyk7XG4gICAgICBjbGllbnQgPSBuZXcgU05TQ2xpZW50KHJlZ2lvbiA/IHsgcmVnaW9uIH0gOiB7fSk7XG4gICAgfVxuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBmdW5jdGlvbiBzb3VyY2Uob3ZlcnJpZGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBvdmVycmlkZSA/P1xuICAgICAgaW5wdXQuc291cmNlID8/XG4gICAgICBlbnYoJ1BMQVRGT1JNX0VWRU5UU19TT1VSQ0UnKSA/P1xuICAgICAgZW52KCdTRVJWSUNFX05BTUUnKSA/P1xuICAgICAgJ3BsYXRmb3JtLXNkaydcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRFbnZlbG9wZShcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgb3B0czogUHVibGlzaE9wdGlvbnMsXG4gICk6IFBsYXRmb3JtRXZlbnQge1xuICAgIGNvbnN0IGRvbWFpbiA9IGRvbWFpbkZvckV2ZW50VHlwZSh0eXBlKTtcbiAgICBpZiAoIWRvbWFpbikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYGV2ZW50cy5wdWJsaXNoOiBjYW5ub3Qgcm91dGUgZXZlbnQgdHlwZSBcIiR7dHlwZX1cIi4gSXQgbXVzdCBiZSBhIGRvdHRlZCBgICtcbiAgICAgICAgICAnXCI8cmVzb3VyY2U+LjxvcGVyYXRpb24+XCIgbmFtZSB3aG9zZSByZXNvdXJjZSBtYXBzIHRvIGEga25vd24gYnVzIGRvbWFpbiAnICtcbiAgICAgICAgICAnKG9yZGVyLCBjdXN0b21lciwgbWVudSwgb2ZmZXIsIGxveWFsdHksIHVzYWdlKS4gQWRkaW5nIGEgZG9tYWluIGlzIGEgb25lLWxpbmUgJyArXG4gICAgICAgICAgJ2VkaXQgaW4gZXZlbnRzL3NjaGVtYS50cyBhbmQgaXRzIHR3byBtaXJyb3JzLicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjYW5kaWRhdGUgPSB7XG4gICAgICBpZDogbmV4dFVsaWQoKSxcbiAgICAgIHR5cGUsXG4gICAgICBkb21haW4sXG4gICAgICBzb3VyY2U6IHNvdXJjZShvcHRzLnNvdXJjZSksXG4gICAgICB2ZXJzaW9uOiBQTEFURk9STV9FVkVOVF9WRVJTSU9OLFxuICAgICAgb2NjdXJyZWRBdDogb3B0cy5vY2N1cnJlZEF0ID8/IGlzb05vdygpLFxuICAgICAgdGVuYW50SWQ6IG9wdHMudGVuYW50SWQsXG4gICAgICBkYXRhLFxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0gcGxhdGZvcm1FdmVudFNjaGVtYS5zYWZlUGFyc2UoY2FuZGlkYXRlKTtcbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBldmVudHMucHVibGlzaDogaW52YWxpZCBlbnZlbG9wZSBmb3IgXCIke3R5cGV9XCJgLCB7XG4gICAgICAgIGlzc3VlczogcmVzdWx0LmVycm9yLmlzc3VlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIGFuZCBzaXplLWNoZWNrIG9uZSBlbnZlbG9wZS5cbiAgICpcbiAgICogQ2hlY2tlZCBiZWZvcmUgdGhlIHB1Ymxpc2ggcmF0aGVyIHRoYW4gYWZ0ZXIgdGhlIHJlamVjdGlvbiBiZWNhdXNlXG4gICAqIFNOUydzIG93biBlcnJvciBmb3IgYW4gb3ZlcnNpemVkIG1lc3NhZ2UgbmFtZXMgbmVpdGhlciB0aGUgZXZlbnQgbm9yXG4gICAqIHRoZSBvZmZlbmRpbmcgZmllbGQsIGFuZCBvbiB0aGUgUEhQIHNpZGUgdGhlIHNhbWUgZmFpbHVyZSBkaXNhcHBlYXJzXG4gICAqIGludG8gYGVycm9yX2xvZ2AuIEJldHRlciB0byBzYXkgd2hpY2ggZXZlbnQgYW5kIGhvdyBiaWcuXG4gICAqL1xuICBmdW5jdGlvbiBzZXJpYWxpemUoZXZlbnQ6IFBsYXRmb3JtRXZlbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG4gICAgY29uc3Qgc2l6ZSA9IGJ5dGVMZW5ndGgobWVzc2FnZSk7XG4gICAgaWYgKHNpemUgPiBNQVhfTUVTU0FHRV9CWVRFUykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYGV2ZW50cy5wdWJsaXNoOiBldmVudCAke2V2ZW50LmlkfSAoXCIke2V2ZW50LnR5cGV9XCIpIHNlcmlhbGl6ZXMgdG8gJHtzaXplfSBieXRlcywgYCArXG4gICAgICAgICAgYG92ZXIgdGhlICR7TUFYX01FU1NBR0VfQllURVN9LWJ5dGUgY2VpbGluZyAoU05TIGNhcHMgYSBtZXNzYWdlIGF0IDI1NktCIGluY2x1ZGluZyBgICtcbiAgICAgICAgICAnYXR0cmlidXRlcykuIFB1dCB0aGUgcGF5bG9hZCBzb21ld2hlcmUgYWRkcmVzc2FibGUgYW5kIHJlZmVyZW5jZSBpdCBmcm9tIGBkYXRhYC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHB1Ymxpc2godHlwZSwgZGF0YSwgb3B0cykge1xuICAgICAgY29uc3QgZXZlbnQgPSBidWlsZEVudmVsb3BlKHR5cGUsIGRhdGEsIG9wdHMpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHNlcmlhbGl6ZShldmVudCk7XG4gICAgICBjb25zdCBhcm4gPSB0b3BpY0FybigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc25zKCkuc2VuZChcbiAgICAgICAgICBuZXcgUHVibGlzaENvbW1hbmQoe1xuICAgICAgICAgICAgVG9waWNBcm46IGFybixcbiAgICAgICAgICAgIE1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICBNZXNzYWdlQXR0cmlidXRlczogbWVzc2FnZUF0dHJpYnV0ZXMoZXZlbnQpLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFdmVudFB1Ymxpc2hFcnJvcihgZXZlbnRzLnB1Ymxpc2g6IFNOUyBwdWJsaXNoIGZhaWxlZCBmb3IgXCIke3R5cGV9XCJgLCB7XG4gICAgICAgICAgZmFpbGVkRXZlbnRJZHM6IFtldmVudC5pZF0sXG4gICAgICAgICAgY2F1c2U6IGVycixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hCYXRjaChldmVudHMpIHtcbiAgICAgIGlmIChldmVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gICAgICBjb25zdCBlbnZlbG9wZXMgPSBldmVudHMubWFwKChlKSA9PiBidWlsZEVudmVsb3BlKGUudHlwZSwgZS5kYXRhLCBlKSk7XG4gICAgICAvLyBTZXJpYWxpemUgKGFuZCBzaXplLWNoZWNrKSBldmVyeXRoaW5nIHVwIGZyb250LCBzbyBhbiBvdmVyc2l6ZWRcbiAgICAgIC8vIGV2ZW50IGZhaWxzIHRoZSBjYWxsIGJlZm9yZSBhbnkgb2YgaXRzIHNpYmxpbmdzIGFyZSBwdWJsaXNoZWQuXG4gICAgICBjb25zdCBtZXNzYWdlcyA9IG5ldyBNYXAoZW52ZWxvcGVzLm1hcCgoZXZlbnQpID0+IFtldmVudC5pZCwgc2VyaWFsaXplKGV2ZW50KV0pKTtcbiAgICAgIGNvbnN0IGFybiA9IHRvcGljQXJuKCk7XG5cbiAgICAgIGNvbnN0IGZhaWxlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCBmaXJzdEVycm9yOiB1bmtub3duO1xuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBjaHVua0J5Qnl0ZXMoZW52ZWxvcGVzLCBtZXNzYWdlcykpIHtcbiAgICAgICAgY29uc3QgZW50cmllczogUHVibGlzaEJhdGNoUmVxdWVzdEVudHJ5W10gPSBncm91cC5tYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgICAgIElkOiBldmVudC5pZCxcbiAgICAgICAgICBNZXNzYWdlOiBtZXNzYWdlcy5nZXQoZXZlbnQuaWQpIGFzIHN0cmluZyxcbiAgICAgICAgICBNZXNzYWdlQXR0cmlidXRlczogbWVzc2FnZUF0dHJpYnV0ZXMoZXZlbnQpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHNucygpLnNlbmQoXG4gICAgICAgICAgICBuZXcgUHVibGlzaEJhdGNoQ29tbWFuZCh7IFRvcGljQXJuOiBhcm4sIFB1Ymxpc2hCYXRjaFJlcXVlc3RFbnRyaWVzOiBlbnRyaWVzIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZm9yIChjb25zdCBmIG9mIHJlc3AuRmFpbGVkID8/IFtdKSB7XG4gICAgICAgICAgICBpZiAoZi5JZCkgZmFpbGVkLnB1c2goZi5JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBmaXJzdEVycm9yID0gZmlyc3RFcnJvciA/PyBlcnI7XG4gICAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBncm91cCkgZmFpbGVkLnB1c2goZXZlbnQuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWlsZWQubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXZlbnRQdWJsaXNoRXJyb3IoXG4gICAgICAgICAgYGV2ZW50cy5wdWJsaXNoQmF0Y2g6ICR7ZmFpbGVkLmxlbmd0aH0vJHtlbnZlbG9wZXMubGVuZ3RofSBldmVudChzKSBkaWQgbm90IHJlYWNoIHRoZSBidXNgLFxuICAgICAgICAgIHsgZmFpbGVkRXZlbnRJZHM6IGZhaWxlZCwgY2F1c2U6IGZpcnN0RXJyb3IgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnZlbG9wZXM7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVzc2FnZUF0dHJpYnV0ZXMoZXZlbnQ6IFBsYXRmb3JtRXZlbnQpOiBSZWNvcmQ8c3RyaW5nLCBNZXNzYWdlQXR0cmlidXRlVmFsdWU+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB7IERhdGFUeXBlOiAnU3RyaW5nJywgU3RyaW5nVmFsdWU6IGV2ZW50LnR5cGUgfSxcbiAgICBkb21haW46IHsgRGF0YVR5cGU6ICdTdHJpbmcnLCBTdHJpbmdWYWx1ZTogZXZlbnQuZG9tYWluIH0sXG4gICAgc291cmNlOiB7IERhdGFUeXBlOiAnU3RyaW5nJywgU3RyaW5nVmFsdWU6IGV2ZW50LnNvdXJjZSB9LFxuICB9O1xufVxuXG4vKiogYGFybjphd3M6c25zOjxyZWdpb24+OjxhY2NvdW50Pjo8bmFtZT5gIOKGkiBgPHJlZ2lvbj5gLiAqL1xuZnVuY3Rpb24gcmVnaW9uRnJvbUFybihhcm46IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnRzID0gYXJuLnNwbGl0KCc6Jyk7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPj0gNCAmJiBwYXJ0c1szXSA/IHBhcnRzWzNdIDogdW5kZWZpbmVkO1xufVxuXG4vKiogVVRDIElTTyA4NjAxLCBzZWNvbmRzIHByZWNpc2lvbiDigJQgdGhlIGZvcm1hdCB0aGUgZW52ZWxvcGUgc2NoZW1hIHBpbnMuICovXG5mdW5jdGlvbiBpc29Ob3coKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC5cXGR7M31aJC8sICdaJyk7XG59XG5cbmZ1bmN0aW9uIGVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IChwcm9jZXNzIGFzIHsgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB9KS5lbnY/LltuYW1lXTtcbiAgcmV0dXJuIHZhbHVlID09PSAnJyA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG4vKipcbiAqIEdyb3VwIGVudmVsb3BlcyBpbnRvIFB1Ymxpc2hCYXRjaCBjYWxscyBib3VuZGVkIGJ5IEJPVEggbGltaXRzOiBhdCBtb3N0XG4gKiAxMCBlbnRyaWVzLCBhbmQgYXQgbW9zdCAyNTYgS0Igb2YgY29tYmluZWQgcGF5bG9hZC5cbiAqXG4gKiBUaGUgYnl0ZSBib3VuZCBtYXR0ZXJzIGFzIHNvb24gYXMgcGF5bG9hZHMgZ2V0IHJpY2gg4oCUIHRlbiAzMCBLQlxuICogZW52ZWxvcGVzIGFyZSBlYWNoIGluZGl2aWR1YWxseSBsZWdhbCBhbmQgY29sbGVjdGl2ZWx5IG92ZXIgdGhlXG4gKiByZXF1ZXN0IGNhcCwgYW5kIFNOUyByZWplY3RzIHRoZSB3aG9sZSBjYWxsIHJhdGhlciB0aGFuIHRoZSBvdmVyZmxvdy5cbiAqL1xuZnVuY3Rpb24gY2h1bmtCeUJ5dGVzKFxuICBlbnZlbG9wZXM6IFBsYXRmb3JtRXZlbnRbXSxcbiAgbWVzc2FnZXM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4pOiBQbGF0Zm9ybUV2ZW50W11bXSB7XG4gIGNvbnN0IG91dDogUGxhdGZvcm1FdmVudFtdW10gPSBbXTtcbiAgbGV0IGN1cnJlbnQ6IFBsYXRmb3JtRXZlbnRbXSA9IFtdO1xuICBsZXQgY3VycmVudEJ5dGVzID0gMDtcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIGVudmVsb3Blcykge1xuICAgIGNvbnN0IHNpemUgPSBieXRlTGVuZ3RoKG1lc3NhZ2VzLmdldChldmVudC5pZCkgYXMgc3RyaW5nKSArIEFUVFJJQlVURV9BTExPV0FOQ0VfQllURVM7XG4gICAgY29uc3QgZnVsbCA9IGN1cnJlbnQubGVuZ3RoID49IFNOU19CQVRDSF9NQVg7XG4gICAgY29uc3Qgd291bGRPdmVyZmxvdyA9IGN1cnJlbnQubGVuZ3RoID4gMCAmJiBjdXJyZW50Qnl0ZXMgKyBzaXplID4gU05TX01BWF9CWVRFUztcbiAgICBpZiAoZnVsbCB8fCB3b3VsZE92ZXJmbG93KSB7XG4gICAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICAgIGN1cnJlbnQgPSBbXTtcbiAgICAgIGN1cnJlbnRCeXRlcyA9IDA7XG4gICAgfVxuICAgIGN1cnJlbnQucHVzaChldmVudCk7XG4gICAgY3VycmVudEJ5dGVzICs9IHNpemU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoID4gMCkgb3V0LnB1c2goY3VycmVudCk7XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
@@ -0,0 +1,15 @@
1
+ import { type EventsClient } from './client';
2
+ export { createEventsClient, type EventsClient, type EventsClientInput, type PublishOptions, type PublishBatchInput, } from './client';
3
+ export { platformEventSchema, domainForEventType, DOMAIN_BY_RESOURCE, PLATFORM_EVENT_TYPES, PLATFORM_EVENT_VERSION, type PlatformEvent, type PlatformEventType, } from './schema';
4
+ /**
5
+ * Lazily-built default events client, configured entirely from the
6
+ * environment (`PLATFORM_EVENTS_TOPIC_ARN`, `PLATFORM_EVENTS_SOURCE`).
7
+ *
8
+ * Lazy because constructing it eagerly would build an SNS client — and
9
+ * read config that may not be set — in every process that merely imports
10
+ * the SDK. Use `createEventsClient(...)` when you need an isolated client
11
+ * with its own topic, region, or injected SNS client.
12
+ */
13
+ export declare const events: EventsClient;
14
+ /** Test-only: drop the memoised default client so env changes take effect. */
15
+ export declare function _resetEventsSingleton(): void;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.events = exports.PLATFORM_EVENT_VERSION = exports.PLATFORM_EVENT_TYPES = exports.DOMAIN_BY_RESOURCE = exports.domainForEventType = exports.platformEventSchema = exports.createEventsClient = void 0;
4
+ exports._resetEventsSingleton = _resetEventsSingleton;
5
+ const client_1 = require("./client");
6
+ var client_2 = require("./client");
7
+ Object.defineProperty(exports, "createEventsClient", { enumerable: true, get: function () { return client_2.createEventsClient; } });
8
+ var schema_1 = require("./schema");
9
+ Object.defineProperty(exports, "platformEventSchema", { enumerable: true, get: function () { return schema_1.platformEventSchema; } });
10
+ Object.defineProperty(exports, "domainForEventType", { enumerable: true, get: function () { return schema_1.domainForEventType; } });
11
+ Object.defineProperty(exports, "DOMAIN_BY_RESOURCE", { enumerable: true, get: function () { return schema_1.DOMAIN_BY_RESOURCE; } });
12
+ Object.defineProperty(exports, "PLATFORM_EVENT_TYPES", { enumerable: true, get: function () { return schema_1.PLATFORM_EVENT_TYPES; } });
13
+ Object.defineProperty(exports, "PLATFORM_EVENT_VERSION", { enumerable: true, get: function () { return schema_1.PLATFORM_EVENT_VERSION; } });
14
+ let singleton;
15
+ /**
16
+ * Lazily-built default events client, configured entirely from the
17
+ * environment (`PLATFORM_EVENTS_TOPIC_ARN`, `PLATFORM_EVENTS_SOURCE`).
18
+ *
19
+ * Lazy because constructing it eagerly would build an SNS client — and
20
+ * read config that may not be set — in every process that merely imports
21
+ * the SDK. Use `createEventsClient(...)` when you need an isolated client
22
+ * with its own topic, region, or injected SNS client.
23
+ */
24
+ exports.events = {
25
+ publish(type, data, opts) {
26
+ return defaultClient().publish(type, data, opts);
27
+ },
28
+ publishBatch(batch) {
29
+ return defaultClient().publishBatch(batch);
30
+ },
31
+ };
32
+ function defaultClient() {
33
+ if (!singleton)
34
+ singleton = (0, client_1.createEventsClient)();
35
+ return singleton;
36
+ }
37
+ /** Test-only: drop the memoised default client so env changes take effect. */
38
+ function _resetEventsSingleton() {
39
+ singleton = undefined;
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZDQSxzREFFQztBQS9DRCxxQ0FBaUU7QUFFakUsbUNBTWtCO0FBTGhCLDRHQUFBLGtCQUFrQixPQUFBO0FBTXBCLG1DQVFrQjtBQVBoQiw2R0FBQSxtQkFBbUIsT0FBQTtBQUNuQiw0R0FBQSxrQkFBa0IsT0FBQTtBQUNsQiw0R0FBQSxrQkFBa0IsT0FBQTtBQUNsQiw4R0FBQSxvQkFBb0IsT0FBQTtBQUNwQixnSEFBQSxzQkFBc0IsT0FBQTtBQUt4QixJQUFJLFNBQW1DLENBQUM7QUFFeEM7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLE1BQU0sR0FBaUI7SUFDbEMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUN0QixPQUFPLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxZQUFZLENBQUMsS0FBSztRQUNoQixPQUFPLGFBQWEsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0YsQ0FBQztBQUVGLFNBQVMsYUFBYTtJQUNwQixJQUFJLENBQUMsU0FBUztRQUFFLFNBQVMsR0FBRyxJQUFBLDJCQUFrQixHQUFFLENBQUM7SUFDakQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxTQUFnQixxQkFBcUI7SUFDbkMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRXZlbnRzQ2xpZW50LCB0eXBlIEV2ZW50c0NsaWVudCB9IGZyb20gJy4vY2xpZW50JztcblxuZXhwb3J0IHtcbiAgY3JlYXRlRXZlbnRzQ2xpZW50LFxuICB0eXBlIEV2ZW50c0NsaWVudCxcbiAgdHlwZSBFdmVudHNDbGllbnRJbnB1dCxcbiAgdHlwZSBQdWJsaXNoT3B0aW9ucyxcbiAgdHlwZSBQdWJsaXNoQmF0Y2hJbnB1dCxcbn0gZnJvbSAnLi9jbGllbnQnO1xuZXhwb3J0IHtcbiAgcGxhdGZvcm1FdmVudFNjaGVtYSxcbiAgZG9tYWluRm9yRXZlbnRUeXBlLFxuICBET01BSU5fQllfUkVTT1VSQ0UsXG4gIFBMQVRGT1JNX0VWRU5UX1RZUEVTLFxuICBQTEFURk9STV9FVkVOVF9WRVJTSU9OLFxuICB0eXBlIFBsYXRmb3JtRXZlbnQsXG4gIHR5cGUgUGxhdGZvcm1FdmVudFR5cGUsXG59IGZyb20gJy4vc2NoZW1hJztcblxubGV0IHNpbmdsZXRvbjogRXZlbnRzQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIExhemlseS1idWlsdCBkZWZhdWx0IGV2ZW50cyBjbGllbnQsIGNvbmZpZ3VyZWQgZW50aXJlbHkgZnJvbSB0aGVcbiAqIGVudmlyb25tZW50IChgUExBVEZPUk1fRVZFTlRTX1RPUElDX0FSTmAsIGBQTEFURk9STV9FVkVOVFNfU09VUkNFYCkuXG4gKlxuICogTGF6eSBiZWNhdXNlIGNvbnN0cnVjdGluZyBpdCBlYWdlcmx5IHdvdWxkIGJ1aWxkIGFuIFNOUyBjbGllbnQg4oCUIGFuZFxuICogcmVhZCBjb25maWcgdGhhdCBtYXkgbm90IGJlIHNldCDigJQgaW4gZXZlcnkgcHJvY2VzcyB0aGF0IG1lcmVseSBpbXBvcnRzXG4gKiB0aGUgU0RLLiBVc2UgYGNyZWF0ZUV2ZW50c0NsaWVudCguLi4pYCB3aGVuIHlvdSBuZWVkIGFuIGlzb2xhdGVkIGNsaWVudFxuICogd2l0aCBpdHMgb3duIHRvcGljLCByZWdpb24sIG9yIGluamVjdGVkIFNOUyBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBldmVudHM6IEV2ZW50c0NsaWVudCA9IHtcbiAgcHVibGlzaCh0eXBlLCBkYXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDbGllbnQoKS5wdWJsaXNoKHR5cGUsIGRhdGEsIG9wdHMpO1xuICB9LFxuICBwdWJsaXNoQmF0Y2goYmF0Y2gpIHtcbiAgICByZXR1cm4gZGVmYXVsdENsaWVudCgpLnB1Ymxpc2hCYXRjaChiYXRjaCk7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2xpZW50KCk6IEV2ZW50c0NsaWVudCB7XG4gIGlmICghc2luZ2xldG9uKSBzaW5nbGV0b24gPSBjcmVhdGVFdmVudHNDbGllbnQoKTtcbiAgcmV0dXJuIHNpbmdsZXRvbjtcbn1cblxuLyoqIFRlc3Qtb25seTogZHJvcCB0aGUgbWVtb2lzZWQgZGVmYXVsdCBjbGllbnQgc28gZW52IGNoYW5nZXMgdGFrZSBlZmZlY3QuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlc2V0RXZlbnRzU2luZ2xldG9uKCk6IHZvaWQge1xuICBzaW5nbGV0b24gPSB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ /** Dotted `resource.operation`, e.g. `order.status_changed`. */
3
+ export declare const EVENT_TYPE_RE: RegExp;
4
+ export declare const platformEventSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ type: z.ZodString;
7
+ domain: z.ZodString;
8
+ source: z.ZodString;
9
+ version: z.ZodNumber;
10
+ occurredAt: z.ZodString;
11
+ tenantId: z.ZodString;
12
+ data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ type: string;
15
+ id: string;
16
+ domain: string;
17
+ source: string;
18
+ version: number;
19
+ occurredAt: string;
20
+ tenantId: string;
21
+ data: Record<string, unknown>;
22
+ }, {
23
+ type: string;
24
+ id: string;
25
+ domain: string;
26
+ source: string;
27
+ version: number;
28
+ occurredAt: string;
29
+ tenantId: string;
30
+ data: Record<string, unknown>;
31
+ }>;
32
+ export type PlatformEvent = z.infer<typeof platformEventSchema>;
33
+ /** Event types the bus carries in phase 1. */
34
+ export declare const PLATFORM_EVENT_TYPES: readonly ["order.created", "order.status_changed"];
35
+ export type PlatformEventType = (typeof PLATFORM_EVENT_TYPES)[number];
36
+ /** Current envelope version stamped on everything this SDK publishes. */
37
+ export declare const PLATFORM_EVENT_VERSION = 1;
38
+ /**
39
+ * Resource prefix → bus domain.
40
+ *
41
+ * An explicit map, not a pluralisation rule: the platform's domains are
42
+ * not uniformly plural (`orders` and `customers` are, `menu`, `loyalty`
43
+ * and `usage` are not).
44
+ *
45
+ * Copied from `packages/common/src/events/domains.json`, which is the
46
+ * single source of truth, because this package is published to npm and
47
+ * cannot import from a private workspace package. Exported so
48
+ * `test/events/domain-map.test.ts` can assert it against that JSON — the
49
+ * suite fails the moment the two drift.
50
+ */
51
+ export declare const DOMAIN_BY_RESOURCE: Readonly<Record<string, string>>;
52
+ /**
53
+ * The domain an event type belongs to, or null for a malformed type or
54
+ * an unregistered resource prefix. `publish()` treats null as an error:
55
+ * emitting onto a domain that does not exist is a call-site mistake, and
56
+ * nothing downstream is subscribed to catch it.
57
+ */
58
+ export declare function domainForEventType(type: string): string | null;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DOMAIN_BY_RESOURCE = exports.PLATFORM_EVENT_VERSION = exports.PLATFORM_EVENT_TYPES = exports.platformEventSchema = exports.EVENT_TYPE_RE = void 0;
4
+ exports.domainForEventType = domainForEventType;
5
+ const zod_1 = require("zod");
6
+ /**
7
+ * Platform event-bus envelope, publisher side.
8
+ *
9
+ * This mirrors `@uengage/common`'s `platformEventSchema` field for field.
10
+ * It is duplicated rather than imported because `@uengage/common` is a
11
+ * private workspace package and this SDK is published to npm — the same
12
+ * reason `audit/schema.ts` lives here instead of in common. The two are
13
+ * kept honest by `services/realtime/test/envelope.test.ts`, which
14
+ * validates an SDK-built envelope against the common schema.
15
+ */
16
+ /** ULID: Crockford base32, 26 chars, excludes I/L/O/U. */
17
+ const ULID_RE = /^[0-9A-HJKMNP-TV-Z]{26}$/;
18
+ /** Dotted `resource.operation`, e.g. `order.status_changed`. */
19
+ exports.EVENT_TYPE_RE = /^[a-z][a-z0-9_]*\.[a-z][a-z0-9_]*$/;
20
+ exports.platformEventSchema = zod_1.z.object({
21
+ id: zod_1.z.string().regex(ULID_RE, 'must be a ULID'),
22
+ type: zod_1.z.string().regex(exports.EVENT_TYPE_RE, 'must be "<resource>.<operation>"'),
23
+ domain: zod_1.z.string().regex(/^[a-z][a-z0-9_]*$/, 'must be a lowercase domain token'),
24
+ source: zod_1.z.string().min(1),
25
+ version: zod_1.z.number().int().positive(),
26
+ occurredAt: zod_1.z.string().datetime({ offset: false }),
27
+ tenantId: zod_1.z.string().min(1),
28
+ data: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
29
+ });
30
+ /** Event types the bus carries in phase 1. */
31
+ exports.PLATFORM_EVENT_TYPES = ['order.created', 'order.status_changed'];
32
+ /** Current envelope version stamped on everything this SDK publishes. */
33
+ exports.PLATFORM_EVENT_VERSION = 1;
34
+ /**
35
+ * Resource prefix → bus domain.
36
+ *
37
+ * An explicit map, not a pluralisation rule: the platform's domains are
38
+ * not uniformly plural (`orders` and `customers` are, `menu`, `loyalty`
39
+ * and `usage` are not).
40
+ *
41
+ * Copied from `packages/common/src/events/domains.json`, which is the
42
+ * single source of truth, because this package is published to npm and
43
+ * cannot import from a private workspace package. Exported so
44
+ * `test/events/domain-map.test.ts` can assert it against that JSON — the
45
+ * suite fails the moment the two drift.
46
+ */
47
+ exports.DOMAIN_BY_RESOURCE = {
48
+ order: 'orders',
49
+ customer: 'customers',
50
+ menu: 'menu',
51
+ offer: 'offers',
52
+ loyalty: 'loyalty',
53
+ usage: 'usage',
54
+ };
55
+ /**
56
+ * The domain an event type belongs to, or null for a malformed type or
57
+ * an unregistered resource prefix. `publish()` treats null as an error:
58
+ * emitting onto a domain that does not exist is a call-site mistake, and
59
+ * nothing downstream is subscribed to catch it.
60
+ */
61
+ function domainForEventType(type) {
62
+ if (!exports.EVENT_TYPE_RE.test(type))
63
+ return null;
64
+ const resource = type.slice(0, type.indexOf('.'));
65
+ return exports.DOMAIN_BY_RESOURCE[resource] ?? null;
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0VBLGdEQUlDO0FBeEVELDZCQUF3QjtBQUV4Qjs7Ozs7Ozs7O0dBU0c7QUFFSCwwREFBMEQ7QUFDMUQsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLENBQUM7QUFFM0MsZ0VBQWdFO0FBQ25ELFFBQUEsYUFBYSxHQUFHLG9DQUFvQyxDQUFDO0FBRXJELFFBQUEsbUJBQW1CLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7SUFDL0MsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQWEsRUFBRSxrQ0FBa0MsQ0FBQztJQUN6RSxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxrQ0FBa0MsQ0FBQztJQUNqRixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekIsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbEQsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDeEMsQ0FBQyxDQUFDO0FBSUgsOENBQThDO0FBQ2pDLFFBQUEsb0JBQW9CLEdBQUcsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQVUsQ0FBQztBQUl2Rix5RUFBeUU7QUFDNUQsUUFBQSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBcUM7SUFDbEUsS0FBSyxFQUFFLFFBQVE7SUFDZixRQUFRLEVBQUUsV0FBVztJQUNyQixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxRQUFRO0lBQ2YsT0FBTyxFQUFFLFNBQVM7SUFDbEIsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFZO0lBQzdDLElBQUksQ0FBQyxxQkFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTywwQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG4vKipcbiAqIFBsYXRmb3JtIGV2ZW50LWJ1cyBlbnZlbG9wZSwgcHVibGlzaGVyIHNpZGUuXG4gKlxuICogVGhpcyBtaXJyb3JzIGBAdWVuZ2FnZS9jb21tb25gJ3MgYHBsYXRmb3JtRXZlbnRTY2hlbWFgIGZpZWxkIGZvciBmaWVsZC5cbiAqIEl0IGlzIGR1cGxpY2F0ZWQgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgYmVjYXVzZSBgQHVlbmdhZ2UvY29tbW9uYCBpcyBhXG4gKiBwcml2YXRlIHdvcmtzcGFjZSBwYWNrYWdlIGFuZCB0aGlzIFNESyBpcyBwdWJsaXNoZWQgdG8gbnBtIOKAlCB0aGUgc2FtZVxuICogcmVhc29uIGBhdWRpdC9zY2hlbWEudHNgIGxpdmVzIGhlcmUgaW5zdGVhZCBvZiBpbiBjb21tb24uIFRoZSB0d28gYXJlXG4gKiBrZXB0IGhvbmVzdCBieSBgc2VydmljZXMvcmVhbHRpbWUvdGVzdC9lbnZlbG9wZS50ZXN0LnRzYCwgd2hpY2hcbiAqIHZhbGlkYXRlcyBhbiBTREstYnVpbHQgZW52ZWxvcGUgYWdhaW5zdCB0aGUgY29tbW9uIHNjaGVtYS5cbiAqL1xuXG4vKiogVUxJRDogQ3JvY2tmb3JkIGJhc2UzMiwgMjYgY2hhcnMsIGV4Y2x1ZGVzIEkvTC9PL1UuICovXG5jb25zdCBVTElEX1JFID0gL15bMC05QS1ISktNTlAtVFYtWl17MjZ9JC87XG5cbi8qKiBEb3R0ZWQgYHJlc291cmNlLm9wZXJhdGlvbmAsIGUuZy4gYG9yZGVyLnN0YXR1c19jaGFuZ2VkYC4gKi9cbmV4cG9ydCBjb25zdCBFVkVOVF9UWVBFX1JFID0gL15bYS16XVthLXowLTlfXSpcXC5bYS16XVthLXowLTlfXSokLztcblxuZXhwb3J0IGNvbnN0IHBsYXRmb3JtRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLnJlZ2V4KFVMSURfUkUsICdtdXN0IGJlIGEgVUxJRCcpLFxuICB0eXBlOiB6LnN0cmluZygpLnJlZ2V4KEVWRU5UX1RZUEVfUkUsICdtdXN0IGJlIFwiPHJlc291cmNlPi48b3BlcmF0aW9uPlwiJyksXG4gIGRvbWFpbjogei5zdHJpbmcoKS5yZWdleCgvXlthLXpdW2EtejAtOV9dKiQvLCAnbXVzdCBiZSBhIGxvd2VyY2FzZSBkb21haW4gdG9rZW4nKSxcbiAgc291cmNlOiB6LnN0cmluZygpLm1pbigxKSxcbiAgdmVyc2lvbjogei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLFxuICBvY2N1cnJlZEF0OiB6LnN0cmluZygpLmRhdGV0aW1lKHsgb2Zmc2V0OiBmYWxzZSB9KSxcbiAgdGVuYW50SWQ6IHouc3RyaW5nKCkubWluKDEpLFxuICBkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGxhdGZvcm1FdmVudCA9IHouaW5mZXI8dHlwZW9mIHBsYXRmb3JtRXZlbnRTY2hlbWE+O1xuXG4vKiogRXZlbnQgdHlwZXMgdGhlIGJ1cyBjYXJyaWVzIGluIHBoYXNlIDEuICovXG5leHBvcnQgY29uc3QgUExBVEZPUk1fRVZFTlRfVFlQRVMgPSBbJ29yZGVyLmNyZWF0ZWQnLCAnb3JkZXIuc3RhdHVzX2NoYW5nZWQnXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUGxhdGZvcm1FdmVudFR5cGUgPSAodHlwZW9mIFBMQVRGT1JNX0VWRU5UX1RZUEVTKVtudW1iZXJdO1xuXG4vKiogQ3VycmVudCBlbnZlbG9wZSB2ZXJzaW9uIHN0YW1wZWQgb24gZXZlcnl0aGluZyB0aGlzIFNESyBwdWJsaXNoZXMuICovXG5leHBvcnQgY29uc3QgUExBVEZPUk1fRVZFTlRfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogUmVzb3VyY2UgcHJlZml4IOKGkiBidXMgZG9tYWluLlxuICpcbiAqIEFuIGV4cGxpY2l0IG1hcCwgbm90IGEgcGx1cmFsaXNhdGlvbiBydWxlOiB0aGUgcGxhdGZvcm0ncyBkb21haW5zIGFyZVxuICogbm90IHVuaWZvcm1seSBwbHVyYWwgKGBvcmRlcnNgIGFuZCBgY3VzdG9tZXJzYCBhcmUsIGBtZW51YCwgYGxveWFsdHlgXG4gKiBhbmQgYHVzYWdlYCBhcmUgbm90KS5cbiAqXG4gKiBDb3BpZWQgZnJvbSBgcGFja2FnZXMvY29tbW9uL3NyYy9ldmVudHMvZG9tYWlucy5qc29uYCwgd2hpY2ggaXMgdGhlXG4gKiBzaW5nbGUgc291cmNlIG9mIHRydXRoLCBiZWNhdXNlIHRoaXMgcGFja2FnZSBpcyBwdWJsaXNoZWQgdG8gbnBtIGFuZFxuICogY2Fubm90IGltcG9ydCBmcm9tIGEgcHJpdmF0ZSB3b3Jrc3BhY2UgcGFja2FnZS4gRXhwb3J0ZWQgc29cbiAqIGB0ZXN0L2V2ZW50cy9kb21haW4tbWFwLnRlc3QudHNgIGNhbiBhc3NlcnQgaXQgYWdhaW5zdCB0aGF0IEpTT04g4oCUIHRoZVxuICogc3VpdGUgZmFpbHMgdGhlIG1vbWVudCB0aGUgdHdvIGRyaWZ0LlxuICovXG5leHBvcnQgY29uc3QgRE9NQUlOX0JZX1JFU09VUkNFOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgb3JkZXI6ICdvcmRlcnMnLFxuICBjdXN0b21lcjogJ2N1c3RvbWVycycsXG4gIG1lbnU6ICdtZW51JyxcbiAgb2ZmZXI6ICdvZmZlcnMnLFxuICBsb3lhbHR5OiAnbG95YWx0eScsXG4gIHVzYWdlOiAndXNhZ2UnLFxufTtcblxuLyoqXG4gKiBUaGUgZG9tYWluIGFuIGV2ZW50IHR5cGUgYmVsb25ncyB0bywgb3IgbnVsbCBmb3IgYSBtYWxmb3JtZWQgdHlwZSBvclxuICogYW4gdW5yZWdpc3RlcmVkIHJlc291cmNlIHByZWZpeC4gYHB1Ymxpc2goKWAgdHJlYXRzIG51bGwgYXMgYW4gZXJyb3I6XG4gKiBlbWl0dGluZyBvbnRvIGEgZG9tYWluIHRoYXQgZG9lcyBub3QgZXhpc3QgaXMgYSBjYWxsLXNpdGUgbWlzdGFrZSwgYW5kXG4gKiBub3RoaW5nIGRvd25zdHJlYW0gaXMgc3Vic2NyaWJlZCB0byBjYXRjaCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvbWFpbkZvckV2ZW50VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFFVkVOVF9UWVBFX1JFLnRlc3QodHlwZSkpIHJldHVybiBudWxsO1xuICBjb25zdCByZXNvdXJjZSA9IHR5cGUuc2xpY2UoMCwgdHlwZS5pbmRleE9mKCcuJykpO1xuICByZXR1cm4gRE9NQUlOX0JZX1JFU09VUkNFW3Jlc291cmNlXSA/PyBudWxsO1xufVxuIl19
package/dist/http.js CHANGED
@@ -2,10 +2,32 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildHeaders = buildHeaders;
4
4
  exports.sendWithAuthRetry = sendWithAuthRetry;
5
- const node_crypto_1 = require("node:crypto");
6
5
  const token_source_1 = require("./token-source");
7
6
  const version_1 = require("./version");
8
7
  const MUTATING_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
8
+ /**
9
+ * UUID v4 without a `node:crypto` import.
10
+ *
11
+ * The SDK runs in browsers as well as Lambdas — `whitelabel_web` is a
12
+ * first-class channel — and a static `node:crypto` import breaks any
13
+ * browser bundler that does not shim it. `crypto.randomUUID` is present
14
+ * in Node >= 19 and every current browser; the manual fallback covers
15
+ * older runtimes and non-secure contexts, where the value is only used
16
+ * as an idempotency key and needs uniqueness, not unguessability.
17
+ */
18
+ function randomUUID() {
19
+ const c = globalThis.crypto;
20
+ if (c?.randomUUID)
21
+ return c.randomUUID();
22
+ if (c?.getRandomValues) {
23
+ const b = c.getRandomValues(new Uint8Array(16));
24
+ b[6] = (b[6] & 0x0f) | 0x40;
25
+ b[8] = (b[8] & 0x3f) | 0x80;
26
+ const hex = [...b].map((x) => x.toString(16).padStart(2, '0')).join('');
27
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
28
+ }
29
+ throw new Error('No crypto source available for idempotency-key generation');
30
+ }
9
31
  /**
10
32
  * Build the headers for a request to the platform API.
11
33
  *
@@ -28,7 +50,7 @@ async function buildHeaders(config, params) {
28
50
  if (params.body !== undefined)
29
51
  headers['content-type'] = 'application/json';
30
52
  if (MUTATING_METHODS.has(params.method.toUpperCase())) {
31
- headers['idempotency-key'] = (0, node_crypto_1.randomUUID)();
53
+ headers['idempotency-key'] = randomUUID();
32
54
  }
33
55
  if (!config.auth)
34
56
  return headers;
@@ -78,4 +100,4 @@ async function sendWithAuthRetry(config, params) {
78
100
  body: params.body,
79
101
  });
80
102
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEJBLG9DQXVCQztBQXdCRCw4Q0EwQkM7QUF2R0QsNkNBQXlDO0FBRXpDLGlEQUFpRTtBQUNqRSx1Q0FBd0M7QUFVeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFFckU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSSxLQUFLLFVBQVUsWUFBWSxDQUNoQyxNQUFzQixFQUN0QixNQUEwQjtJQUUxQixNQUFNLE9BQU8sR0FBMkI7UUFDdEMsWUFBWSxFQUFFLHdCQUF3QixxQkFBVyxFQUFFO0tBQ3BELENBQUM7SUFDRixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztJQUM1RSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFBLHdCQUFVLEdBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFFakMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDZCQUFjLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztJQUM3QyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBWUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLE1BQXNCLEVBQ3RCLE1BQXlCO0lBRXpCLE1BQU0sT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUN6QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUMzQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTztRQUNQLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLGNBQWM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMzRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDOUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB0eXBlIHsgUGxhdGZvcm1Db25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiwgaW52YWxpZGF0ZVRva2VuIH0gZnJvbSAnLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lZEhlYWRlclBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGhuYW1lIG9ubHksIHdpdGhvdXQgcXVlcnkgc3RyaW5nLiBNdXN0IG1hdGNoIGBjLnJlcS5wYXRoYCBzZXJ2ZXItc2lkZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogUmF3IEpTT04gYm9keSBzdHJpbmcsIG9yIGVtcHR5IGZvciBub25lLiAqL1xuICBib2R5Pzogc3RyaW5nO1xufVxuXG5jb25zdCBNVVRBVElOR19NRVRIT0RTID0gbmV3IFNldChbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJywgJ0RFTEVURSddKTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgaGVhZGVycyBmb3IgYSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKlxuICogQWRkcyB0aHJlZSBwbGF0Zm9ybS13aWRlIGhlYWRlcnMgYXV0b21hdGljYWxseTpcbiAqICAgLSBgVXNlci1BZ2VudGAgc28gdGhlIGdhdGV3YXkgY2FuIGF0dHJpYnV0ZSB0cmFmZmljIHRvIFNESyB2ZXJzaW9uXG4gKiAgIC0gYElkZW1wb3RlbmN5LUtleWAgKFVVSUQgdjQpIG9uIG11dGF0aW5nIG1ldGhvZHMsIHNvIGNhbGxlcnMgZG9uJ3RcbiAqICAgICBoYXZlIHRvIGdlbmVyYXRlIG9uZSBwZXIgY2FsbFxuICogICAtIGBjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb25gIHdoZW4gYSBib2R5IGlzIHN1cHBsaWVkXG4gKlxuICogQXV0aCBjb21lcyBmcm9tIGBjb25maWcuYXV0aGA6XG4gKiAgIC0gYGJlYXJlcmA6IHRoZSB0b2tlbiBpcyBzZW50IHZlcmJhdGltIChjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4gKiAgICAgZnJlc2huZXNzOyBTREsgdGhyb3dzIFRva2VuRXhwaXJlZEVycm9yIG9uIGxvY2FsLWRldGVjdGVkIGV4cGlyeSlcbiAqICAgLSBgdG9rZW4tc291cmNlYDogU0RLIG1pbnRzICsgY2FjaGVzIHZpYSBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgICAgYW5kIHJlZnJlc2hlcyBvbiBleHBpcnkgLyA0MDFcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkSGVhZGVycyhcbiAgY29uZmlnOiBQbGF0Zm9ybUNvbmZpZyxcbiAgcGFyYW1zOiBTaWduZWRIZWFkZXJQYXJhbXMsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAndXNlci1hZ2VudCc6IGB1ZW5nYWdlLXBsYXRmb3JtLXNkay8ke1NES19WRVJTSU9OfWAsXG4gIH07XG4gIGlmIChwYXJhbXMuYm9keSAhPT0gdW5kZWZpbmVkKSBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgaWYgKE1VVEFUSU5HX01FVEhPRFMuaGFzKHBhcmFtcy5tZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICBoZWFkZXJzWydpZGVtcG90ZW5jeS1rZXknXSA9IHJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIGlmICghY29uZmlnLmF1dGgpIHJldHVybiBoZWFkZXJzO1xuXG4gIGlmIChjb25maWcuYXV0aC50eXBlID09PSAnYmVhcmVyJykge1xuICAgIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLy8gdG9rZW4tc291cmNlOiBtaW50ICsgY2FjaGUgKyByZWZyZXNoLWRlZHVwIGhhcHBlbnMgaW4gZ2V0QWNjZXNzVG9rZW5cbiAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbihjb25maWcuYXV0aC5zdGF0ZSk7XG4gIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdFBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGhuYW1lIG9ubHksIHdpdGhvdXQgcXVlcnkgc3RyaW5nLiBNdXN0IG1hdGNoIGBjLnJlcS5wYXRoYCBzZXJ2ZXItc2lkZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogRnVsbHktcXVhbGlmaWVkIFVSTCB0aGUgZmV0Y2ggaXMgc2VudCB0byAoYmFzZSArIHBhdGggKyBxdWVyeXN0cmluZykuICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogUmF3IEpTT04gYm9keSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBmb3Igbm9uZS4gKi9cbiAgYm9keT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIGEgcmVxdWVzdCB3aXRoIHRoZSBTREsncyBzdGFuZGFyZCA0MDEtcmV0cnktb25jZSBiZWhhdmlvdXIuXG4gKlxuICogT25seSByZXRyaWVzIHdoZW4gYXV0aCBpcyBgdG9rZW4tc291cmNlYCwgc2luY2UgdGhhdCdzIHRoZSBjYXNlXG4gKiB3aGVyZSB0aGUgY2FjaGVkIHRva2VuIG1heSBoYXZlIGV4cGlyZWQgc2VydmVyLXNpZGUuIEhNQUMgYW5kXG4gKiBzdGF0aWMgYmVhcmVyIDQwMXMgbWVhbiB0aGUgYXV0aCBpcyBtaXNjb25maWd1cmVkIGFuZCBhIHJldHJ5XG4gKiB3b3VsZCBqdXN0IGZhaWwgYWdhaW4uIEJ1YmJsZSB0aGUgcmVzcG9uc2Ugc28gdGhlIGNhbGxlciBzdXJmYWNlcyBpdC5cbiAqXG4gKiBTaGFyZWQgYnkgZXZlcnkgbmFtZXNwYWNlIGNsaWVudCAoYnVzaW5lc3MsIGF1ZGl0LCB6b25lcywgLi4uKSBzb1xuICogdGhlIHJldHJ5IHNlbWFudGljcyBhcmUgdW5pZm9ybS4gTGlmdGVkIG91dCBvZiBgYnVzaW5lc3MvY2xpZW50LnRzYFxuICogd2l0aCBubyBiZWhhdmlvdXIgY2hhbmdlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFdpdGhBdXRoUmV0cnkoXG4gIGNvbmZpZzogUGxhdGZvcm1Db25maWcsXG4gIHBhcmFtczogU2VuZFJlcXVlc3RQYXJhbXMsXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCBidWlsZEhlYWRlcnMoY29uZmlnLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbiAgY29uc3QgcmVzID0gYXdhaXQgY29uZmlnLmZldGNoRm4ocGFyYW1zLnVybCwge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbiAgaWYgKHJlcy5zdGF0dXMgIT09IDQwMSB8fCBjb25maWcuYXV0aD8udHlwZSAhPT0gJ3Rva2VuLXNvdXJjZScpIHJldHVybiByZXM7XG4gIGludmFsaWRhdGVUb2tlbihjb25maWcuYXV0aC5zdGF0ZSk7XG4gIGNvbnN0IHJldHJ5SGVhZGVycyA9IGF3YWl0IGJ1aWxkSGVhZGVycyhjb25maWcsIHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgcGF0aDogcGFyYW1zLnBhdGgsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xuICByZXR1cm4gY29uZmlnLmZldGNoRm4ocGFyYW1zLnVybCwge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBoZWFkZXJzOiByZXRyeUhlYWRlcnMsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0RBLG9DQXVCQztBQXdCRCw4Q0EwQkM7QUFoSUQsaURBQWlFO0FBQ2pFLHVDQUF3QztBQVV4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLFVBQVU7SUFDakIsTUFBTSxDQUFDLEdBQ0wsVUFHRCxDQUFDLE1BQU0sQ0FBQztJQUNULElBQUksQ0FBQyxFQUFFLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFD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QUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGxhdGZvcm1Db25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiwgaW52YWxpZGF0ZVRva2VuIH0gZnJvbSAnLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lZEhlYWRlclBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGhuYW1lIG9ubHksIHdpdGhvdXQgcXVlcnkgc3RyaW5nLiBNdXN0IG1hdGNoIGBjLnJlcS5wYXRoYCBzZXJ2ZXItc2lkZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogUmF3IEpTT04gYm9keSBzdHJpbmcsIG9yIGVtcHR5IGZvciBub25lLiAqL1xuICBib2R5Pzogc3RyaW5nO1xufVxuXG5jb25zdCBNVVRBVElOR19NRVRIT0RTID0gbmV3IFNldChbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJywgJ0RFTEVURSddKTtcblxuLyoqXG4gKiBVVUlEIHY0IHdpdGhvdXQgYSBgbm9kZTpjcnlwdG9gIGltcG9ydC5cbiAqXG4gKiBUaGUgU0RLIHJ1bnMgaW4gYnJvd3NlcnMgYXMgd2VsbCBhcyBMYW1iZGFzIOKAlCBgd2hpdGVsYWJlbF93ZWJgIGlzIGFcbiAqIGZpcnN0LWNsYXNzIGNoYW5uZWwg4oCUIGFuZCBhIHN0YXRpYyBgbm9kZTpjcnlwdG9gIGltcG9ydCBicmVha3MgYW55XG4gKiBicm93c2VyIGJ1bmRsZXIgdGhhdCBkb2VzIG5vdCBzaGltIGl0LiBgY3J5cHRvLnJhbmRvbVVVSURgIGlzIHByZXNlbnRcbiAqIGluIE5vZGUgPj0gMTkgYW5kIGV2ZXJ5IGN1cnJlbnQgYnJvd3NlcjsgdGhlIG1hbnVhbCBmYWxsYmFjayBjb3ZlcnNcbiAqIG9sZGVyIHJ1bnRpbWVzIGFuZCBub24tc2VjdXJlIGNvbnRleHRzLCB3aGVyZSB0aGUgdmFsdWUgaXMgb25seSB1c2VkXG4gKiBhcyBhbiBpZGVtcG90ZW5jeSBrZXkgYW5kIG5lZWRzIHVuaXF1ZW5lc3MsIG5vdCB1bmd1ZXNzYWJpbGl0eS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVVVJRCgpOiBzdHJpbmcge1xuICBjb25zdCBjID0gKFxuICAgIGdsb2JhbFRoaXMgYXMge1xuICAgICAgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nOyBnZXRSYW5kb21WYWx1ZXM/OiAoYTogVWludDhBcnJheSkgPT4gVWludDhBcnJheSB9O1xuICAgIH1cbiAgKS5jcnlwdG87XG4gIGlmIChjPy5yYW5kb21VVUlEKSByZXR1cm4gYy5yYW5kb21VVUlEKCk7XG4gIGlmIChjPy5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICBjb25zdCBiID0gYy5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgIGNvbnN0IGhleCA9IFsuLi5iXS5tYXAoKHgpID0+IHgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIHJldHVybiBgJHtoZXguc2xpY2UoMCwgOCl9LSR7aGV4LnNsaWNlKDgsIDEyKX0tJHtoZXguc2xpY2UoMTIsIDE2KX0tJHtoZXguc2xpY2UoMTYsIDIwKX0tJHtoZXguc2xpY2UoMjApfWA7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBjcnlwdG8gc291cmNlIGF2YWlsYWJsZSBmb3IgaWRlbXBvdGVuY3kta2V5IGdlbmVyYXRpb24nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgaGVhZGVycyBmb3IgYSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKlxuICogQWRkcyB0aHJlZSBwbGF0Zm9ybS13aWRlIGhlYWRlcnMgYXV0b21hdGljYWxseTpcbiAqICAgLSBgVXNlci1BZ2VudGAgc28gdGhlIGdhdGV3YXkgY2FuIGF0dHJpYnV0ZSB0cmFmZmljIHRvIFNESyB2ZXJzaW9uXG4gKiAgIC0gYElkZW1wb3RlbmN5LUtleWAgKFVVSUQgdjQpIG9uIG11dGF0aW5nIG1ldGhvZHMsIHNvIGNhbGxlcnMgZG9uJ3RcbiAqICAgICBoYXZlIHRvIGdlbmVyYXRlIG9uZSBwZXIgY2FsbFxuICogICAtIGBjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb25gIHdoZW4gYSBib2R5IGlzIHN1cHBsaWVkXG4gKlxuICogQXV0aCBjb21lcyBmcm9tIGBjb25maWcuYXV0aGA6XG4gKiAgIC0gYGJlYXJlcmA6IHRoZSB0b2tlbiBpcyBzZW50IHZlcmJhdGltIChjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4gKiAgICAgZnJlc2huZXNzOyBTREsgdGhyb3dzIFRva2VuRXhwaXJlZEVycm9yIG9uIGxvY2FsLWRldGVjdGVkIGV4cGlyeSlcbiAqICAgLSBgdG9rZW4tc291cmNlYDogU0RLIG1pbnRzICsgY2FjaGVzIHZpYSBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgICAgYW5kIHJlZnJlc2hlcyBvbiBleHBpcnkgLyA0MDFcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkSGVhZGVycyhcbiAgY29uZmlnOiBQbGF0Zm9ybUNvbmZpZyxcbiAgcGFyYW1zOiBTaWduZWRIZWFkZXJQYXJhbXMsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAndXNlci1hZ2VudCc6IGB1ZW5nYWdlLXBsYXRmb3JtLXNkay8ke1NES19WRVJTSU9OfWAsXG4gIH07XG4gIGlmIChwYXJhbXMuYm9keSAhPT0gdW5kZWZpbmVkKSBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgaWYgKE1VVEFUSU5HX01FVEhPRFMuaGFzKHBhcmFtcy5tZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICBoZWFkZXJzWydpZGVtcG90ZW5jeS1rZXknXSA9IHJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIGlmICghY29uZmlnLmF1dGgpIHJldHVybiBoZWFkZXJzO1xuXG4gIGlmIChjb25maWcuYXV0aC50eXBlID09PSAnYmVhcmVyJykge1xuICAgIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLy8gdG9rZW4tc291cmNlOiBtaW50ICsgY2FjaGUgKyByZWZyZXNoLWRlZHVwIGhhcHBlbnMgaW4gZ2V0QWNjZXNzVG9rZW5cbiAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbihjb25maWcuYXV0aC5zdGF0ZSk7XG4gIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdFBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGhuYW1lIG9ubHksIHdpdGhvdXQgcXVlcnkgc3RyaW5nLiBNdXN0IG1hdGNoIGBjLnJlcS5wYXRoYCBzZXJ2ZXItc2lkZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogRnVsbHktcXVhbGlmaWVkIFVSTCB0aGUgZmV0Y2ggaXMgc2VudCB0byAoYmFzZSArIHBhdGggKyBxdWVyeXN0cmluZykuICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogUmF3IEpTT04gYm9keSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBmb3Igbm9uZS4gKi9cbiAgYm9keT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIGEgcmVxdWVzdCB3aXRoIHRoZSBTREsncyBzdGFuZGFyZCA0MDEtcmV0cnktb25jZSBiZWhhdmlvdXIuXG4gKlxuICogT25seSByZXRyaWVzIHdoZW4gYXV0aCBpcyBgdG9rZW4tc291cmNlYCwgc2luY2UgdGhhdCdzIHRoZSBjYXNlXG4gKiB3aGVyZSB0aGUgY2FjaGVkIHRva2VuIG1heSBoYXZlIGV4cGlyZWQgc2VydmVyLXNpZGUuIEhNQUMgYW5kXG4gKiBzdGF0aWMgYmVhcmVyIDQwMXMgbWVhbiB0aGUgYXV0aCBpcyBtaXNjb25maWd1cmVkIGFuZCBhIHJldHJ5XG4gKiB3b3VsZCBqdXN0IGZhaWwgYWdhaW4uIEJ1YmJsZSB0aGUgcmVzcG9uc2Ugc28gdGhlIGNhbGxlciBzdXJmYWNlcyBpdC5cbiAqXG4gKiBTaGFyZWQgYnkgZXZlcnkgbmFtZXNwYWNlIGNsaWVudCAoYnVzaW5lc3MsIGF1ZGl0LCB6b25lcywgLi4uKSBzb1xuICogdGhlIHJldHJ5IHNlbWFudGljcyBhcmUgdW5pZm9ybS4gTGlmdGVkIG91dCBvZiBgYnVzaW5lc3MvY2xpZW50LnRzYFxuICogd2l0aCBubyBiZWhhdmlvdXIgY2hhbmdlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFdpdGhBdXRoUmV0cnkoXG4gIGNvbmZpZzogUGxhdGZvcm1Db25maWcsXG4gIHBhcmFtczogU2VuZFJlcXVlc3RQYXJhbXMsXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCBidWlsZEhlYWRlcnMoY29uZmlnLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbiAgY29uc3QgcmVzID0gYXdhaXQgY29uZmlnLmZldGNoRm4ocGFyYW1zLnVybCwge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbiAgaWYgKHJlcy5zdGF0dXMgIT09IDQwMSB8fCBjb25maWcuYXV0aD8udHlwZSAhPT0gJ3Rva2VuLXNvdXJjZScpIHJldHVybiByZXM7XG4gIGludmFsaWRhdGVUb2tlbihjb25maWcuYXV0aC5zdGF0ZSk7XG4gIGNvbnN0IHJldHJ5SGVhZGVycyA9IGF3YWl0IGJ1aWxkSGVhZGVycyhjb25maWcsIHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgcGF0aDogcGFyYW1zLnBhdGgsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xuICByZXR1cm4gY29uZmlnLmZldGNoRm4ocGFyYW1zLnVybCwge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBoZWFkZXJzOiByZXRyeUhlYWRlcnMsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xufVxuIl19
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './audit';
2
2
  export * from './business';
3
3
  export * from './zones';
4
4
  export * from './wallet';
5
+ export * from './upsell';
5
6
  export * from './errors';
6
7
  export { auth } from './auth';
7
8
  export type { PkcePair, AuthorizeUrlInput, ExchangeCodeInput, RefreshInput, TokenPair, } from './auth';
package/dist/index.js CHANGED
@@ -19,6 +19,7 @@ __exportStar(require("./audit"), exports);
19
19
  __exportStar(require("./business"), exports);
20
20
  __exportStar(require("./zones"), exports);
21
21
  __exportStar(require("./wallet"), exports);
22
+ __exportStar(require("./upsell"), exports);
22
23
  __exportStar(require("./errors"), exports);
23
24
  var auth_1 = require("./auth");
24
25
  Object.defineProperty(exports, "auth", { enumerable: true, get: function () { return auth_1.auth; } });
@@ -26,4 +27,4 @@ var config_1 = require("./config");
26
27
  Object.defineProperty(exports, "DEFAULT_BASE_URL", { enumerable: true, get: function () { return config_1.DEFAULT_BASE_URL; } });
27
28
  var client_1 = require("./client");
28
29
  Object.defineProperty(exports, "createClient", { enumerable: true, get: function () { return client_1.createClient; } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsNkNBQTJCO0FBQzNCLDBDQUF3QjtBQUN4QiwyQ0FBeUI7QUFDekIsMkNBQXlCO0FBQ3pCLCtCQUE4QjtBQUFyQiw0RkFBQSxJQUFJLE9BQUE7QUFRYixtQ0FNa0I7QUFEaEIsMEdBQUEsZ0JBQWdCLE9BQUE7QUFFbEIsbUNBQWdGO0FBQXZFLHNHQUFBLFlBQVksT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXVkaXQnO1xuZXhwb3J0ICogZnJvbSAnLi9idXNpbmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL3pvbmVzJztcbmV4cG9ydCAqIGZyb20gJy4vd2FsbGV0JztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3JzJztcbmV4cG9ydCB7IGF1dGggfSBmcm9tICcuL2F1dGgnO1xuZXhwb3J0IHR5cGUge1xuICBQa2NlUGFpcixcbiAgQXV0aG9yaXplVXJsSW5wdXQsXG4gIEV4Y2hhbmdlQ29kZUlucHV0LFxuICBSZWZyZXNoSW5wdXQsXG4gIFRva2VuUGFpcixcbn0gZnJvbSAnLi9hdXRoJztcbmV4cG9ydCB7XG4gIHR5cGUgUGxhdGZvcm1BdXRoLFxuICB0eXBlIFBsYXRmb3JtQXV0aElucHV0LFxuICB0eXBlIFBsYXRmb3JtQ29uZmlnLFxuICB0eXBlIFBsYXRmb3JtQ29uZmlnSW5wdXQsXG4gIERFRkFVTFRfQkFTRV9VUkwsXG59IGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCB7IGNyZWF0ZUNsaWVudCwgdHlwZSBDbGllbnRDb25maWcsIHR5cGUgUGxhdGZvcm1DbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsNkNBQTJCO0FBQzNCLDBDQUF3QjtBQUN4QiwyQ0FBeUI7QUFDekIsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6QiwrQkFBOEI7QUFBckIsNEZBQUEsSUFBSSxPQUFBO0FBUWIsbUNBTWtCO0FBRGhCLDBHQUFBLGdCQUFnQixPQUFBO0FBRWxCLG1DQUFnRjtBQUF2RSxzR0FBQSxZQUFZLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F1ZGl0JztcbmV4cG9ydCAqIGZyb20gJy4vYnVzaW5lc3MnO1xuZXhwb3J0ICogZnJvbSAnLi96b25lcyc7XG5leHBvcnQgKiBmcm9tICcuL3dhbGxldCc7XG5leHBvcnQgKiBmcm9tICcuL3Vwc2VsbCc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgeyBhdXRoIH0gZnJvbSAnLi9hdXRoJztcbmV4cG9ydCB0eXBlIHtcbiAgUGtjZVBhaXIsXG4gIEF1dGhvcml6ZVVybElucHV0LFxuICBFeGNoYW5nZUNvZGVJbnB1dCxcbiAgUmVmcmVzaElucHV0LFxuICBUb2tlblBhaXIsXG59IGZyb20gJy4vYXV0aCc7XG5leHBvcnQge1xuICB0eXBlIFBsYXRmb3JtQXV0aCxcbiAgdHlwZSBQbGF0Zm9ybUF1dGhJbnB1dCxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZyxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZ0lucHV0LFxuICBERUZBVUxUX0JBU0VfVVJMLFxufSBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQgeyBjcmVhdGVDbGllbnQsIHR5cGUgQ2xpZW50Q29uZmlnLCB0eXBlIFBsYXRmb3JtQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuIl19