@uengage.io/platform-sdk 0.3.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.
- package/dist/audit/client.js +2 -2
- package/dist/auth/authorize-url.d.ts +18 -0
- package/dist/auth/authorize-url.js +31 -0
- package/dist/auth/exchange-code.d.ts +22 -0
- package/dist/auth/exchange-code.js +55 -0
- package/dist/auth/index.d.ts +32 -0
- package/dist/auth/index.js +44 -0
- package/dist/auth/issuer.d.ts +9 -0
- package/dist/auth/issuer.js +42 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.js +14 -0
- package/dist/auth/refresh.d.ts +16 -0
- package/dist/auth/refresh.js +30 -0
- package/dist/auth/verify.d.ts +17 -0
- package/dist/auth/verify.js +93 -0
- package/dist/business/client.js +40 -7
- package/dist/client.d.ts +71 -0
- package/dist/client.js +152 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +1 -1
- package/dist/errors.d.ts +61 -0
- package/dist/errors.js +86 -0
- package/dist/http.d.ts +10 -5
- package/dist/http.js +25 -7
- package/dist/index.d.ts +4 -0
- package/dist/index.js +9 -2
- package/dist/token-source.d.ts +60 -0
- package/dist/token-source.js +111 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.js +12 -0
- package/package.json +2 -1
package/dist/business/client.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.BusinessApiError = void 0;
|
|
|
4
4
|
exports.createBusinessClient = createBusinessClient;
|
|
5
5
|
const config_1 = require("../config");
|
|
6
6
|
const http_1 = require("../http");
|
|
7
|
+
const token_source_1 = require("../token-source");
|
|
7
8
|
class BusinessApiError extends Error {
|
|
8
9
|
status;
|
|
9
10
|
body;
|
|
@@ -34,10 +35,10 @@ function createBusinessClient(input = {}) {
|
|
|
34
35
|
const path = `/v1/businesses/${id}`;
|
|
35
36
|
const query = opts.groups?.length ? `?groups=${opts.groups.join(',')}` : '';
|
|
36
37
|
const config = state.resolve();
|
|
37
|
-
const
|
|
38
|
-
const res = await config.fetchFn(`${config.baseUrl}${path}${query}`, {
|
|
38
|
+
const res = await sendWithAuthRetry(config, {
|
|
39
39
|
method: 'GET',
|
|
40
|
-
|
|
40
|
+
path,
|
|
41
|
+
url: `${config.baseUrl}${path}${query}`,
|
|
41
42
|
});
|
|
42
43
|
if (!res.ok) {
|
|
43
44
|
throw new BusinessApiError(res.status, await res.text());
|
|
@@ -58,10 +59,10 @@ function createBusinessClient(input = {}) {
|
|
|
58
59
|
if (opts.groups?.length)
|
|
59
60
|
params.set('groups', opts.groups.join(','));
|
|
60
61
|
const config = state.resolve();
|
|
61
|
-
const
|
|
62
|
-
const res = await config.fetchFn(`${config.baseUrl}${path}?${params.toString()}`, {
|
|
62
|
+
const res = await sendWithAuthRetry(config, {
|
|
63
63
|
method: 'GET',
|
|
64
|
-
|
|
64
|
+
path,
|
|
65
|
+
url: `${config.baseUrl}${path}?${params.toString()}`,
|
|
65
66
|
});
|
|
66
67
|
if (!res.ok) {
|
|
67
68
|
throw new BusinessApiError(res.status, await res.text());
|
|
@@ -71,4 +72,36 @@ function createBusinessClient(input = {}) {
|
|
|
71
72
|
};
|
|
72
73
|
return client;
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Send a request with the SDK's standard 401-retry-once behaviour.
|
|
77
|
+
* Only retries when auth is `token-source`, since that's the case
|
|
78
|
+
* where the cached token may have expired server-side; HMAC and
|
|
79
|
+
* static bearer 401s mean the auth is misconfigured and a retry
|
|
80
|
+
* would just fail again.
|
|
81
|
+
*/
|
|
82
|
+
async function sendWithAuthRetry(config, params) {
|
|
83
|
+
const headers = await (0, http_1.buildHeaders)(config, {
|
|
84
|
+
method: params.method,
|
|
85
|
+
path: params.path,
|
|
86
|
+
body: params.body,
|
|
87
|
+
});
|
|
88
|
+
const res = await config.fetchFn(params.url, {
|
|
89
|
+
method: params.method,
|
|
90
|
+
headers,
|
|
91
|
+
body: params.body,
|
|
92
|
+
});
|
|
93
|
+
if (res.status !== 401 || config.auth?.type !== 'token-source')
|
|
94
|
+
return res;
|
|
95
|
+
(0, token_source_1.invalidateToken)(config.auth.state);
|
|
96
|
+
const retryHeaders = await (0, http_1.buildHeaders)(config, {
|
|
97
|
+
method: params.method,
|
|
98
|
+
path: params.path,
|
|
99
|
+
body: params.body,
|
|
100
|
+
});
|
|
101
|
+
return config.fetchFn(params.url, {
|
|
102
|
+
method: params.method,
|
|
103
|
+
headers: retryHeaders,
|
|
104
|
+
body: params.body,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1c2luZXNzL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQ0Esb0RBd0RDO0FBNUZELHNDQU1tQjtBQUNuQixrQ0FBdUM7QUFDdkMsa0RBQWtEO0FBZ0JsRCxNQUFhLGdCQUFpQixTQUFRLEtBQUs7SUFDaEMsTUFBTSxDQUFTO0lBQ2YsSUFBSSxDQUFTO0lBRXRCLFlBQVksTUFBYyxFQUFFLElBQVk7UUFDdEMsS0FBSyxDQUFDLGdCQUFnQixNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQVZELDRDQVVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsUUFBNkIsRUFBRTtJQUNsRSxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFXLEVBQUUsQ0FBQztJQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5CLE1BQU0sTUFBTSxHQUFtQjtRQUM3QixNQUFNLENBQUMsSUFBSTtZQUNULEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJO1lBQ1AsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNy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O1FBQ3pDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQzNDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixPQUFPO1FBQ1AsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0tBQ2xCLENBQUMsQ0FBQztJQUNILElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssY0FBYztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQzNFLElBQUEsOEJBQWUsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRTtRQUM5QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNoQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTyxFQUFFLFlBQVk7UUFDckIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0tBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25maWdTdGF0ZSxcbiAgdHlwZSBQbGF0Zm9ybUF1dGgsXG4gIHR5cGUgUGxhdGZvcm1BdXRoSW5wdXQsXG4gIHR5cGUgUGxhdGZvcm1Db25maWcsXG4gIHR5cGUgUGxhdGZvcm1Db25maWdJbnB1dCxcbn0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGJ1aWxkSGVhZGVycyB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgaW52YWxpZGF0ZVRva2VuIH0gZnJvbSAnLi4vdG9rZW4tc291cmNlJztcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NHcm91cE5hbWUsIEJ1c2luZXNzUmVjb3JkIH0gZnJvbSAnLi9zY2hlbWEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzR2V0T3B0aW9ucyB7XG4gIGdyb3Vwcz86IHJlYWRvbmx5IEJ1c2luZXNzR3JvdXBOYW1lW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVzaW5lc3NDbGllbnQge1xuICBjb25maWcoaW5wdXQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQpOiBCdXNpbmVzc0NsaWVudDtcbiAgYXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiBCdXNpbmVzc0NsaWVudDtcbiAgLyoqIEdFVCAvdjEvYnVzaW5lc3Nlcy86aWQgLSByZXR1cm5zIHRoZSByZWNvcmQgb3IgdGhyb3dzIEJ1c2luZXNzQXBpRXJyb3IuICovXG4gIGdldChpZDogbnVtYmVyLCBvcHRzPzogQnVzaW5lc3NHZXRPcHRpb25zKTogUHJvbWlzZTxCdXNpbmVzc1JlY29yZD47XG4gIC8qKiBHRVQgL3YxL2J1c2luZXNzZXM/aWRzPSAtIHJldHVybnMgbWF0Y2hlZCByZWNvcmRzIChtaXNzaW5nIGlkcyBkcm9wcGVkKS4gKi9cbiAgYnVsayhpZHM6IHJlYWRvbmx5IG51bWJlcltdLCBvcHRzPzogQnVzaW5lc3NHZXRPcHRpb25zKTogUHJvbWlzZTxCdXNpbmVzc1JlY29yZFtdPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1c2luZXNzQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xuICByZWFkb25seSBib2R5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc3RhdHVzOiBudW1iZXIsIGJvZHk6IHN0cmluZykge1xuICAgIHN1cGVyKGBidXNpbmVzcyBBUEkgJHtzdGF0dXN9OiAke2JvZHl9YCk7XG4gICAgdGhpcy5uYW1lID0gJ0J1c2luZXNzQXBpRXJyb3InO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ1c2luZXNzQ2xpZW50KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0ID0ge30pOiBCdXNpbmVzc0NsaWVudCB7XG4gIGNvbnN0IHN0YXRlID0gbmV3IENvbmZpZ1N0YXRlKCk7XG4gIHN0YXRlLmFwcGx5KGlucHV0KTtcblxuICBjb25zdCBjbGllbnQ6IEJ1c2luZXNzQ2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG4gICAgYXN5bmMgZ2V0KGlkLCBvcHRzID0ge30pIHtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpZCkgfHwgaWQgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJ1c2luZXNzLmdldDogaWQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdCAke2lkfSlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhdGggPSBgL3YxL2J1c2luZXNzZXMvJHtpZH1gO1xuICAgICAgY29uc3QgcXVlcnkgPSBvcHRzLmdyb3Vwcz8ubGVuZ3RoID8gYD9ncm91cHM9JHtvcHRzLmdyb3Vwcy5qb2luKCcsJyl9YCA6ICcnO1xuICAgICAgY29uc3QgY29uZmlnID0gc3RhdGUucmVzb2x2ZSgpO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZFdpdGhBdXRoUmV0cnkoY29uZmlnLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHVybDogYCR7Y29uZmlnLmJhc2VVcmx9JHtwYXRofSR7cXVlcnl9YCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1c2luZXNzQXBpRXJyb3IocmVzLnN0YXR1cywgYXdhaXQgcmVzLnRleHQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKGF3YWl0IHJlcy5qc29uKCkpIGFzIEJ1c2luZXNzUmVjb3JkO1xuICAgIH0sXG4gICAgYXN5bmMgYnVsayhpZHMsIG9wdHMgPSB7fSkge1xuICAgICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidXNpbmVzcy5idWxrOiBpZHMgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbiBvZiBpZHMpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IG4gPD0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYnVzaW5lc3MuYnVsazogZXZlcnkgaWQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdCAke259KWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBwYXRoID0gJy92MS9idXNpbmVzc2VzJztcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBpZHM6IGlkcy5qb2luKCcsJykgfSk7XG4gICAgICBpZiAob3B0cy5ncm91cHM/Lmxlbmd0aCkgcGFyYW1zLnNldCgnZ3JvdXBzJywgb3B0cy5ncm91cHMuam9pbignLCcpKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHN0YXRlLnJlc29sdmUoKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmRXaXRoQXV0aFJldHJ5KGNvbmZpZywge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBwYXRoLFxuICAgICAgICB1cmw6IGAke2NvbmZpZy5iYXNlVXJsfSR7cGF0aH0/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICB0aHJvdyBuZXcgQnVzaW5lc3NBcGlFcnJvcihyZXMuc3RhdHVzLCBhd2FpdCByZXMudGV4dCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoYXdhaXQgcmVzLmpzb24oKSkgYXMgQnVzaW5lc3NSZWNvcmRbXTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbi8qKlxuICogU2VuZCBhIHJlcXVlc3Qgd2l0aCB0aGUgU0RLJ3Mgc3RhbmRhcmQgNDAxLXJldHJ5LW9uY2UgYmVoYXZpb3VyLlxuICogT25seSByZXRyaWVzIHdoZW4gYXV0aCBpcyBgdG9rZW4tc291cmNlYCwgc2luY2UgdGhhdCdzIHRoZSBjYXNlXG4gKiB3aGVyZSB0aGUgY2FjaGVkIHRva2VuIG1heSBoYXZlIGV4cGlyZWQgc2VydmVyLXNpZGU7IEhNQUMgYW5kXG4gKiBzdGF0aWMgYmVhcmVyIDQwMXMgbWVhbiB0aGUgYXV0aCBpcyBtaXNjb25maWd1cmVkIGFuZCBhIHJldHJ5XG4gKiB3b3VsZCBqdXN0IGZhaWwgYWdhaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlbmRXaXRoQXV0aFJldHJ5KFxuICBjb25maWc6IFBsYXRmb3JtQ29uZmlnLFxuICBwYXJhbXM6IHsgbWV0aG9kOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgdXJsOiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfSxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgaGVhZGVycyA9IGF3YWl0IGJ1aWxkSGVhZGVycyhjb25maWcsIHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgcGF0aDogcGFyYW1zLnBhdGgsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xuICBjb25zdCByZXMgPSBhd2FpdCBjb25maWcuZmV0Y2hGbihwYXJhbXMudXJsLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIGhlYWRlcnMsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xuICBpZiAocmVzLnN0YXR1cyAhPT0gNDAxIHx8IGNvbmZpZy5hdXRoPy50eXBlICE9PSAndG9rZW4tc291cmNlJykgcmV0dXJuIHJlcztcbiAgaW52YWxpZGF0ZVRva2VuKGNvbmZpZy5hdXRoLnN0YXRlKTtcbiAgY29uc3QgcmV0cnlIZWFkZXJzID0gYXdhaXQgYnVpbGRIZWFkZXJzKGNvbmZpZywge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBwYXRoOiBwYXJhbXMucGF0aCxcbiAgICBib2R5OiBwYXJhbXMuYm9keSxcbiAgfSk7XG4gIHJldHVybiBjb25maWcuZmV0Y2hGbihwYXJhbXMudXJsLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIGhlYWRlcnM6IHJldHJ5SGVhZGVycyxcbiAgICBib2R5OiBwYXJhbXMuYm9keSxcbiAgfSk7XG59XG4iXX0=
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type AuditClient } from './audit/client';
|
|
2
|
+
import { type BusinessClient } from './business/client';
|
|
3
|
+
import { auth } from './auth';
|
|
4
|
+
/**
|
|
5
|
+
* Caller-facing config for the unified `createClient(...)` factory and
|
|
6
|
+
* the `platform` singleton.
|
|
7
|
+
*
|
|
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
|
|
12
|
+
*
|
|
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.
|
|
17
|
+
*/
|
|
18
|
+
export interface ClientConfig {
|
|
19
|
+
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`. */
|
|
21
|
+
authBaseUrl?: string;
|
|
22
|
+
accessToken?: string | (() => string | Promise<string>);
|
|
23
|
+
oauthClientId?: string;
|
|
24
|
+
oauthClientSecret?: string;
|
|
25
|
+
oauthScope?: string;
|
|
26
|
+
serviceId?: string;
|
|
27
|
+
serviceSecret?: string;
|
|
28
|
+
expiryBufferMs?: number;
|
|
29
|
+
fetchFn?: typeof fetch;
|
|
30
|
+
}
|
|
31
|
+
export interface PlatformClient {
|
|
32
|
+
business: BusinessClient;
|
|
33
|
+
audit: AuditClient;
|
|
34
|
+
auth: typeof auth;
|
|
35
|
+
/**
|
|
36
|
+
* 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.
|
|
41
|
+
*/
|
|
42
|
+
withToken(token: string | (() => string | Promise<string>)): PlatformClient;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build a fresh, isolated client from explicit config. Each call
|
|
46
|
+
* gets its own TokenSource state — concurrent `createClient(...)` use
|
|
47
|
+
* does not stampede the cache.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createClient(input?: ClientConfig): PlatformClient;
|
|
50
|
+
/**
|
|
51
|
+
* Default client. Reads config from environment variables on first
|
|
52
|
+
* property access (so test setups that mutate `process.env` after
|
|
53
|
+
* import work). Use `createClient(...)` when you need an isolated
|
|
54
|
+
* instance with explicit config.
|
|
55
|
+
*
|
|
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)
|
|
63
|
+
*/
|
|
64
|
+
export declare const platform: PlatformClient;
|
|
65
|
+
/** Test-only: drop the singleton cache between cases. */
|
|
66
|
+
export declare function _resetPlatformSingleton(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Convenience: shorthand for `platform.withToken(token)`.
|
|
69
|
+
* BFF handlers commonly call this once per request.
|
|
70
|
+
*/
|
|
71
|
+
export declare function withToken(token: string | (() => string | Promise<string>)): PlatformClient;
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.platform = void 0;
|
|
4
|
+
exports.createClient = createClient;
|
|
5
|
+
exports._resetPlatformSingleton = _resetPlatformSingleton;
|
|
6
|
+
exports.withToken = withToken;
|
|
7
|
+
const client_1 = require("./audit/client");
|
|
8
|
+
const client_2 = require("./business/client");
|
|
9
|
+
const auth_1 = require("./auth");
|
|
10
|
+
const token_source_1 = require("./token-source");
|
|
11
|
+
const DEFAULT_BASE_URL = 'https://api.platform.uengage.io';
|
|
12
|
+
/**
|
|
13
|
+
* Build a fresh, isolated client from explicit config. Each call
|
|
14
|
+
* gets its own TokenSource state — concurrent `createClient(...)` use
|
|
15
|
+
* does not stampede the cache.
|
|
16
|
+
*/
|
|
17
|
+
function createClient(input = {}) {
|
|
18
|
+
warnIfBrowserSecret(input);
|
|
19
|
+
return buildClient(input);
|
|
20
|
+
}
|
|
21
|
+
function buildClient(input) {
|
|
22
|
+
const baseUrl = input.baseUrl ?? DEFAULT_BASE_URL;
|
|
23
|
+
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 }
|
|
34
|
+
: undefined;
|
|
35
|
+
const auditClient = (0, client_1.createAuditClient)({
|
|
36
|
+
baseUrl,
|
|
37
|
+
fetchFn: input.fetchFn,
|
|
38
|
+
auth: auditAuth,
|
|
39
|
+
});
|
|
40
|
+
const client = {
|
|
41
|
+
business: businessClient,
|
|
42
|
+
audit: auditClient,
|
|
43
|
+
auth: auth_1.auth,
|
|
44
|
+
withToken(token) {
|
|
45
|
+
return buildClient({
|
|
46
|
+
...input,
|
|
47
|
+
accessToken: token,
|
|
48
|
+
// The new client should not also try to mint via
|
|
49
|
+
// client_credentials on top of the supplied user token.
|
|
50
|
+
oauthClientId: undefined,
|
|
51
|
+
oauthClientSecret: undefined,
|
|
52
|
+
oauthScope: undefined,
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
return client;
|
|
57
|
+
}
|
|
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
|
+
}
|
|
66
|
+
function resolveTokenSource(input, baseUrl) {
|
|
67
|
+
const authBaseUrl = input.authBaseUrl ?? `${baseUrl}/auth/business`;
|
|
68
|
+
if (input.accessToken !== undefined) {
|
|
69
|
+
if (typeof input.accessToken === 'string') {
|
|
70
|
+
return (0, token_source_1.makeTokenSourceState)({ kind: 'static-string', token: input.accessToken }, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
|
|
71
|
+
}
|
|
72
|
+
return (0, token_source_1.makeTokenSourceState)({ kind: 'callback', getToken: input.accessToken }, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
|
|
73
|
+
}
|
|
74
|
+
if (input.oauthClientId && input.oauthClientSecret) {
|
|
75
|
+
return (0, token_source_1.makeTokenSourceState)({
|
|
76
|
+
kind: 'service-credentials',
|
|
77
|
+
clientId: input.oauthClientId,
|
|
78
|
+
clientSecret: input.oauthClientSecret,
|
|
79
|
+
authBaseUrl,
|
|
80
|
+
scope: input.oauthScope,
|
|
81
|
+
}, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
function warnIfBrowserSecret(config) {
|
|
86
|
+
const g = globalThis;
|
|
87
|
+
const inBrowser = typeof g.window !== 'undefined' && typeof g.window.document !== 'undefined';
|
|
88
|
+
if (!inBrowser)
|
|
89
|
+
return;
|
|
90
|
+
if (config.serviceSecret || config.oauthClientSecret) {
|
|
91
|
+
console.warn('[uengage-platform-sdk] service-side secrets should not be used in browser environments. ' +
|
|
92
|
+
'Service credentials in browser bundles are publicly visible. ' +
|
|
93
|
+
'Use `accessToken` with a token obtained via OAuth (or `withToken(...)` on a server-built client) instead.');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ─── Default singleton ─────────────────────────────────────────────────────
|
|
97
|
+
//
|
|
98
|
+
// Resolved lazily on first property access (Proxy) so consumers that
|
|
99
|
+
// mutate `process.env` after import still pick up the right values.
|
|
100
|
+
let cachedSingleton;
|
|
101
|
+
function singleton() {
|
|
102
|
+
if (!cachedSingleton)
|
|
103
|
+
cachedSingleton = buildClient(envClientConfig());
|
|
104
|
+
return cachedSingleton;
|
|
105
|
+
}
|
|
106
|
+
function envClientConfig() {
|
|
107
|
+
if (typeof process === 'undefined')
|
|
108
|
+
return {};
|
|
109
|
+
const e = process.env ?? {};
|
|
110
|
+
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,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Default client. Reads config from environment variables on first
|
|
123
|
+
* property access (so test setups that mutate `process.env` after
|
|
124
|
+
* import work). Use `createClient(...)` when you need an isolated
|
|
125
|
+
* instance with explicit config.
|
|
126
|
+
*
|
|
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)
|
|
134
|
+
*/
|
|
135
|
+
exports.platform = new Proxy({}, {
|
|
136
|
+
get(_, prop) {
|
|
137
|
+
const s = singleton();
|
|
138
|
+
return s[prop];
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
/** Test-only: drop the singleton cache between cases. */
|
|
142
|
+
function _resetPlatformSingleton() {
|
|
143
|
+
cachedSingleton = undefined;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Convenience: shorthand for `platform.withToken(token)`.
|
|
147
|
+
* BFF handlers commonly call this once per request.
|
|
148
|
+
*/
|
|
149
|
+
function withToken(token) {
|
|
150
|
+
return singleton().withToken(token);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1REEsb0NBR0M7QUFpSkQsMERBRUM7QUFNRCw4QkFFQztBQXJORCwyQ0FBcUU7QUFDckUsOENBQThFO0FBQzlFLGlDQUE4QjtBQUM5QixpREFBNkU7QUE2QzdFLE1BQU0sZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUM7QUFFM0Q7Ozs7R0FJRztBQUNILFNBQWdCLFlBQVksQ0FBQyxRQUFzQixFQUFFO0lBQ25ELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFtQjtJQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDO0lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTVELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sY0FBYyxHQUFHLElBQUEsNkJBQW9CLEVBQUM7UUFDMUMsT0FBTztRQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtLQUNuQixDQUFDLENBQUM7SUFFSCxnRUFBZ0U7SUFDaEUsOERBQThEO0lBQzlELE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLGFBQWE7UUFDcEMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRTtRQUMzRSxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLE1BQU0sV0FBVyxHQUFHLElB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QUFDO1FBQ2pFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCx5REFBeUQ7QUFDekQsU0FBZ0IsdUJBQXVCO0lBQ3JDLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxLQUFnRDtJQUN4RSxPQUFPLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQXVkaXRDbGllbnQsIHR5cGUgQXVkaXRDbGllbnQgfSBmcm9tICcuL2F1ZGl0L2NsaWVudCc7XG5pbXBvcnQgeyBjcmVhdGVCdXNpbmVzc0NsaWVudCwgdHlwZSBCdXNpbmVzc0NsaWVudCB9IGZyb20gJy4vYnVzaW5lc3MvY2xpZW50JztcbmltcG9ydCB7IGF1dGggfSBmcm9tICcuL2F1dGgnO1xuaW1wb3J0IHsgbWFrZVRva2VuU291cmNlU3RhdGUsIHR5cGUgVG9rZW5Tb3VyY2VTdGF0ZSB9IGZyb20gJy4vdG9rZW4tc291cmNlJztcbmltcG9ydCB0eXBlIHsgUGxhdGZvcm1BdXRoIH0gZnJvbSAnLi9jb25maWcnO1xuXG4vKipcbiAqIENhbGxlci1mYWNpbmcgY29uZmlnIGZvciB0aGUgdW5pZmllZCBgY3JlYXRlQ2xpZW50KC4uLilgIGZhY3RvcnkgYW5kXG4gKiB0aGUgYHBsYXRmb3JtYCBzaW5nbGV0b24uXG4gKlxuICogUGljayBleGFjdGx5IG9uZSBvZjpcbiAqICAgLSBgYWNjZXNzVG9rZW5gIChzdHJpbmcgb3IgY2FsbGJhY2spIGZvciB0aGUgQmVhcmVyIGZsb3dcbiAqICAgLSBgb2F1dGhDbGllbnRJZGAgKyBgb2F1dGhDbGllbnRTZWNyZXRgIGZvciBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgIC0gYHNlcnZpY2VJZGAgKyBgc2VydmljZVNlY3JldGAgZm9yIEhNQUMgc2VydmljZS10by1zZXJ2aWNlXG4gKlxuICogTWl4aW5nIGlzIGFsbG93ZWQgb25seSB3aGVuIG9uZSBpcyB0aGUgdXNlci1mYWNpbmcgQmVhcmVyIGFuZCB0aGVcbiAqIG90aGVyIGlzIHRoZSBITUFDIGZhbGxiYWNrIGZvciBsZWdhY3kgZW5kcG9pbnRzIChhdWRpdCBpbmdlc3QpLlxuICogSW4gdGhhdCBjYXNlIGBwbGF0Zm9ybS5idXNpbmVzc2AgdXNlcyBCZWFyZXI7IGBwbGF0Zm9ybS5hdWRpdGAgdXNlc1xuICogSE1BQy4gV2l0aG91dCBlaXRoZXIsIGNhbGxzIHRocm93IGBDb25maWdFcnJvcmAgb24gdGhlIGZpcnN0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50Q29uZmlnIHtcbiAgYmFzZVVybD86IHN0cmluZztcbiAgLyoqIEF1dGggc3VyZmFjZSBiYXNlOyBkZWZhdWx0cyB0byBgJHtiYXNlVXJsfS9hdXRoL2J1c2luZXNzYC4gVXNlZCBvbmx5IHRvIGJvb3RzdHJhcCB0aGUgZmlyc3QgY2xpZW50X2NyZWRlbnRpYWxzIG1pbnQg4oCUIG9uY2UgYSB0b2tlbiBleGlzdHMsIGZ1dHVyZSBhdXRoIGNhbGxzIGZvbGxvdyB0aGUgdG9rZW4ncyBgaXNzYC4gKi9cbiAgYXV0aEJhc2VVcmw/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPik7XG4gIG9hdXRoQ2xpZW50SWQ/OiBzdHJpbmc7XG4gIG9hdXRoQ2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBvYXV0aFNjb3BlPzogc3RyaW5nO1xuICBzZXJ2aWNlSWQ/OiBzdHJpbmc7XG4gIHNlcnZpY2VTZWNyZXQ/OiBzdHJpbmc7XG4gIGV4cGlyeUJ1ZmZlck1zPzogbnVtYmVyO1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQ2xpZW50IHtcbiAgYnVzaW5lc3M6IEJ1c2luZXNzQ2xpZW50O1xuICBhdWRpdDogQXVkaXRDbGllbnQ7XG4gIGF1dGg6IHR5cGVvZiBhdXRoO1xuICAvKipcbiAgICogUmV0dXJuIGEgZGVyaXZlZCBjbGllbnQgYm91bmQgdG8gdGhlIHN1cHBsaWVkIGFjY2VzcyB0b2tlbi5cbiAgICogSW5oZXJpdHMgYGJhc2VVcmxgLCBgZmV0Y2hGbmAsIGFuZCBhbnkgSE1BQyBmYWxsYmFjayBmcm9tIHRoaXNcbiAgICogY2xpZW50OyByZXBsYWNlcyB0aGUgT0F1dGgvc3RhdGljLXRva2VuIHNvdXJjZSB3aXRoIHRoZSBuZXcgb25lLlxuICAgKiBVc2UgY2FzZTogQkZGIGhhbmRsZXJzIHRoYXQgd2FudCB0byBjYWxsIHRoZSBwbGF0Zm9ybSBBUEkgYXMgdGhlXG4gICAqIGVuZCB1c2VyIGluc3RlYWQgb2YgYXMgdGhlIHNlcnZpY2UuXG4gICAqL1xuICB3aXRoVG9rZW4odG9rZW46IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pKTogUGxhdGZvcm1DbGllbnQ7XG59XG5cbmNvbnN0IERFRkFVTFRfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbyc7XG5cbi8qKlxuICogQnVpbGQgYSBmcmVzaCwgaXNvbGF0ZWQgY2xpZW50IGZyb20gZXhwbGljaXQgY29uZmlnLiBFYWNoIGNhbGxcbiAqIGdldHMgaXRzIG93biBUb2tlblNvdXJjZSBzdGF0ZSDigJQgY29uY3VycmVudCBgY3JlYXRlQ2xpZW50KC4uLilgIHVzZVxuICogZG9lcyBub3Qgc3RhbXBlZGUgdGhlIGNhY2hlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcgPSB7fSk6IFBsYXRmb3JtQ2xpZW50IHtcbiAgd2FybklmQnJvd3NlclNlY3JldChpbnB1dCk7XG4gIHJldHVybiBidWlsZENsaWVudChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIGNvbnN0IGJhc2VVcmwgPSBpbnB1dC5iYXNlVXJsID8/IERFRkFVTFRfQkFTRV9VUkw7XG4gIGNvbnN0IHRva2VuU291cmNlU3RhdGUgPSByZXNvbHZlVG9rZW5Tb3VyY2UoaW5wdXQsIGJhc2VVcmwpO1xuXG4gIGNvbnN0IGJ1c2luZXNzQXV0aCA9IHBpY2tCdXNpbmVzc0F1dGgoaW5wdXQsIHRva2VuU291cmNlU3RhdGUpO1xuICBjb25zdCBidXNpbmVzc0NsaWVudCA9IGNyZWF0ZUJ1c2luZXNzQ2xpZW50KHtcbiAgICBiYXNlVXJsLFxuICAgIGZldGNoRm46IGlucHV0LmZldGNoRm4sXG4gICAgYXV0aDogYnVzaW5lc3NBdXRoLFxuICB9KTtcblxuICAvLyBBdWRpdCBpcyBITUFDLW9ubHkgb24gdGhlIHNlcnZlciBzaWRlLCBzbyBhbHdheXMgdXNlIHRoZSBITUFDXG4gIC8vIGNyZWRzIHdoZW4gcHJlc2VudCwgcmVnYXJkbGVzcyBvZiBhbnkgdG9rZW4tc291cmNlIG92ZXJsYXkuXG4gIGNvbnN0IGF1ZGl0QXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkID1cbiAgICBpbnB1dC5zZXJ2aWNlSWQgJiYgaW5wdXQuc2VydmljZVNlY3JldFxuICAgICAgPyB7IHR5cGU6ICdobWFjJywgc2VydmljZUlkOiBpbnB1dC5zZXJ2aWNlSWQsIHNlY3JldDogaW5wdXQuc2VydmljZVNlY3JldCB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYXVkaXRDbGllbnQgPSBjcmVhdGVBdWRpdENsaWVudCh7XG4gICAgYmFzZVVybCxcbiAgICBmZXRjaEZuOiBpbnB1dC5mZXRjaEZuLFxuICAgIGF1dGg6IGF1ZGl0QXV0aCxcbiAgfSk7XG5cbiAgY29uc3QgY2xpZW50OiBQbGF0Zm9ybUNsaWVudCA9IHtcbiAgICBidXNpbmVzczogYnVzaW5lc3NDbGllbnQsXG4gICAgYXVkaXQ6IGF1ZGl0Q2xpZW50LFxuICAgIGF1dGgsXG4gICAgd2l0aFRva2VuKHRva2VuKSB7XG4gICAgICByZXR1cm4gYnVpbGRDbGllbnQoe1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgYWNjZXNzVG9rZW46IHRva2VuLFxuICAgICAgICAvLyBUaGUgbmV3IGNsaWVudCBzaG91bGQgbm90IGFsc28gdHJ5IHRvIG1pbnQgdmlhXG4gICAgICAgIC8vIGNsaWVudF9jcmVkZW50aWFscyBvbiB0b3Agb2YgdGhlIHN1cHBsaWVkIHVzZXIgdG9rZW4uXG4gICAgICAgIG9hdXRoQ2xpZW50SWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgb2F1dGhDbGllbnRTZWNyZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgb2F1dGhTY29wZTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuZnVuY3Rpb24gcGlja0J1c2luZXNzQXV0aChcbiAgaW5wdXQ6IENsaWVudENvbmZpZyxcbiAgdG9rZW5Tb3VyY2VTdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSB8IHVuZGVmaW5lZCxcbik6IFBsYXRmb3JtQXV0aCB8IHVuZGVmaW5lZCB7XG4gIGlmICh0b2tlblNvdXJjZVN0YXRlKSByZXR1cm4geyB0eXBlOiAndG9rZW4tc291cmNlJywgc3RhdGU6IHRva2VuU291cmNlU3RhdGUgfTtcbiAgaWYgKGlucHV0LnNlcnZpY2VJZCAmJiBpbnB1dC5zZXJ2aWNlU2VjcmV0KSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2htYWMnLCBzZXJ2aWNlSWQ6IGlucHV0LnNlcnZpY2VJZCwgc2VjcmV0OiBpbnB1dC5zZXJ2aWNlU2VjcmV0IH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVRva2VuU291cmNlKGlucHV0OiBDbGllbnRDb25maWcsIGJhc2VVcmw6IHN0cmluZyk6IFRva2VuU291cmNlU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBhdXRoQmFzZVVybCA9IGlucHV0LmF1dGhCYXNlVXJsID8/IGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgO1xuICBpZiAoaW5wdXQuYWNjZXNzVG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQuYWNjZXNzVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHsga2luZDogJ3N0YXRpYy1zdHJpbmcnLCB0b2tlbjogaW5wdXQuYWNjZXNzVG9rZW4gfSxcbiAgICAgICAgeyBleHBpcnlCdWZmZXJNczogaW5wdXQuZXhwaXJ5QnVmZmVyTXMsIGZldGNoRm46IGlucHV0LmZldGNoRm4gfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtYWtlVG9rZW5Tb3VyY2VTdGF0ZShcbiAgICAgIHsga2luZDogJ2NhbGxiYWNrJywgZ2V0VG9rZW46IGlucHV0LmFjY2Vzc1Rva2VuIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0Lm9hdXRoQ2xpZW50SWQgJiYgaW5wdXQub2F1dGhDbGllbnRTZWNyZXQpIHtcbiAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdzZXJ2aWNlLWNyZWRlbnRpYWxzJyxcbiAgICAgICAgY2xpZW50SWQ6IGlucHV0Lm9hdXRoQ2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogaW5wdXQub2F1dGhDbGllbnRTZWNyZXQsXG4gICAgICAgIGF1dGhCYXNlVXJsLFxuICAgICAgICBzY29wZTogaW5wdXQub2F1dGhTY29wZSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmQnJvd3NlclNlY3JldChjb25maWc6IENsaWVudENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB7IHdpbmRvdz86IHsgZG9jdW1lbnQ/OiB1bmtub3duIH0gfTtcbiAgY29uc3QgaW5Ccm93c2VyID0gdHlwZW9mIGcud2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZy53aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIWluQnJvd3NlcikgcmV0dXJuO1xuICBpZiAoY29uZmlnLnNlcnZpY2VTZWNyZXQgfHwgY29uZmlnLm9hdXRoQ2xpZW50U2VjcmV0KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1t1ZW5nYWdlLXBsYXRmb3JtLXNka10gc2VydmljZS1zaWRlIHNlY3JldHMgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzLiAnICtcbiAgICAgICAgJ1NlcnZpY2UgY3JlZGVudGlhbHMgaW4gYnJvd3NlciBidW5kbGVzIGFyZSBwdWJsaWNseSB2aXNpYmxlLiAnICtcbiAgICAgICAgJ1VzZSBgYWNjZXNzVG9rZW5gIHdpdGggYSB0b2tlbiBvYnRhaW5lZCB2aWEgT0F1dGggKG9yIGB3aXRoVG9rZW4oLi4uKWAgb24gYSBzZXJ2ZXItYnVpbHQgY2xpZW50KSBpbnN0ZWFkLicsXG4gICAgKTtcbiAgfVxufVxuXG4vLyDilIDilIDilIAgRGVmYXVsdCBzaW5nbGV0b24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8gUmVzb2x2ZWQgbGF6aWx5IG9uIGZpcnN0IHByb3BlcnR5IGFjY2VzcyAoUHJveHkpIHNvIGNvbnN1bWVycyB0aGF0XG4vLyBtdXRhdGUgYHByb2Nlc3MuZW52YCBhZnRlciBpbXBvcnQgc3RpbGwgcGljayB1cCB0aGUgcmlnaHQgdmFsdWVzLlxuXG5sZXQgY2FjaGVkU2luZ2xldG9uOiBQbGF0Zm9ybUNsaWVudCB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHNpbmdsZXRvbigpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIGlmICghY2FjaGVkU2luZ2xldG9uKSBjYWNoZWRTaW5nbGV0b24gPSBidWlsZENsaWVudChlbnZDbGllbnRDb25maWcoKSk7XG4gIHJldHVybiBjYWNoZWRTaW5nbGV0b247XG59XG5cbmZ1bmN0aW9uIGVudkNsaWVudENvbmZpZygpOiBDbGllbnRDb25maWcge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSByZXR1cm4ge307XG4gIGNvbnN0IGUgPSAocHJvY2VzcyBhcyB7IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfSkuZW52ID8/IHt9O1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IGUuUExBVEZPUk1fQkFTRV9VUkwsXG4gICAgYXV0aEJhc2VVcmw6IGUuUExBVEZPUk1fQVVUSF9CQVNFX1VSTCxcbiAgICBhY2Nlc3NUb2tlbjogZS5QTEFURk9STV9BVVRIX1RPS0VOLFxuICAgIG9hdXRoQ2xpZW50SWQ6IGUuUExBVEZPUk1fT0FVVEhfQ0xJRU5UX0lELFxuICAgIG9hdXRoQ2xpZW50U2VjcmV0OiBlLlBMQVRGT1JNX09BVVRIX0NMSUVOVF9TRUNSRVQsXG4gICAgb2F1dGhTY29wZTogZS5QTEFURk9STV9PQVVUSF9TQ09QRSxcbiAgICBzZXJ2aWNlSWQ6IGUuUExBVEZPUk1fU0VSVklDRV9JRCxcbiAgICBzZXJ2aWNlU2VjcmV0OiBlLlBMQVRGT1JNX1NJR05JTkdfU0VDUkVULFxuICB9O1xufVxuXG4vKipcbiAqIERlZmF1bHQgY2xpZW50LiBSZWFkcyBjb25maWcgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gZmlyc3RcbiAqIHByb3BlcnR5IGFjY2VzcyAoc28gdGVzdCBzZXR1cHMgdGhhdCBtdXRhdGUgYHByb2Nlc3MuZW52YCBhZnRlclxuICogaW1wb3J0IHdvcmspLiBVc2UgYGNyZWF0ZUNsaWVudCguLi4pYCB3aGVuIHlvdSBuZWVkIGFuIGlzb2xhdGVkXG4gKiBpbnN0YW5jZSB3aXRoIGV4cGxpY2l0IGNvbmZpZy5cbiAqXG4gKiAgIFBMQVRGT1JNX0JBU0VfVVJMICAgICAgICAgICAgICBkZWZhdWx0cyB0byBodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvXG4gKiAgIFBMQVRGT1JNX0FVVEhfVE9LRU4gICAgICAgICAgICBCZWFyZXIgdG9rZW4gKG92ZXJyaWRlcyBPQXV0aCArIEhNQUMpXG4gKiAgIFBMQVRGT1JNX09BVVRIX0NMSUVOVF9JRCAgICAgICBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgIFBMQVRGT1JNX09BVVRIX0NMSUVOVF9TRUNSRVQgICBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgIFBMQVRGT1JNX09BVVRIX1NDT1BFICAgICAgICAgICBvcHRpb25hbCBzcGFjZS1zZXBhcmF0ZWQgc2NvcGUgbGlzdFxuICogICBQTEFURk9STV9TRVJWSUNFX0lEICAgICAgICAgICAgSE1BQyBzZXJ2aWNlLWlkIChsZWdhY3kgLyBhdWRpdClcbiAqICAgUExBVEZPUk1fU0lHTklOR19TRUNSRVQgICAgICAgIEhNQUMgcmF3IHNlY3JldCAgKGxlZ2FjeSAvIGF1ZGl0KVxuICovXG5leHBvcnQgY29uc3QgcGxhdGZvcm06IFBsYXRmb3JtQ2xpZW50ID0gbmV3IFByb3h5KHt9IGFzIFBsYXRmb3JtQ2xpZW50LCB7XG4gIGdldChfLCBwcm9wKSB7XG4gICAgY29uc3QgcyA9IHNpbmdsZXRvbigpIGFzIHVua25vd24gYXMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPjtcbiAgICByZXR1cm4gc1twcm9wXTtcbiAgfSxcbn0pO1xuXG4vKiogVGVzdC1vbmx5OiBkcm9wIHRoZSBzaW5nbGV0b24gY2FjaGUgYmV0d2VlbiBjYXNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRQbGF0Zm9ybVNpbmdsZXRvbigpOiB2b2lkIHtcbiAgY2FjaGVkU2luZ2xldG9uID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlOiBzaG9ydGhhbmQgZm9yIGBwbGF0Zm9ybS53aXRoVG9rZW4odG9rZW4pYC5cbiAqIEJGRiBoYW5kbGVycyBjb21tb25seSBjYWxsIHRoaXMgb25jZSBwZXIgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUb2tlbih0b2tlbjogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPikpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIHJldHVybiBzaW5nbGV0b24oKS53aXRoVG9rZW4odG9rZW4pO1xufVxuIl19
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Logger } from '@uengage.io/js-logger';
|
|
2
|
+
import type { TokenSourceState } from './token-source';
|
|
2
3
|
export declare const DEFAULT_BASE_URL = "https://api.platform.uengage.io";
|
|
3
4
|
/**
|
|
4
5
|
* Resolved auth state. Discriminated by `type` so consumers can narrow.
|
|
@@ -10,6 +11,9 @@ export type PlatformAuth = {
|
|
|
10
11
|
} | {
|
|
11
12
|
type: 'bearer';
|
|
12
13
|
token: string;
|
|
14
|
+
} | {
|
|
15
|
+
type: 'token-source';
|
|
16
|
+
state: TokenSourceState;
|
|
13
17
|
};
|
|
14
18
|
export interface PlatformConfig {
|
|
15
19
|
baseUrl: string;
|
package/dist/config.js
CHANGED
|
@@ -81,4 +81,4 @@ class ConfigState {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
exports.ConfigState = ConfigState;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErQ0Esa0NBTUM7QUFlRCxzQ0FZQztBQTdFWSxRQUFBLGdCQUFnQixHQUFHLGlDQUFpQyxDQUFDO0FBdUNsRTs7OztHQUlHO0FBQ0gsU0FBZ0IsV0FBVztJQUN6QixPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksd0JBQWdCO1FBQzFELElBQUksRUFBRSxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQXFCO0tBQzFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxPQUFPO0lBQ2QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztJQUNuRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFDOUMsSUFBSSxLQUFLO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUMsSUFBSSxNQUFNLElBQUksU0FBUztRQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNwRSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEtBQXVDO0lBQ25FLElBQUksTUFBTSxJQUFJLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxXQUFXO0lBQ2QsU0FBUyxHQUF3QixFQUFFLENBQUM7SUFDcEMsWUFBWSxDQUEyQjtJQUN2QyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssQ0FBQyxLQUEwQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXVDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDekQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBaUI7WUFDaEUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBNEI7U0FDcEQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdCRCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0B1ZW5nYWdlLmlvL2pzLWxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IFRva2VuU291cmNlU3RhdGUgfSBmcm9tICcuL3Rva2VuLXNvdXJjZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8nO1xuXG4vKipcbiAqIFJlc29sdmVkIGF1dGggc3RhdGUuIERpc2NyaW1pbmF0ZWQgYnkgYHR5cGVgIHNvIGNvbnN1bWVycyBjYW4gbmFycm93LlxuICovXG5leHBvcnQgdHlwZSBQbGF0Zm9ybUF1dGggPVxuICB8IHsgdHlwZTogJ2htYWMnOyBzZWNyZXQ6IHN0cmluZzsgc2VydmljZUlkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ2JlYXJlcic7IHRva2VuOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3Rva2VuLXNvdXJjZSc7IHN0YXRlOiBUb2tlblNvdXJjZVN0YXRlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWcge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm46IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIENhbGxlci1mYWNpbmcgaW5wdXQgc2hhcGUuIGBhdXRoYCBhY2NlcHRzIGVpdGhlciBhIGRpc2NyaW1pbmF0ZWRcbiAqIFBsYXRmb3JtQXV0aCBvciB0aGUgbG9vc2VyIFBsYXRmb3JtQXV0aElucHV0IC0gdGhlIGxvb3NlciBmb3JtIGlzXG4gKiBhbHNvIHdoYXQgYC5hdXRoKClgIGFjY2VwdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGhJbnB1dCB8IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIGAuYXV0aCgpYCBzaGFwZS4gUGFzcyBlaXRoZXIgYHt0b2tlbn1gIChCZWFyZXIpIG9yIGB7c2VjcmV0LCBzZXJ2aWNlSWR9YFxuICogKEhNQUMpLiBNaXhpbmcgYm90aCB0aHJvd3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1BdXRoSW5wdXQge1xuICB0b2tlbj86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZXJ2aWNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBlbnYtZGVmYXVsdGVkIGNvbmZpZy4gUmUtcmVhZCBvbiBldmVyeSBjYWxsIHNvIHRoYXQgY2FsbGVycyBjYW5cbiAqIHNldCBlbnYgdmFycyBhZnRlciB0aGUgU0RLIGhhcyBiZWVuIGltcG9ydGVkIGFuZCBzdGlsbCBwaWNrIHRoZW0gdXAgb25cbiAqIHRoZSBuZXh0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnZEZWZhdWx0cygpOiBQbGF0Zm9ybUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgYmFzZVVybDogcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkwgPz8gREVGQVVMVF9CQVNFX1VSTCxcbiAgICBhdXRoOiBlbnZBdXRoKCksXG4gICAgZmV0Y2hGbjogZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVudkF1dGgoKTogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VjcmV0ID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fU0lHTklOR19TRUNSRVQ7XG4gIGNvbnN0IHNlcnZpY2VJZCA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFUlZJQ0VfSUQ7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fQVVUSF9UT0tFTjtcbiAgaWYgKHRva2VuKSByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW4gfTtcbiAgaWYgKHNlY3JldCAmJiBzZXJ2aWNlSWQpIHJldHVybiB7IHR5cGU6ICdobWFjJywgc2VjcmV0LCBzZXJ2aWNlSWQgfTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYC5hdXRoKClgIGlucHV0IG9yIGBjb25maWcoe2F1dGh9KWAgaW5wdXQgaW50byBhIHR5cGVkIFBsYXRmb3JtQXV0aC5cbiAqIFRocm93cyBpZiB0aGUgaW5wdXQgaGFzIG5vIHVzYWJsZSBjcmVkZW50aWFscyBvciBtaXhlcyBITUFDICsgQmVhcmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiBQbGF0Zm9ybUF1dGgge1xuICBpZiAoJ3R5cGUnIGluIGlucHV0KSByZXR1cm4gaW5wdXQ7XG4gIGlmIChpbnB1dC50b2tlbikge1xuICAgIGlmIChpbnB1dC5zZWNyZXQgfHwgaW5wdXQuc2VydmljZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGgoKTogcGFzcyBlaXRoZXIge3Rva2VufSBvciB7c2VjcmV0LCBzZXJ2aWNlSWR9LCBub3QgYm90aCcpO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW46IGlucHV0LnRva2VuIH07XG4gIH1cbiAgaWYgKGlucHV0LnNlY3JldCAmJiBpbnB1dC5zZXJ2aWNlSWQpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnaG1hYycsIHNlY3JldDogaW5wdXQuc2VjcmV0LCBzZXJ2aWNlSWQ6IGlucHV0LnNlcnZpY2VJZCB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignYXV0aCgpOiBtdXN0IHByb3ZpZGUgZWl0aGVyIHt0b2tlbn0gb3Ige3NlY3JldCwgc2VydmljZUlkfScpO1xufVxuXG4vKipcbiAqIE11dGFibGUgY29uZmlnIHNoYXJlZCBieSBjbGllbnRzLiBgYXBwbHkoKWAgYW5kIGBzZXRBdXRoKClgIGFyZSBob3cgdGhlXG4gKiBjaGFpbmFibGUgYC5jb25maWcoKWAgLyBgLmF1dGgoKWAgbWV0aG9kcyB3cml0ZSBiYWNrLiBgcmVzb2x2ZSgpYCBwcm9kdWNlc1xuICogdGhlIGVmZmVjdGl2ZSBjb25maWcgZm9yIG9uZSByZXF1ZXN0LCBmYWxsaW5nIGJhY2sgdG8gY3VycmVudCBlbnYgc3RhdGVcbiAqIGZvciBmaWVsZHMgdGhlIGNhbGxlciBoYXNuJ3QgcGlubmVkLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnU3RhdGUge1xuICBwcml2YXRlIG92ZXJyaWRlczogUGxhdGZvcm1Db25maWdJbnB1dCA9IHt9O1xuICBwcml2YXRlIGV4cGxpY2l0QXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc0V4cGxpY2l0QXV0aCA9IGZhbHNlO1xuXG4gIGFwcGx5KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogdm9pZCB7XG4gICAgaWYgKGlucHV0LmJhc2VVcmwgIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuYmFzZVVybCA9IGlucHV0LmJhc2VVcmw7XG4gICAgaWYgKGlucHV0LmZldGNoRm4gIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA9IGlucHV0LmZldGNoRm47XG4gICAgaWYgKGlucHV0LmxvZ2dlciAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgPSBpbnB1dC5sb2dnZXI7XG4gICAgaWYgKGlucHV0LmF1dGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0LmF1dGgpO1xuICAgICAgdGhpcy5oYXNFeHBsaWNpdEF1dGggPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldEF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogdm9pZCB7XG4gICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0KTtcbiAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gIH1cblxuICByZXNvbHZlKCk6IFBsYXRmb3JtQ29uZmlnIHtcbiAgICBjb25zdCBlbnYgPSBlbnZEZWZhdWx0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlVXJsOiB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID8/IGVudi5iYXNlVXJsLFxuICAgICAgYXV0aDogdGhpcy5oYXNFeHBsaWNpdEF1dGggPyB0aGlzLmV4cGxpY2l0QXV0aCA6IGVudi5hdXRoLFxuICAgICAgZmV0Y2hGbjogKHRoaXMub3ZlcnJpZGVzLmZldGNoRm4gPz8gZW52LmZldGNoRm4pIGFzIHR5cGVvZiBmZXRjaCxcbiAgICAgIGxvZ2dlcjogdGhpcy5vdmVycmlkZXMubG9nZ2VyIGFzIExvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-SDK error hierarchy. Consumers should `instanceof`-check
|
|
3
|
+
* against `PlatformError` for the catch-all and the specific subclasses
|
|
4
|
+
* for the cases they care about. Status codes mirror the HTTP responses
|
|
5
|
+
* the platform API actually emits, so `error.status` is the simplest
|
|
6
|
+
* routing signal.
|
|
7
|
+
*/
|
|
8
|
+
export declare class PlatformError extends Error {
|
|
9
|
+
readonly status?: number;
|
|
10
|
+
readonly cause?: unknown;
|
|
11
|
+
constructor(message: string, opts?: {
|
|
12
|
+
status?: number;
|
|
13
|
+
cause?: unknown;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export declare class AuthenticationError extends PlatformError {
|
|
17
|
+
constructor(message?: string, opts?: {
|
|
18
|
+
cause?: unknown;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export declare class AuthorizationError extends PlatformError {
|
|
22
|
+
/** When the API returns a `requiredScope`, surface it for the consumer. */
|
|
23
|
+
readonly requiredScope?: string;
|
|
24
|
+
constructor(message?: string, opts?: {
|
|
25
|
+
requiredScope?: string;
|
|
26
|
+
cause?: unknown;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export declare class NotFoundError extends PlatformError {
|
|
30
|
+
constructor(message?: string, opts?: {
|
|
31
|
+
cause?: unknown;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export declare class ValidationError extends PlatformError {
|
|
35
|
+
/** Per-field issues in the platform's standard `issues` array shape. */
|
|
36
|
+
readonly issues?: unknown[];
|
|
37
|
+
constructor(message?: string, opts?: {
|
|
38
|
+
issues?: unknown[];
|
|
39
|
+
cause?: unknown;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export declare class RateLimitError extends PlatformError {
|
|
43
|
+
/** Seconds the consumer should back off (from `Retry-After`). */
|
|
44
|
+
readonly retryAfter?: number;
|
|
45
|
+
constructor(message?: string, opts?: {
|
|
46
|
+
retryAfter?: number;
|
|
47
|
+
cause?: unknown;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Thrown when the SDK detects an expired access token before the request
|
|
52
|
+
* is sent. Callers using a static externally-supplied token must update
|
|
53
|
+
* the config with a fresh one.
|
|
54
|
+
*/
|
|
55
|
+
export declare class TokenExpiredError extends PlatformError {
|
|
56
|
+
constructor(message?: string);
|
|
57
|
+
}
|
|
58
|
+
/** Thrown for missing / inconsistent SDK configuration. */
|
|
59
|
+
export declare class ConfigError extends PlatformError {
|
|
60
|
+
constructor(message: string);
|
|
61
|
+
}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigError = exports.TokenExpiredError = exports.RateLimitError = exports.ValidationError = exports.NotFoundError = exports.AuthorizationError = exports.AuthenticationError = exports.PlatformError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Platform-SDK error hierarchy. Consumers should `instanceof`-check
|
|
6
|
+
* against `PlatformError` for the catch-all and the specific subclasses
|
|
7
|
+
* for the cases they care about. Status codes mirror the HTTP responses
|
|
8
|
+
* the platform API actually emits, so `error.status` is the simplest
|
|
9
|
+
* routing signal.
|
|
10
|
+
*/
|
|
11
|
+
class PlatformError extends Error {
|
|
12
|
+
status;
|
|
13
|
+
cause;
|
|
14
|
+
constructor(message, opts) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = 'PlatformError';
|
|
17
|
+
this.status = opts?.status;
|
|
18
|
+
this.cause = opts?.cause;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.PlatformError = PlatformError;
|
|
22
|
+
class AuthenticationError extends PlatformError {
|
|
23
|
+
constructor(message = 'authentication failed', opts) {
|
|
24
|
+
super(message, { status: 401, cause: opts?.cause });
|
|
25
|
+
this.name = 'AuthenticationError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.AuthenticationError = AuthenticationError;
|
|
29
|
+
class AuthorizationError extends PlatformError {
|
|
30
|
+
/** When the API returns a `requiredScope`, surface it for the consumer. */
|
|
31
|
+
requiredScope;
|
|
32
|
+
constructor(message = 'authorization failed', opts) {
|
|
33
|
+
super(message, { status: 403, cause: opts?.cause });
|
|
34
|
+
this.name = 'AuthorizationError';
|
|
35
|
+
this.requiredScope = opts?.requiredScope;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.AuthorizationError = AuthorizationError;
|
|
39
|
+
class NotFoundError extends PlatformError {
|
|
40
|
+
constructor(message = 'not found', opts) {
|
|
41
|
+
super(message, { status: 404, cause: opts?.cause });
|
|
42
|
+
this.name = 'NotFoundError';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.NotFoundError = NotFoundError;
|
|
46
|
+
class ValidationError extends PlatformError {
|
|
47
|
+
/** Per-field issues in the platform's standard `issues` array shape. */
|
|
48
|
+
issues;
|
|
49
|
+
constructor(message = 'validation failed', opts) {
|
|
50
|
+
super(message, { status: 422, cause: opts?.cause });
|
|
51
|
+
this.name = 'ValidationError';
|
|
52
|
+
this.issues = opts?.issues;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.ValidationError = ValidationError;
|
|
56
|
+
class RateLimitError extends PlatformError {
|
|
57
|
+
/** Seconds the consumer should back off (from `Retry-After`). */
|
|
58
|
+
retryAfter;
|
|
59
|
+
constructor(message = 'rate limited', opts) {
|
|
60
|
+
super(message, { status: 429, cause: opts?.cause });
|
|
61
|
+
this.name = 'RateLimitError';
|
|
62
|
+
this.retryAfter = opts?.retryAfter;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.RateLimitError = RateLimitError;
|
|
66
|
+
/**
|
|
67
|
+
* Thrown when the SDK detects an expired access token before the request
|
|
68
|
+
* is sent. Callers using a static externally-supplied token must update
|
|
69
|
+
* the config with a fresh one.
|
|
70
|
+
*/
|
|
71
|
+
class TokenExpiredError extends PlatformError {
|
|
72
|
+
constructor(message = 'access token has expired') {
|
|
73
|
+
super(message, { status: 401 });
|
|
74
|
+
this.name = 'TokenExpiredError';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.TokenExpiredError = TokenExpiredError;
|
|
78
|
+
/** Thrown for missing / inconsistent SDK configuration. */
|
|
79
|
+
class ConfigError extends PlatformError {
|
|
80
|
+
constructor(message) {
|
|
81
|
+
super(message);
|
|
82
|
+
this.name = 'ConfigError';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.ConfigError = ConfigError;
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxLQUFLO0lBQzdCLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQVc7SUFDekIsWUFBWSxPQUFlLEVBQUUsSUFBMkM7UUFDdEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFURCxzQ0FTQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsYUFBYTtJQUNwRCxZQUFZLE9BQU8sR0FBRyx1QkFBdUIsRUFBRSxJQUEwQjtRQUN2RSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFMRCxrREFLQztBQUVELE1BQWEsa0JBQW1CLFNBQVEsYUFBYTtJQUNuRCwyRUFBMkU7SUFDbEUsYUFBYSxDQUFVO0lBQ2hDLFlBQ0UsT0FBTyxHQUFHLHNCQUFzQixFQUNoQyxJQUFrRDtRQUVsRCxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksRUFBRSxhQUFhLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBWEQsZ0RBV0M7QUFFRCxNQUFhLGFBQWMsU0FBUSxhQUFhO0lBQzlDLFlBQVksT0FBTyxHQUFHLFdBQVcsRUFBRSxJQUEwQjtRQUMzRCxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsc0NBS0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsYUFBYTtJQUNoRCx3RUFBd0U7SUFDL0QsTUFBTSxDQUFhO0lBQzVCLFlBQVksT0FBTyxHQUFHLG1CQUFtQixFQUFFLElBQThDO1FBQ3ZGLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFSRCwwQ0FRQztBQUVELE1BQWEsY0FBZSxTQUFRLGFBQWE7SUFDL0MsaUVBQWlFO0lBQ3hELFVBQVUsQ0FBVTtJQUM3QixZQUFZLE9BQU8sR0FBRyxjQUFjLEVBQUUsSUFBK0M7UUFDbkYsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQVJELHdDQVFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsYUFBYTtJQUNsRCxZQUFZLE9BQU8sR0FBRywwQkFBMEI7UUFDOUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTEQsOENBS0M7QUFFRCwyREFBMkQ7QUFDM0QsTUFBYSxXQUFZLFNBQVEsYUFBYTtJQUM1QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBTEQsa0NBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBsYXRmb3JtLVNESyBlcnJvciBoaWVyYXJjaHkuIENvbnN1bWVycyBzaG91bGQgYGluc3RhbmNlb2ZgLWNoZWNrXG4gKiBhZ2FpbnN0IGBQbGF0Zm9ybUVycm9yYCBmb3IgdGhlIGNhdGNoLWFsbCBhbmQgdGhlIHNwZWNpZmljIHN1YmNsYXNzZXNcbiAqIGZvciB0aGUgY2FzZXMgdGhleSBjYXJlIGFib3V0LiBTdGF0dXMgY29kZXMgbWlycm9yIHRoZSBIVFRQIHJlc3BvbnNlc1xuICogdGhlIHBsYXRmb3JtIEFQSSBhY3R1YWxseSBlbWl0cywgc28gYGVycm9yLnN0YXR1c2AgaXMgdGhlIHNpbXBsZXN0XG4gKiByb3V0aW5nIHNpZ25hbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsYXRmb3JtRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY2F1c2U/OiB1bmtub3duO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiB7IHN0YXR1cz86IG51bWJlcjsgY2F1c2U/OiB1bmtub3duIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnUGxhdGZvcm1FcnJvcic7XG4gICAgdGhpcy5zdGF0dXMgPSBvcHRzPy5zdGF0dXM7XG4gICAgdGhpcy5jYXVzZSA9IG9wdHM/LmNhdXNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yIGV4dGVuZHMgUGxhdGZvcm1FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnYXV0aGVudGljYXRpb24gZmFpbGVkJywgb3B0cz86IHsgY2F1c2U/OiB1bmtub3duIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDAxLCBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ0F1dGhlbnRpY2F0aW9uRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgLyoqIFdoZW4gdGhlIEFQSSByZXR1cm5zIGEgYHJlcXVpcmVkU2NvcGVgLCBzdXJmYWNlIGl0IGZvciB0aGUgY29uc3VtZXIuICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkU2NvcGU/OiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2UgPSAnYXV0aG9yaXphdGlvbiBmYWlsZWQnLFxuICAgIG9wdHM/OiB7IHJlcXVpcmVkU2NvcGU/OiBzdHJpbmc7IGNhdXNlPzogdW5rbm93biB9LFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHN0YXR1czogNDAzLCBjYXVzZTogb3B0cz8uY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gJ0F1dGhvcml6YXRpb25FcnJvcic7XG4gICAgdGhpcy5yZXF1aXJlZFNjb3BlID0gb3B0cz8ucmVxdWlyZWRTY29wZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ25vdCBmb3VuZCcsIG9wdHM/OiB7IGNhdXNlPzogdW5rbm93biB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQwNCwgY2F1c2U6IG9wdHM/LmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdOb3RGb3VuZEVycm9yJztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgUGxhdGZvcm1FcnJvciB7XG4gIC8qKiBQZXItZmllbGQgaXNzdWVzIGluIHRoZSBwbGF0Zm9ybSdzIHN0YW5kYXJkIGBpc3N1ZXNgIGFycmF5IHNoYXBlLiAqL1xuICByZWFkb25seSBpc3N1ZXM/OiB1bmtub3duW107XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAndmFsaWRhdGlvbiBmYWlsZWQnLCBvcHRzPzogeyBpc3N1ZXM/OiB1bmtub3duW107IGNhdXNlPzogdW5rbm93biB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQyMiwgY2F1c2U6IG9wdHM/LmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdWYWxpZGF0aW9uRXJyb3InO1xuICAgIHRoaXMuaXNzdWVzID0gb3B0cz8uaXNzdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYXRlTGltaXRFcnJvciBleHRlbmRzIFBsYXRmb3JtRXJyb3Ige1xuICAvKiogU2Vjb25kcyB0aGUgY29uc3VtZXIgc2hvdWxkIGJhY2sgb2ZmIChmcm9tIGBSZXRyeS1BZnRlcmApLiAqL1xuICByZWFkb25seSByZXRyeUFmdGVyPzogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ3JhdGUgbGltaXRlZCcsIG9wdHM/OiB7IHJldHJ5QWZ0ZXI/OiBudW1iZXI7IGNhdXNlPzogdW5rbm93biB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQyOSwgY2F1c2U6IG9wdHM/LmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdSYXRlTGltaXRFcnJvcic7XG4gICAgdGhpcy5yZXRyeUFmdGVyID0gb3B0cz8ucmV0cnlBZnRlcjtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSBTREsgZGV0ZWN0cyBhbiBleHBpcmVkIGFjY2VzcyB0b2tlbiBiZWZvcmUgdGhlIHJlcXVlc3RcbiAqIGlzIHNlbnQuIENhbGxlcnMgdXNpbmcgYSBzdGF0aWMgZXh0ZXJuYWxseS1zdXBwbGllZCB0b2tlbiBtdXN0IHVwZGF0ZVxuICogdGhlIGNvbmZpZyB3aXRoIGEgZnJlc2ggb25lLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW5FeHBpcmVkRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdhY2Nlc3MgdG9rZW4gaGFzIGV4cGlyZWQnKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnVG9rZW5FeHBpcmVkRXJyb3InO1xuICB9XG59XG5cbi8qKiBUaHJvd24gZm9yIG1pc3NpbmcgLyBpbmNvbnNpc3RlbnQgU0RLIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgY2xhc3MgQ29uZmlnRXJyb3IgZXh0ZW5kcyBQbGF0Zm9ybUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ0Vycm9yJztcbiAgfVxufVxuIl19
|
package/dist/http.d.ts
CHANGED
|
@@ -7,9 +7,14 @@ 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
|
-
* effective auth on `config`.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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.
|
|
13
|
+
*
|
|
14
|
+
* Adds three platform-wide headers automatically:
|
|
15
|
+
* - `User-Agent` so the gateway can attribute traffic to SDK version
|
|
16
|
+
* - `Idempotency-Key` (UUID v4) on mutating methods, so callers don't
|
|
17
|
+
* have to generate one per call
|
|
18
|
+
* - `content-type: application/json` when a body is supplied
|
|
14
19
|
*/
|
|
15
|
-
export declare function buildHeaders(config: PlatformConfig, params: SignedHeaderParams): Record<string, string
|
|
20
|
+
export declare function buildHeaders(config: PlatformConfig, params: SignedHeaderParams): Promise<Record<string, string>>;
|