@uengage.io/platform-sdk 0.6.0 → 0.7.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.
@@ -11,6 +11,14 @@ export type AuditEventInput = Omit<AuditEvent, 'event_id' | 'occurred_at' | 'act
11
11
  actor: Omit<AuditEvent['actor'], 'via'>;
12
12
  };
13
13
  export interface AuditClientInput extends PlatformConfigInput {
14
+ /**
15
+ * Service identifier the producer is acting as. Stamped into
16
+ * `actor.via` on every event. Required because the audit schema's
17
+ * `actor.via` field is non-optional; OAuth Bearer tokens carry the
18
+ * identity in `sub` but the SDK doesn't decode them on the hot
19
+ * path. Pin this once at construction; do not change per-call.
20
+ */
21
+ actorVia?: string;
14
22
  /** Default 5000. */
15
23
  flushIntervalMs?: number;
16
24
  /** Default 50. */
@@ -22,24 +22,19 @@ function createAuditClient(input = {}) {
22
22
  const maxBatchSize = input.maxBatchSize ?? 50;
23
23
  const maxQueueSize = input.maxQueueSize ?? 1000;
24
24
  const enableTimer = input.enableTimer ?? true;
25
- const { flushIntervalMs: _f, maxBatchSize: _b, maxQueueSize: _q, enableTimer: _t, ...rest } = input;
25
+ const actorVia = input.actorVia;
26
+ const { flushIntervalMs: _f, maxBatchSize: _b, maxQueueSize: _q, enableTimer: _t, actorVia: _v, ...rest } = input;
26
27
  void _f;
27
28
  void _b;
28
29
  void _q;
29
30
  void _t;
31
+ void _v;
30
32
  state.apply(rest);
31
33
  const queue = [];
32
34
  const inflight = [];
33
35
  function getLogger() {
34
36
  return state.resolve().logger ?? NOOP_LOGGER;
35
37
  }
36
- function getServiceId() {
37
- const config = state.resolve();
38
- if (!config.auth || config.auth.type !== 'hmac') {
39
- throw new Error('audit client requires HMAC auth (set PLATFORM_SIGNING_SECRET + PLATFORM_SERVICE_ID, or call .auth({secret, serviceId}))');
40
- }
41
- return config.auth.serviceId;
42
- }
43
38
  const client = {
44
39
  config(opts) {
45
40
  state.apply(opts);
@@ -51,14 +46,12 @@ function createAuditClient(input = {}) {
51
46
  },
52
47
  record(input) {
53
48
  const logger = getLogger();
54
- let serviceId;
55
- try {
56
- serviceId = getServiceId();
57
- }
58
- catch (err) {
59
- logger.error('audit_sdk.no_auth', {
60
- error: { code: 'AUDIT_NO_AUTH', category: 'engineering' },
61
- context: { message: err.message },
49
+ if (!actorVia) {
50
+ logger.error('audit_sdk.missing_actor_via', {
51
+ error: { code: 'AUDIT_MISSING_ACTOR_VIA', category: 'engineering' },
52
+ context: {
53
+ message: 'audit client requires `actorVia` config (the service identifier this producer acts as). Pass {actorVia: "<your-service>"} to createAuditClient or createClient.',
54
+ },
62
55
  });
63
56
  return;
64
57
  }
@@ -66,7 +59,7 @@ function createAuditClient(input = {}) {
66
59
  ...input,
67
60
  event_id: (0, ulid_1.ulid)(),
68
61
  occurred_at: new Date().toISOString().replace(/\.\d{3}Z$/, 'Z'),
69
- actor: { ...input.actor, via: serviceId },
62
+ actor: { ...input.actor, via: actorVia },
70
63
  };
71
64
  const result = schema_1.auditEventSchema.safeParse(candidate);
72
65
  if (!result.success) {
@@ -166,4 +159,4 @@ function createAuditClient(input = {}) {
166
159
  function sleep(ms) {
167
160
  return new Promise((r) => setTimeout(r, ms));
168
161
  }
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4Q0E4SkM7QUFuTkQsK0JBQTRCO0FBRTVCLHNDQUttQjtBQUNuQixrQ0FBdUM7QUFDdkMscUNBQTZEO0FBK0I3RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFMUMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztJQUNkLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO0lBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ21CLENBQUM7QUFFdkIsU0FBZ0IsaUJBQWlCLENBQUMsUUFBMEIsRUFBRTtJQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQztJQUN0RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztJQUU5QyxNQUFNLEVBQ0osZUFBZSxFQUFFLEVBQUUsRUFDbkIsWUFBWSxFQUFFLEVBQUUsRUFDaEIsWUFBWSxFQUFFLEVBQUUsRUFDaEIsV0FBVyxFQUFFLEVBQUUsRUFDZixHQUFHLElBQUksRUFDUixHQUFHLEtBQUssQ0FBQztJQUNW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LEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdWxpZCB9IGZyb20gJ3VsaWQnO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXIgfSBmcm9tICdAdWVuZ2FnZS5pby9qcy1sb2dnZXInO1xuaW1wb3J0IHtcbiAgQ29uZmlnU3RhdGUsXG4gIHR5cGUgUGxhdGZvcm1BdXRoLFxuICB0eXBlIFBsYXRmb3JtQXV0aElucHV0LFxuICB0eXBlIFBsYXRmb3JtQ29uZmlnSW5wdXQsXG59IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBidWlsZEhlYWRlcnMgfSBmcm9tICcuLi9odHRwJztcbmltcG9ydCB7IGF1ZGl0RXZlbnRTY2hlbWEsIHR5cGUgQXVkaXRFdmVudCB9IGZyb20gJy4vc2NoZW1hJztcblxuLyoqXG4gKiBDYWxsZXItZmFjaW5nIGV2ZW50IHNoYXBlLiBUaGUgU0RLIGZpbGxzOlxuICogICAtIGBldmVudF9pZGAgICAoVUxJRCwgZ2VuZXJhdGVkIHBlciBjYWxsKVxuICogICAtIGBvY2N1cnJlZF9hdGAgKFVUQyBJU08gODYwMSBhdCB0aGUgdGltZSBvZiBgcmVjb3JkKClgKVxuICogICAtIGBhY3Rvci52aWFgICAoYWx3YXlzIHNldCB0byB0aGUgY29uZmlndXJlZCBzZXJ2aWNlSWQsIHNvIGNhbGxlcnNcbiAqICAgICAgICAgICAgICAgICAgIGNhbid0IGRyaWZ0IGZyb20gdGhlIHNlcnZpY2UgaWRlbnRpdHkgdXNlZCBmb3IgYXV0aClcbiAqL1xuZXhwb3J0IHR5cGUgQXVkaXRFdmVudElucHV0ID0gT21pdDxBdWRpdEV2ZW50LCAnZXZlbnRfaWQnIHwgJ29jY3VycmVkX2F0JyB8ICdhY3Rvcic+ICYge1xuICBhY3RvcjogT21pdDxBdWRpdEV2ZW50WydhY3RvciddLCAndmlhJz47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q2xpZW50SW5wdXQgZXh0ZW5kcyBQbGF0Zm9ybUNvbmZpZ0lucHV0IHtcbiAgLyoqIERlZmF1bHQgNTAwMC4gKi9cbiAgZmx1c2hJbnRlcnZhbE1zPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCA1MC4gKi9cbiAgbWF4QmF0Y2hTaXplPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCAxMDAwLiBOZXcgZXZlbnRzIHBhc3QgdGhpcyBhcmUgZHJvcHBlZCB3aXRoIGEgd2FybmluZy4gKi9cbiAgbWF4UXVldWVTaXplPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCB0cnVlLiBTZXQgZmFsc2UgdG8gZGlzYWJsZSB0aGUgYXV0by1mbHVzaCB0aW1lciAodGVzdCBvbmx5KS4gKi9cbiAgZW5hYmxlVGltZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q2xpZW50IHtcbiAgY29uZmlnKGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogQXVkaXRDbGllbnQ7XG4gIGF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogQXVkaXRDbGllbnQ7XG4gIHJlY29yZChldmVudDogQXVkaXRFdmVudElucHV0KTogdm9pZDtcbiAgZmx1c2goKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgUEFUSCA9ICcvdjEvYXVkaXQvZXZlbnRzJztcbmNvbnN0IFJFVFJZX0RFTEFZU19NUyA9IFs1MDAsIDIwMDAsIDgwMDBdO1xuXG5jb25zdCBOT09QX0xPR0dFUiA9IHtcbiAgZXJyb3I6ICgpID0+IHt9LFxuICB3YXJuOiAoKSA9PiB7fSxcbiAgaW5mbzogKCkgPT4ge30sXG4gIGRlYnVnOiAoKSA9PiB7fSxcbiAgY2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG59IGFzIHVua25vd24gYXMgTG9nZ2VyO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaXRDbGllbnQoaW5wdXQ6IEF1ZGl0Q2xpZW50SW5wdXQgPSB7fSk6IEF1ZGl0Q2xpZW50IHtcbiAgY29uc3Qgc3RhdGUgPSBuZXcgQ29uZmlnU3RhdGUoKTtcbiAgY29uc3QgZmx1c2hJbnRlcnZhbE1zID0gaW5wdXQuZmx1c2hJbnRlcnZhbE1zID8/IDUwMDA7XG4gIGNvbnN0IG1heEJhdGNoU2l6ZSA9IGlucHV0Lm1heEJhdGNoU2l6ZSA/PyA1MDtcbiAgY29uc3QgbWF4UXVldWVTaXplID0gaW5wdXQubWF4UXVldWVTaXplID8/IDEwMDA7XG4gIGNvbnN0IGVuYWJsZVRpbWVyID0gaW5wdXQuZW5hYmxlVGltZXIgPz8gdHJ1ZTtcblxuICBjb25zdCB7XG4gICAgZmx1c2hJbnRlcnZhbE1zOiBfZixcbiAgICBtYXhCYXRjaFNpemU6IF9iLFxuICAgIG1heFF1ZXVlU2l6ZTogX3EsXG4gICAgZW5hYmxlVGltZXI6IF90LFxuICAgIC4uLnJlc3RcbiAgfSA9IGlucHV0O1xuICB2b2lkIF9mO1xuICB2b2lkIF9iO1xuICB2b2lkIF9xO1xuICB2b2lkIF90O1xuICBzdGF0ZS5hcHBseShyZXN0KTtcblxuICBjb25zdCBxdWV1ZTogQXVkaXRFdmVudFtdID0gW107XG4gIGNvbnN0IGluZmxpZ2h0OiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICBmdW5jdGlvbiBnZXRMb2dnZXIoKTogTG9nZ2VyIHtcbiAgICByZXR1cm4gc3RhdGUucmVzb2x2ZSgpLmxvZ2dlciA/PyBOT09QX0xPR0dFUjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlcnZpY2VJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbmZpZyA9IHN0YXRlLnJlc29sdmUoKTtcbiAgICBpZiAoIWNvbmZpZy5hdXRoIHx8IGNvbmZpZy5hdXRoLnR5cGUgIT09ICdobWFjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnYXVkaXQgY2xpZW50IHJlcXVpcmVzIEhNQUMgYXV0aCAoc2V0IFBMQVRGT1JNX1NJR05JTkdfU0VDUkVUICsgUExBVEZPUk1fU0VSVklDRV9JRCwgb3IgY2FsbCAuYXV0aCh7c2VjcmV0LCBzZXJ2aWNlSWR9KSknLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZy5hdXRoLnNlcnZpY2VJZDtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudDogQXVkaXRDbGllbnQgPSB7XG4gICAgY29uZmlnKG9wdHMpIHtcbiAgICAgIHN0YXRlLmFwcGx5KG9wdHMpO1xuICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICB9LFxuICAgIGF1dGgob3B0cykge1xuICAgICAgc3RhdGUuc2V0QXV0aChvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICByZWNvcmQoaW5wdXQpIHtcbiAgICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcigpO1xuICAgICAgbGV0IHNlcnZpY2VJZDogc3RyaW5nO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VydmljZUlkID0gZ2V0U2VydmljZUlkKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsubm9fYXV0aCcsIHtcbiAgICAgICAgICBlcnJvcjogeyBjb2RlOiAnQVVESVRfTk9fQVVUSCcsIGNhdGVnb3J5OiAnZW5naW5lZXJpbmcnIH0sXG4gICAgICAgICAgY29udGV4dDogeyBtZXNzYWdlOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbmRpZGF0ZTogQXVkaXRFdmVudCA9IHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIGV2ZW50X2lkOiB1bGlkKCksXG4gICAgICAgIG9jY3VycmVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXFwuXFxkezN9WiQvLCAnWicpLFxuICAgICAgICBhY3RvcjogeyAuLi5pbnB1dC5hY3RvciwgdmlhOiBzZXJ2aWNlSWQgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhdWRpdEV2ZW50U2NoZW1hLnNhZmVQYXJzZShjYW5kaWRhdGUpO1xuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ2F1ZGl0X3Nkay5pbnZhbGlkX2V2ZW50Jywge1xuICAgICAgICAgIGVycm9yOiB7IGNvZGU6ICdBVURJVF9JTlZBTElEX0VWRU5UJywgY2F0ZWdvcnk6ICdlbmdpbmVlcmluZycgfSxcbiAgICAgICAgICBjb250ZXh0OiB7IGlzc3VlczogcmVzdWx0LmVycm9yLmlzc3VlcywgZXZlbnQ6IGNhbmRpZGF0ZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+PSBtYXhRdWV1ZVNpemUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ2F1ZGl0X3Nkay5xdWV1ZV9mdWxsJywge1xuICAgICAgICAgIGNvbnRleHQ6IHsgZHJvcHBlZF9ldmVudF9pZDogY2FuZGlkYXRlLmV2ZW50X2lkLCBtYXhfcXVldWVfc2l6ZTogbWF4UXVldWVTaXplIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBxdWV1ZS5wdXNoKHJlc3VsdC5kYXRhKTtcbiAgICAgIGlmIChxdWV1ZS5sZW5ndGggPj0gbWF4QmF0Y2hTaXplKSB7XG4gICAgICAgIHZvaWQgc2NoZWR1bGVTZW5kKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBmbHVzaCgpIHtcbiAgICAgIGF3YWl0IHNjaGVkdWxlU2VuZCgpO1xuICAgICAgd2hpbGUgKGluZmxpZ2h0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi5pbmZsaWdodF0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2NoZWR1bGVTZW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBiYXRjaCA9IHF1ZXVlLnNwbGljZSgwLCBtYXhCYXRjaFNpemUpO1xuICAgICAgY29uc3Qgc2VuZCA9IHNlbmRXaXRoUmV0cmllcyhiYXRjaCk7XG4gICAgICBpbmZsaWdodC5wdXNoKHNlbmQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2VuZDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGluZmxpZ2h0LmluZGV4T2Yoc2VuZCk7XG4gICAgICAgIGlmIChpZHggIT09IC0xKSBpbmZsaWdodC5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzZW5kV2l0aFJldHJpZXMoZXZlbnRzOiBBdWRpdEV2ZW50W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoKTtcbiAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoeyBldmVudHMgfSk7XG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gUkVUUllfREVMQVlTX01TLmxlbmd0aDsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvayA9IGF3YWl0IHNlbmRPbmNlKGJvZHkpO1xuICAgICAgICBpZiAob2spIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlID0gZXJyIGFzIEVycm9yO1xuICAgICAgICBsb2dnZXIud2FybignYXVkaXRfc2RrLnNlbmRfZXJyb3InLCB7XG4gICAgICAgICAgY29udGV4dDogeyBhdHRlbXB0LCBtZXNzYWdlOiBlLm1lc3NhZ2UsIGJhdGNoX3NpemU6IGV2ZW50cy5sZW5ndGggfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdCA8IFJFVFJZX0RFTEFZU19NUy5sZW5ndGgpIHtcbiAgICAgICAgYXdhaXQgc2xlZXAoUkVUUllfREVMQVlTX01TW2F0dGVtcHRdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsuc2VuZF9mYWlsZWQnLCB7XG4gICAgICBlcnJvcjogeyBjb2RlOiAnQVVESVRfU0VORF9GQUlMRUQnLCBjYXRlZ29yeTogJ2VuZ2luZWVyaW5nJyB9LFxuICAgICAgY29udGV4dDogeyBiYXRjaF9zaXplOiBldmVudHMubGVuZ3RoLCBldmVudHMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRPbmNlKGJvZHk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHN0YXRlLnJlc29sdmUoKTtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoKTtcbiAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgYnVpbGRIZWFkZXJzKGNvbmZpZywgeyBtZXRob2Q6ICdQT1NUJywgcGF0aDogUEFUSCwgYm9keSB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBjb25maWcuZmV0Y2hGbihgJHtjb25maWcuYmFzZVVybH0ke1BBVEh9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICBpZiAocmVzLnN0YXR1cyA+PSA1MDApIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXJlcy5vayAmJiByZXMuc3RhdHVzICE9PSAyMDIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignYXVkaXRfc2RrLnJlamVjdGVkJywge1xuICAgICAgICBlcnJvcjogeyBjb2RlOiAnQVVESVRfUkVKRUNURUQnLCBjYXRlZ29yeTogJ2VuZ2luZWVyaW5nJyB9LFxuICAgICAgICBjb250ZXh0OiB7IHN0YXR1czogcmVzLnN0YXR1cyB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZDtcbiAgaWYgKGVuYWJsZVRpbWVyKSB7XG4gICAgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB2b2lkIHNjaGVkdWxlU2VuZCgpO1xuICAgIH0sIGZsdXNoSW50ZXJ2YWxNcyk7XG4gICAgaWYgKHR5cGVvZiB0aW1lci51bnJlZiA9PT0gJ2Z1bmN0aW9uJykgdGltZXIudW5yZWYoKTtcbiAgfVxuXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG4iXX0=
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZEQSw4Q0F1SkM7QUFwTkQsK0JBQTRCO0FBRTVCLHNDQUttQjtBQUNuQixrQ0FBdUM7QUFDdkMscUNBQTZEO0FBdUM3RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFMUMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztJQUNkLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO0lBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ21CLENBQUM7QUFFdkIsU0FBZ0IsaUJBQWlCLENBQUMsUUFBMEIsRUFBRTtJQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQztJQUN0RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBRWhDLE1BQU0sRUFDSixlQUFlLEVBQUUsRUFBRSxFQUNuQixZQUFZLEVBQUUsRUFBRSxFQUNoQixZQUFZLEVBQUUsRUFBRSxFQUNoQixXQUFXLEVBQUUsRUFB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TyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFO2dCQUNqQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtnQkFDMUQsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUU7YUFDaEMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxLQUFpRCxDQUFDO0lBQ3RELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDcEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVTtZQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bGlkIH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0B1ZW5nYWdlLmlvL2pzLWxvZ2dlcic7XG5pbXBvcnQge1xuICBDb25maWdTdGF0ZSxcbiAgdHlwZSBQbGF0Zm9ybUF1dGgsXG4gIHR5cGUgUGxhdGZvcm1BdXRoSW5wdXQsXG4gIHR5cGUgUGxhdGZvcm1Db25maWdJbnB1dCxcbn0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGJ1aWxkSGVhZGVycyB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgYXVkaXRFdmVudFNjaGVtYSwgdHlwZSBBdWRpdEV2ZW50IH0gZnJvbSAnLi9zY2hlbWEnO1xuXG4vKipcbiAqIENhbGxlci1mYWNpbmcgZXZlbnQgc2hhcGUuIFRoZSBTREsgZmlsbHM6XG4gKiAgIC0gYGV2ZW50X2lkYCAgIChVTElELCBnZW5lcmF0ZWQgcGVyIGNhbGwpXG4gKiAgIC0gYG9jY3VycmVkX2F0YCAoVVRDIElTTyA4NjAxIGF0IHRoZSB0aW1lIG9mIGByZWNvcmQoKWApXG4gKiAgIC0gYGFjdG9yLnZpYWAgIChhbHdheXMgc2V0IHRvIHRoZSBjb25maWd1cmVkIHNlcnZpY2VJZCwgc28gY2FsbGVyc1xuICogICAgICAgICAgICAgICAgICAgY2FuJ3QgZHJpZnQgZnJvbSB0aGUgc2VydmljZSBpZGVudGl0eSB1c2VkIGZvciBhdXRoKVxuICovXG5leHBvcnQgdHlwZSBBdWRpdEV2ZW50SW5wdXQgPSBPbWl0PEF1ZGl0RXZlbnQsICdldmVudF9pZCcgfCAnb2NjdXJyZWRfYXQnIHwgJ2FjdG9yJz4gJiB7XG4gIGFjdG9yOiBPbWl0PEF1ZGl0RXZlbnRbJ2FjdG9yJ10sICd2aWEnPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRDbGllbnRJbnB1dCBleHRlbmRzIFBsYXRmb3JtQ29uZmlnSW5wdXQge1xuICAvKipcbiAgICogU2VydmljZSBpZGVudGlmaWVyIHRoZSBwcm9kdWNlciBpcyBhY3RpbmcgYXMuIFN0YW1wZWQgaW50b1xuICAgKiBgYWN0b3IudmlhYCBvbiBldmVyeSBldmVudC4gUmVxdWlyZWQgYmVjYXVzZSB0aGUgYXVkaXQgc2NoZW1hJ3NcbiAgICogYGFjdG9yLnZpYWAgZmllbGQgaXMgbm9uLW9wdGlvbmFsOyBPQXV0aCBCZWFyZXIgdG9rZW5zIGNhcnJ5IHRoZVxuICAgKiBpZGVudGl0eSBpbiBgc3ViYCBidXQgdGhlIFNESyBkb2Vzbid0IGRlY29kZSB0aGVtIG9uIHRoZSBob3RcbiAgICogcGF0aC4gUGluIHRoaXMgb25jZSBhdCBjb25zdHJ1Y3Rpb247IGRvIG5vdCBjaGFuZ2UgcGVyLWNhbGwuXG4gICAqL1xuICBhY3RvclZpYT86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgNTAwMC4gKi9cbiAgZmx1c2hJbnRlcnZhbE1zPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCA1MC4gKi9cbiAgbWF4QmF0Y2hTaXplPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCAxMDAwLiBOZXcgZXZlbnRzIHBhc3QgdGhpcyBhcmUgZHJvcHBlZCB3aXRoIGEgd2FybmluZy4gKi9cbiAgbWF4UXVldWVTaXplPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCB0cnVlLiBTZXQgZmFsc2UgdG8gZGlzYWJsZSB0aGUgYXV0by1mbHVzaCB0aW1lciAodGVzdCBvbmx5KS4gKi9cbiAgZW5hYmxlVGltZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q2xpZW50IHtcbiAgY29uZmlnKGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogQXVkaXRDbGllbnQ7XG4gIGF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogQXVkaXRDbGllbnQ7XG4gIHJlY29yZChldmVudDogQXVkaXRFdmVudElucHV0KTogdm9pZDtcbiAgZmx1c2goKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgUEFUSCA9ICcvdjEvYXVkaXQvZXZlbnRzJztcbmNvbnN0IFJFVFJZX0RFTEFZU19NUyA9IFs1MDAsIDIwMDAsIDgwMDBdO1xuXG5jb25zdCBOT09QX0xPR0dFUiA9IHtcbiAgZXJyb3I6ICgpID0+IHt9LFxuICB3YXJuOiAoKSA9PiB7fSxcbiAgaW5mbzogKCkgPT4ge30sXG4gIGRlYnVnOiAoKSA9PiB7fSxcbiAgY2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG59IGFzIHVua25vd24gYXMgTG9nZ2VyO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaXRDbGllbnQoaW5wdXQ6IEF1ZGl0Q2xpZW50SW5wdXQgPSB7fSk6IEF1ZGl0Q2xpZW50IHtcbiAgY29uc3Qgc3RhdGUgPSBuZXcgQ29uZmlnU3RhdGUoKTtcbiAgY29uc3QgZmx1c2hJbnRlcnZhbE1zID0gaW5wdXQuZmx1c2hJbnRlcnZhbE1zID8/IDUwMDA7XG4gIGNvbnN0IG1heEJhdGNoU2l6ZSA9IGlucHV0Lm1heEJhdGNoU2l6ZSA/PyA1MDtcbiAgY29uc3QgbWF4UXVldWVTaXplID0gaW5wdXQubWF4UXVldWVTaXplID8/IDEwMDA7XG4gIGNvbnN0IGVuYWJsZVRpbWVyID0gaW5wdXQuZW5hYmxlVGltZXIgPz8gdHJ1ZTtcbiAgY29uc3QgYWN0b3JWaWEgPSBpbnB1dC5hY3RvclZpYTtcblxuICBjb25zdCB7XG4gICAgZmx1c2hJbnRlcnZhbE1zOiBfZixcbiAgICBtYXhCYXRjaFNpemU6IF9iLFxuICAgIG1heFF1ZXVlU2l6ZTogX3EsXG4gICAgZW5hYmxlVGltZXI6IF90LFxuICAgIGFjdG9yVmlhOiBfdixcbiAgICAuLi5yZXN0XG4gIH0gPSBpbnB1dDtcbiAgdm9pZCBfZjtcbiAgdm9pZCBfYjtcbiAgdm9pZCBfcTtcbiAgdm9pZCBfdDtcbiAgdm9pZCBfdjtcbiAgc3RhdGUuYXBwbHkocmVzdCk7XG5cbiAgY29uc3QgcXVldWU6IEF1ZGl0RXZlbnRbXSA9IFtdO1xuICBjb25zdCBpbmZsaWdodDogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgZnVuY3Rpb24gZ2V0TG9nZ2VyKCk6IExvZ2dlciB7XG4gICAgcmV0dXJuIHN0YXRlLnJlc29sdmUoKS5sb2dnZXIgPz8gTk9PUF9MT0dHRVI7XG4gIH1cblxuICBjb25zdCBjbGllbnQ6IEF1ZGl0Q2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG4gICAgcmVjb3JkKGlucHV0KSB7XG4gICAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoKTtcbiAgICAgIGlmICghYWN0b3JWaWEpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsubWlzc2luZ19hY3Rvcl92aWEnLCB7XG4gICAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX01JU1NJTkdfQUNUT1JfVklBJywgY2F0ZWdvcnk6ICdlbmdpbmVlcmluZycgfSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAnYXVkaXQgY2xpZW50IHJlcXVpcmVzIGBhY3RvclZpYWAgY29uZmlnICh0aGUgc2VydmljZSBpZGVudGlmaWVyIHRoaXMgcHJvZHVjZXIgYWN0cyBhcykuIFBhc3Mge2FjdG9yVmlhOiBcIjx5b3VyLXNlcnZpY2U+XCJ9IHRvIGNyZWF0ZUF1ZGl0Q2xpZW50IG9yIGNyZWF0ZUNsaWVudC4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbmRpZGF0ZTogQXVkaXRFdmVudCA9IHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIGV2ZW50X2lkOiB1bGlkKCksXG4gICAgICAgIG9jY3VycmVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXFwuXFxkezN9WiQvLCAnWicpLFxuICAgICAgICBhY3RvcjogeyAuLi5pbnB1dC5hY3RvciwgdmlhOiBhY3RvclZpYSB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF1ZGl0RXZlbnRTY2hlbWEuc2FmZVBhcnNlKGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignYXVkaXRfc2RrLmludmFsaWRfZXZlbnQnLCB7XG4gICAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX0lOVkFMSURfRVZFTlQnLCBjYXRlZ29yeTogJ2VuZ2luZWVyaW5nJyB9LFxuICAgICAgICAgIGNvbnRleHQ6IHsgaXNzdWVzOiByZXN1bHQuZXJyb3IuaXNzdWVzLCBldmVudDogY2FuZGlkYXRlIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocXVldWUubGVuZ3RoID49IG1heFF1ZXVlU2l6ZSkge1xuICAgICAgICBsb2dnZXIud2FybignYXVkaXRfc2RrLnF1ZXVlX2Z1bGwnLCB7XG4gICAgICAgICAgY29udGV4dDogeyBkcm9wcGVkX2V2ZW50X2lkOiBjYW5kaWRhdGUuZXZlbnRfaWQsIG1heF9xdWV1ZV9zaXplOiBtYXhRdWV1ZVNpemUgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHF1ZXVlLnB1c2gocmVzdWx0LmRhdGEpO1xuICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+PSBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgdm9pZCBzY2hlZHVsZVNlbmQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGZsdXNoKCkge1xuICAgICAgYXdhaXQgc2NoZWR1bGVTZW5kKCk7XG4gICAgICB3aGlsZSAoaW5mbGlnaHQubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoWy4uLmluZmxpZ2h0XSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBzY2hlZHVsZVNlbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGJhdGNoID0gcXVldWUuc3BsaWNlKDAsIG1heEJhdGNoU2l6ZSk7XG4gICAgICBjb25zdCBzZW5kID0gc2VuZFdpdGhSZXRyaWVzKGJhdGNoKTtcbiAgICAgIGluZmxpZ2h0LnB1c2goc2VuZCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZW5kO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgaWR4ID0gaW5mbGlnaHQuaW5kZXhPZihzZW5kKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIGluZmxpZ2h0LnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRXaXRoUmV0cmllcyhldmVudHM6IEF1ZGl0RXZlbnRbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcigpO1xuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7IGV2ZW50cyB9KTtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBSRVRSWV9ERUxBWVNfTVMubGVuZ3RoOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9rID0gYXdhaXQgc2VuZE9uY2UoYm9keSk7XG4gICAgICAgIGlmIChvaykgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGUgPSBlcnIgYXMgRXJyb3I7XG4gICAgICAgIGxvZ2dlci53YXJuKCdhdWRpdF9zZGsuc2VuZF9lcnJvcicsIHtcbiAgICAgICAgICBjb250ZXh0OiB7IGF0dGVtcHQsIG1lc3NhZ2U6IGUubWVzc2FnZSwgYmF0Y2hfc2l6ZTogZXZlbnRzLmxlbmd0aCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0IDwgUkVUUllfREVMQVlTX01TLmxlbmd0aCkge1xuICAgICAgICBhd2FpdCBzbGVlcChSRVRSWV9ERUxBWVNfTVNbYXR0ZW1wdF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2dnZXIuZXJyb3IoJ2F1ZGl0X3Nkay5zZW5kX2ZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6ICdBVURJVF9TRU5EX0ZBSUxFRCcsIGNhdGVnb3J5OiAnZW5naW5lZXJpbmcnIH0sXG4gICAgICBjb250ZXh0OiB7IGJhdGNoX3NpemU6IGV2ZW50cy5sZW5ndGgsIGV2ZW50cyB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VuZE9uY2UoYm9keTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29uZmlnID0gc3RhdGUucmVzb2x2ZSgpO1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCBidWlsZEhlYWRlcnMoY29uZmlnLCB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiBQQVRILCBib2R5IH0pO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNvbmZpZy5mZXRjaEZuKGAke2NvbmZpZy5iYXNlVXJsfSR7UEFUSH1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5LFxuICAgIH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID49IDUwMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghcmVzLm9rICYmIHJlcy5zdGF0dXMgIT09IDIwMikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsucmVqZWN0ZWQnLCB7XG4gICAgICAgIGVycm9yOiB7IGNvZGU6ICdBVURJVF9SRUpFQ1RFRCcsIGNhdGVnb3J5OiAnZW5naW5lZXJpbmcnIH0sXG4gICAgICAgIGNvbnRleHQ6IHsgc3RhdHVzOiByZXMuc3RhdHVzIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkO1xuICBpZiAoZW5hYmxlVGltZXIpIHtcbiAgICB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHZvaWQgc2NoZWR1bGVTZW5kKCk7XG4gICAgfSwgZmx1c2hJbnRlcnZhbE1zKTtcbiAgICBpZiAodHlwZW9mIHRpbWVyLnVucmVmID09PSAnZnVuY3Rpb24nKSB0aW1lci51bnJlZigpO1xuICB9XG5cbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbn1cbiJdfQ==
@@ -1,3 +1,2 @@
1
1
  export { auditEventSchema, auditBatchSchema, type AuditEvent, type AuditBatch } from './schema';
2
- export { signRequest, type SignRequestParams } from './sign';
3
2
  export { createAuditClient, type AuditClient, type AuditClientInput, type AuditEventInput, } from './client';
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAuditClient = exports.signRequest = exports.auditBatchSchema = exports.auditEventSchema = void 0;
3
+ exports.createAuditClient = exports.auditBatchSchema = exports.auditEventSchema = void 0;
4
4
  var schema_1 = require("./schema");
5
5
  Object.defineProperty(exports, "auditEventSchema", { enumerable: true, get: function () { return schema_1.auditEventSchema; } });
6
6
  Object.defineProperty(exports, "auditBatchSchema", { enumerable: true, get: function () { return schema_1.auditBatchSchema; } });
7
- var sign_1 = require("./sign");
8
- Object.defineProperty(exports, "signRequest", { enumerable: true, get: function () { return sign_1.signRequest; } });
9
7
  var client_1 = require("./client");
10
8
  Object.defineProperty(exports, "createAuditClient", { enumerable: true, get: function () { return client_1.createAuditClient; } });
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWdHO0FBQXZGLDBHQUFBLGdCQUFnQixPQUFBO0FBQUUsMEdBQUEsZ0JBQWdCLE9BQUE7QUFDM0MsK0JBQTZEO0FBQXBELG1HQUFBLFdBQVcsT0FBQTtBQUNwQixtQ0FLa0I7QUFKaEIsMkdBQUEsaUJBQWlCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBhdWRpdEV2ZW50U2NoZW1hLCBhdWRpdEJhdGNoU2NoZW1hLCB0eXBlIEF1ZGl0RXZlbnQsIHR5cGUgQXVkaXRCYXRjaCB9IGZyb20gJy4vc2NoZW1hJztcbmV4cG9ydCB7IHNpZ25SZXF1ZXN0LCB0eXBlIFNpZ25SZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi9zaWduJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUF1ZGl0Q2xpZW50LFxuICB0eXBlIEF1ZGl0Q2xpZW50LFxuICB0eXBlIEF1ZGl0Q2xpZW50SW5wdXQsXG4gIHR5cGUgQXVkaXRFdmVudElucHV0LFxufSBmcm9tICcuL2NsaWVudCc7XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWdHO0FBQXZGLDBHQUFBLGdCQUFnQixPQUFBO0FBQUUsMEdBQUEsZ0JBQWdCLE9BQUE7QUFDM0MsbUNBS2tCO0FBSmhCLDJHQUFBLGlCQUFpQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgYXVkaXRFdmVudFNjaGVtYSwgYXVkaXRCYXRjaFNjaGVtYSwgdHlwZSBBdWRpdEV2ZW50LCB0eXBlIEF1ZGl0QmF0Y2ggfSBmcm9tICcuL3NjaGVtYSc7XG5leHBvcnQge1xuICBjcmVhdGVBdWRpdENsaWVudCxcbiAgdHlwZSBBdWRpdENsaWVudCxcbiAgdHlwZSBBdWRpdENsaWVudElucHV0LFxuICB0eXBlIEF1ZGl0RXZlbnRJbnB1dCxcbn0gZnJvbSAnLi9jbGllbnQnO1xuIl19
package/dist/client.d.ts CHANGED
@@ -6,25 +6,30 @@ import { auth } from './auth';
6
6
  * the `platform` singleton.
7
7
  *
8
8
  * Pick exactly one of:
9
- * - `accessToken` (string or callback) for the Bearer flow
10
- * - `oauthClientId` + `oauthClientSecret` for OAuth2 client_credentials
11
- * - `serviceId` + `serviceSecret` for HMAC service-to-service
9
+ * - `accessToken` (string or callback) for the static Bearer flow
10
+ * - `serviceId` + `serviceSecret` for OAuth2 client_credentials
12
11
  *
13
- * Mixing is allowed only when one is the user-facing Bearer and the
14
- * other is the HMAC fallback for legacy endpoints (audit ingest).
15
- * In that case `platform.business` uses Bearer; `platform.audit` uses
16
- * HMAC. Without either, calls throw `ConfigError` on the first request.
12
+ * Without either, calls throw `ConfigError` on the first request.
17
13
  */
18
14
  export interface ClientConfig {
19
15
  baseUrl?: string;
20
- /** Auth surface base; defaults to `${baseUrl}/auth/business`. Used only to bootstrap the first client_credentials mint — once a token exists, future auth calls follow the token's `iss`. */
16
+ /**
17
+ * Auth surface base used to bootstrap the first client_credentials
18
+ * mint. Defaults to `${baseUrl}/auth/business`. Once a token exists,
19
+ * future auth calls follow the token's `iss` claim.
20
+ */
21
21
  authBaseUrl?: string;
22
22
  accessToken?: string | (() => string | Promise<string>);
23
- oauthClientId?: string;
24
- oauthClientSecret?: string;
25
- oauthScope?: string;
26
23
  serviceId?: string;
27
24
  serviceSecret?: string;
25
+ /** Space-separated scope list to request when minting via client_credentials. */
26
+ scope?: string;
27
+ /**
28
+ * Service identifier the audit client should stamp into `actor.via`
29
+ * on emitted events. Defaults to `serviceId` when set; otherwise
30
+ * audit `record()` calls log an error and drop the event.
31
+ */
32
+ actorVia?: string;
28
33
  expiryBufferMs?: number;
29
34
  fetchFn?: typeof fetch;
30
35
  }
@@ -34,10 +39,9 @@ export interface PlatformClient {
34
39
  auth: typeof auth;
35
40
  /**
36
41
  * Return a derived client bound to the supplied access token.
37
- * Inherits `baseUrl`, `fetchFn`, and any HMAC fallback from this
38
- * client; replaces the OAuth/static-token source with the new one.
39
- * Use case: BFF handlers that want to call the platform API as the
40
- * end user instead of as the service.
42
+ * Inherits `baseUrl` and `fetchFn`; replaces the token source with
43
+ * the new one. Use case: BFF handlers that want to call the
44
+ * platform API as the end user instead of as the service.
41
45
  */
42
46
  withToken(token: string | (() => string | Promise<string>)): PlatformClient;
43
47
  }
@@ -53,13 +57,12 @@ export declare function createClient(input?: ClientConfig): PlatformClient;
53
57
  * import work). Use `createClient(...)` when you need an isolated
54
58
  * instance with explicit config.
55
59
  *
56
- * PLATFORM_BASE_URL defaults to https://api.platform.uengage.io
57
- * PLATFORM_AUTH_TOKEN Bearer token (overrides OAuth + HMAC)
58
- * PLATFORM_OAUTH_CLIENT_ID OAuth2 client_credentials
59
- * PLATFORM_OAUTH_CLIENT_SECRET OAuth2 client_credentials
60
- * PLATFORM_OAUTH_SCOPE optional space-separated scope list
61
- * PLATFORM_SERVICE_ID HMAC service-id (legacy / audit)
62
- * PLATFORM_SIGNING_SECRET HMAC raw secret (legacy / audit)
60
+ * UENGAGE_BASE_URL defaults to https://api.platform.uengage.io
61
+ * UENGAGE_AUTH_BASE_URL auth surface override (default ${baseUrl}/auth/business)
62
+ * UENGAGE_AUTH_TOKEN static Bearer token (overrides client_credentials)
63
+ * UENGAGE_SERVICE_ID OAuth2 client_credentials clientId
64
+ * UENGAGE_SERVICE_SECRET OAuth2 client_credentials clientSecret
65
+ * UENGAGE_SERVICE_SCOPE optional space-separated scope list
63
66
  */
64
67
  export declare const platform: PlatformClient;
65
68
  /** Test-only: drop the singleton cache between cases. */
package/dist/client.js CHANGED
@@ -6,7 +6,6 @@ exports._resetPlatformSingleton = _resetPlatformSingleton;
6
6
  exports.withToken = withToken;
7
7
  const client_1 = require("./audit/client");
8
8
  const client_2 = require("./business/client");
9
- const auth_1 = require("./auth");
10
9
  const token_source_1 = require("./token-source");
11
10
  const DEFAULT_BASE_URL = 'https://api.platform.uengage.io';
12
11
  /**
@@ -21,21 +20,15 @@ function createClient(input = {}) {
21
20
  function buildClient(input) {
22
21
  const baseUrl = input.baseUrl ?? DEFAULT_BASE_URL;
23
22
  const tokenSourceState = resolveTokenSource(input, baseUrl);
24
- const businessAuth = pickBusinessAuth(input, tokenSourceState);
25
- const businessClient = (0, client_2.createBusinessClient)({
26
- baseUrl,
27
- fetchFn: input.fetchFn,
28
- auth: businessAuth,
29
- });
30
- // Audit is HMAC-only on the server side, so always use the HMAC
31
- // creds when present, regardless of any token-source overlay.
32
- const auditAuth = input.serviceId && input.serviceSecret
33
- ? { type: 'hmac', serviceId: input.serviceId, secret: input.serviceSecret }
23
+ const auth = tokenSourceState
24
+ ? { type: 'token-source', state: tokenSourceState }
34
25
  : undefined;
26
+ const businessClient = (0, client_2.createBusinessClient)({ baseUrl, fetchFn: input.fetchFn, auth });
35
27
  const auditClient = (0, client_1.createAuditClient)({
36
28
  baseUrl,
37
29
  fetchFn: input.fetchFn,
38
- auth: auditAuth,
30
+ auth,
31
+ actorVia: input.actorVia ?? input.serviceId,
39
32
  });
40
33
  const client = {
41
34
  business: businessClient,
@@ -47,22 +40,15 @@ function buildClient(input) {
47
40
  accessToken: token,
48
41
  // The new client should not also try to mint via
49
42
  // client_credentials on top of the supplied user token.
50
- oauthClientId: undefined,
51
- oauthClientSecret: undefined,
52
- oauthScope: undefined,
43
+ serviceId: undefined,
44
+ serviceSecret: undefined,
45
+ scope: undefined,
53
46
  });
54
47
  },
55
48
  };
56
49
  return client;
57
50
  }
58
- function pickBusinessAuth(input, tokenSourceState) {
59
- if (tokenSourceState)
60
- return { type: 'token-source', state: tokenSourceState };
61
- if (input.serviceId && input.serviceSecret) {
62
- return { type: 'hmac', serviceId: input.serviceId, secret: input.serviceSecret };
63
- }
64
- return undefined;
65
- }
51
+ const auth_1 = require("./auth");
66
52
  function resolveTokenSource(input, baseUrl) {
67
53
  const authBaseUrl = input.authBaseUrl ?? `${baseUrl}/auth/business`;
68
54
  if (input.accessToken !== undefined) {
@@ -71,13 +57,13 @@ function resolveTokenSource(input, baseUrl) {
71
57
  }
72
58
  return (0, token_source_1.makeTokenSourceState)({ kind: 'callback', getToken: input.accessToken }, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
73
59
  }
74
- if (input.oauthClientId && input.oauthClientSecret) {
60
+ if (input.serviceId && input.serviceSecret) {
75
61
  return (0, token_source_1.makeTokenSourceState)({
76
62
  kind: 'service-credentials',
77
- clientId: input.oauthClientId,
78
- clientSecret: input.oauthClientSecret,
63
+ clientId: input.serviceId,
64
+ clientSecret: input.serviceSecret,
79
65
  authBaseUrl,
80
- scope: input.oauthScope,
66
+ scope: input.scope,
81
67
  }, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
82
68
  }
83
69
  return undefined;
@@ -87,8 +73,8 @@ function warnIfBrowserSecret(config) {
87
73
  const inBrowser = typeof g.window !== 'undefined' && typeof g.window.document !== 'undefined';
88
74
  if (!inBrowser)
89
75
  return;
90
- if (config.serviceSecret || config.oauthClientSecret) {
91
- console.warn('[uengage-platform-sdk] service-side secrets should not be used in browser environments. ' +
76
+ if (config.serviceSecret) {
77
+ console.warn('[uengage-platform-sdk] serviceSecret should not be used in browser environments. ' +
92
78
  'Service credentials in browser bundles are publicly visible. ' +
93
79
  'Use `accessToken` with a token obtained via OAuth (or `withToken(...)` on a server-built client) instead.');
94
80
  }
@@ -108,14 +94,12 @@ function envClientConfig() {
108
94
  return {};
109
95
  const e = process.env ?? {};
110
96
  return {
111
- baseUrl: e.PLATFORM_BASE_URL,
112
- authBaseUrl: e.PLATFORM_AUTH_BASE_URL,
113
- accessToken: e.PLATFORM_AUTH_TOKEN,
114
- oauthClientId: e.PLATFORM_OAUTH_CLIENT_ID,
115
- oauthClientSecret: e.PLATFORM_OAUTH_CLIENT_SECRET,
116
- oauthScope: e.PLATFORM_OAUTH_SCOPE,
117
- serviceId: e.PLATFORM_SERVICE_ID,
118
- serviceSecret: e.PLATFORM_SIGNING_SECRET,
97
+ baseUrl: e.UENGAGE_BASE_URL,
98
+ authBaseUrl: e.UENGAGE_AUTH_BASE_URL,
99
+ accessToken: e.UENGAGE_AUTH_TOKEN,
100
+ serviceId: e.UENGAGE_SERVICE_ID,
101
+ serviceSecret: e.UENGAGE_SERVICE_SECRET,
102
+ scope: e.UENGAGE_SERVICE_SCOPE,
119
103
  };
120
104
  }
121
105
  /**
@@ -124,13 +108,12 @@ function envClientConfig() {
124
108
  * import work). Use `createClient(...)` when you need an isolated
125
109
  * instance with explicit config.
126
110
  *
127
- * PLATFORM_BASE_URL defaults to https://api.platform.uengage.io
128
- * PLATFORM_AUTH_TOKEN Bearer token (overrides OAuth + HMAC)
129
- * PLATFORM_OAUTH_CLIENT_ID OAuth2 client_credentials
130
- * PLATFORM_OAUTH_CLIENT_SECRET OAuth2 client_credentials
131
- * PLATFORM_OAUTH_SCOPE optional space-separated scope list
132
- * PLATFORM_SERVICE_ID HMAC service-id (legacy / audit)
133
- * PLATFORM_SIGNING_SECRET HMAC raw secret (legacy / audit)
111
+ * UENGAGE_BASE_URL defaults to https://api.platform.uengage.io
112
+ * UENGAGE_AUTH_BASE_URL auth surface override (default ${baseUrl}/auth/business)
113
+ * UENGAGE_AUTH_TOKEN static Bearer token (overrides client_credentials)
114
+ * UENGAGE_SERVICE_ID OAuth2 client_credentials clientId
115
+ * UENGAGE_SERVICE_SECRET OAuth2 client_credentials clientSecret
116
+ * UENGAGE_SERVICE_SCOPE optional space-separated scope list
134
117
  */
135
118
  exports.platform = new Proxy({}, {
136
119
  get(_, prop) {
@@ -149,4 +132,4 @@ function _resetPlatformSingleton() {
149
132
  function withToken(token) {
150
133
  return singleton().withToken(token);
151
134
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1REEsb0NBR0M7QUFpSkQsMERBRUM7QUFNRCw4QkFFQztBQXJORCwyQ0FBcUU7QUFDckUsOENBQThFO0FBQzlFLGlDQUE4QjtBQUM5QixpREFBNkU7QUE2QzdFLE1BQU0sZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFFM0Q7Ozs7R0FJRztBQUNILFNBQWdCLFlBQVksQ0FBQyxRQUFzQixFQUFFO0lBQ25ELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFtQjtJQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDO0lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTVELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sY0FBYyxHQUFHLElBQUEsNkJBQW9CLEVBQUM7UUFDMUMsT0FBTztRQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtLQUNuQixDQUFDLENBQUM7SUFFSCxnRUFBZ0U7SUFDaEUsOERBQThEO0lBQzlELE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLGFBQWE7UUFDcEMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRTtRQUMzRSxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLE1BQU0sV0FBVyxHQUFHLElB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QUFDO1FBQ2pFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCx5REFBeUQ7QUFDekQsU0FBZ0IsdUJBQXVCO0lBQ3JDLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxLQUFnRDtJQUN4RSxPQUFPLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQXVkaXRDbGllbnQsIHR5cGUgQXVkaXRDbGllbnQgfSBmcm9tICcuL2F1ZGl0L2NsaWVudCc7XG5pbXBvcnQgeyBjcmVhdGVCdXNpbmVzc0NsaWVudCwgdHlwZSBCdXNpbmVzc0NsaWVudCB9IGZyb20gJy4vYnVzaW5lc3MvY2xpZW50JztcbmltcG9ydCB7IGF1dGggfSBmcm9tICcuL2F1dGgnO1xuaW1wb3J0IHsgbWFrZVRva2VuU291cmNlU3RhdGUsIHR5cGUgVG9rZW5Tb3VyY2VTdGF0ZSB9IGZyb20gJy4vdG9rZW4tc291cmNlJztcbmltcG9ydCB0eXBlIHsgUGxhdGZvcm1BdXRoIH0gZnJvbSAnLi9jb25maWcnO1xuXG4vKipcbiAqIENhbGxlci1mYWNpbmcgY29uZmlnIGZvciB0aGUgdW5pZmllZCBgY3JlYXRlQ2xpZW50KC4uLilgIGZhY3RvcnkgYW5kXG4gKiB0aGUgYHBsYXRmb3JtYCBzaW5nbGV0b24uXG4gKlxuICogUGljayBleGFjdGx5IG9uZSBvZjpcbiAqICAgLSBgYWNjZXNzVG9rZW5gIChzdHJpbmcgb3IgY2FsbGJhY2spIGZvciB0aGUgQmVhcmVyIGZsb3dcbiAqICAgLSBgb2F1dGhDbGllbnRJZGAgKyBgb2F1dGhDbGllbnRTZWNyZXRgIGZvciBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgIC0gYHNlcnZpY2VJZGAgKyBgc2VydmljZVNlY3JldGAgZm9yIEhNQUMgc2VydmljZS10by1zZXJ2aWNlXG4gKlxuICogTWl4aW5nIGlzIGFsbG93ZWQgb25seSB3aGVuIG9uZSBpcyB0aGUgdXNlci1mYWNpbmcgQmVhcmVyIGFuZCB0aGVcbiAqIG90aGVyIGlzIHRoZSBITUFDIGZhbGxiYWNrIGZvciBsZWdhY3kgZW5kcG9pbnRzIChhdWRpdCBpbmdlc3QpLlxuICogSW4gdGhhdCBjYXNlIGBwbGF0Zm9ybS5idXNpbmVzc2AgdXNlcyBCZWFyZXI7IGBwbGF0Zm9ybS5hdWRpdGAgdXNlc1xuICogSE1BQy4gV2l0aG91dCBlaXRoZXIsIGNhbGxzIHRocm93IGBDb25maWdFcnJvcmAgb24gdGhlIGZpcnN0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50Q29uZmlnIHtcbiAgYmFzZVVybD86IHN0cmluZztcbiAgLyoqIEF1dGggc3VyZmFjZSBiYXNlOyBkZWZhdWx0cyB0byBgJHtiYXNlVXJsfS9hdXRoL2J1c2luZXNzYC4gVXNlZCBvbmx5IHRvIGJvb3RzdHJhcCB0aGUgZmlyc3QgY2xpZW50X2NyZWRlbnRpYWxzIG1pbnQg4oCUIG9uY2UgYSB0b2tlbiBleGlzdHMsIGZ1dHVyZSBhdXRoIGNhbGxzIGZvbGxvdyB0aGUgdG9rZW4ncyBgaXNzYC4gKi9cbiAgYXV0aEJhc2VVcmw/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPik7XG4gIG9hdXRoQ2xpZW50SWQ/OiBzdHJpbmc7XG4gIG9hdXRoQ2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBvYXV0aFNjb3BlPzogc3RyaW5nO1xuICBzZXJ2aWNlSWQ/OiBzdHJpbmc7XG4gIHNlcnZpY2VTZWNyZXQ/OiBzdHJpbmc7XG4gIGV4cGlyeUJ1ZmZlck1zPzogbnVtYmVyO1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQ2xpZW50IHtcbiAgYnVzaW5lc3M6IEJ1c2luZXNzQ2xpZW50O1xuICBhdWRpdDogQXVkaXRDbGllbnQ7XG4gIGF1dGg6IHR5cGVvZiBhdXRoO1xuICAvKipcbiAgICogUmV0dXJuIGEgZGVyaXZlZCBjbGllbnQgYm91bmQgdG8gdGhlIHN1cHBsaWVkIGFjY2VzcyB0b2tlbi5cbiAgICogSW5oZXJpdHMgYGJhc2VVcmxgLCBgZmV0Y2hGbmAsIGFuZCBhbnkgSE1BQyBmYWxsYmFjayBmcm9tIHRoaXNcbiAgICogY2xpZW50OyByZXBsYWNlcyB0aGUgT0F1dGgvc3RhdGljLXRva2VuIHNvdXJjZSB3aXRoIHRoZSBuZXcgb25lLlxuICAgKiBVc2UgY2FzZTogQkZGIGhhbmRsZXJzIHRoYXQgd2FudCB0byBjYWxsIHRoZSBwbGF0Zm9ybSBBUEkgYXMgdGhlXG4gICAqIGVuZCB1c2VyIGluc3RlYWQgb2YgYXMgdGhlIHNlcnZpY2UuXG4gICAqL1xuICB3aXRoVG9rZW4odG9rZW46IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pKTogUGxhdGZvcm1DbGllbnQ7XG59XG5cbmNvbnN0IERFRkFVTFRfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbyc7XG5cbi8qKlxuICogQnVpbGQgYSBmcmVzaCwgaXNvbGF0ZWQgY2xpZW50IGZyb20gZXhwbGljaXQgY29uZmlnLiBFYWNoIGNhbGxcbiAqIGdldHMgaXRzIG93biBUb2tlblNvdXJjZSBzdGF0ZSDigJQgY29uY3VycmVudCBgY3JlYXRlQ2xpZW50KC4uLilgIHVzZVxuICogZG9lcyBub3Qgc3RhbXBlZGUgdGhlIGNhY2hlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcgPSB7fSk6IFBsYXRmb3JtQ2xpZW50IHtcbiAgd2FybklmQnJvd3NlclNlY3JldChpbnB1dCk7XG4gIHJldHVybiBidWlsZENsaWVudChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIGNvbnN0IGJhc2VVcmwgPSBpbnB1dC5iYXNlVXJsID8/IERFRkFVTFRfQkFTRV9VUkw7XG4gIGNvbnN0IHRva2VuU291cmNlU3RhdGUgPSByZXNvbHZlVG9rZW5Tb3VyY2UoaW5wdXQsIGJhc2VVcmwpO1xuXG4gIGNvbnN0IGJ1c2luZXNzQXV0aCA9IHBpY2tCdXNpbmVzc0F1dGgoaW5wdXQsIHRva2VuU291cmNlU3RhdGUpO1xuICBjb25zdCBidXNpbmVzc0NsaWVudCA9IGNyZWF0ZUJ1c2luZXNzQ2xpZW50KHtcbiAgICBiYXNlVXJsLFxuICAgIGZldGNoRm46IGlucHV0LmZldGNoRm4sXG4gICAgYXV0aDogYnVzaW5lc3NBdXRoLFxuICB9KTtcblxuICAvLyBBdWRpdCBpcyBITUFDLW9ubHkgb24gdGhlIHNlcnZlciBzaWRlLCBzbyBhbHdheXMgdXNlIHRoZSBITUFDXG4gIC8vIGNyZWRzIHdoZW4gcHJlc2VudCwgcmVnYXJkbGVzcyBvZiBhbnkgdG9rZW4tc291cmNlIG92ZXJsYXkuXG4gIGNvbnN0IGF1ZGl0QXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkID1cbiAgICBpbnB1dC5zZXJ2aWNlSWQgJiYgaW5wdXQuc2VydmljZVNlY3JldFxuICAgICAgPyB7IHR5cGU6ICdobWFjJywgc2VydmljZUlkOiBpbnB1dC5zZXJ2aWNlSWQsIHNlY3JldDogaW5wdXQuc2VydmljZVNlY3JldCB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYXVkaXRDbGllbnQgPSBjcmVhdGVBdWRpdENsaWVudCh7XG4gICAgYmFzZVVybCxcbiAgICBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuLFxuICAgIGF1dGg6IGF1ZGl0QXV0aCxcbiAgfSk7XG5cbiAgY29uc3QgY2xpZW50OiBQbGF0Zm9ybUNsaWVudCA9IHtcbiAgICBidXNpbmVzczogYnVzaW5lc3NDbGllbnQsXG4gICAgYXVkaXQ6IGF1ZGl0Q2xpZW50LFxuICAgIGF1dGgsXG4gICAgd2l0aFRva2VuKHRva2VuKSB7XG4gICAgICByZXR1cm4gYnVpbGRDbGllbnQoe1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgYWNjZXNzVG9rZW46IHRva2VuLFxuICAgICAgICAvLyBUaGUgbmV3IGNsaWVudCBzaG91bGQgbm90IGFsc28gdHJ5IHRvIG1pbnQgdmlhXG4gICAgICAgIC8vIGNsaWVudF9jcmVkZW50aWFscyBvbiB0b3Agb2YgdGhlIHN1cHBsaWVkIHVzZXIgdG9rZW4uXG4gICAgICAgIG9hdXRoQ2xpZW50SWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgb2F1dGhDbGllbnRTZWNyZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgb2F1dGhTY29wZTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuZnVuY3Rpb24gcGlja0J1c2luZXNzQXV0aChcbiAgaW5wdXQ6IENsaWVudENvbmZpZyxcbiAgdG9rZW5Tb3VyY2VTdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSB8IHVuZGVmaW5lZCxcbik6IFBsYXRmb3JtQXV0aCB8IHVuZGVmaW5lZCB7XG4gIGlmICh0b2tlblNvdXJjZVN0YXRlKSByZXR1cm4geyB0eXBlOiAndG9rZW4tc291cmNlJywgc3RhdGU6IHRva2VuU291cmNlU3RhdGUgfTtcbiAgaWYgKGlucHV0LnNlcnZpY2VJZCAmJiBpbnB1dC5zZXJ2aWNlU2VjcmV0KSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2htYWMnLCBzZXJ2aWNlSWQ6IGlucHV0LnNlcnZpY2VJZCwgc2VjcmV0OiBpbnB1dC5zZXJ2aWNlU2VjcmV0IH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRva2VuU291cmNlKGlucHV0OiBDbGllbnRDb25maWcsIGJhc2VVcmw6IHN0cmluZyk6IFRva2VuU291cmNlU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBhdXRoQmFzZVVybCA9IGlucHV0LmF1dGhCYXNlVXJsID8/IGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgO1xuICBpZiAoaW5wdXQuYWNjZXNzVG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQuYWNjZXNzVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHsga2luZDogJ3N0YXRpYy1zdHJpbmcnLCB0b2tlbjogaW5wdXQuYWNjZXNzVG9rZW4gfSxcbiAgICAgICAgeyBleHBpcnlCdWZmZXJNczogaW5wdXQuZXhwaXJ5QnVmZmVyTXMsIGZldGNoRm46IGlucHV0LmZldGNoRm4gfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtYWtlVG9rZW5Tb3VyY2VTdGF0ZShcbiAgICAgIHsga2luZDogJ2NhbGxiYWNrJywgZ2V0VG9rZW46IGlucHV0LmFjY2Vzc1Rva2VuIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0Lm9hdXRoQ2xpZW50SWQgJiYgaW5wdXQub2F1dGhDbGllbnRTZWNyZXQpIHtcbiAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdzZXJ2aWNlLWNyZWRlbnRpYWxzJyxcbiAgICAgICAgY2xpZW50SWQ6IGlucHV0Lm9hdXRoQ2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogaW5wdXQub2F1dGhDbGllbnRTZWNyZXQsXG4gICAgICAgIGF1dGhCYXNlVXJsLFxuICAgICAgICBzY29wZTogaW5wdXQub2F1dGhTY29wZSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmQnJvd3NlclNlY3JldChjb25maWc6IENsaWVudENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB7IHdpbmRvdz86IHsgZG9jdW1lbnQ/OiB1bmtub3duIH0gfTtcbiAgY29uc3QgaW5Ccm93c2VyID0gdHlwZW9mIGcud2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZy53aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIWluQnJvd3NlcikgcmV0dXJuO1xuICBpZiAoY29uZmlnLnNlcnZpY2VTZWNyZXQgfHwgY29uZmlnLm9hdXRoQ2xpZW50U2VjcmV0KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1t1ZW5nYWdlLXBsYXRmb3JtLXNka10gc2VydmljZS1zaWRlIHNlY3JldHMgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzLiAnICtcbiAgICAgICAgJ1NlcnZpY2UgY3JlZGVudGlhbHMgaW4gYnJvd3NlciBidW5kbGVzIGFyZSBwdWJsaWNseSB2aXNpYmxlLiAnICtcbiAgICAgICAgJ1VzZSBgYWNjZXNzVG9rZW5gIHdpdGggYSB0b2tlbiBvYnRhaW5lZCB2aWEgT0F1dGggKG9yIGB3aXRoVG9rZW4oLi4uKWAgb24gYSBzZXJ2ZXItYnVpbHQgY2xpZW50KSBpbnN0ZWFkLicsXG4gICAgKTtcbiAgfVxufVxuXG4vLyDilIDilIDilIAgRGVmYXVsdCBzaW5nbGV0b24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8gUmVzb2x2ZWQgbGF6aWx5IG9uIGZpcnN0IHByb3BlcnR5IGFjY2VzcyAoUHJveHkpIHNvIGNvbnN1bWVycyB0aGF0XG4vLyBtdXRhdGUgYHByb2Nlc3MuZW52YCBhZnRlciBpbXBvcnQgc3RpbGwgcGljayB1cCB0aGUgcmlnaHQgdmFsdWVzLlxuXG5sZXQgY2FjaGVkU2luZ2xldG9uOiBQbGF0Zm9ybUNsaWVudCB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHNpbmdsZXRvbigpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIGlmICghY2FjaGVkU2luZ2xldG9uKSBjYWNoZWRTaW5nbGV0b24gPSBidWlsZENsaWVudChlbnZDbGllbnRDb25maWcoKSk7XG4gIHJldHVybiBjYWNoZWRTaW5nbGV0b247XG59XG5cbmZ1bmN0aW9uIGVudkNsaWVudENvbmZpZygpOiBDbGllbnRDb25maWcge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSByZXR1cm4ge307XG4gIGNvbnN0IGUgPSAocHJvY2VzcyBhcyB7IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfSkuZW52ID8/IHt9O1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IGUuUExBVEZPUk1fQkFTRV9VUkwsXG4gICAgYXV0aEJhc2VVcmw6IGUuUExBVEZPUk1fQVVUSF9CQVNFX1VSTCxcbiAgICBhY2Nlc3NUb2tlbjogZS5QTEFURk9STV9BVVRIX1RPS0VOLFxuICAgIG9hdXRoQ2xpZW50SWQ6IGUuUExBVEZPUk1fT0FVVEhfQ0xJRU5UX0lELFxuICAgIG9hdXRoQ2xpZW50U2VjcmV0OiBlLlBMQVRGT1JNX09BVVRIX0NMSUVOVF9TRUNSRVQsXG4gICAgb2F1dGhTY29wZTogZS5QTEFURk9STV9PQVVUSF9TQ09QRSxcbiAgICBzZXJ2aWNlSWQ6IGUuUExBVEZPUk1fU0VSVklDRV9JRCxcbiAgICBzZXJ2aWNlU2VjcmV0OiBlLlBMQVRGT1JNX1NJR05JTkdfU0VDUkVULFxuICB9O1xufVxuXG4vKipcbiAqIERlZmF1bHQgY2xpZW50LiBSZWFkcyBjb25maWcgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gZmlyc3RcbiAqIHByb3BlcnR5IGFjY2VzcyAoc28gdGVzdCBzZXR1cHMgdGhhdCBtdXRhdGUgYHByb2Nlc3MuZW52YCBhZnRlclxuICogaW1wb3J0IHdvcmspLiBVc2UgYGNyZWF0ZUNsaWVudCguLi4pYCB3aGVuIHlvdSBuZWVkIGFuIGlzb2xhdGVkXG4gKiBpbnN0YW5jZSB3aXRoIGV4cGxpY2l0IGNvbmZpZy5cbiAqXG4gKiAgIFBMQVRGT1JNX0JBU0VfVVJMICAgICAgICAgICAgICBkZWZhdWx0cyB0byBodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvXG4gKiAgIFBMQVRGT1JNX0FVVEhfVE9LRU4gICAgICAgICAgICBCZWFyZXIgdG9rZW4gKG92ZXJyaWRlcyBPQXV0aCArIEhNQUMpXG4gKiAgIFBMQVRGT1JNX09BVVRIX0NMSUVOVF9JRCAgICAgICBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgIFBMQVRGT1JNX09BVVRIX0NMSUVOVF9TRUNSRVQgICBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgIFBMQVRGT1JNX09BVVRIX1NDT1BFICAgICAgICAgICBvcHRpb25hbCBzcGFjZS1zZXBhcmF0ZWQgc2NvcGUgbGlzdFxuICogICBQTEFURk9STV9TRVJWSUNFX0lEICAgICAgICAgICAgSE1BQyBzZXJ2aWNlLWlkIChsZWdhY3kgLyBhdWRpdClcbiAqICAgUExBVEZPUk1fU0lHTklOR19TRUNSRVQgICAgICAgIEhNQUMgcmF3IHNlY3JldCAgKGxlZ2FjeSAvIGF1ZGl0KVxuICovXG5leHBvcnQgY29uc3QgcGxhdGZvcm06IFBsYXRmb3JtQ2xpZW50ID0gbmV3IFByb3h5KHt9IGFzIFBsYXRmb3JtQ2xpZW50LCB7XG4gIGdldChfLCBwcm9wKSB7XG4gICAgY29uc3QgcyA9IHNpbmdsZXRvbigpIGFzIHVua25vd24gYXMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPjtcbiAgICByZXR1cm4gc1twcm9wXTtcbiAgfSxcbn0pO1xuXG4vKiogVGVzdC1vbmx5OiBkcm9wIHRoZSBzaW5nbGV0b24gY2FjaGUgYmV0d2VlbiBjYXNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRQbGF0Zm9ybVNpbmdsZXRvbigpOiB2b2lkIHtcbiAgY2FjaGVkU2luZ2xldG9uID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlOiBzaG9ydGhhbmQgZm9yIGBwbGF0Zm9ybS53aXRoVG9rZW4odG9rZW4pYC5cbiAqIEJGRiBoYW5kbGVycyBjb21tb25seSBjYWxsIHRoaXMgb25jZSBwZXIgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUb2tlbih0b2tlbjogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPikpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIHJldHVybiBzaW5nbGV0b24oKS53aXRoVG9rZW4odG9rZW4pO1xufVxuIl19
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEyREEsb0NBR0M7QUE2SEQsMERBRUM7QUFNRCw4QkFFQztBQXJNRCwyQ0FBcUU7QUFDckUsOENBQThFO0FBRTlFLGlEQUE2RTtBQWlEN0UsTUFBTSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUUzRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLFFBQXNCLEVBQUU7SUFDbkQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQW1CO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUM7SUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsTUFBTSxJQUFJLEdBQTZCLGdCQUFnQjtRQUNyRCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtRQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsTUFBTSxjQUFjLEdBQUcsSUFBQSw2QkFBb0IsRUFBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sV0FBVyxHQUFHLElBQUEsMEJBQWlCLEVBQUM7UUFDcEMsT0FBTztRQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixJQUFJO1FBQ0osUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVM7S0FDNUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQW1CO1FBQzdCLFFBQVEsRUFBRSxjQUFjO1FB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QUM5RSxPQUFPO1FBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7UUFDM0IsV0FBVyxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7UUFDcEMsV0FBVyxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7UUFDakMsU0FBUyxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7UUFDL0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxzQkFBc0I7UUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7S0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDVSxRQUFBLFFBQVEsR0FBbUIsSUFBSSxLQUFLLENBQUMsRUFBb0IsRUFBRTtJQUN0RSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUk7UUFDVCxNQUFNLENBQUMsR0FBRyxTQUFTLEVBQTZDLENBQUM7UUFDakUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILHlEQUF5RDtBQUN6RCxTQUFnQix1QkFBdUI7SUFDckMsZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUM5QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLEtBQWdEO0lBQ3hFLE9BQU8sU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVBdWRpdENsaWVudCwgdHlwZSBBdWRpdENsaWVudCB9IGZyb20gJy4vYXVkaXQvY2xpZW50JztcbmltcG9ydCB7IGNyZWF0ZUJ1c2luZXNzQ2xpZW50LCB0eXBlIEJ1c2luZXNzQ2xpZW50IH0gZnJvbSAnLi9idXNpbmVzcy9jbGllbnQnO1xuaW1wb3J0IHsgYXV0aCB9IGZyb20gJy4vYXV0aCc7XG5pbXBvcnQgeyBtYWtlVG9rZW5Tb3VyY2VTdGF0ZSwgdHlwZSBUb2tlblNvdXJjZVN0YXRlIH0gZnJvbSAnLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUF1dGggfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICogQ2FsbGVyLWZhY2luZyBjb25maWcgZm9yIHRoZSB1bmlmaWVkIGBjcmVhdGVDbGllbnQoLi4uKWAgZmFjdG9yeSBhbmRcbiAqIHRoZSBgcGxhdGZvcm1gIHNpbmdsZXRvbi5cbiAqXG4gKiBQaWNrIGV4YWN0bHkgb25lIG9mOlxuICogICAtIGBhY2Nlc3NUb2tlbmAgKHN0cmluZyBvciBjYWxsYmFjaykgZm9yIHRoZSBzdGF0aWMgQmVhcmVyIGZsb3dcbiAqICAgLSBgc2VydmljZUlkYCArIGBzZXJ2aWNlU2VjcmV0YCBmb3IgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFsc1xuICpcbiAqIFdpdGhvdXQgZWl0aGVyLCBjYWxscyB0aHJvdyBgQ29uZmlnRXJyb3JgIG9uIHRoZSBmaXJzdCByZXF1ZXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudENvbmZpZyB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdXRoIHN1cmZhY2UgYmFzZSB1c2VkIHRvIGJvb3RzdHJhcCB0aGUgZmlyc3QgY2xpZW50X2NyZWRlbnRpYWxzXG4gICAqIG1pbnQuIERlZmF1bHRzIHRvIGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgLiBPbmNlIGEgdG9rZW4gZXhpc3RzLFxuICAgKiBmdXR1cmUgYXV0aCBjYWxscyBmb2xsb3cgdGhlIHRva2VuJ3MgYGlzc2AgY2xhaW0uXG4gICAqL1xuICBhdXRoQmFzZVVybD86IHN0cmluZztcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTtcbiAgc2VydmljZUlkPzogc3RyaW5nO1xuICBzZXJ2aWNlU2VjcmV0Pzogc3RyaW5nO1xuICAvKiogU3BhY2Utc2VwYXJhdGVkIHNjb3BlIGxpc3QgdG8gcmVxdWVzdCB3aGVuIG1pbnRpbmcgdmlhIGNsaWVudF9jcmVkZW50aWFscy4gKi9cbiAgc2NvcGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXJ2aWNlIGlkZW50aWZpZXIgdGhlIGF1ZGl0IGNsaWVudCBzaG91bGQgc3RhbXAgaW50byBgYWN0b3IudmlhYFxuICAgKiBvbiBlbWl0dGVkIGV2ZW50cy4gRGVmYXVsdHMgdG8gYHNlcnZpY2VJZGAgd2hlbiBzZXQ7IG90aGVyd2lzZVxuICAgKiBhdWRpdCBgcmVjb3JkKClgIGNhbGxzIGxvZyBhbiBlcnJvciBhbmQgZHJvcCB0aGUgZXZlbnQuXG4gICAqL1xuICBhY3RvclZpYT86IHN0cmluZztcbiAgZXhwaXJ5QnVmZmVyTXM/OiBudW1iZXI7XG4gIGZldGNoRm4/OiB0eXBlb2YgZmV0Y2g7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1DbGllbnQge1xuICBidXNpbmVzczogQnVzaW5lc3NDbGllbnQ7XG4gIGF1ZGl0OiBBdWRpdENsaWVudDtcbiAgYXV0aDogdHlwZW9mIGF1dGg7XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBkZXJpdmVkIGNsaWVudCBib3VuZCB0byB0aGUgc3VwcGxpZWQgYWNjZXNzIHRva2VuLlxuICAgKiBJbmhlcml0cyBgYmFzZVVybGAgYW5kIGBmZXRjaEZuYDsgcmVwbGFjZXMgdGhlIHRva2VuIHNvdXJjZSB3aXRoXG4gICAqIHRoZSBuZXcgb25lLiBVc2UgY2FzZTogQkZGIGhhbmRsZXJzIHRoYXQgd2FudCB0byBjYWxsIHRoZVxuICAgKiBwbGF0Zm9ybSBBUEkgYXMgdGhlIGVuZCB1c2VyIGluc3RlYWQgb2YgYXMgdGhlIHNlcnZpY2UuXG4gICAqL1xuICB3aXRoVG9rZW4odG9rZW46IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pKTogUGxhdGZvcm1DbGllbnQ7XG59XG5cbmNvbnN0IERFRkFVTFRfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbyc7XG5cbi8qKlxuICogQnVpbGQgYSBmcmVzaCwgaXNvbGF0ZWQgY2xpZW50IGZyb20gZXhwbGljaXQgY29uZmlnLiBFYWNoIGNhbGxcbiAqIGdldHMgaXRzIG93biBUb2tlblNvdXJjZSBzdGF0ZSDigJQgY29uY3VycmVudCBgY3JlYXRlQ2xpZW50KC4uLilgIHVzZVxuICogZG9lcyBub3Qgc3RhbXBlZGUgdGhlIGNhY2hlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcgPSB7fSk6IFBsYXRmb3JtQ2xpZW50IHtcbiAgd2FybklmQnJvd3NlclNlY3JldChpbnB1dCk7XG4gIHJldHVybiBidWlsZENsaWVudChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIGNvbnN0IGJhc2VVcmwgPSBpbnB1dC5iYXNlVXJsID8/IERFRkFVTFRfQkFTRV9VUkw7XG4gIGNvbnN0IHRva2VuU291cmNlU3RhdGUgPSByZXNvbHZlVG9rZW5Tb3VyY2UoaW5wdXQsIGJhc2VVcmwpO1xuICBjb25zdCBhdXRoOiBQbGF0Zm9ybUF1dGggfCB1bmRlZmluZWQgPSB0b2tlblNvdXJjZVN0YXRlXG4gICAgPyB7IHR5cGU6ICd0b2tlbi1zb3VyY2UnLCBzdGF0ZTogdG9rZW5Tb3VyY2VTdGF0ZSB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYnVzaW5lc3NDbGllbnQgPSBjcmVhdGVCdXNpbmVzc0NsaWVudCh7IGJhc2VVcmwsIGZldGNoRm46IGlucHV0LmZldGNoRm4sIGF1dGggfSk7XG4gIGNvbnN0IGF1ZGl0Q2xpZW50ID0gY3JlYXRlQXVkaXRDbGllbnQoe1xuICAgIGJhc2VVcmwsXG4gICAgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbixcbiAgICBhdXRoLFxuICAgIGFjdG9yVmlhOiBpbnB1dC5hY3RvclZpYSA/PyBpbnB1dC5zZXJ2aWNlSWQsXG4gIH0pO1xuXG4gIGNvbnN0IGNsaWVudDogUGxhdGZvcm1DbGllbnQgPSB7XG4gICAgYnVzaW5lc3M6IGJ1c2luZXNzQ2xpZW50LFxuICAgIGF1ZGl0OiBhdWRpdENsaWVudCxcbiAgICBhdXRoOiBhdXRoTmFtZXNwYWNlLFxuICAgIHdpdGhUb2tlbih0b2tlbikge1xuICAgICAgcmV0dXJuIGJ1aWxkQ2xpZW50KHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbixcbiAgICAgICAgLy8gVGhlIG5ldyBjbGllbnQgc2hvdWxkIG5vdCBhbHNvIHRyeSB0byBtaW50IHZpYVxuICAgICAgICAvLyBjbGllbnRfY3JlZGVudGlhbHMgb24gdG9wIG9mIHRoZSBzdXBwbGllZCB1c2VyIHRva2VuLlxuICAgICAgICBzZXJ2aWNlSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VydmljZVNlY3JldDogdW5kZWZpbmVkLFxuICAgICAgICBzY29wZTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuaW1wb3J0IHsgYXV0aCBhcyBhdXRoTmFtZXNwYWNlIH0gZnJvbSAnLi9hdXRoJztcblxuZnVuY3Rpb24gcmVzb2x2ZVRva2VuU291cmNlKGlucHV0OiBDbGllbnRDb25maWcsIGJhc2VVcmw6IHN0cmluZyk6IFRva2VuU291cmNlU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBhdXRoQmFzZVVybCA9IGlucHV0LmF1dGhCYXNlVXJsID8/IGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgO1xuICBpZiAoaW5wdXQuYWNjZXNzVG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQuYWNjZXNzVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHsga2luZDogJ3N0YXRpYy1zdHJpbmcnLCB0b2tlbjogaW5wdXQuYWNjZXNzVG9rZW4gfSxcbiAgICAgICAgeyBleHBpcnlCdWZmZXJNczogaW5wdXQuZXhwaXJ5QnVmZmVyTXMsIGZldGNoRm46IGlucHV0LmZldGNoRm4gfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtYWtlVG9rZW5Tb3VyY2VTdGF0ZShcbiAgICAgIHsga2luZDogJ2NhbGxiYWNrJywgZ2V0VG9rZW46IGlucHV0LmFjY2Vzc1Rva2VuIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0LnNlcnZpY2VJZCAmJiBpbnB1dC5zZXJ2aWNlU2VjcmV0KSB7XG4gICAgcmV0dXJuIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICAgICAge1xuICAgICAgICBraW5kOiAnc2VydmljZS1jcmVkZW50aWFscycsXG4gICAgICAgIGNsaWVudElkOiBpbnB1dC5zZXJ2aWNlSWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogaW5wdXQuc2VydmljZVNlY3JldCxcbiAgICAgICAgYXV0aEJhc2VVcmwsXG4gICAgICAgIHNjb3BlOiBpbnB1dC5zY29wZSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmQnJvd3NlclNlY3JldChjb25maWc6IENsaWVudENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB7IHdpbmRvdz86IHsgZG9jdW1lbnQ/OiB1bmtub3duIH0gfTtcbiAgY29uc3QgaW5Ccm93c2VyID0gdHlwZW9mIGcud2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZy53aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIWluQnJvd3NlcikgcmV0dXJuO1xuICBpZiAoY29uZmlnLnNlcnZpY2VTZWNyZXQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW3VlbmdhZ2UtcGxhdGZvcm0tc2RrXSBzZXJ2aWNlU2VjcmV0IHNob3VsZCBub3QgYmUgdXNlZCBpbiBicm93c2VyIGVudmlyb25tZW50cy4gJyArXG4gICAgICAgICdTZXJ2aWNlIGNyZWRlbnRpYWxzIGluIGJyb3dzZXIgYnVuZGxlcyBhcmUgcHVibGljbHkgdmlzaWJsZS4gJyArXG4gICAgICAgICdVc2UgYGFjY2Vzc1Rva2VuYCB3aXRoIGEgdG9rZW4gb2J0YWluZWQgdmlhIE9BdXRoIChvciBgd2l0aFRva2VuKC4uLilgIG9uIGEgc2VydmVyLWJ1aWx0IGNsaWVudCkgaW5zdGVhZC4nLFxuICAgICk7XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSAIERlZmF1bHQgc2luZ2xldG9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIFJlc29sdmVkIGxhemlseSBvbiBmaXJzdCBwcm9wZXJ0eSBhY2Nlc3MgKFByb3h5KSBzbyBjb25zdW1lcnMgdGhhdFxuLy8gbXV0YXRlIGBwcm9jZXNzLmVudmAgYWZ0ZXIgaW1wb3J0IHN0aWxsIHBpY2sgdXAgdGhlIHJpZ2h0IHZhbHVlcy5cblxubGV0IGNhY2hlZFNpbmdsZXRvbjogUGxhdGZvcm1DbGllbnQgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBzaW5nbGV0b24oKTogUGxhdGZvcm1DbGllbnQge1xuICBpZiAoIWNhY2hlZFNpbmdsZXRvbikgY2FjaGVkU2luZ2xldG9uID0gYnVpbGRDbGllbnQoZW52Q2xpZW50Q29uZmlnKCkpO1xuICByZXR1cm4gY2FjaGVkU2luZ2xldG9uO1xufVxuXG5mdW5jdGlvbiBlbnZDbGllbnRDb25maWcoKTogQ2xpZW50Q29uZmlnIHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHt9O1xuICBjb25zdCBlID0gKHByb2Nlc3MgYXMgeyBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IH0pLmVudiA/PyB7fTtcbiAgcmV0dXJuIHtcbiAgICBiYXNlVXJsOiBlLlVFTkdBR0VfQkFTRV9VUkwsXG4gICAgYXV0aEJhc2VVcmw6IGUuVUVOR0FHRV9BVVRIX0JBU0VfVVJMLFxuICAgIGFjY2Vzc1Rva2VuOiBlLlVFTkdBR0VfQVVUSF9UT0tFTixcbiAgICBzZXJ2aWNlSWQ6IGUuVUVOR0FHRV9TRVJWSUNFX0lELFxuICAgIHNlcnZpY2VTZWNyZXQ6IGUuVUVOR0FHRV9TRVJWSUNFX1NFQ1JFVCxcbiAgICBzY29wZTogZS5VRU5HQUdFX1NFUlZJQ0VfU0NPUEUsXG4gIH07XG59XG5cbi8qKlxuICogRGVmYXVsdCBjbGllbnQuIFJlYWRzIGNvbmZpZyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBmaXJzdFxuICogcHJvcGVydHkgYWNjZXNzIChzbyB0ZXN0IHNldHVwcyB0aGF0IG11dGF0ZSBgcHJvY2Vzcy5lbnZgIGFmdGVyXG4gKiBpbXBvcnQgd29yaykuIFVzZSBgY3JlYXRlQ2xpZW50KC4uLilgIHdoZW4geW91IG5lZWQgYW4gaXNvbGF0ZWRcbiAqIGluc3RhbmNlIHdpdGggZXhwbGljaXQgY29uZmlnLlxuICpcbiAqICAgVUVOR0FHRV9CQVNFX1VSTCAgICAgICAgIGRlZmF1bHRzIHRvIGh0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW9cbiAqICAgVUVOR0FHRV9BVVRIX0JBU0VfVVJMICAgIGF1dGggc3VyZmFjZSBvdmVycmlkZSAoZGVmYXVsdCAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3MpXG4gKiAgIFVFTkdBR0VfQVVUSF9UT0tFTiAgICAgICBzdGF0aWMgQmVhcmVyIHRva2VuIChvdmVycmlkZXMgY2xpZW50X2NyZWRlbnRpYWxzKVxuICogICBVRU5HQUdFX1NFUlZJQ0VfSUQgICAgICAgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyBjbGllbnRJZFxuICogICBVRU5HQUdFX1NFUlZJQ0VfU0VDUkVUICAgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyBjbGllbnRTZWNyZXRcbiAqICAgVUVOR0FHRV9TRVJWSUNFX1NDT1BFICAgIG9wdGlvbmFsIHNwYWNlLXNlcGFyYXRlZCBzY29wZSBsaXN0XG4gKi9cbmV4cG9ydCBjb25zdCBwbGF0Zm9ybTogUGxhdGZvcm1DbGllbnQgPSBuZXcgUHJveHkoe30gYXMgUGxhdGZvcm1DbGllbnQsIHtcbiAgZ2V0KF8sIHByb3ApIHtcbiAgICBjb25zdCBzID0gc2luZ2xldG9uKCkgYXMgdW5rbm93biBhcyBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+O1xuICAgIHJldHVybiBzW3Byb3BdO1xuICB9LFxufSk7XG5cbi8qKiBUZXN0LW9ubHk6IGRyb3AgdGhlIHNpbmdsZXRvbiBjYWNoZSBiZXR3ZWVuIGNhc2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFBsYXRmb3JtU2luZ2xldG9uKCk6IHZvaWQge1xuICBjYWNoZWRTaW5nbGV0b24gPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2U6IHNob3J0aGFuZCBmb3IgYHBsYXRmb3JtLndpdGhUb2tlbih0b2tlbilgLlxuICogQkZGIGhhbmRsZXJzIGNvbW1vbmx5IGNhbGwgdGhpcyBvbmNlIHBlciByZXF1ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRva2VuKHRva2VuOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KSk6IFBsYXRmb3JtQ2xpZW50IHtcbiAgcmV0dXJuIHNpbmdsZXRvbigpLndpdGhUb2tlbih0b2tlbik7XG59XG4iXX0=
package/dist/config.d.ts CHANGED
@@ -5,10 +5,6 @@ export declare const DEFAULT_BASE_URL = "https://api.platform.uengage.io";
5
5
  * Resolved auth state. Discriminated by `type` so consumers can narrow.
6
6
  */
7
7
  export type PlatformAuth = {
8
- type: 'hmac';
9
- secret: string;
10
- serviceId: string;
11
- } | {
12
8
  type: 'bearer';
13
9
  token: string;
14
10
  } | {
@@ -21,11 +17,6 @@ export interface PlatformConfig {
21
17
  fetchFn: typeof fetch;
22
18
  logger?: Logger;
23
19
  }
24
- /**
25
- * Caller-facing input shape. `auth` accepts either a discriminated
26
- * PlatformAuth or the looser PlatformAuthInput - the looser form is
27
- * also what `.auth()` accepts.
28
- */
29
20
  export interface PlatformConfigInput {
30
21
  baseUrl?: string;
31
22
  auth?: PlatformAuthInput | PlatformAuth;
@@ -33,13 +24,12 @@ export interface PlatformConfigInput {
33
24
  logger?: Logger;
34
25
  }
35
26
  /**
36
- * `.auth()` shape. Pass either `{token}` (Bearer) or `{secret, serviceId}`
37
- * (HMAC). Mixing both throws.
27
+ * `.auth()` shape. Pass `{token}` for a static Bearer access token.
28
+ * OAuth2 client_credentials live at `createClient()` config-time
29
+ * (`serviceId` + `serviceSecret` fields), not via `.auth()`.
38
30
  */
39
31
  export interface PlatformAuthInput {
40
32
  token?: string;
41
- secret?: string;
42
- serviceId?: string;
43
33
  }
44
34
  /**
45
35
  * Resolve env-defaulted config. Re-read on every call so that callers can
@@ -48,8 +38,13 @@ export interface PlatformAuthInput {
48
38
  */
49
39
  export declare function envDefaults(): PlatformConfig;
50
40
  /**
51
- * Coerce `.auth()` input or `config({auth})` input into a typed PlatformAuth.
52
- * Throws if the input has no usable credentials or mixes HMAC + Bearer.
41
+ * Coerce `.auth()` input or `config({auth})` input into a typed
42
+ * PlatformAuth. Throws when the input has no usable credentials.
43
+ *
44
+ * Today this only accepts `{token}` or a pre-shaped `PlatformAuth`.
45
+ * For OAuth2 client_credentials use `createClient({serviceId, serviceSecret})`
46
+ * instead — that builds a TokenSource which mints + caches Bearer
47
+ * tokens.
53
48
  */
54
49
  export declare function normalizeAuth(input: PlatformAuthInput | PlatformAuth): PlatformAuth;
55
50
  /**
package/dist/config.js CHANGED
@@ -11,38 +11,33 @@ exports.DEFAULT_BASE_URL = 'https://api.platform.uengage.io';
11
11
  */
12
12
  function envDefaults() {
13
13
  return {
14
- baseUrl: process.env.PLATFORM_BASE_URL ?? exports.DEFAULT_BASE_URL,
14
+ baseUrl: process.env.UENGAGE_BASE_URL ?? exports.DEFAULT_BASE_URL,
15
15
  auth: envAuth(),
16
16
  fetchFn: globalThis.fetch,
17
17
  };
18
18
  }
19
19
  function envAuth() {
20
- const secret = process.env.PLATFORM_SIGNING_SECRET;
21
- const serviceId = process.env.PLATFORM_SERVICE_ID;
22
- const token = process.env.PLATFORM_AUTH_TOKEN;
20
+ const token = process.env.UENGAGE_AUTH_TOKEN;
23
21
  if (token)
24
22
  return { type: 'bearer', token };
25
- if (secret && serviceId)
26
- return { type: 'hmac', secret, serviceId };
27
23
  return undefined;
28
24
  }
29
25
  /**
30
- * Coerce `.auth()` input or `config({auth})` input into a typed PlatformAuth.
31
- * Throws if the input has no usable credentials or mixes HMAC + Bearer.
26
+ * Coerce `.auth()` input or `config({auth})` input into a typed
27
+ * PlatformAuth. Throws when the input has no usable credentials.
28
+ *
29
+ * Today this only accepts `{token}` or a pre-shaped `PlatformAuth`.
30
+ * For OAuth2 client_credentials use `createClient({serviceId, serviceSecret})`
31
+ * instead — that builds a TokenSource which mints + caches Bearer
32
+ * tokens.
32
33
  */
33
34
  function normalizeAuth(input) {
34
35
  if ('type' in input)
35
36
  return input;
36
37
  if (input.token) {
37
- if (input.secret || input.serviceId) {
38
- throw new Error('auth(): pass either {token} or {secret, serviceId}, not both');
39
- }
40
38
  return { type: 'bearer', token: input.token };
41
39
  }
42
- if (input.secret && input.serviceId) {
43
- return { type: 'hmac', secret: input.secret, serviceId: input.serviceId };
44
- }
45
- throw new Error('auth(): must provide either {token} or {secret, serviceId}');
40
+ throw new Error('auth(): pass {token} for a static Bearer access token, or use createClient({serviceId, serviceSecret}) for OAuth2 client_credentials');
46
41
  }
47
42
  /**
48
43
  * Mutable config shared by clients. `apply()` and `setAuth()` are how the
@@ -81,4 +76,4 @@ class ConfigState {
81
76
  }
82
77
  }
83
78
  exports.ConfigState = ConfigState;
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErQ0Esa0NBTUM7QUFlRCxzQ0FZQztBQTdFWSxRQUFBLGdCQUFnQixHQUFHLGlDQUFpQyxDQUFDO0FBdUNsRTs7OztHQUlHO0FBQ0gsU0FBZ0IsV0FBVztJQUN6QixPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksd0JBQWdCO1FBQzFELElBQUksRUFBRSxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQXFCO0tBQzFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxPQUFPO0lBQ2QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztJQUNuRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFDOUMsSUFBSSxLQUFLO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUMsSUFBSSxNQUFNLElBQUksU0FBUztRQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNwRSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEtBQXVDO0lBQ25FLElBQUksTUFBTSxJQUFJLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxXQUFXO0lBQ2QsU0FBUyxHQUF3QixFQUFFLENBQUM7SUFDcEMsWUFBWSxDQUEyQjtJQUN2QyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssQ0FBQyxLQUEwQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXVDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDekQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBaUI7WUFDaEUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBNEI7U0FDcEQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdCRCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0B1ZW5nYWdlLmlvL2pzLWxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IFRva2VuU291cmNlU3RhdGUgfSBmcm9tICcuL3Rva2VuLXNvdXJjZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8nO1xuXG4vKipcbiAqIFJlc29sdmVkIGF1dGggc3RhdGUuIERpc2NyaW1pbmF0ZWQgYnkgYHR5cGVgIHNvIGNvbnN1bWVycyBjYW4gbmFycm93LlxuICovXG5leHBvcnQgdHlwZSBQbGF0Zm9ybUF1dGggPVxuICB8IHsgdHlwZTogJ2htYWMnOyBzZWNyZXQ6IHN0cmluZzsgc2VydmljZUlkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ2JlYXJlcic7IHRva2VuOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3Rva2VuLXNvdXJjZSc7IHN0YXRlOiBUb2tlblNvdXJjZVN0YXRlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWcge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm46IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIENhbGxlci1mYWNpbmcgaW5wdXQgc2hhcGUuIGBhdXRoYCBhY2NlcHRzIGVpdGhlciBhIGRpc2NyaW1pbmF0ZWRcbiAqIFBsYXRmb3JtQXV0aCBvciB0aGUgbG9vc2VyIFBsYXRmb3JtQXV0aElucHV0IC0gdGhlIGxvb3NlciBmb3JtIGlzXG4gKiBhbHNvIHdoYXQgYC5hdXRoKClgIGFjY2VwdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGhJbnB1dCB8IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIGAuYXV0aCgpYCBzaGFwZS4gUGFzcyBlaXRoZXIgYHt0b2tlbn1gIChCZWFyZXIpIG9yIGB7c2VjcmV0LCBzZXJ2aWNlSWR9YFxuICogKEhNQUMpLiBNaXhpbmcgYm90aCB0aHJvd3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1BdXRoSW5wdXQge1xuICB0b2tlbj86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZXJ2aWNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBlbnYtZGVmYXVsdGVkIGNvbmZpZy4gUmUtcmVhZCBvbiBldmVyeSBjYWxsIHNvIHRoYXQgY2FsbGVycyBjYW5cbiAqIHNldCBlbnYgdmFycyBhZnRlciB0aGUgU0RLIGhhcyBiZWVuIGltcG9ydGVkIGFuZCBzdGlsbCBwaWNrIHRoZW0gdXAgb25cbiAqIHRoZSBuZXh0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnZEZWZhdWx0cygpOiBQbGF0Zm9ybUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgYmFzZVVybDogcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkwgPz8gREVGQVVMVF9CQVNFX1VSTCxcbiAgICBhdXRoOiBlbnZBdXRoKCksXG4gICAgZmV0Y2hGbjogZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVudkF1dGgoKTogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VjcmV0ID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fU0lHTklOR19TRUNSRVQ7XG4gIGNvbnN0IHNlcnZpY2VJZCA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFUlZJQ0VfSUQ7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fQVVUSF9UT0tFTjtcbiAgaWYgKHRva2VuKSByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW4gfTtcbiAgaWYgKHNlY3JldCAmJiBzZXJ2aWNlSWQpIHJldHVybiB7IHR5cGU6ICdobWFjJywgc2VjcmV0LCBzZXJ2aWNlSWQgfTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYC5hdXRoKClgIGlucHV0IG9yIGBjb25maWcoe2F1dGh9KWAgaW5wdXQgaW50byBhIHR5cGVkIFBsYXRmb3JtQXV0aC5cbiAqIFRocm93cyBpZiB0aGUgaW5wdXQgaGFzIG5vIHVzYWJsZSBjcmVkZW50aWFscyBvciBtaXhlcyBITUFDICsgQmVhcmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiBQbGF0Zm9ybUF1dGgge1xuICBpZiAoJ3R5cGUnIGluIGlucHV0KSByZXR1cm4gaW5wdXQ7XG4gIGlmIChpbnB1dC50b2tlbikge1xuICAgIGlmIChpbnB1dC5zZWNyZXQgfHwgaW5wdXQuc2VydmljZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGgoKTogcGFzcyBlaXRoZXIge3Rva2VufSBvciB7c2VjcmV0LCBzZXJ2aWNlSWR9LCBub3QgYm90aCcpO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW46IGlucHV0LnRva2VuIH07XG4gIH1cbiAgaWYgKGlucHV0LnNlY3JldCAmJiBpbnB1dC5zZXJ2aWNlSWQpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnaG1hYycsIHNlY3JldDogaW5wdXQuc2VjcmV0LCBzZXJ2aWNlSWQ6IGlucHV0LnNlcnZpY2VJZCB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignYXV0aCgpOiBtdXN0IHByb3ZpZGUgZWl0aGVyIHt0b2tlbn0gb3Ige3NlY3JldCwgc2VydmljZUlkfScpO1xufVxuXG4vKipcbiAqIE11dGFibGUgY29uZmlnIHNoYXJlZCBieSBjbGllbnRzLiBgYXBwbHkoKWAgYW5kIGBzZXRBdXRoKClgIGFyZSBob3cgdGhlXG4gKiBjaGFpbmFibGUgYC5jb25maWcoKWAgLyBgLmF1dGgoKWAgbWV0aG9kcyB3cml0ZSBiYWNrLiBgcmVzb2x2ZSgpYCBwcm9kdWNlc1xuICogdGhlIGVmZmVjdGl2ZSBjb25maWcgZm9yIG9uZSByZXF1ZXN0LCBmYWxsaW5nIGJhY2sgdG8gY3VycmVudCBlbnYgc3RhdGVcbiAqIGZvciBmaWVsZHMgdGhlIGNhbGxlciBoYXNuJ3QgcGlubmVkLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnU3RhdGUge1xuICBwcml2YXRlIG92ZXJyaWRlczogUGxhdGZvcm1Db25maWdJbnB1dCA9IHt9O1xuICBwcml2YXRlIGV4cGxpY2l0QXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc0V4cGxpY2l0QXV0aCA9IGZhbHNlO1xuXG4gIGFwcGx5KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogdm9pZCB7XG4gICAgaWYgKGlucHV0LmJhc2VVcmwgIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuYmFzZVVybCA9IGlucHV0LmJhc2VVcmw7XG4gICAgaWYgKGlucHV0LmZldGNoRm4gIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA9IGlucHV0LmZldGNoRm47XG4gICAgaWYgKGlucHV0LmxvZ2dlciAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgPSBpbnB1dC5sb2dnZXI7XG4gICAgaWYgKGlucHV0LmF1dGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0LmF1dGgpO1xuICAgICAgdGhpcy5oYXNFeHBsaWNpdEF1dGggPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldEF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogdm9pZCB7XG4gICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0KTtcbiAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gIH1cblxuICByZXNvbHZlKCk6IFBsYXRmb3JtQ29uZmlnIHtcbiAgICBjb25zdCBlbnYgPSBlbnZEZWZhdWx0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlVXJsOiB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID8/IGVudi5iYXNlVXJsLFxuICAgICAgYXV0aDogdGhpcy5oYXNFeHBsaWNpdEF1dGggPyB0aGlzLmV4cGxpY2l0QXV0aCA6IGVudi5hdXRoLFxuICAgICAgZmV0Y2hGbjogKHRoaXMub3ZlcnJpZGVzLmZldGNoRm4gPz8gZW52LmZldGNoRm4pIGFzIHR5cGVvZiBmZXRjaCxcbiAgICAgIGxvZ2dlcjogdGhpcy5vdmVycmlkZXMubG9nZ2VyIGFzIExvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3Q0Esa0NBTUM7QUFpQkQsc0NBUUM7QUFwRVksUUFBQSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQWdDbEU7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVc7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixJQUFJLHdCQUFnQjtRQUN6RCxJQUFJLEVBQUUsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFxQjtLQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsT0FBTztJQUNkLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7SUFDN0MsSUFBSSxLQUFLO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEtBQXVDO0lBQ25FLElBQUksTUFBTSxJQUFJLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNJQUFzSSxDQUN2SSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxXQUFXO0lBQ2QsU0FBUyxHQUF3QixFQUFFLENBQUM7SUFDcEMsWUFBWSxDQUEyQjtJQUN2QyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssQ0FBQyxLQUEwQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXVDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDekQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBaUI7WUFDaEUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBNEI7U0FDcEQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdCRCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0B1ZW5nYWdlLmlvL2pzLWxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IFRva2VuU291cmNlU3RhdGUgfSBmcm9tICcuL3Rva2VuLXNvdXJjZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8nO1xuXG4vKipcbiAqIFJlc29sdmVkIGF1dGggc3RhdGUuIERpc2NyaW1pbmF0ZWQgYnkgYHR5cGVgIHNvIGNvbnN1bWVycyBjYW4gbmFycm93LlxuICovXG5leHBvcnQgdHlwZSBQbGF0Zm9ybUF1dGggPVxuICB8IHsgdHlwZTogJ2JlYXJlcic7IHRva2VuOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3Rva2VuLXNvdXJjZSc7IHN0YXRlOiBUb2tlblNvdXJjZVN0YXRlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWcge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm46IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQ29uZmlnSW5wdXQge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBhdXRoPzogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm4/OiB0eXBlb2YgZmV0Y2g7XG4gIGxvZ2dlcj86IExvZ2dlcjtcbn1cblxuLyoqXG4gKiBgLmF1dGgoKWAgc2hhcGUuIFBhc3MgYHt0b2tlbn1gIGZvciBhIHN0YXRpYyBCZWFyZXIgYWNjZXNzIHRva2VuLlxuICogT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyBsaXZlIGF0IGBjcmVhdGVDbGllbnQoKWAgY29uZmlnLXRpbWVcbiAqIChgc2VydmljZUlkYCArIGBzZXJ2aWNlU2VjcmV0YCBmaWVsZHMpLCBub3QgdmlhIGAuYXV0aCgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybUF1dGhJbnB1dCB7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgZW52LWRlZmF1bHRlZCBjb25maWcuIFJlLXJlYWQgb24gZXZlcnkgY2FsbCBzbyB0aGF0IGNhbGxlcnMgY2FuXG4gKiBzZXQgZW52IHZhcnMgYWZ0ZXIgdGhlIFNESyBoYXMgYmVlbiBpbXBvcnRlZCBhbmQgc3RpbGwgcGljayB0aGVtIHVwIG9uXG4gKiB0aGUgbmV4dCByZXF1ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52RGVmYXVsdHMoKTogUGxhdGZvcm1Db25maWcge1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IHByb2Nlc3MuZW52LlVFTkdBR0VfQkFTRV9VUkwgPz8gREVGQVVMVF9CQVNFX1VSTCxcbiAgICBhdXRoOiBlbnZBdXRoKCksXG4gICAgZmV0Y2hGbjogZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVudkF1dGgoKTogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5VRU5HQUdFX0FVVEhfVE9LRU47XG4gIGlmICh0b2tlbikgcmV0dXJuIHsgdHlwZTogJ2JlYXJlcicsIHRva2VuIH07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29lcmNlIGAuYXV0aCgpYCBpbnB1dCBvciBgY29uZmlnKHthdXRofSlgIGlucHV0IGludG8gYSB0eXBlZFxuICogUGxhdGZvcm1BdXRoLiBUaHJvd3Mgd2hlbiB0aGUgaW5wdXQgaGFzIG5vIHVzYWJsZSBjcmVkZW50aWFscy5cbiAqXG4gKiBUb2RheSB0aGlzIG9ubHkgYWNjZXB0cyBge3Rva2VufWAgb3IgYSBwcmUtc2hhcGVkIGBQbGF0Zm9ybUF1dGhgLlxuICogRm9yIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMgdXNlIGBjcmVhdGVDbGllbnQoe3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0pYFxuICogaW5zdGVhZCDigJQgdGhhdCBidWlsZHMgYSBUb2tlblNvdXJjZSB3aGljaCBtaW50cyArIGNhY2hlcyBCZWFyZXJcbiAqIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogUGxhdGZvcm1BdXRoIHtcbiAgaWYgKCd0eXBlJyBpbiBpbnB1dCkgcmV0dXJuIGlucHV0O1xuICBpZiAoaW5wdXQudG9rZW4pIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW46IGlucHV0LnRva2VuIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdhdXRoKCk6IHBhc3Mge3Rva2VufSBmb3IgYSBzdGF0aWMgQmVhcmVyIGFjY2VzcyB0b2tlbiwgb3IgdXNlIGNyZWF0ZUNsaWVudCh7c2VydmljZUlkLCBzZXJ2aWNlU2VjcmV0fSkgZm9yIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMnLFxuICApO1xufVxuXG4vKipcbiAqIE11dGFibGUgY29uZmlnIHNoYXJlZCBieSBjbGllbnRzLiBgYXBwbHkoKWAgYW5kIGBzZXRBdXRoKClgIGFyZSBob3cgdGhlXG4gKiBjaGFpbmFibGUgYC5jb25maWcoKWAgLyBgLmF1dGgoKWAgbWV0aG9kcyB3cml0ZSBiYWNrLiBgcmVzb2x2ZSgpYCBwcm9kdWNlc1xuICogdGhlIGVmZmVjdGl2ZSBjb25maWcgZm9yIG9uZSByZXF1ZXN0LCBmYWxsaW5nIGJhY2sgdG8gY3VycmVudCBlbnYgc3RhdGVcbiAqIGZvciBmaWVsZHMgdGhlIGNhbGxlciBoYXNuJ3QgcGlubmVkLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnU3RhdGUge1xuICBwcml2YXRlIG92ZXJyaWRlczogUGxhdGZvcm1Db25maWdJbnB1dCA9IHt9O1xuICBwcml2YXRlIGV4cGxpY2l0QXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc0V4cGxpY2l0QXV0aCA9IGZhbHNlO1xuXG4gIGFwcGx5KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogdm9pZCB7XG4gICAgaWYgKGlucHV0LmJhc2VVcmwgIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuYmFzZVVybCA9IGlucHV0LmJhc2VVcmw7XG4gICAgaWYgKGlucHV0LmZldGNoRm4gIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA9IGlucHV0LmZldGNoRm47XG4gICAgaWYgKGlucHV0LmxvZ2dlciAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgPSBpbnB1dC5sb2dnZXI7XG4gICAgaWYgKGlucHV0LmF1dGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0LmF1dGgpO1xuICAgICAgdGhpcy5oYXNFeHBsaWNpdEF1dGggPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldEF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogdm9pZCB7XG4gICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0KTtcbiAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gIH1cblxuICByZXNvbHZlKCk6IFBsYXRmb3JtQ29uZmlnIHtcbiAgICBjb25zdCBlbnYgPSBlbnZEZWZhdWx0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlVXJsOiB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID8/IGVudi5iYXNlVXJsLFxuICAgICAgYXV0aDogdGhpcy5oYXNFeHBsaWNpdEF1dGggPyB0aGlzLmV4cGxpY2l0QXV0aCA6IGVudi5hdXRoLFxuICAgICAgZmV0Y2hGbjogKHRoaXMub3ZlcnJpZGVzLmZldGNoRm4gPz8gZW52LmZldGNoRm4pIGFzIHR5cGVvZiBmZXRjaCxcbiAgICAgIGxvZ2dlcjogdGhpcy5vdmVycmlkZXMubG9nZ2VyIGFzIExvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
package/dist/http.d.ts CHANGED
@@ -7,14 +7,18 @@ export interface SignedHeaderParams {
7
7
  body?: string;
8
8
  }
9
9
  /**
10
- * Build the headers required for a request to the platform API, given
11
- * the effective auth on `config`. Async because the `token-source`
12
- * auth path may need to mint or refresh before returning.
10
+ * Build the headers for a request to the platform API.
13
11
  *
14
12
  * Adds three platform-wide headers automatically:
15
13
  * - `User-Agent` so the gateway can attribute traffic to SDK version
16
14
  * - `Idempotency-Key` (UUID v4) on mutating methods, so callers don't
17
15
  * have to generate one per call
18
16
  * - `content-type: application/json` when a body is supplied
17
+ *
18
+ * Auth comes from `config.auth`:
19
+ * - `bearer`: the token is sent verbatim (caller is responsible for
20
+ * freshness; SDK throws TokenExpiredError on local-detected expiry)
21
+ * - `token-source`: SDK mints + caches via OAuth2 client_credentials
22
+ * and refreshes on expiry / 401
19
23
  */
20
24
  export declare function buildHeaders(config: PlatformConfig, params: SignedHeaderParams): Promise<Record<string, string>>;
package/dist/http.js CHANGED
@@ -2,20 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildHeaders = buildHeaders;
4
4
  const node_crypto_1 = require("node:crypto");
5
- const sign_1 = require("./audit/sign");
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']);
9
8
  /**
10
- * Build the headers required for a request to the platform API, given
11
- * the effective auth on `config`. Async because the `token-source`
12
- * auth path may need to mint or refresh before returning.
9
+ * Build the headers for a request to the platform API.
13
10
  *
14
11
  * Adds three platform-wide headers automatically:
15
12
  * - `User-Agent` so the gateway can attribute traffic to SDK version
16
13
  * - `Idempotency-Key` (UUID v4) on mutating methods, so callers don't
17
14
  * have to generate one per call
18
15
  * - `content-type: application/json` when a body is supplied
16
+ *
17
+ * Auth comes from `config.auth`:
18
+ * - `bearer`: the token is sent verbatim (caller is responsible for
19
+ * freshness; SDK throws TokenExpiredError on local-detected expiry)
20
+ * - `token-source`: SDK mints + caches via OAuth2 client_credentials
21
+ * and refreshes on expiry / 401
19
22
  */
20
23
  async function buildHeaders(config, params) {
21
24
  const headers = {
@@ -32,27 +35,9 @@ async function buildHeaders(config, params) {
32
35
  headers['authorization'] = `Bearer ${config.auth.token}`;
33
36
  return headers;
34
37
  }
35
- if (config.auth.type === 'token-source') {
36
- const token = await (0, token_source_1.getAccessToken)(config.auth.state);
37
- headers['authorization'] = `Bearer ${token}`;
38
- return headers;
39
- }
40
- // HMAC
41
- const timestamp = new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
42
- const nonce = (0, node_crypto_1.randomUUID)();
43
- const signature = (0, sign_1.signRequest)({
44
- method: params.method,
45
- path: params.path,
46
- serviceId: config.auth.serviceId,
47
- timestamp,
48
- nonce,
49
- body: params.body ?? '',
50
- secret: config.auth.secret,
51
- });
52
- headers['x-service-id'] = config.auth.serviceId;
53
- headers['x-timestamp'] = timestamp;
54
- headers['x-nonce'] = nonce;
55
- headers['x-signature'] = signature;
38
+ // token-source: mint + cache + refresh-dedup happens in getAccessToken
39
+ const token = await (0, token_source_1.getAccessToken)(config.auth.state);
40
+ headers['authorization'] = `Bearer ${token}`;
56
41
  return headers;
57
42
  }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkJBLG9DQTBDQztBQXJFRCw2Q0FBeUM7QUFDekMsdUNBQTJDO0FBRTNDLGlEQUFnRDtBQUNoRCx1Q0FBd0M7QUFVeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFFckU7Ozs7Ozs7Ozs7R0FVRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQ2hDLE1BQXNCLEVBQ3RCLE1BQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUEyQjtRQUN0QyxZQUFZLEVBQUUsd0JBQXdCLHFCQUFXLEVBQUU7S0FDcEQsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0lBQzVFLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUEsd0JBQVUsR0FBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUk7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUVqQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDZCQUFjLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTztJQUNQLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRSxNQUFNLEtBQUssR0FBRyxJQUFBLHdCQUFVLEdBQUUsQ0FBQztJQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFBLGtCQUFXLEVBQUM7UUFDNUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTO1FBQ2hDLFNBQVM7UUFDVCxLQUFLO1FBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTtRQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNO0tBQzNCLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNoRCxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDM0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNuQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IHNpZ25SZXF1ZXN0IH0gZnJvbSAnLi9hdWRpdC9zaWduJztcbmltcG9ydCB0eXBlIHsgUGxhdGZvcm1Db25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiB9IGZyb20gJy4vdG9rZW4tc291cmNlJztcbmltcG9ydCB7IFNES19WRVJTSU9OIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBTaWduZWRIZWFkZXJQYXJhbXMge1xuICBtZXRob2Q6IHN0cmluZztcbiAgLyoqIFVSTCBwYXRobmFtZSBvbmx5LCB3aXRob3V0IHF1ZXJ5IHN0cmluZy4gTXVzdCBtYXRjaCBgYy5yZXEucGF0aGAgc2VydmVyLXNpZGUuICovXG4gIHBhdGg6IHN0cmluZztcbiAgLyoqIFJhdyBKU09OIGJvZHkgc3RyaW5nLCBvciBlbXB0eSBmb3Igbm9uZS4gKi9cbiAgYm9keT86IHN0cmluZztcbn1cblxuY29uc3QgTVVUQVRJTkdfTUVUSE9EUyA9IG5ldyBTZXQoWydQT1NUJywgJ1BVVCcsICdQQVRDSCcsICdERUxFVEUnXSk7XG5cbi8qKlxuICogQnVpbGQgdGhlIGhlYWRlcnMgcmVxdWlyZWQgZm9yIGEgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gQVBJLCBnaXZlblxuICogdGhlIGVmZmVjdGl2ZSBhdXRoIG9uIGBjb25maWdgLiBBc3luYyBiZWNhdXNlIHRoZSBgdG9rZW4tc291cmNlYFxuICogYXV0aCBwYXRoIG1heSBuZWVkIHRvIG1pbnQgb3IgcmVmcmVzaCBiZWZvcmUgcmV0dXJuaW5nLlxuICpcbiAqIEFkZHMgdGhyZWUgcGxhdGZvcm0td2lkZSBoZWFkZXJzIGF1dG9tYXRpY2FsbHk6XG4gKiAgIC0gYFVzZXItQWdlbnRgIHNvIHRoZSBnYXRld2F5IGNhbiBhdHRyaWJ1dGUgdHJhZmZpYyB0byBTREsgdmVyc2lvblxuICogICAtIGBJZGVtcG90ZW5jeS1LZXlgIChVVUlEIHY0KSBvbiBtdXRhdGluZyBtZXRob2RzLCBzbyBjYWxsZXJzIGRvbid0XG4gKiAgICAgaGF2ZSB0byBnZW5lcmF0ZSBvbmUgcGVyIGNhbGxcbiAqICAgLSBgY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uYCB3aGVuIGEgYm9keSBpcyBzdXBwbGllZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRIZWFkZXJzKFxuICBjb25maWc6IFBsYXRmb3JtQ29uZmlnLFxuICBwYXJhbXM6IFNpZ25lZEhlYWRlclBhcmFtcyxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICd1c2VyLWFnZW50JzogYHVlbmdhZ2UtcGxhdGZvcm0tc2RrLyR7U0RLX1ZFUlNJT059YCxcbiAgfTtcbiAgaWYgKHBhcmFtcy5ib2R5ICE9PSB1bmRlZmluZWQpIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICBpZiAoTVVUQVRJTkdfTUVUSE9EUy5oYXMocGFyYW1zLm1ldGhvZC50b1VwcGVyQ2FzZSgpKSkge1xuICAgIGhlYWRlcnNbJ2lkZW1wb3RlbmN5LWtleSddID0gcmFuZG9tVVVJRCgpO1xuICB9XG5cbiAgaWYgKCFjb25maWcuYXV0aCkgcmV0dXJuIGhlYWRlcnM7XG5cbiAgaWYgKGNvbmZpZy5hdXRoLnR5cGUgPT09ICdiZWFyZXInKSB7XG4gICAgaGVhZGVyc1snYXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NvbmZpZy5hdXRoLnRva2VufWA7XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBpZiAoY29uZmlnLmF1dGgudHlwZSA9PT0gJ3Rva2VuLXNvdXJjZScpIHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKGNvbmZpZy5hdXRoLnN0YXRlKTtcbiAgICBoZWFkZXJzWydhdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIC8vIEhNQUNcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1xcLlxcZHszfVokLywgJ1onKTtcbiAgY29uc3Qgbm9uY2UgPSByYW5kb21VVUlEKCk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25SZXF1ZXN0KHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgcGF0aDogcGFyYW1zLnBhdGgsXG4gICAgc2VydmljZUlkOiBjb25maWcuYXV0aC5zZXJ2aWNlSWQsXG4gICAgdGltZXN0YW1wLFxuICAgIG5vbmNlLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5ID8/ICcnLFxuICAgIHNlY3JldDogY29uZmlnLmF1dGguc2VjcmV0LFxuICB9KTtcbiAgaGVhZGVyc1sneC1zZXJ2aWNlLWlkJ10gPSBjb25maWcuYXV0aC5zZXJ2aWNlSWQ7XG4gIGhlYWRlcnNbJ3gtdGltZXN0YW1wJ10gPSB0aW1lc3RhbXA7XG4gIGhlYWRlcnNbJ3gtbm9uY2UnXSA9IG5vbmNlO1xuICBoZWFkZXJzWyd4LXNpZ25hdHVyZSddID0gc2lnbmF0dXJlO1xuICByZXR1cm4gaGVhZGVycztcbn1cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEJBLG9DQXVCQztBQXJERCw2Q0FBeUM7QUFFekMsaURBQWdEO0FBQ2hELHVDQUF3QztBQVV4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQ2hDLE1BQXNCLEVBQ3RCLE1BQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUEyQjtRQUN0QyxZQUFZLEVBQUUsd0JBQXdCLHFCQUFXLEVBQUU7S0FDcEQsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0lBQzVFLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUEsd0JBQVUsR0FBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUk7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUVqQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsNkJBQWMsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLEtBQUssRUFBRSxDQUFDO0lBQzdDLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuIH0gZnJvbSAnLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lZEhlYWRlclBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGhuYW1lIG9ubHksIHdpdGhvdXQgcXVlcnkgc3RyaW5nLiBNdXN0IG1hdGNoIGBjLnJlcS5wYXRoYCBzZXJ2ZXItc2lkZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogUmF3IEpTT04gYm9keSBzdHJpbmcsIG9yIGVtcHR5IGZvciBub25lLiAqL1xuICBib2R5Pzogc3RyaW5nO1xufVxuXG5jb25zdCBNVVRBVElOR19NRVRIT0RTID0gbmV3IFNldChbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJywgJ0RFTEVURSddKTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgaGVhZGVycyBmb3IgYSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKlxuICogQWRkcyB0aHJlZSBwbGF0Zm9ybS13aWRlIGhlYWRlcnMgYXV0b21hdGljYWxseTpcbiAqICAgLSBgVXNlci1BZ2VudGAgc28gdGhlIGdhdGV3YXkgY2FuIGF0dHJpYnV0ZSB0cmFmZmljIHRvIFNESyB2ZXJzaW9uXG4gKiAgIC0gYElkZW1wb3RlbmN5LUtleWAgKFVVSUQgdjQpIG9uIG11dGF0aW5nIG1ldGhvZHMsIHNvIGNhbGxlcnMgZG9uJ3RcbiAqICAgICBoYXZlIHRvIGdlbmVyYXRlIG9uZSBwZXIgY2FsbFxuICogICAtIGBjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb25gIHdoZW4gYSBib2R5IGlzIHN1cHBsaWVkXG4gKlxuICogQXV0aCBjb21lcyBmcm9tIGBjb25maWcuYXV0aGA6XG4gKiAgIC0gYGJlYXJlcmA6IHRoZSB0b2tlbiBpcyBzZW50IHZlcmJhdGltIChjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4gKiAgICAgZnJlc2huZXNzOyBTREsgdGhyb3dzIFRva2VuRXhwaXJlZEVycm9yIG9uIGxvY2FsLWRldGVjdGVkIGV4cGlyeSlcbiAqICAgLSBgdG9rZW4tc291cmNlYDogU0RLIG1pbnRzICsgY2FjaGVzIHZpYSBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgICAgYW5kIHJlZnJlc2hlcyBvbiBleHBpcnkgLyA0MDFcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkSGVhZGVycyhcbiAgY29uZmlnOiBQbGF0Zm9ybUNvbmZpZyxcbiAgcGFyYW1zOiBTaWduZWRIZWFkZXJQYXJhbXMsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAndXNlci1hZ2VudCc6IGB1ZW5nYWdlLXBsYXRmb3JtLXNkay8ke1NES19WRVJTSU9OfWAsXG4gIH07XG4gIGlmIChwYXJhbXMuYm9keSAhPT0gdW5kZWZpbmVkKSBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgaWYgKE1VVEFUSU5HX01FVEhPRFMuaGFzKHBhcmFtcy5tZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICBoZWFkZXJzWydpZGVtcG90ZW5jeS1rZXknXSA9IHJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIGlmICghY29uZmlnLmF1dGgpIHJldHVybiBoZWFkZXJzO1xuXG4gIGlmIChjb25maWcuYXV0aC50eXBlID09PSAnYmVhcmVyJykge1xuICAgIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLy8gdG9rZW4tc291cmNlOiBtaW50ICsgY2FjaGUgKyByZWZyZXNoLWRlZHVwIGhhcHBlbnMgaW4gZ2V0QWNjZXNzVG9rZW5cbiAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbihjb25maWcuYXV0aC5zdGF0ZSk7XG4gIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICByZXR1cm4gaGVhZGVycztcbn1cbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -8,14 +8,17 @@ export { createClient, platform, withToken, type ClientConfig, type PlatformClie
8
8
  /**
9
9
  * Default singleton clients. Both read defaults from the environment on
10
10
  * every call:
11
- * - PLATFORM_BASE_URL (defaults to https://api.platform.uengage.io)
12
- * - PLATFORM_SIGNING_SECRET HMAC secret hex
13
- * - PLATFORM_SERVICE_ID HMAC service id
14
- * - PLATFORM_AUTH_TOKEN Bearer token (overrides HMAC if set)
11
+ * - UENGAGE_BASE_URL defaults to https://api.platform.uengage.io
12
+ * - UENGAGE_AUTH_TOKEN static Bearer token
13
+ * - UENGAGE_SERVICE_ID OAuth2 client_credentials clientId
14
+ * - UENGAGE_SERVICE_SECRET OAuth2 client_credentials clientSecret
15
+ * - UENGAGE_SERVICE_SCOPE optional space-separated scope list
15
16
  *
16
- * Override per-instance with `.config({...})` and/or `.auth({...})`. For
17
- * isolated configuration (tests, multi-tenant code paths), construct your
18
- * own via `createAuditClient(...)` or `createBusinessClient(...)` instead.
17
+ * The chainable `.config({...})` / `.auth({...})` API on the audit and
18
+ * business clients is preserved for back-compat. `.auth({token})`
19
+ * accepts a static Bearer token; for OAuth2 client_credentials use the
20
+ * unified `createClient(...)` factory instead — that builds a
21
+ * TokenSource which handles caching + refresh dedup + 401 retry.
19
22
  */
20
23
  export declare const audit: import("./audit").AuditClient;
21
24
  export declare const business: import("./business").BusinessClient;
package/dist/index.js CHANGED
@@ -31,15 +31,18 @@ const business_1 = require("./business");
31
31
  /**
32
32
  * Default singleton clients. Both read defaults from the environment on
33
33
  * every call:
34
- * - PLATFORM_BASE_URL (defaults to https://api.platform.uengage.io)
35
- * - PLATFORM_SIGNING_SECRET HMAC secret hex
36
- * - PLATFORM_SERVICE_ID HMAC service id
37
- * - PLATFORM_AUTH_TOKEN Bearer token (overrides HMAC if set)
34
+ * - UENGAGE_BASE_URL defaults to https://api.platform.uengage.io
35
+ * - UENGAGE_AUTH_TOKEN static Bearer token
36
+ * - UENGAGE_SERVICE_ID OAuth2 client_credentials clientId
37
+ * - UENGAGE_SERVICE_SECRET OAuth2 client_credentials clientSecret
38
+ * - UENGAGE_SERVICE_SCOPE optional space-separated scope list
38
39
  *
39
- * Override per-instance with `.config({...})` and/or `.auth({...})`. For
40
- * isolated configuration (tests, multi-tenant code paths), construct your
41
- * own via `createAuditClient(...)` or `createBusinessClient(...)` instead.
40
+ * The chainable `.config({...})` / `.auth({...})` API on the audit and
41
+ * business clients is preserved for back-compat. `.auth({token})`
42
+ * accepts a static Bearer token; for OAuth2 client_credentials use the
43
+ * unified `createClient(...)` factory instead — that builds a
44
+ * TokenSource which handles caching + refresh dedup + 401 retry.
42
45
  */
43
46
  exports.audit = (0, audit_1.createAuditClient)();
44
47
  exports.business = (0, business_1.createBusinessClient)();
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsNkNBQTJCO0FBQzNCLDJDQUF5QjtBQUN6QiwrQkFBOEI7QUFBckIsNEZBQUEsSUFBSSxPQUFBO0FBUWIsbUNBTWtCO0FBRGhCLDBHQUFBLGdCQUFnQixPQUFBO0FBRWxCLG1DQU1rQjtBQUxoQixzR0FBQSxZQUFZLE9BQUE7QUFDWixrR0FBQSxRQUFRLE9BQUE7QUFDUixtR0FBQSxTQUFTLE9BQUE7QUFLWCxtQ0FBNEM7QUFDNUMseUNBQWtEO0FBRWxEOzs7Ozs7Ozs7OztHQVdHO0FBQ1UsUUFBQSxLQUFLLEdBQUcsSUFBQSx5QkFBaUIsR0FBRSxDQUFDO0FBQzVCLFFBQUEsUUFBUSxHQUFHLElBQUEsK0JBQW9CLEdBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXVkaXQnO1xuZXhwb3J0ICogZnJvbSAnLi9idXNpbmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgeyBhdXRoIH0gZnJvbSAnLi9hdXRoJztcbmV4cG9ydCB0eXBlIHtcbiAgUGtjZVBhaXIsXG4gIEF1dGhvcml6ZVVybElucHV0LFxuICBFeGNoYW5nZUNvZGVJbnB1dCxcbiAgUmVmcmVzaElucHV0LFxuICBUb2tlblBhaXIsXG59IGZyb20gJy4vYXV0aCc7XG5leHBvcnQge1xuICB0eXBlIFBsYXRmb3JtQXV0aCxcbiAgdHlwZSBQbGF0Zm9ybUF1dGhJbnB1dCxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZyxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZ0lucHV0LFxuICBERUZBVUxUX0JBU0VfVVJMLFxufSBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQge1xuICBjcmVhdGVDbGllbnQsXG4gIHBsYXRmb3JtLFxuICB3aXRoVG9rZW4sXG4gIHR5cGUgQ2xpZW50Q29uZmlnLFxuICB0eXBlIFBsYXRmb3JtQ2xpZW50LFxufSBmcm9tICcuL2NsaWVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZUF1ZGl0Q2xpZW50IH0gZnJvbSAnLi9hdWRpdCc7XG5pbXBvcnQgeyBjcmVhdGVCdXNpbmVzc0NsaWVudCB9IGZyb20gJy4vYnVzaW5lc3MnO1xuXG4vKipcbiAqIERlZmF1bHQgc2luZ2xldG9uIGNsaWVudHMuIEJvdGggcmVhZCBkZWZhdWx0cyBmcm9tIHRoZSBlbnZpcm9ubWVudCBvblxuICogZXZlcnkgY2FsbDpcbiAqICAgLSBQTEFURk9STV9CQVNFX1VSTCAgICAgICAgICAoZGVmYXVsdHMgdG8gaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbylcbiAqICAgLSBQTEFURk9STV9TSUdOSU5HX1NFQ1JFVCAgICBITUFDIHNlY3JldCBoZXhcbiAqICAgLSBQTEFURk9STV9TRVJWSUNFX0lEICAgICAgICBITUFDIHNlcnZpY2UgaWRcbiAqICAgLSBQTEFURk9STV9BVVRIX1RPS0VOICAgICAgICBCZWFyZXIgdG9rZW4gKG92ZXJyaWRlcyBITUFDIGlmIHNldClcbiAqXG4gKiBPdmVycmlkZSBwZXItaW5zdGFuY2Ugd2l0aCBgLmNvbmZpZyh7Li4ufSlgIGFuZC9vciBgLmF1dGgoey4uLn0pYC4gRm9yXG4gKiBpc29sYXRlZCBjb25maWd1cmF0aW9uICh0ZXN0cywgbXVsdGktdGVuYW50IGNvZGUgcGF0aHMpLCBjb25zdHJ1Y3QgeW91clxuICogb3duIHZpYSBgY3JlYXRlQXVkaXRDbGllbnQoLi4uKWAgb3IgYGNyZWF0ZUJ1c2luZXNzQ2xpZW50KC4uLilgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBhdWRpdCA9IGNyZWF0ZUF1ZGl0Q2xpZW50KCk7XG5leHBvcnQgY29uc3QgYnVzaW5lc3MgPSBjcmVhdGVCdXNpbmVzc0NsaWVudCgpO1xuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsNkNBQTJCO0FBQzNCLDJDQUF5QjtBQUN6QiwrQkFBOEI7QUFBckIsNEZBQUEsSUFBSSxPQUFBO0FBUWIsbUNBTWtCO0FBRGhCLDBHQUFBLGdCQUFnQixPQUFBO0FBRWxCLG1DQU1rQjtBQUxoQixzR0FBQSxZQUFZLE9BQUE7QUFDWixrR0FBQSxRQUFRLE9BQUE7QUFDUixtR0FBQSxTQUFTLE9BQUE7QUFLWCxtQ0FBNEM7QUFDNUMseUNBQWtEO0FBRWxEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ1UsUUFBQSxLQUFLLEdBQUcsSUFBQSx5QkFBaUIsR0FBRSxDQUFDO0FBQzVCLFFBQUEsUUFBUSxHQUFHLElBQUEsK0JBQW9CLEdBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXVkaXQnO1xuZXhwb3J0ICogZnJvbSAnLi9idXNpbmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgeyBhdXRoIH0gZnJvbSAnLi9hdXRoJztcbmV4cG9ydCB0eXBlIHtcbiAgUGtjZVBhaXIsXG4gIEF1dGhvcml6ZVVybElucHV0LFxuICBFeGNoYW5nZUNvZGVJbnB1dCxcbiAgUmVmcmVzaElucHV0LFxuICBUb2tlblBhaXIsXG59IGZyb20gJy4vYXV0aCc7XG5leHBvcnQge1xuICB0eXBlIFBsYXRmb3JtQXV0aCxcbiAgdHlwZSBQbGF0Zm9ybUF1dGhJbnB1dCxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZyxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZ0lucHV0LFxuICBERUZBVUxUX0JBU0VfVVJMLFxufSBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQge1xuICBjcmVhdGVDbGllbnQsXG4gIHBsYXRmb3JtLFxuICB3aXRoVG9rZW4sXG4gIHR5cGUgQ2xpZW50Q29uZmlnLFxuICB0eXBlIFBsYXRmb3JtQ2xpZW50LFxufSBmcm9tICcuL2NsaWVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZUF1ZGl0Q2xpZW50IH0gZnJvbSAnLi9hdWRpdCc7XG5pbXBvcnQgeyBjcmVhdGVCdXNpbmVzc0NsaWVudCB9IGZyb20gJy4vYnVzaW5lc3MnO1xuXG4vKipcbiAqIERlZmF1bHQgc2luZ2xldG9uIGNsaWVudHMuIEJvdGggcmVhZCBkZWZhdWx0cyBmcm9tIHRoZSBlbnZpcm9ubWVudCBvblxuICogZXZlcnkgY2FsbDpcbiAqICAgLSBVRU5HQUdFX0JBU0VfVVJMICAgICAgICAgIGRlZmF1bHRzIHRvIGh0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW9cbiAqICAgLSBVRU5HQUdFX0FVVEhfVE9LRU4gICAgICAgIHN0YXRpYyBCZWFyZXIgdG9rZW5cbiAqICAgLSBVRU5HQUdFX1NFUlZJQ0VfSUQgICAgICAgIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMgY2xpZW50SWRcbiAqICAgLSBVRU5HQUdFX1NFUlZJQ0VfU0VDUkVUICAgIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMgY2xpZW50U2VjcmV0XG4gKiAgIC0gVUVOR0FHRV9TRVJWSUNFX1NDT1BFICAgICBvcHRpb25hbCBzcGFjZS1zZXBhcmF0ZWQgc2NvcGUgbGlzdFxuICpcbiAqIFRoZSBjaGFpbmFibGUgYC5jb25maWcoey4uLn0pYCAvIGAuYXV0aCh7Li4ufSlgIEFQSSBvbiB0aGUgYXVkaXQgYW5kXG4gKiBidXNpbmVzcyBjbGllbnRzIGlzIHByZXNlcnZlZCBmb3IgYmFjay1jb21wYXQuIGAuYXV0aCh7dG9rZW59KWBcbiAqIGFjY2VwdHMgYSBzdGF0aWMgQmVhcmVyIHRva2VuOyBmb3IgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyB1c2UgdGhlXG4gKiB1bmlmaWVkIGBjcmVhdGVDbGllbnQoLi4uKWAgZmFjdG9yeSBpbnN0ZWFkIOKAlCB0aGF0IGJ1aWxkcyBhXG4gKiBUb2tlblNvdXJjZSB3aGljaCBoYW5kbGVzIGNhY2hpbmcgKyByZWZyZXNoIGRlZHVwICsgNDAxIHJldHJ5LlxuICovXG5leHBvcnQgY29uc3QgYXVkaXQgPSBjcmVhdGVBdWRpdENsaWVudCgpO1xuZXhwb3J0IGNvbnN0IGJ1c2luZXNzID0gY3JlYXRlQnVzaW5lc3NDbGllbnQoKTtcbiJdfQ==
package/dist/version.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  * (TS lib settings dependent) or a build-time replacement, and the
6
6
  * cost of one bump-in-two-places per release is small.
7
7
  */
8
- export declare const SDK_VERSION = "0.6.0";
8
+ export declare const SDK_VERSION = "0.7.0";
package/dist/version.js CHANGED
@@ -8,5 +8,5 @@ exports.SDK_VERSION = void 0;
8
8
  * (TS lib settings dependent) or a build-time replacement, and the
9
9
  * cost of one bump-in-two-places per release is small.
10
10
  */
11
- exports.SDK_VERSION = '0.6.0';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7R0FNRztBQUNVLFFBQUEsV0FBVyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFudWFsbHktbWFpbnRhaW5lZCB2ZXJzaW9uIHN0cmluZyBzdXJmYWNlZCB2aWEgdGhlIGBVc2VyLUFnZW50YFxuICogaGVhZGVyLiBLZXB0IGluIHN5bmMgd2l0aCBgcGFja2FnZS5qc29uYCBieSBoYW5kIGJlY2F1c2UgcHVsbGluZyB0aGVcbiAqIHZhbHVlIGZyb20gcGFja2FnZS5qc29uIGF0IHJ1bnRpbWUgd291bGQgcmVxdWlyZSBlaXRoZXIgYSBKU09OIGltcG9ydFxuICogKFRTIGxpYiBzZXR0aW5ncyBkZXBlbmRlbnQpIG9yIGEgYnVpbGQtdGltZSByZXBsYWNlbWVudCwgYW5kIHRoZVxuICogY29zdCBvZiBvbmUgYnVtcC1pbi10d28tcGxhY2VzIHBlciByZWxlYXNlIGlzIHNtYWxsLlxuICovXG5leHBvcnQgY29uc3QgU0RLX1ZFUlNJT04gPSAnMC42LjAnO1xuIl19
11
+ exports.SDK_VERSION = '0.7.0';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7R0FNRztBQUNVLFFBQUEsV0FBVyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFudWFsbHktbWFpbnRhaW5lZCB2ZXJzaW9uIHN0cmluZyBzdXJmYWNlZCB2aWEgdGhlIGBVc2VyLUFnZW50YFxuICogaGVhZGVyLiBLZXB0IGluIHN5bmMgd2l0aCBgcGFja2FnZS5qc29uYCBieSBoYW5kIGJlY2F1c2UgcHVsbGluZyB0aGVcbiAqIHZhbHVlIGZyb20gcGFja2FnZS5qc29uIGF0IHJ1bnRpbWUgd291bGQgcmVxdWlyZSBlaXRoZXIgYSBKU09OIGltcG9ydFxuICogKFRTIGxpYiBzZXR0aW5ncyBkZXBlbmRlbnQpIG9yIGEgYnVpbGQtdGltZSByZXBsYWNlbWVudCwgYW5kIHRoZVxuICogY29zdCBvZiBvbmUgYnVtcC1pbi10d28tcGxhY2VzIHBlciByZWxlYXNlIGlzIHNtYWxsLlxuICovXG5leHBvcnQgY29uc3QgU0RLX1ZFUlNJT04gPSAnMC43LjAnO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uengage.io/platform-sdk",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Client SDK for the uEngage platform API (audit, business, ...). Namespaced singletons with HMAC or Bearer auth.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -1,24 +0,0 @@
1
- export interface SignRequestParams {
2
- method: string;
3
- path: string;
4
- serviceId: string;
5
- timestamp: string;
6
- nonce: string;
7
- /** Raw JSON body string, or empty string for no body. */
8
- body: string;
9
- secret: string;
10
- }
11
- /**
12
- * HMAC-SHA256 signature over a canonical request representation. Producer
13
- * (this SDK) and verifier (`serviceAuthMiddleware` in `@uengage/common`) must
14
- * compute the same canonical string, so any change here MUST be mirrored
15
- * there. The canonical form is newline-separated, with no trailing newline:
16
- *
17
- * <METHOD>
18
- * <PATH>
19
- * <X-Service-Id>
20
- * <X-Timestamp>
21
- * <X-Nonce>
22
- * <sha256-hex of body, or empty string for no body>
23
- */
24
- export declare function signRequest(params: SignRequestParams): string;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.signRequest = signRequest;
4
- const node_crypto_1 = require("node:crypto");
5
- /**
6
- * HMAC-SHA256 signature over a canonical request representation. Producer
7
- * (this SDK) and verifier (`serviceAuthMiddleware` in `@uengage/common`) must
8
- * compute the same canonical string, so any change here MUST be mirrored
9
- * there. The canonical form is newline-separated, with no trailing newline:
10
- *
11
- * <METHOD>
12
- * <PATH>
13
- * <X-Service-Id>
14
- * <X-Timestamp>
15
- * <X-Nonce>
16
- * <sha256-hex of body, or empty string for no body>
17
- */
18
- function signRequest(params) {
19
- const bodyHash = params.body ? (0, node_crypto_1.createHash)('sha256').update(params.body).digest('hex') : '';
20
- const canonical = [
21
- params.method.toUpperCase(),
22
- params.path,
23
- params.serviceId,
24
- params.timestamp,
25
- params.nonce,
26
- bodyHash,
27
- ].join('\n');
28
- return (0, node_crypto_1.createHmac)('sha256', params.secret).update(canonical).digest('hex');
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdC9zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLGtDQVdDO0FBckNELDZDQUFxRDtBQWFyRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixXQUFXLENBQUMsTUFBeUI7SUFDbkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0YsTUFBTSxTQUFTLEdBQUc7UUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7UUFDM0IsTUFBTSxDQUFDLElBQUk7UUFDWCxNQUFNLENBQUMsU0FBUztRQUNoQixNQUFNLENBQUMsU0FBUztRQUNoQixNQUFNLENBQUMsS0FBSztRQUNaLFFBQVE7S0FDVCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNiLE9BQU8sSUFBQSx3QkFBVSxFQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSG1hYywgY3JlYXRlSGFzaCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuZXhwb3J0IGludGVyZmFjZSBTaWduUmVxdWVzdFBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHNlcnZpY2VJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgbm9uY2U6IHN0cmluZztcbiAgLyoqIFJhdyBKU09OIGJvZHkgc3RyaW5nLCBvciBlbXB0eSBzdHJpbmcgZm9yIG5vIGJvZHkuICovXG4gIGJvZHk6IHN0cmluZztcbiAgc2VjcmV0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSE1BQy1TSEEyNTYgc2lnbmF0dXJlIG92ZXIgYSBjYW5vbmljYWwgcmVxdWVzdCByZXByZXNlbnRhdGlvbi4gUHJvZHVjZXJcbiAqICh0aGlzIFNESykgYW5kIHZlcmlmaWVyIChgc2VydmljZUF1dGhNaWRkbGV3YXJlYCBpbiBgQHVlbmdhZ2UvY29tbW9uYCkgbXVzdFxuICogY29tcHV0ZSB0aGUgc2FtZSBjYW5vbmljYWwgc3RyaW5nLCBzbyBhbnkgY2hhbmdlIGhlcmUgTVVTVCBiZSBtaXJyb3JlZFxuICogdGhlcmUuIFRoZSBjYW5vbmljYWwgZm9ybSBpcyBuZXdsaW5lLXNlcGFyYXRlZCwgd2l0aCBubyB0cmFpbGluZyBuZXdsaW5lOlxuICpcbiAqICAgPE1FVEhPRD5cbiAqICAgPFBBVEg+XG4gKiAgIDxYLVNlcnZpY2UtSWQ+XG4gKiAgIDxYLVRpbWVzdGFtcD5cbiAqICAgPFgtTm9uY2U+XG4gKiAgIDxzaGEyNTYtaGV4IG9mIGJvZHksIG9yIGVtcHR5IHN0cmluZyBmb3Igbm8gYm9keT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25SZXF1ZXN0KHBhcmFtczogU2lnblJlcXVlc3RQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCBib2R5SGFzaCA9IHBhcmFtcy5ib2R5ID8gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHBhcmFtcy5ib2R5KS5kaWdlc3QoJ2hleCcpIDogJyc7XG4gIGNvbnN0IGNhbm9uaWNhbCA9IFtcbiAgICBwYXJhbXMubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgcGFyYW1zLnBhdGgsXG4gICAgcGFyYW1zLnNlcnZpY2VJZCxcbiAgICBwYXJhbXMudGltZXN0YW1wLFxuICAgIHBhcmFtcy5ub25jZSxcbiAgICBib2R5SGFzaCxcbiAgXS5qb2luKCdcXG4nKTtcbiAgcmV0dXJuIGNyZWF0ZUhtYWMoJ3NoYTI1NicsIHBhcmFtcy5zZWNyZXQpLnVwZGF0ZShjYW5vbmljYWwpLmRpZ2VzdCgnaGV4Jyk7XG59XG4iXX0=