@uengage.io/platform-sdk 0.2.0 → 0.6.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.
@@ -136,7 +136,7 @@ function createAuditClient(input = {}) {
136
136
  async function sendOnce(body) {
137
137
  const config = state.resolve();
138
138
  const logger = getLogger();
139
- const headers = (0, http_1.buildHeaders)(config, { method: 'POST', path: PATH, body });
139
+ const headers = await (0, http_1.buildHeaders)(config, { method: 'POST', path: PATH, body });
140
140
  const res = await config.fetchFn(`${config.baseUrl}${PATH}`, {
141
141
  method: 'POST',
142
142
  headers,
@@ -166,4 +166,4 @@ function createAuditClient(input = {}) {
166
166
  function sleep(ms) {
167
167
  return new Promise((r) => setTimeout(r, ms));
168
168
  }
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4Q0E4SkM7QUFuTkQsK0JBQTRCO0FBRTVCLHNDQUttQjtBQUNuQixrQ0FBdUM7QUFDdkMscUNBQTZEO0FBK0I3RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFMUMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztJQUNkLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO0lBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ21CLENBQUM7QUFFdkIsU0FBZ0IsaUJBQWlCLENBQUMsUUFBMEIsRUFBRTtJQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQztJQUN0RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztJQUU5QyxNQUFNLEVBQ0osZUFBZSxFQUFFLEVBQUUsRUFDbkIsWUFBWSxFQUFFLEVBQUUsRUFDaEIsWUFBWSxFQUFFLEVBQUUsRUFDaEIsV0FBVyxFQUFFLEVBQUUsRUFDZixHQUFHLElBQUksRUFDUixHQUFHLEtBQUssQ0FBQztJQUNW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LEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVsaWQgfSBmcm9tICd1bGlkJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQHVlbmdhZ2UuaW8vanMtbG9nZ2VyJztcbmltcG9ydCB7XG4gIENvbmZpZ1N0YXRlLFxuICB0eXBlIFBsYXRmb3JtQXV0aCxcbiAgdHlwZSBQbGF0Zm9ybUF1dGhJbnB1dCxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZ0lucHV0LFxufSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgYnVpbGRIZWFkZXJzIH0gZnJvbSAnLi4vaHR0cCc7XG5pbXBvcnQgeyBhdWRpdEV2ZW50U2NoZW1hLCB0eXBlIEF1ZGl0RXZlbnQgfSBmcm9tICcuL3NjaGVtYSc7XG5cbi8qKlxuICogQ2FsbGVyLWZhY2luZyBldmVudCBzaGFwZS4gVGhlIFNESyBmaWxsczpcbiAqICAgLSBgZXZlbnRfaWRgICAgKFVMSUQsIGdlbmVyYXRlZCBwZXIgY2FsbClcbiAqICAgLSBgb2NjdXJyZWRfYXRgIChVVEMgSVNPIDg2MDEgYXQgdGhlIHRpbWUgb2YgYHJlY29yZCgpYClcbiAqICAgLSBgYWN0b3IudmlhYCAgKGFsd2F5cyBzZXQgdG8gdGhlIGNvbmZpZ3VyZWQgc2VydmljZUlkLCBzbyBjYWxsZXJzXG4gKiAgICAgICAgICAgICAgICAgICBjYW4ndCBkcmlmdCBmcm9tIHRoZSBzZXJ2aWNlIGlkZW50aXR5IHVzZWQgZm9yIGF1dGgpXG4gKi9cbmV4cG9ydCB0eXBlIEF1ZGl0RXZlbnRJbnB1dCA9IE9taXQ8QXVkaXRFdmVudCwgJ2V2ZW50X2lkJyB8ICdvY2N1cnJlZF9hdCcgfCAnYWN0b3InPiAmIHtcbiAgYWN0b3I6IE9taXQ8QXVkaXRFdmVudFsnYWN0b3InXSwgJ3ZpYSc+O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdENsaWVudElucHV0IGV4dGVuZHMgUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIC8qKiBEZWZhdWx0IDUwMDAuICovXG4gIGZsdXNoSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgNTAuICovXG4gIG1heEJhdGNoU2l6ZT86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgMTAwMC4gTmV3IGV2ZW50cyBwYXN0IHRoaXMgYXJlIGRyb3BwZWQgd2l0aCBhIHdhcm5pbmcuICovXG4gIG1heFF1ZXVlU2l6ZT86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgdHJ1ZS4gU2V0IGZhbHNlIHRvIGRpc2FibGUgdGhlIGF1dG8tZmx1c2ggdGltZXIgKHRlc3Qgb25seSkuICovXG4gIGVuYWJsZVRpbWVyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdENsaWVudCB7XG4gIGNvbmZpZyhpbnB1dDogUGxhdGZvcm1Db25maWdJbnB1dCk6IEF1ZGl0Q2xpZW50O1xuICBhdXRoKGlucHV0OiBQbGF0Zm9ybUF1dGhJbnB1dCB8IFBsYXRmb3JtQXV0aCk6IEF1ZGl0Q2xpZW50O1xuICByZWNvcmQoZXZlbnQ6IEF1ZGl0RXZlbnRJbnB1dCk6IHZvaWQ7XG4gIGZsdXNoKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmNvbnN0IFBBVEggPSAnL3YxL2F1ZGl0L2V2ZW50cyc7XG5jb25zdCBSRVRSWV9ERUxBWVNfTVMgPSBbNTAwLCAyMDAwLCA4MDAwXTtcblxuY29uc3QgTk9PUF9MT0dHRVIgPSB7XG4gIGVycm9yOiAoKSA9PiB7fSxcbiAgd2FybjogKCkgPT4ge30sXG4gIGluZm86ICgpID0+IHt9LFxuICBkZWJ1ZzogKCkgPT4ge30sXG4gIGNoaWxkKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxufSBhcyB1bmtub3duIGFzIExvZ2dlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1ZGl0Q2xpZW50KGlucHV0OiBBdWRpdENsaWVudElucHV0ID0ge30pOiBBdWRpdENsaWVudCB7XG4gIGNvbnN0IHN0YXRlID0gbmV3IENvbmZpZ1N0YXRlKCk7XG4gIGNvbnN0IGZsdXNoSW50ZXJ2YWxNcyA9IGlucHV0LmZsdXNoSW50ZXJ2YWxNcyA/PyA1MDAwO1xuICBjb25zdCBtYXhCYXRjaFNpemUgPSBpbnB1dC5tYXhCYXRjaFNpemUgPz8gNTA7XG4gIGNvbnN0IG1heFF1ZXVlU2l6ZSA9IGlucHV0Lm1heFF1ZXVlU2l6ZSA/PyAxMDAwO1xuICBjb25zdCBlbmFibGVUaW1lciA9IGlucHV0LmVuYWJsZVRpbWVyID8/IHRydWU7XG5cbiAgY29uc3Qge1xuICAgIGZsdXNoSW50ZXJ2YWxNczogX2YsXG4gICAgbWF4QmF0Y2hTaXplOiBfYixcbiAgICBtYXhRdWV1ZVNpemU6IF9xLFxuICAgIGVuYWJsZVRpbWVyOiBfdCxcbiAgICAuLi5yZXN0XG4gIH0gPSBpbnB1dDtcbiAgdm9pZCBfZjtcbiAgdm9pZCBfYjtcbiAgdm9pZCBfcTtcbiAgdm9pZCBfdDtcbiAgc3RhdGUuYXBwbHkocmVzdCk7XG5cbiAgY29uc3QgcXVldWU6IEF1ZGl0RXZlbnRbXSA9IFtdO1xuICBjb25zdCBpbmZsaWdodDogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgZnVuY3Rpb24gZ2V0TG9nZ2VyKCk6IExvZ2dlciB7XG4gICAgcmV0dXJuIHN0YXRlLnJlc29sdmUoKS5sb2dnZXIgPz8gTk9PUF9MT0dHRVI7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZXJ2aWNlSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb25maWcgPSBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgaWYgKCFjb25maWcuYXV0aCB8fCBjb25maWcuYXV0aC50eXBlICE9PSAnaG1hYycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2F1ZGl0IGNsaWVudCByZXF1aXJlcyBITUFDIGF1dGggKHNldCBQTEFURk9STV9TSUdOSU5HX1NFQ1JFVCArIFBMQVRGT1JNX1NFUlZJQ0VfSUQsIG9yIGNhbGwgLmF1dGgoe3NlY3JldCwgc2VydmljZUlkfSkpJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuYXV0aC5zZXJ2aWNlSWQ7XG4gIH1cblxuICBjb25zdCBjbGllbnQ6IEF1ZGl0Q2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG4gICAgcmVjb3JkKGlucHV0KSB7XG4gICAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoKTtcbiAgICAgIGxldCBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlcnZpY2VJZCA9IGdldFNlcnZpY2VJZCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignYXVkaXRfc2RrLm5vX2F1dGgnLCB7XG4gICAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX05PX0FVVEgnLCBjYXRlZ29yeTogJ2VuZ2luZWVyaW5nJyB9LFxuICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW5kaWRhdGU6IEF1ZGl0RXZlbnQgPSB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBldmVudF9pZDogdWxpZCgpLFxuICAgICAgICBvY2N1cnJlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1xcLlxcZHszfVokLywgJ1onKSxcbiAgICAgICAgYWN0b3I6IHsgLi4uaW5wdXQuYWN0b3IsIHZpYTogc2VydmljZUlkIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXVkaXRFdmVudFNjaGVtYS5zYWZlUGFyc2UoY2FuZGlkYXRlKTtcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsuaW52YWxpZF9ldmVudCcsIHtcbiAgICAgICAgICBlcnJvcjogeyBjb2RlOiAnQVVESVRfSU5WQUxJRF9FVkVOVCcsIGNhdGVnb3J5OiAnZW5naW5lZXJpbmcnIH0sXG4gICAgICAgICAgY29udGV4dDogeyBpc3N1ZXM6IHJlc3VsdC5lcnJvci5pc3N1ZXMsIGV2ZW50OiBjYW5kaWRhdGUgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChxdWV1ZS5sZW5ndGggPj0gbWF4UXVldWVTaXplKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdhdWRpdF9zZGsucXVldWVfZnVsbCcsIHtcbiAgICAgICAgICBjb250ZXh0OiB7IGRyb3BwZWRfZXZlbnRfaWQ6IGNhbmRpZGF0ZS5ldmVudF9pZCwgbWF4X3F1ZXVlX3NpemU6IG1heFF1ZXVlU2l6ZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcXVldWUucHVzaChyZXN1bHQuZGF0YSk7XG4gICAgICBpZiAocXVldWUubGVuZ3RoID49IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICB2b2lkIHNjaGVkdWxlU2VuZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgZmx1c2goKSB7XG4gICAgICBhd2FpdCBzY2hlZHVsZVNlbmQoKTtcbiAgICAgIHdoaWxlIChpbmZsaWdodC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4uaW5mbGlnaHRdKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlU2VuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYmF0Y2ggPSBxdWV1ZS5zcGxpY2UoMCwgbWF4QmF0Y2hTaXplKTtcbiAgICAgIGNvbnN0IHNlbmQgPSBzZW5kV2l0aFJldHJpZXMoYmF0Y2gpO1xuICAgICAgaW5mbGlnaHQucHVzaChzZW5kKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNlbmQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjb25zdCBpZHggPSBpbmZsaWdodC5pbmRleE9mKHNlbmQpO1xuICAgICAgICBpZiAoaWR4ICE9PSAtMSkgaW5mbGlnaHQuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VuZFdpdGhSZXRyaWVzKGV2ZW50czogQXVkaXRFdmVudFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKCk7XG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHsgZXZlbnRzIH0pO1xuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IFJFVFJZX0RFTEFZU19NUy5sZW5ndGg7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBzZW5kT25jZShib2R5KTtcbiAgICAgICAgaWYgKG9rKSByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZSA9IGVyciBhcyBFcnJvcjtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ2F1ZGl0X3Nkay5zZW5kX2Vycm9yJywge1xuICAgICAgICAgIGNvbnRleHQ6IHsgYXR0ZW1wdCwgbWVzc2FnZTogZS5tZXNzYWdlLCBiYXRjaF9zaXplOiBldmVudHMubGVuZ3RoIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGF0dGVtcHQgPCBSRVRSWV9ERUxBWVNfTVMubGVuZ3RoKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKFJFVFJZX0RFTEFZU19NU1thdHRlbXB0XSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZ2dlci5lcnJvcignYXVkaXRfc2RrLnNlbmRfZmFpbGVkJywge1xuICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX1NFTkRfRkFJTEVEJywgY2F0ZWdvcnk6ICdlbmdpbmVlcmluZycgfSxcbiAgICAgIGNvbnRleHQ6IHsgYmF0Y2hfc2l6ZTogZXZlbnRzLmxlbmd0aCwgZXZlbnRzIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzZW5kT25jZShib2R5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb25maWcgPSBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhjb25maWcsIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6IFBBVEgsIGJvZHkgfSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY29uZmlnLmZldGNoRm4oYCR7Y29uZmlnLmJhc2VVcmx9JHtQQVRIfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPj0gNTAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFyZXMub2sgJiYgcmVzLnN0YXR1cyAhPT0gMjAyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ2F1ZGl0X3Nkay5yZWplY3RlZCcsIHtcbiAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX1JFSkVDVEVEJywgY2F0ZWdvcnk6ICdlbmdpbmVlcmluZycgfSxcbiAgICAgICAgY29udGV4dDogeyBzdGF0dXM6IHJlcy5zdGF0dXMgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gIGlmIChlbmFibGVUaW1lcikge1xuICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdm9pZCBzY2hlZHVsZVNlbmQoKTtcbiAgICB9LCBmbHVzaEludGVydmFsTXMpO1xuICAgIGlmICh0eXBlb2YgdGltZXIudW5yZWYgPT09ICdmdW5jdGlvbicpIHRpbWVyLnVucmVmKCk7XG4gIH1cblxuICByZXR1cm4gY2xpZW50O1xufVxuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuIl19
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=
@@ -0,0 +1,18 @@
1
+ export interface AuthorizeUrlInput {
2
+ authBaseUrl?: string;
3
+ clientId: string;
4
+ redirectUri: string;
5
+ scope?: string;
6
+ tenant: string;
7
+ state?: string;
8
+ codeChallenge: string;
9
+ codeChallengeMethod?: 'S256';
10
+ nonce?: string;
11
+ }
12
+ /**
13
+ * Build the `/authorize` URL the browser should be redirected to. The
14
+ * caller is responsible for storing `codeVerifier` (from `generatePKCE`)
15
+ * to round-trip into `exchangeCode` after the redirect comes back with
16
+ * `?code=...`.
17
+ */
18
+ export declare function createAuthorizeUrl(input: AuthorizeUrlInput): string;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthorizeUrl = createAuthorizeUrl;
4
+ const errors_1 = require("../errors");
5
+ const DEFAULT_AUTH_BASE_URL = 'https://api.platform.uengage.io/auth/business';
6
+ /**
7
+ * Build the `/authorize` URL the browser should be redirected to. The
8
+ * caller is responsible for storing `codeVerifier` (from `generatePKCE`)
9
+ * to round-trip into `exchangeCode` after the redirect comes back with
10
+ * `?code=...`.
11
+ */
12
+ function createAuthorizeUrl(input) {
13
+ if (!input.clientId || !input.redirectUri || !input.tenant || !input.codeChallenge) {
14
+ throw new errors_1.ConfigError('createAuthorizeUrl requires clientId, redirectUri, tenant and codeChallenge');
15
+ }
16
+ const url = new URL(`${input.authBaseUrl ?? DEFAULT_AUTH_BASE_URL}/authorize`);
17
+ url.searchParams.set('response_type', 'code');
18
+ url.searchParams.set('client_id', input.clientId);
19
+ url.searchParams.set('redirect_uri', input.redirectUri);
20
+ if (input.scope)
21
+ url.searchParams.set('scope', input.scope);
22
+ url.searchParams.set('tenant', input.tenant);
23
+ if (input.state)
24
+ url.searchParams.set('state', input.state);
25
+ url.searchParams.set('code_challenge', input.codeChallenge);
26
+ url.searchParams.set('code_challenge_method', input.codeChallengeMethod ?? 'S256');
27
+ if (input.nonce)
28
+ url.searchParams.set('nonce', input.nonce);
29
+ return url.toString();
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLXVybC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2F1dGhvcml6ZS11cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzQkEsZ0RBaUJDO0FBdkNELHNDQUF3QztBQWN4QyxNQUFNLHFCQUFxQixHQUFHLCtDQUErQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsS0FBd0I7SUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuRixNQUFNLElBQUksb0JBQVcsQ0FDbkIsNkVBQTZFLENBQzlFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLHFCQUFxQixZQUFZLENBQUMsQ0FBQztJQUMvRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELElBQUksS0FBSyxDQUFDLEtBQUs7UUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxLQUFLLENBQUMsS0FBSztRQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMsQ0FBQztJQUNuRixJQUFJLEtBQUssQ0FBQyxLQUFLO1FBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6ZVVybElucHV0IHtcbiAgYXV0aEJhc2VVcmw/OiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0ZW5hbnQ6IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIGNvZGVDaGFsbGVuZ2U6IHN0cmluZztcbiAgY29kZUNoYWxsZW5nZU1ldGhvZD86ICdTMjU2JztcbiAgbm9uY2U/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfQVVUSF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvL2F1dGgvYnVzaW5lc3MnO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBgL2F1dGhvcml6ZWAgVVJMIHRoZSBicm93c2VyIHNob3VsZCBiZSByZWRpcmVjdGVkIHRvLiBUaGVcbiAqIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3RvcmluZyBgY29kZVZlcmlmaWVyYCAoZnJvbSBgZ2VuZXJhdGVQS0NFYClcbiAqIHRvIHJvdW5kLXRyaXAgaW50byBgZXhjaGFuZ2VDb2RlYCBhZnRlciB0aGUgcmVkaXJlY3QgY29tZXMgYmFjayB3aXRoXG4gKiBgP2NvZGU9Li4uYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1dGhvcml6ZVVybChpbnB1dDogQXV0aG9yaXplVXJsSW5wdXQpOiBzdHJpbmcge1xuICBpZiAoIWlucHV0LmNsaWVudElkIHx8ICFpbnB1dC5yZWRpcmVjdFVyaSB8fCAhaW5wdXQudGVuYW50IHx8ICFpbnB1dC5jb2RlQ2hhbGxlbmdlKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgJ2NyZWF0ZUF1dGhvcml6ZVVybCByZXF1aXJlcyBjbGllbnRJZCwgcmVkaXJlY3RVcmksIHRlbmFudCBhbmQgY29kZUNoYWxsZW5nZScsXG4gICAgKTtcbiAgfVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke2lucHV0LmF1dGhCYXNlVXJsID8/IERFRkFVTFRfQVVUSF9CQVNFX1VSTH0vYXV0aG9yaXplYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdyZXNwb25zZV90eXBlJywgJ2NvZGUnKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NsaWVudF9pZCcsIGlucHV0LmNsaWVudElkKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3JlZGlyZWN0X3VyaScsIGlucHV0LnJlZGlyZWN0VXJpKTtcbiAgaWYgKGlucHV0LnNjb3BlKSB1cmwuc2VhcmNoUGFyYW1zLnNldCgnc2NvcGUnLCBpbnB1dC5zY29wZSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd0ZW5hbnQnLCBpbnB1dC50ZW5hbnQpO1xuICBpZiAoaW5wdXQuc3RhdGUpIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdzdGF0ZScsIGlucHV0LnN0YXRlKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvZGVfY2hhbGxlbmdlJywgaW5wdXQuY29kZUNoYWxsZW5nZSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdjb2RlX2NoYWxsZW5nZV9tZXRob2QnLCBpbnB1dC5jb2RlQ2hhbGxlbmdlTWV0aG9kID8/ICdTMjU2Jyk7XG4gIGlmIChpbnB1dC5ub25jZSkgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ25vbmNlJywgaW5wdXQubm9uY2UpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ export interface ExchangeCodeInput {
2
+ authBaseUrl?: string;
3
+ code: string;
4
+ codeVerifier: string;
5
+ clientId: string;
6
+ redirectUri: string;
7
+ }
8
+ export interface TokenPair {
9
+ accessToken: string;
10
+ refreshToken?: string;
11
+ idToken?: string;
12
+ expiresIn: number;
13
+ scope?: string;
14
+ }
15
+ /**
16
+ * Exchange an authorization code for an access + refresh + id token
17
+ * triple. PKCE verifier is included as `code_verifier` so the auth
18
+ * server can confirm the holder of the code is the same caller that
19
+ * initiated the flow.
20
+ */
21
+ export declare function exchangeCode(input: ExchangeCodeInput): Promise<TokenPair>;
22
+ export declare function parseTokenResponse(res: Response): Promise<TokenPair>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exchangeCode = exchangeCode;
4
+ exports.parseTokenResponse = parseTokenResponse;
5
+ const errors_1 = require("../errors");
6
+ const DEFAULT_AUTH_BASE_URL = 'https://api.platform.uengage.io/auth/business';
7
+ /**
8
+ * Exchange an authorization code for an access + refresh + id token
9
+ * triple. PKCE verifier is included as `code_verifier` so the auth
10
+ * server can confirm the holder of the code is the same caller that
11
+ * initiated the flow.
12
+ */
13
+ async function exchangeCode(input) {
14
+ const body = new URLSearchParams({
15
+ grant_type: 'authorization_code',
16
+ code: input.code,
17
+ code_verifier: input.codeVerifier,
18
+ client_id: input.clientId,
19
+ redirect_uri: input.redirectUri,
20
+ });
21
+ const res = await fetch(`${input.authBaseUrl ?? DEFAULT_AUTH_BASE_URL}/oauth/token`, {
22
+ method: 'POST',
23
+ headers: { 'content-type': 'application/x-www-form-urlencoded' },
24
+ body: body.toString(),
25
+ });
26
+ return parseTokenResponse(res);
27
+ }
28
+ async function parseTokenResponse(res) {
29
+ let body;
30
+ try {
31
+ body = (await res.json());
32
+ }
33
+ catch (err) {
34
+ throw new errors_1.PlatformError(`auth server returned non-JSON: HTTP ${res.status}`, {
35
+ status: res.status,
36
+ cause: err,
37
+ });
38
+ }
39
+ if (!res.ok) {
40
+ const error = typeof body.error === 'string' ? body.error : 'auth_request_failed';
41
+ const description = typeof body.error_description === 'string' ? body.error_description : undefined;
42
+ if (res.status === 401) {
43
+ throw new errors_1.AuthenticationError(description ?? error, { cause: body });
44
+ }
45
+ throw new errors_1.PlatformError(description ?? error, { status: res.status, cause: body });
46
+ }
47
+ return {
48
+ accessToken: String(body.access_token ?? ''),
49
+ refreshToken: typeof body.refresh_token === 'string' ? body.refresh_token : undefined,
50
+ idToken: typeof body.id_token === 'string' ? body.id_token : undefined,
51
+ expiresIn: Number(body.expires_in ?? 0),
52
+ scope: typeof body.scope === 'string' ? body.scope : undefined,
53
+ };
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjaGFuZ2UtY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2V4Y2hhbmdlLWNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsb0NBY0M7QUFFRCxnREEwQkM7QUFwRUQsc0NBQStEO0FBa0IvRCxNQUFNLHFCQUFxQixHQUFHLCtDQUErQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUF3QjtJQUN6RCxNQUFNLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQztRQUMvQixVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVk7UUFDakMsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3pCLFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVztLQUNoQyxDQUFDLENBQUM7SUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUkscUJBQXFCLGNBQWMsRUFBRTtRQUNuRixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRTtRQUNoRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsR0FBYTtJQUNwRCxJQUFJLElBQTZCLENBQUM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQTRCLENBQUM7SUFDdkQsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksc0JBQWEsQ0FBQyx1Q0FBdUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1osTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7UUFDbEYsTUFBTSxXQUFXLEdBQ2YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNsRixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLDRCQUFtQixDQUFDLFdBQVcsSUFBSSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsTUFBTSxJQUFJLHNCQUFhLENBQUMsV0FBVyxJQUFJLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFDRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM1QyxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRixPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN0RSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQy9ELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciwgUGxhdGZvcm1FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjaGFuZ2VDb2RlSW5wdXQge1xuICBhdXRoQmFzZVVybD86IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBjb2RlVmVyaWZpZXI6IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblBhaXIge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGlkVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9BVVRIX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8vYXV0aC9idXNpbmVzcyc7XG5cbi8qKlxuICogRXhjaGFuZ2UgYW4gYXV0aG9yaXphdGlvbiBjb2RlIGZvciBhbiBhY2Nlc3MgKyByZWZyZXNoICsgaWQgdG9rZW5cbiAqIHRyaXBsZS4gUEtDRSB2ZXJpZmllciBpcyBpbmNsdWRlZCBhcyBgY29kZV92ZXJpZmllcmAgc28gdGhlIGF1dGhcbiAqIHNlcnZlciBjYW4gY29uZmlybSB0aGUgaG9sZGVyIG9mIHRoZSBjb2RlIGlzIHRoZSBzYW1lIGNhbGxlciB0aGF0XG4gKiBpbml0aWF0ZWQgdGhlIGZsb3cuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGNoYW5nZUNvZGUoaW5wdXQ6IEV4Y2hhbmdlQ29kZUlucHV0KTogUHJvbWlzZTxUb2tlblBhaXI+IHtcbiAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgIGNvZGU6IGlucHV0LmNvZGUsXG4gICAgY29kZV92ZXJpZmllcjogaW5wdXQuY29kZVZlcmlmaWVyLFxuICAgIGNsaWVudF9pZDogaW5wdXQuY2xpZW50SWQsXG4gICAgcmVkaXJlY3RfdXJpOiBpbnB1dC5yZWRpcmVjdFVyaSxcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke2lucHV0LmF1dGhCYXNlVXJsID8/IERFRkFVTFRfQVVUSF9CQVNFX1VSTH0vb2F1dGgvdG9rZW5gLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICBib2R5OiBib2R5LnRvU3RyaW5nKCksXG4gIH0pO1xuICByZXR1cm4gcGFyc2VUb2tlblJlc3BvbnNlKHJlcyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZVRva2VuUmVzcG9uc2UocmVzOiBSZXNwb25zZSk6IFByb21pc2U8VG9rZW5QYWlyPiB7XG4gIGxldCBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdHJ5IHtcbiAgICBib2R5ID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgUGxhdGZvcm1FcnJvcihgYXV0aCBzZXJ2ZXIgcmV0dXJuZWQgbm9uLUpTT046IEhUVFAgJHtyZXMuc3RhdHVzfWAsIHtcbiAgICAgIHN0YXR1czogcmVzLnN0YXR1cyxcbiAgICAgIGNhdXNlOiBlcnIsXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCBlcnJvciA9IHR5cGVvZiBib2R5LmVycm9yID09PSAnc3RyaW5nJyA/IGJvZHkuZXJyb3IgOiAnYXV0aF9yZXF1ZXN0X2ZhaWxlZCc7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPVxuICAgICAgdHlwZW9mIGJvZHkuZXJyb3JfZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gYm9keS5lcnJvcl9kZXNjcmlwdGlvbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihkZXNjcmlwdGlvbiA/PyBlcnJvciwgeyBjYXVzZTogYm9keSB9KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBsYXRmb3JtRXJyb3IoZGVzY3JpcHRpb24gPz8gZXJyb3IsIHsgc3RhdHVzOiByZXMuc3RhdHVzLCBjYXVzZTogYm9keSB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFjY2Vzc1Rva2VuOiBTdHJpbmcoYm9keS5hY2Nlc3NfdG9rZW4gPz8gJycpLFxuICAgIHJlZnJlc2hUb2tlbjogdHlwZW9mIGJvZHkucmVmcmVzaF90b2tlbiA9PT0gJ3N0cmluZycgPyBib2R5LnJlZnJlc2hfdG9rZW4gOiB1bmRlZmluZWQsXG4gICAgaWRUb2tlbjogdHlwZW9mIGJvZHkuaWRfdG9rZW4gPT09ICdzdHJpbmcnID8gYm9keS5pZF90b2tlbiA6IHVuZGVmaW5lZCxcbiAgICBleHBpcmVzSW46IE51bWJlcihib2R5LmV4cGlyZXNfaW4gPz8gMCksXG4gICAgc2NvcGU6IHR5cGVvZiBib2R5LnNjb3BlID09PSAnc3RyaW5nJyA/IGJvZHkuc2NvcGUgOiB1bmRlZmluZWQsXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Auth namespace: helpers for OAuth2 flows against the platform's
3
+ * `/auth/business/*` surface. Consumers don't bake a `client_id` into
4
+ * the SDK itself — every helper takes parameters explicitly so multiple
5
+ * OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
6
+ */
7
+ export { generatePKCE, type PkcePair } from './pkce';
8
+ export { createAuthorizeUrl, type AuthorizeUrlInput } from './authorize-url';
9
+ export { exchangeCode, parseTokenResponse, type ExchangeCodeInput, type TokenPair, } from './exchange-code';
10
+ export { refresh, type RefreshInput } from './refresh';
11
+ export { verifyAccessToken } from './verify';
12
+ export { getIssuer, getExpiry } from './issuer';
13
+ import { generatePKCE } from './pkce';
14
+ import { createAuthorizeUrl } from './authorize-url';
15
+ import { exchangeCode } from './exchange-code';
16
+ import { refresh } from './refresh';
17
+ import { verifyAccessToken } from './verify';
18
+ import { getIssuer, getExpiry } from './issuer';
19
+ /**
20
+ * Default singleton namespace for callers using the package singleton.
21
+ * import { auth } from '@uengage.io/platform-sdk';
22
+ * const pkce = auth.generatePKCE();
23
+ */
24
+ export declare const auth: {
25
+ generatePKCE: typeof generatePKCE;
26
+ createAuthorizeUrl: typeof createAuthorizeUrl;
27
+ exchangeCode: typeof exchangeCode;
28
+ refresh: typeof refresh;
29
+ verifyAccessToken: typeof verifyAccessToken;
30
+ getIssuer: typeof getIssuer;
31
+ getExpiry: typeof getExpiry;
32
+ };
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.auth = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = void 0;
4
+ /**
5
+ * Auth namespace: helpers for OAuth2 flows against the platform's
6
+ * `/auth/business/*` surface. Consumers don't bake a `client_id` into
7
+ * the SDK itself — every helper takes parameters explicitly so multiple
8
+ * OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
9
+ */
10
+ var pkce_1 = require("./pkce");
11
+ Object.defineProperty(exports, "generatePKCE", { enumerable: true, get: function () { return pkce_1.generatePKCE; } });
12
+ var authorize_url_1 = require("./authorize-url");
13
+ Object.defineProperty(exports, "createAuthorizeUrl", { enumerable: true, get: function () { return authorize_url_1.createAuthorizeUrl; } });
14
+ var exchange_code_1 = require("./exchange-code");
15
+ Object.defineProperty(exports, "exchangeCode", { enumerable: true, get: function () { return exchange_code_1.exchangeCode; } });
16
+ Object.defineProperty(exports, "parseTokenResponse", { enumerable: true, get: function () { return exchange_code_1.parseTokenResponse; } });
17
+ var refresh_1 = require("./refresh");
18
+ Object.defineProperty(exports, "refresh", { enumerable: true, get: function () { return refresh_1.refresh; } });
19
+ var verify_1 = require("./verify");
20
+ Object.defineProperty(exports, "verifyAccessToken", { enumerable: true, get: function () { return verify_1.verifyAccessToken; } });
21
+ var issuer_1 = require("./issuer");
22
+ Object.defineProperty(exports, "getIssuer", { enumerable: true, get: function () { return issuer_1.getIssuer; } });
23
+ Object.defineProperty(exports, "getExpiry", { enumerable: true, get: function () { return issuer_1.getExpiry; } });
24
+ const pkce_2 = require("./pkce");
25
+ const authorize_url_2 = require("./authorize-url");
26
+ const exchange_code_2 = require("./exchange-code");
27
+ const refresh_2 = require("./refresh");
28
+ const verify_2 = require("./verify");
29
+ const issuer_2 = require("./issuer");
30
+ /**
31
+ * Default singleton namespace for callers using the package singleton.
32
+ * import { auth } from '@uengage.io/platform-sdk';
33
+ * const pkce = auth.generatePKCE();
34
+ */
35
+ exports.auth = {
36
+ generatePKCE: pkce_2.generatePKCE,
37
+ createAuthorizeUrl: authorize_url_2.createAuthorizeUrl,
38
+ exchangeCode: exchange_code_2.exchangeCode,
39
+ refresh: refresh_2.refresh,
40
+ verifyAccessToken: verify_2.verifyAccessToken,
41
+ getIssuer: issuer_2.getIssuer,
42
+ getExpiry: issuer_2.getExpiry,
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILCtCQUFxRDtBQUE1QyxvR0FBQSxZQUFZLE9BQUE7QUFDckIsaURBQTZFO0FBQXBFLG1IQUFBLGtCQUFrQixPQUFBO0FBQzNCLGlEQUt5QjtBQUp2Qiw2R0FBQSxZQUFZLE9BQUE7QUFDWixtSEFBQSxrQkFBa0IsT0FBQTtBQUlwQixxQ0FBdUQ7QUFBOUMsa0dBQUEsT0FBTyxPQUFBO0FBQ2hCLG1DQUE2QztBQUFwQywyR0FBQSxpQkFBaUIsT0FBQTtBQUMxQixtQ0FBZ0Q7QUFBdkMsbUdBQUEsU0FBUyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBRTdCLGlDQUFzQztBQUN0QyxtREFBcUQ7QUFDckQsbURBQStDO0FBQy9DLHVDQUFvQztBQUNwQyxxQ0FBNkM7QUFDN0MscUNBQWdEO0FBRWhEOzs7O0dBSUc7QUFDVSxRQUFBLElBQUksR0FBRztJQUNsQixZQUFZLEVBQVosbUJBQVk7SUFDWixrQkFBa0IsRUFBbEIsa0NBQWtCO0lBQ2xCLFlBQVksRUFBWiw0QkFBWTtJQUNaLE9BQU8sRUFBUCxpQkFBTztJQUNQLGlCQUFpQixFQUFqQiwwQkFBaUI7SUFDakIsU0FBUyxFQUFULGtCQUFTO0lBQ1QsU0FBUyxFQUFULGtCQUFTO0NBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aCBuYW1lc3BhY2U6IGhlbHBlcnMgZm9yIE9BdXRoMiBmbG93cyBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzXG4gKiBgL2F1dGgvYnVzaW5lc3MvKmAgc3VyZmFjZS4gQ29uc3VtZXJzIGRvbid0IGJha2UgYSBgY2xpZW50X2lkYCBpbnRvXG4gKiB0aGUgU0RLIGl0c2VsZiDigJQgZXZlcnkgaGVscGVyIHRha2VzIHBhcmFtZXRlcnMgZXhwbGljaXRseSBzbyBtdWx0aXBsZVxuICogT0F1dGggY2xpZW50cyAoZGFzaGJvYXJkLCBtb2JpbGUsIEJGRnMpIGNhbiBzaGFyZSBvbmUgU0RLIGluc3RhbGwuXG4gKi9cbmV4cG9ydCB7IGdlbmVyYXRlUEtDRSwgdHlwZSBQa2NlUGFpciB9IGZyb20gJy4vcGtjZSc7XG5leHBvcnQgeyBjcmVhdGVBdXRob3JpemVVcmwsIHR5cGUgQXV0aG9yaXplVXJsSW5wdXQgfSBmcm9tICcuL2F1dGhvcml6ZS11cmwnO1xuZXhwb3J0IHtcbiAgZXhjaGFuZ2VDb2RlLFxuICBwYXJzZVRva2VuUmVzcG9uc2UsXG4gIHR5cGUgRXhjaGFuZ2VDb2RlSW5wdXQsXG4gIHR5cGUgVG9rZW5QYWlyLFxufSBmcm9tICcuL2V4Y2hhbmdlLWNvZGUnO1xuZXhwb3J0IHsgcmVmcmVzaCwgdHlwZSBSZWZyZXNoSW5wdXQgfSBmcm9tICcuL3JlZnJlc2gnO1xuZXhwb3J0IHsgdmVyaWZ5QWNjZXNzVG9rZW4gfSBmcm9tICcuL3ZlcmlmeSc7XG5leHBvcnQgeyBnZXRJc3N1ZXIsIGdldEV4cGlyeSB9IGZyb20gJy4vaXNzdWVyJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVQS0NFIH0gZnJvbSAnLi9wa2NlJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhvcml6ZVVybCB9IGZyb20gJy4vYXV0aG9yaXplLXVybCc7XG5pbXBvcnQgeyBleGNoYW5nZUNvZGUgfSBmcm9tICcuL2V4Y2hhbmdlLWNvZGUnO1xuaW1wb3J0IHsgcmVmcmVzaCB9IGZyb20gJy4vcmVmcmVzaCc7XG5pbXBvcnQgeyB2ZXJpZnlBY2Nlc3NUb2tlbiB9IGZyb20gJy4vdmVyaWZ5JztcbmltcG9ydCB7IGdldElzc3VlciwgZ2V0RXhwaXJ5IH0gZnJvbSAnLi9pc3N1ZXInO1xuXG4vKipcbiAqIERlZmF1bHQgc2luZ2xldG9uIG5hbWVzcGFjZSBmb3IgY2FsbGVycyB1c2luZyB0aGUgcGFja2FnZSBzaW5nbGV0b24uXG4gKiAgIGltcG9ydCB7IGF1dGggfSBmcm9tICdAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsnO1xuICogICBjb25zdCBwa2NlID0gYXV0aC5nZW5lcmF0ZVBLQ0UoKTtcbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGggPSB7XG4gIGdlbmVyYXRlUEtDRSxcbiAgY3JlYXRlQXV0aG9yaXplVXJsLFxuICBleGNoYW5nZUNvZGUsXG4gIHJlZnJlc2gsXG4gIHZlcmlmeUFjY2Vzc1Rva2VuLFxuICBnZXRJc3N1ZXIsXG4gIGdldEV4cGlyeSxcbn07XG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Decode (without verifying) a JWT and return its `iss` claim. Used by
3
+ * the SDK to route subsequent auth-related calls (refresh, future
4
+ * logout) at `${iss}/...`, so tokens from different issuers are
5
+ * routed correctly when customer-auth ships alongside business-auth.
6
+ */
7
+ export declare function getIssuer(token: string): string | null;
8
+ /** Decode (without verifying) a JWT and return its `exp` claim (unix seconds). */
9
+ export declare function getExpiry(token: string): number | null;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getIssuer = getIssuer;
4
+ exports.getExpiry = getExpiry;
5
+ /**
6
+ * Decode (without verifying) a JWT and return its `iss` claim. Used by
7
+ * the SDK to route subsequent auth-related calls (refresh, future
8
+ * logout) at `${iss}/...`, so tokens from different issuers are
9
+ * routed correctly when customer-auth ships alongside business-auth.
10
+ */
11
+ function getIssuer(token) {
12
+ const parts = token.split('.');
13
+ if (parts.length !== 3)
14
+ return null;
15
+ try {
16
+ const payload = parts[1].replace(/-/g, '+').replace(/_/g, '/');
17
+ const padded = payload.padEnd(payload.length + ((4 - (payload.length % 4)) % 4), '=');
18
+ const json = Buffer.from(padded, 'base64').toString('utf8');
19
+ const claims = JSON.parse(json);
20
+ return typeof claims.iss === 'string' ? claims.iss : null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /** Decode (without verifying) a JWT and return its `exp` claim (unix seconds). */
27
+ function getExpiry(token) {
28
+ const parts = token.split('.');
29
+ if (parts.length !== 3)
30
+ return null;
31
+ try {
32
+ const payload = parts[1].replace(/-/g, '+').replace(/_/g, '/');
33
+ const padded = payload.padEnd(payload.length + ((4 - (payload.length % 4)) % 4), '=');
34
+ const json = Buffer.from(padded, 'base64').toString('utf8');
35
+ const claims = JSON.parse(json);
36
+ return typeof claims.exp === 'number' ? claims.exp : null;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNzdWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaXNzdWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsOEJBWUM7QUFHRCw4QkFZQztBQWpDRDs7Ozs7R0FLRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBNEIsQ0FBQztRQUMzRCxPQUFPLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixTQUFnQixTQUFTLENBQUMsS0FBYTtJQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQTRCLENBQUM7UUFDM0QsT0FBTyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlY29kZSAod2l0aG91dCB2ZXJpZnlpbmcpIGEgSldUIGFuZCByZXR1cm4gaXRzIGBpc3NgIGNsYWltLiBVc2VkIGJ5XG4gKiB0aGUgU0RLIHRvIHJvdXRlIHN1YnNlcXVlbnQgYXV0aC1yZWxhdGVkIGNhbGxzIChyZWZyZXNoLCBmdXR1cmVcbiAqIGxvZ291dCkgYXQgYCR7aXNzfS8uLi5gLCBzbyB0b2tlbnMgZnJvbSBkaWZmZXJlbnQgaXNzdWVycyBhcmVcbiAqIHJvdXRlZCBjb3JyZWN0bHkgd2hlbiBjdXN0b21lci1hdXRoIHNoaXBzIGFsb25nc2lkZSBidXNpbmVzcy1hdXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXNzdWVyKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcGFydHNbMV0ucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBwYWRkZWQgPSBwYXlsb2FkLnBhZEVuZChwYXlsb2FkLmxlbmd0aCArICgoNCAtIChwYXlsb2FkLmxlbmd0aCAlIDQpKSAlIDQpLCAnPScpO1xuICAgIGNvbnN0IGpzb24gPSBCdWZmZXIuZnJvbShwYWRkZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICAgIGNvbnN0IGNsYWltcyA9IEpTT04ucGFyc2UoanNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuaXNzID09PSAnc3RyaW5nJyA/IGNsYWltcy5pc3MgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKiogRGVjb2RlICh3aXRob3V0IHZlcmlmeWluZykgYSBKV1QgYW5kIHJldHVybiBpdHMgYGV4cGAgY2xhaW0gKHVuaXggc2Vjb25kcykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwaXJ5KHRva2VuOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcGFydHNbMV0ucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBwYWRkZWQgPSBwYXlsb2FkLnBhZEVuZChwYXlsb2FkLmxlbmd0aCArICgoNCAtIChwYXlsb2FkLmxlbmd0aCAlIDQpKSAlIDQpLCAnPScpO1xuICAgIGNvbnN0IGpzb24gPSBCdWZmZXIuZnJvbShwYWRkZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICAgIGNvbnN0IGNsYWltcyA9IEpTT04ucGFyc2UoanNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuZXhwID09PSAnbnVtYmVyJyA/IGNsYWltcy5leHAgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
@@ -0,0 +1,13 @@
1
+ /**
2
+ * PKCE (RFC 7636) S256 helper. Browser callers should pull `randomBytes`
3
+ * via the WebCrypto path instead — this package targets Node + bundlers
4
+ * that polyfill `node:crypto`. When the SDK ships a browser-only build
5
+ * we'll add a parallel implementation using `crypto.getRandomValues`.
6
+ */
7
+ export interface PkcePair {
8
+ codeVerifier: string;
9
+ codeChallenge: string;
10
+ codeChallengeMethod: 'S256';
11
+ }
12
+ export declare function generatePKCE(): PkcePair;
13
+ export declare function base64url(buf: Buffer): string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generatePKCE = generatePKCE;
4
+ exports.base64url = base64url;
5
+ const node_crypto_1 = require("node:crypto");
6
+ function generatePKCE() {
7
+ const verifier = base64url((0, node_crypto_1.randomBytes)(32));
8
+ const challenge = base64url((0, node_crypto_1.createHash)('sha256').update(verifier).digest());
9
+ return { codeVerifier: verifier, codeChallenge: challenge, codeChallengeMethod: 'S256' };
10
+ }
11
+ function base64url(buf) {
12
+ return buf.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGtjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL3BrY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxvQ0FJQztBQUVELDhCQUVDO0FBdEJELDZDQUFzRDtBQWN0RCxTQUFnQixZQUFZO0lBQzFCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFBLHlCQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDM0YsQ0FBQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxHQUFXO0lBQ25DLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdub2RlOmNyeXB0byc7XG5cbi8qKlxuICogUEtDRSAoUkZDIDc2MzYpIFMyNTYgaGVscGVyLiBCcm93c2VyIGNhbGxlcnMgc2hvdWxkIHB1bGwgYHJhbmRvbUJ5dGVzYFxuICogdmlhIHRoZSBXZWJDcnlwdG8gcGF0aCBpbnN0ZWFkIOKAlCB0aGlzIHBhY2thZ2UgdGFyZ2V0cyBOb2RlICsgYnVuZGxlcnNcbiAqIHRoYXQgcG9seWZpbGwgYG5vZGU6Y3J5cHRvYC4gV2hlbiB0aGUgU0RLIHNoaXBzIGEgYnJvd3Nlci1vbmx5IGJ1aWxkXG4gKiB3ZSdsbCBhZGQgYSBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbiB1c2luZyBgY3J5cHRvLmdldFJhbmRvbVZhbHVlc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGtjZVBhaXIge1xuICBjb2RlVmVyaWZpZXI6IHN0cmluZztcbiAgY29kZUNoYWxsZW5nZTogc3RyaW5nO1xuICBjb2RlQ2hhbGxlbmdlTWV0aG9kOiAnUzI1Nic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0UoKTogUGtjZVBhaXIge1xuICBjb25zdCB2ZXJpZmllciA9IGJhc2U2NHVybChyYW5kb21CeXRlcygzMikpO1xuICBjb25zdCBjaGFsbGVuZ2UgPSBiYXNlNjR1cmwoY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHZlcmlmaWVyKS5kaWdlc3QoKSk7XG4gIHJldHVybiB7IGNvZGVWZXJpZmllcjogdmVyaWZpZXIsIGNvZGVDaGFsbGVuZ2U6IGNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZDogJ1MyNTYnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjR1cmwoYnVmOiBCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC89KyQvZywgJycpO1xufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { type TokenPair } from './exchange-code';
2
+ export interface RefreshInput {
3
+ refreshToken: string;
4
+ /** Current access token; used to read `iss` for routing. */
5
+ accessToken: string;
6
+ clientId: string;
7
+ /** Override issuer-based routing for tests / non-standard flows. */
8
+ authBaseUrl?: string;
9
+ }
10
+ /**
11
+ * Trade an old refresh token for a fresh pair. Reads `iss` from the
12
+ * supplied access token so calls are routed back to the issuing auth
13
+ * service even when the SDK consumer has multiple issuers configured
14
+ * (business auth + future customer auth).
15
+ */
16
+ export declare function refresh(input: RefreshInput): Promise<TokenPair>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.refresh = refresh;
4
+ const errors_1 = require("../errors");
5
+ const exchange_code_1 = require("./exchange-code");
6
+ const issuer_1 = require("./issuer");
7
+ /**
8
+ * Trade an old refresh token for a fresh pair. Reads `iss` from the
9
+ * supplied access token so calls are routed back to the issuing auth
10
+ * service even when the SDK consumer has multiple issuers configured
11
+ * (business auth + future customer auth).
12
+ */
13
+ async function refresh(input) {
14
+ const issuer = input.authBaseUrl ?? (0, issuer_1.getIssuer)(input.accessToken);
15
+ if (!issuer) {
16
+ throw new errors_1.ConfigError('cannot refresh: access token has no `iss` claim and no authBaseUrl was provided');
17
+ }
18
+ const body = new URLSearchParams({
19
+ grant_type: 'refresh_token',
20
+ refresh_token: input.refreshToken,
21
+ client_id: input.clientId,
22
+ });
23
+ const res = await fetch(`${issuer}/oauth/token`, {
24
+ method: 'POST',
25
+ headers: { 'content-type': 'application/x-www-form-urlencoded' },
26
+ body: body.toString(),
27
+ });
28
+ return (0, exchange_code_1.parseTokenResponse)(res);
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL3JlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsMEJBa0JDO0FBckNELHNDQUF3QztBQUN4QyxtREFBcUU7QUFDckUscUNBQXFDO0FBV3JDOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUFtQjtJQUMvQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUEsa0JBQVMsRUFBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLG9CQUFXLENBQ25CLGlGQUFpRixDQUNsRixDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDO1FBQy9CLFVBQVUsRUFBRSxlQUFlO1FBQzNCLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWTtRQUNqQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVE7S0FDMUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLGNBQWMsRUFBRTtRQUMvQyxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRTtRQUNoRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxPQUFPLElBQUEsa0NBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ0Vycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IHBhcnNlVG9rZW5SZXNwb25zZSwgdHlwZSBUb2tlblBhaXIgfSBmcm9tICcuL2V4Y2hhbmdlLWNvZGUnO1xuaW1wb3J0IHsgZ2V0SXNzdWVyIH0gZnJvbSAnLi9pc3N1ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hJbnB1dCB7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAvKiogQ3VycmVudCBhY2Nlc3MgdG9rZW47IHVzZWQgdG8gcmVhZCBgaXNzYCBmb3Igcm91dGluZy4gKi9cbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIGlzc3Vlci1iYXNlZCByb3V0aW5nIGZvciB0ZXN0cyAvIG5vbi1zdGFuZGFyZCBmbG93cy4gKi9cbiAgYXV0aEJhc2VVcmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHJhZGUgYW4gb2xkIHJlZnJlc2ggdG9rZW4gZm9yIGEgZnJlc2ggcGFpci4gUmVhZHMgYGlzc2AgZnJvbSB0aGVcbiAqIHN1cHBsaWVkIGFjY2VzcyB0b2tlbiBzbyBjYWxscyBhcmUgcm91dGVkIGJhY2sgdG8gdGhlIGlzc3VpbmcgYXV0aFxuICogc2VydmljZSBldmVuIHdoZW4gdGhlIFNESyBjb25zdW1lciBoYXMgbXVsdGlwbGUgaXNzdWVycyBjb25maWd1cmVkXG4gKiAoYnVzaW5lc3MgYXV0aCArIGZ1dHVyZSBjdXN0b21lciBhdXRoKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2goaW5wdXQ6IFJlZnJlc2hJbnB1dCk6IFByb21pc2U8VG9rZW5QYWlyPiB7XG4gIGNvbnN0IGlzc3VlciA9IGlucHV0LmF1dGhCYXNlVXJsID8/IGdldElzc3VlcihpbnB1dC5hY2Nlc3NUb2tlbik7XG4gIGlmICghaXNzdWVyKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgJ2Nhbm5vdCByZWZyZXNoOiBhY2Nlc3MgdG9rZW4gaGFzIG5vIGBpc3NgIGNsYWltIGFuZCBubyBhdXRoQmFzZVVybCB3YXMgcHJvdmlkZWQnLFxuICAgICk7XG4gIH1cbiAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICByZWZyZXNoX3Rva2VuOiBpbnB1dC5yZWZyZXNoVG9rZW4sXG4gICAgY2xpZW50X2lkOiBpbnB1dC5jbGllbnRJZCxcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke2lzc3Vlcn0vb2F1dGgvdG9rZW5gLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICBib2R5OiBib2R5LnRvU3RyaW5nKCksXG4gIH0pO1xuICByZXR1cm4gcGFyc2VUb2tlblJlc3BvbnNlKHJlcyk7XG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Verify an access token: fetches JWKS based on the token's `iss`,
3
+ * verifies the RSA signature, and returns the claims. Throws on any
4
+ * failure so callers can `try/catch` once instead of branching on a
5
+ * boolean.
6
+ *
7
+ * The verification itself happens via `jose`'s `jwtVerify`, but to
8
+ * keep this module lightweight (and to avoid pulling jose into the
9
+ * Browser bundle when consumers only want the URL helpers) we
10
+ * dynamic-import it. Tree-shakers will drop the import for code paths
11
+ * that never call `verifyAccessToken`.
12
+ */
13
+ export declare function verifyAccessToken(token: string, options?: {
14
+ audience?: string;
15
+ }): Promise<Record<string, unknown>>;
16
+ /** Test-only: clear the JWKS cache. */
17
+ export declare function _resetJwksCache(): void;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.verifyAccessToken = verifyAccessToken;
37
+ exports._resetJwksCache = _resetJwksCache;
38
+ const errors_1 = require("../errors");
39
+ const issuer_1 = require("./issuer");
40
+ /**
41
+ * Cache of JWKS documents keyed by issuer URL. Lambda-style: cleared
42
+ * on cold start, reused for the lifetime of the process. 5-minute
43
+ * staleness is plenty: when a key is rotated the auth server keeps
44
+ * publishing both old + new for the access-token TTL window, so the
45
+ * SDK's slightly stale view never causes a verification miss.
46
+ */
47
+ const jwksCache = new Map();
48
+ const JWKS_TTL_MS = 5 * 60 * 1000;
49
+ async function getJwks(issuer) {
50
+ const cached = jwksCache.get(issuer);
51
+ if (cached && Date.now() - cached.cachedAt < JWKS_TTL_MS)
52
+ return cached.doc;
53
+ const res = await fetch(`${issuer}/jwks.json`);
54
+ if (!res.ok)
55
+ throw new errors_1.PlatformError(`JWKS fetch failed: HTTP ${res.status}`, { status: res.status });
56
+ const doc = (await res.json());
57
+ jwksCache.set(issuer, { doc, cachedAt: Date.now() });
58
+ return doc;
59
+ }
60
+ /**
61
+ * Verify an access token: fetches JWKS based on the token's `iss`,
62
+ * verifies the RSA signature, and returns the claims. Throws on any
63
+ * failure so callers can `try/catch` once instead of branching on a
64
+ * boolean.
65
+ *
66
+ * The verification itself happens via `jose`'s `jwtVerify`, but to
67
+ * keep this module lightweight (and to avoid pulling jose into the
68
+ * Browser bundle when consumers only want the URL helpers) we
69
+ * dynamic-import it. Tree-shakers will drop the import for code paths
70
+ * that never call `verifyAccessToken`.
71
+ */
72
+ async function verifyAccessToken(token, options) {
73
+ const issuer = (0, issuer_1.getIssuer)(token);
74
+ if (!issuer)
75
+ throw new errors_1.ConfigError('access token has no `iss` claim');
76
+ const { jwtVerify, createLocalJWKSet } = await Promise.resolve().then(() => __importStar(require('jose')));
77
+ const jwks = createLocalJWKSet({ keys: (await getJwks(issuer)).keys });
78
+ try {
79
+ const { payload } = await jwtVerify(token, jwks, {
80
+ issuer,
81
+ audience: options?.audience,
82
+ });
83
+ return payload;
84
+ }
85
+ catch (err) {
86
+ throw new errors_1.AuthenticationError('access token verification failed', { cause: err });
87
+ }
88
+ }
89
+ /** Test-only: clear the JWKS cache. */
90
+ function _resetJwksCache() {
91
+ jwksCache.clear();
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvdmVyaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0NBLDhDQWlCQztBQUdELDBDQUVDO0FBOURELHNDQUE0RTtBQUM1RSxxQ0FBcUM7QUFNckM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQThDLENBQUM7QUFDeEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFbEMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxNQUFjO0lBQ25DLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsV0FBVztRQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUM1RSxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ1QsTUFBTSxJQUFJLHNCQUFhLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzRixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFZLENBQUM7SUFDMUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLEtBQWEsRUFDYixPQUErQjtJQUUvQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLE1BQU07UUFBRSxNQUFNLElBQUksb0JBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyx3REFBYSxNQUFNLEdBQUMsQ0FBQztJQUM5RCxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBYSxFQUFFLENBQUMsQ0FBQztJQUNoRixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUMvQyxNQUFNO1lBQ04sUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1NBQzVCLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBa0MsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7QUFDSCxDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLFNBQWdCLGVBQWU7SUFDN0IsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yLCBDb25maWdFcnJvciwgUGxhdGZvcm1FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBnZXRJc3N1ZXIgfSBmcm9tICcuL2lzc3Vlcic7XG5cbmludGVyZmFjZSBKd2tzRG9jIHtcbiAga2V5czogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKipcbiAqIENhY2hlIG9mIEpXS1MgZG9jdW1lbnRzIGtleWVkIGJ5IGlzc3VlciBVUkwuIExhbWJkYS1zdHlsZTogY2xlYXJlZFxuICogb24gY29sZCBzdGFydCwgcmV1c2VkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuIDUtbWludXRlXG4gKiBzdGFsZW5lc3MgaXMgcGxlbnR5OiB3aGVuIGEga2V5IGlzIHJvdGF0ZWQgdGhlIGF1dGggc2VydmVyIGtlZXBzXG4gKiBwdWJsaXNoaW5nIGJvdGggb2xkICsgbmV3IGZvciB0aGUgYWNjZXNzLXRva2VuIFRUTCB3aW5kb3csIHNvIHRoZVxuICogU0RLJ3Mgc2xpZ2h0bHkgc3RhbGUgdmlldyBuZXZlciBjYXVzZXMgYSB2ZXJpZmljYXRpb24gbWlzcy5cbiAqL1xuY29uc3Qgandrc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsgZG9jOiBKd2tzRG9jOyBjYWNoZWRBdDogbnVtYmVyIH0+KCk7XG5jb25zdCBKV0tTX1RUTF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEp3a3MoaXNzdWVyOiBzdHJpbmcpOiBQcm9taXNlPEp3a3NEb2M+IHtcbiAgY29uc3QgY2FjaGVkID0gandrc0NhY2hlLmdldChpc3N1ZXIpO1xuICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQuY2FjaGVkQXQgPCBKV0tTX1RUTF9NUykgcmV0dXJuIGNhY2hlZC5kb2M7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke2lzc3Vlcn0vandrcy5qc29uYCk7XG4gIGlmICghcmVzLm9rKVxuICAgIHRocm93IG5ldyBQbGF0Zm9ybUVycm9yKGBKV0tTIGZldGNoIGZhaWxlZDogSFRUUCAke3Jlcy5zdGF0dXN9YCwgeyBzdGF0dXM6IHJlcy5zdGF0dXMgfSk7XG4gIGNvbnN0IGRvYyA9IChhd2FpdCByZXMuanNvbigpKSBhcyBKd2tzRG9jO1xuICBqd2tzQ2FjaGUuc2V0KGlzc3VlciwgeyBkb2MsIGNhY2hlZEF0OiBEYXRlLm5vdygpIH0pO1xuICByZXR1cm4gZG9jO1xufVxuXG4vKipcbiAqIFZlcmlmeSBhbiBhY2Nlc3MgdG9rZW46IGZldGNoZXMgSldLUyBiYXNlZCBvbiB0aGUgdG9rZW4ncyBgaXNzYCxcbiAqIHZlcmlmaWVzIHRoZSBSU0Egc2lnbmF0dXJlLCBhbmQgcmV0dXJucyB0aGUgY2xhaW1zLiBUaHJvd3Mgb24gYW55XG4gKiBmYWlsdXJlIHNvIGNhbGxlcnMgY2FuIGB0cnkvY2F0Y2hgIG9uY2UgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYVxuICogYm9vbGVhbi5cbiAqXG4gKiBUaGUgdmVyaWZpY2F0aW9uIGl0c2VsZiBoYXBwZW5zIHZpYSBgam9zZWAncyBgand0VmVyaWZ5YCwgYnV0IHRvXG4gKiBrZWVwIHRoaXMgbW9kdWxlIGxpZ2h0d2VpZ2h0IChhbmQgdG8gYXZvaWQgcHVsbGluZyBqb3NlIGludG8gdGhlXG4gKiBCcm93c2VyIGJ1bmRsZSB3aGVuIGNvbnN1bWVycyBvbmx5IHdhbnQgdGhlIFVSTCBoZWxwZXJzKSB3ZVxuICogZHluYW1pYy1pbXBvcnQgaXQuIFRyZWUtc2hha2VycyB3aWxsIGRyb3AgdGhlIGltcG9ydCBmb3IgY29kZSBwYXRoc1xuICogdGhhdCBuZXZlciBjYWxsIGB2ZXJpZnlBY2Nlc3NUb2tlbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlBY2Nlc3NUb2tlbihcbiAgdG9rZW46IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgYXVkaWVuY2U/OiBzdHJpbmcgfSxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgaXNzdWVyID0gZ2V0SXNzdWVyKHRva2VuKTtcbiAgaWYgKCFpc3N1ZXIpIHRocm93IG5ldyBDb25maWdFcnJvcignYWNjZXNzIHRva2VuIGhhcyBubyBgaXNzYCBjbGFpbScpO1xuICBjb25zdCB7IGp3dFZlcmlmeSwgY3JlYXRlTG9jYWxKV0tTZXQgfSA9IGF3YWl0IGltcG9ydCgnam9zZScpO1xuICBjb25zdCBqd2tzID0gY3JlYXRlTG9jYWxKV0tTZXQoeyBrZXlzOiAoYXdhaXQgZ2V0Sndrcyhpc3N1ZXIpKS5rZXlzIGFzIG5ldmVyIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gYXdhaXQgand0VmVyaWZ5KHRva2VuLCBqd2tzLCB7XG4gICAgICBpc3N1ZXIsXG4gICAgICBhdWRpZW5jZTogb3B0aW9ucz8uYXVkaWVuY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHBheWxvYWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKCdhY2Nlc3MgdG9rZW4gdmVyaWZpY2F0aW9uIGZhaWxlZCcsIHsgY2F1c2U6IGVyciB9KTtcbiAgfVxufVxuXG4vKiogVGVzdC1vbmx5OiBjbGVhciB0aGUgSldLUyBjYWNoZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRKd2tzQ2FjaGUoKTogdm9pZCB7XG4gIGp3a3NDYWNoZS5jbGVhcigpO1xufVxuIl19
@@ -6,9 +6,9 @@ export interface BusinessGetOptions {
6
6
  export interface BusinessClient {
7
7
  config(input: PlatformConfigInput): BusinessClient;
8
8
  auth(input: PlatformAuthInput | PlatformAuth): BusinessClient;
9
- /** GET /v1/business/:id - returns the record or throws BusinessApiError. */
9
+ /** GET /v1/businesses/:id - returns the record or throws BusinessApiError. */
10
10
  get(id: number, opts?: BusinessGetOptions): Promise<BusinessRecord>;
11
- /** GET /v1/business/bulk - returns matched records (missing ids dropped). */
11
+ /** GET /v1/businesses?ids= - returns matched records (missing ids dropped). */
12
12
  bulk(ids: readonly number[], opts?: BusinessGetOptions): Promise<BusinessRecord[]>;
13
13
  }
14
14
  export declare class BusinessApiError extends Error {