@opentdf/sdk 0.13.0 → 0.14.0-beta.131
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -10
- package/dist/cjs/src/access/access-rpc.js +6 -5
- package/dist/cjs/src/access.js +18 -5
- package/dist/cjs/src/auth/interceptors.js +186 -0
- package/dist/cjs/src/auth/oidc.js +5 -3
- package/dist/cjs/src/auth/token-providers.js +247 -0
- package/dist/cjs/src/index.js +16 -2
- package/dist/cjs/src/opentdf.js +40 -32
- package/dist/cjs/src/platform/authorization/entity-identifiers.js +88 -0
- package/dist/cjs/src/platform.js +3 -46
- package/dist/cjs/src/policy/api.js +9 -5
- package/dist/cjs/src/policy/discovery.js +10 -9
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/tdf3/src/client/index.js +35 -17
- package/dist/cjs/tdf3/src/tdf.js +8 -7
- package/dist/types/src/access/access-rpc.d.ts +3 -3
- package/dist/types/src/access/access-rpc.d.ts.map +1 -1
- package/dist/types/src/access.d.ts +3 -3
- package/dist/types/src/access.d.ts.map +1 -1
- package/dist/types/src/auth/interceptors.d.ts +99 -0
- package/dist/types/src/auth/interceptors.d.ts.map +1 -0
- package/dist/types/src/auth/oidc.d.ts +1 -1
- package/dist/types/src/auth/oidc.d.ts.map +1 -1
- package/dist/types/src/auth/token-providers.d.ts +100 -0
- package/dist/types/src/auth/token-providers.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/opentdf.d.ts +18 -15
- package/dist/types/src/opentdf.d.ts.map +1 -1
- package/dist/types/src/platform/authorization/entity-identifiers.d.ts +41 -0
- package/dist/types/src/platform/authorization/entity-identifiers.d.ts.map +1 -0
- package/dist/types/src/platform.d.ts +6 -3
- package/dist/types/src/platform.d.ts.map +1 -1
- package/dist/types/src/policy/api.d.ts +3 -3
- package/dist/types/src/policy/api.d.ts.map +1 -1
- package/dist/types/src/policy/discovery.d.ts +5 -5
- package/dist/types/src/policy/discovery.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/dist/types/tdf3/src/client/index.d.ts +10 -1
- package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/tdf.d.ts +5 -2
- package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
- package/dist/web/src/access/access-rpc.js +6 -5
- package/dist/web/src/access.js +18 -5
- package/dist/web/src/auth/interceptors.js +142 -0
- package/dist/web/src/auth/oidc.js +5 -3
- package/dist/web/src/auth/token-providers.js +242 -0
- package/dist/web/src/index.js +4 -1
- package/dist/web/src/opentdf.js +40 -32
- package/dist/web/src/platform/authorization/entity-identifiers.js +81 -0
- package/dist/web/src/platform.js +3 -46
- package/dist/web/src/policy/api.js +9 -5
- package/dist/web/src/policy/discovery.js +10 -9
- package/dist/web/src/version.js +1 -1
- package/dist/web/tdf3/src/client/index.js +35 -17
- package/dist/web/tdf3/src/tdf.js +8 -7
- package/package.json +1 -1
- package/src/access/access-rpc.ts +5 -5
- package/src/access.ts +29 -13
- package/src/auth/interceptors.ts +197 -0
- package/src/auth/oidc.ts +5 -3
- package/src/auth/token-providers.ts +303 -0
- package/src/index.ts +25 -0
- package/src/opentdf.ts +54 -34
- package/src/platform/authorization/entity-identifiers.ts +102 -0
- package/src/platform.ts +8 -52
- package/src/policy/api.ts +8 -5
- package/src/policy/discovery.ts +9 -9
- package/src/version.ts +1 -1
- package/tdf3/src/client/index.ts +46 -17
- package/tdf3/src/tdf.ts +14 -11
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clientCredentialsTokenProvider = clientCredentialsTokenProvider;
|
|
4
|
+
exports.refreshTokenProvider = refreshTokenProvider;
|
|
5
|
+
exports.externalJwtTokenProvider = externalJwtTokenProvider;
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
const utils_js_1 = require("../utils.js");
|
|
8
|
+
function resolveTokenEndpoint(oidcOrigin, override) {
|
|
9
|
+
if (override?.trim())
|
|
10
|
+
return override;
|
|
11
|
+
const base = oidcOrigin?.trim();
|
|
12
|
+
if (!base) {
|
|
13
|
+
throw new errors_js_1.ConfigurationError('oidcOrigin or oidcTokenEndpoint is required');
|
|
14
|
+
}
|
|
15
|
+
return `${(0, utils_js_1.rstrip)(base, '/')}/protocol/openid-connect/token`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Decode a JWT's exp claim without verifying the signature.
|
|
19
|
+
* Returns the expiration time in seconds since epoch, or undefined if not present.
|
|
20
|
+
*/
|
|
21
|
+
function getJwtExpiration(token) {
|
|
22
|
+
try {
|
|
23
|
+
const parts = token.split('.');
|
|
24
|
+
if (parts.length !== 3)
|
|
25
|
+
return undefined;
|
|
26
|
+
// Base64url decode the payload
|
|
27
|
+
const payload = parts[1].replace(/-/g, '+').replace(/_/g, '/');
|
|
28
|
+
const padded = payload + '='.repeat((4 - (payload.length % 4)) % 4);
|
|
29
|
+
const decoded = JSON.parse(atob(padded));
|
|
30
|
+
return typeof decoded.exp === 'number' ? decoded.exp : undefined;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Compute the absolute expiry (seconds since epoch) for a token response.
|
|
38
|
+
* Prefers `expires_in` from the token response, falls back to the JWT `exp` claim.
|
|
39
|
+
*/
|
|
40
|
+
function resolveTokenExpiry(accessToken, expiresIn) {
|
|
41
|
+
if (typeof expiresIn === 'number') {
|
|
42
|
+
return Date.now() / 1000 + expiresIn;
|
|
43
|
+
}
|
|
44
|
+
return getJwtExpiration(accessToken);
|
|
45
|
+
}
|
|
46
|
+
function isTokenExpired(expiry, bufferSeconds = 30) {
|
|
47
|
+
if (expiry === undefined)
|
|
48
|
+
return true;
|
|
49
|
+
return Date.now() / 1000 >= expiry - bufferSeconds;
|
|
50
|
+
}
|
|
51
|
+
async function fetchToken(tokenEndpoint, body) {
|
|
52
|
+
const response = await fetch(tokenEndpoint, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
56
|
+
Accept: 'application/json',
|
|
57
|
+
},
|
|
58
|
+
body: new URLSearchParams(body).toString(),
|
|
59
|
+
});
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
const text = await response.text();
|
|
62
|
+
throw new errors_js_1.TdfError(`Token request failed: POST [${tokenEndpoint}] => ${response.status} ${response.statusText}: ${text}`);
|
|
63
|
+
}
|
|
64
|
+
return (await response.json());
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Creates a TokenProvider that obtains tokens via the OAuth2 client credentials grant.
|
|
68
|
+
* Tokens are cached and automatically refreshed when expired.
|
|
69
|
+
*
|
|
70
|
+
* **Not for browser use.** Client secrets must not be exposed in client-side code.
|
|
71
|
+
* Use this only in server-side (Node.js/Deno) environments.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const client = new OpenTDF({
|
|
76
|
+
* interceptors: [authTokenInterceptor(clientCredentialsTokenProvider({
|
|
77
|
+
* clientId: 'opentdf',
|
|
78
|
+
* clientSecret: 'secret',
|
|
79
|
+
* oidcOrigin: 'http://localhost:8080/auth/realms/opentdf',
|
|
80
|
+
* }))],
|
|
81
|
+
* platformUrl: 'http://localhost:8080',
|
|
82
|
+
* });
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
function clientCredentialsTokenProvider(options) {
|
|
86
|
+
if (!options.clientId || !options.clientSecret) {
|
|
87
|
+
throw new errors_js_1.ConfigurationError('clientId and clientSecret are required');
|
|
88
|
+
}
|
|
89
|
+
const tokenEndpoint = resolveTokenEndpoint(options.oidcOrigin, options.oidcTokenEndpoint);
|
|
90
|
+
let cachedToken;
|
|
91
|
+
let cachedExpiry;
|
|
92
|
+
let inFlight;
|
|
93
|
+
return async () => {
|
|
94
|
+
if (cachedToken && !isTokenExpired(cachedExpiry)) {
|
|
95
|
+
return cachedToken;
|
|
96
|
+
}
|
|
97
|
+
if (!inFlight) {
|
|
98
|
+
inFlight = (async () => {
|
|
99
|
+
try {
|
|
100
|
+
const resp = await fetchToken(tokenEndpoint, {
|
|
101
|
+
grant_type: 'client_credentials',
|
|
102
|
+
client_id: options.clientId,
|
|
103
|
+
client_secret: options.clientSecret,
|
|
104
|
+
});
|
|
105
|
+
cachedToken = resp.access_token;
|
|
106
|
+
cachedExpiry = resolveTokenExpiry(resp.access_token, resp.expires_in);
|
|
107
|
+
return cachedToken;
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
inFlight = undefined;
|
|
111
|
+
}
|
|
112
|
+
})();
|
|
113
|
+
}
|
|
114
|
+
return inFlight;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Creates a TokenProvider that uses a refresh token to obtain access tokens.
|
|
119
|
+
* On the first call, exchanges the refresh token. Subsequent calls use the
|
|
120
|
+
* latest refresh token from the IdP response.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts
|
|
124
|
+
* const client = new OpenTDF({
|
|
125
|
+
* interceptors: [authTokenInterceptor(refreshTokenProvider({
|
|
126
|
+
* clientId: 'my-app',
|
|
127
|
+
* refreshToken: 'refresh-token-from-login',
|
|
128
|
+
* oidcOrigin: 'http://localhost:8080/auth/realms/opentdf',
|
|
129
|
+
* }))],
|
|
130
|
+
* platformUrl: 'http://localhost:8080',
|
|
131
|
+
* });
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
function refreshTokenProvider(options) {
|
|
135
|
+
if (!options.clientId || !options.refreshToken) {
|
|
136
|
+
throw new errors_js_1.ConfigurationError('clientId and refreshToken are required');
|
|
137
|
+
}
|
|
138
|
+
const tokenEndpoint = resolveTokenEndpoint(options.oidcOrigin, options.oidcTokenEndpoint);
|
|
139
|
+
let currentRefreshToken = options.refreshToken;
|
|
140
|
+
let cachedToken;
|
|
141
|
+
let cachedExpiry;
|
|
142
|
+
let inFlight;
|
|
143
|
+
return async () => {
|
|
144
|
+
if (cachedToken && !isTokenExpired(cachedExpiry)) {
|
|
145
|
+
return cachedToken;
|
|
146
|
+
}
|
|
147
|
+
if (!inFlight) {
|
|
148
|
+
inFlight = (async () => {
|
|
149
|
+
try {
|
|
150
|
+
const resp = await fetchToken(tokenEndpoint, {
|
|
151
|
+
grant_type: 'refresh_token',
|
|
152
|
+
refresh_token: currentRefreshToken,
|
|
153
|
+
client_id: options.clientId,
|
|
154
|
+
});
|
|
155
|
+
cachedToken = resp.access_token;
|
|
156
|
+
cachedExpiry = resolveTokenExpiry(resp.access_token, resp.expires_in);
|
|
157
|
+
if (resp.refresh_token) {
|
|
158
|
+
currentRefreshToken = resp.refresh_token;
|
|
159
|
+
}
|
|
160
|
+
return cachedToken;
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
inFlight = undefined;
|
|
164
|
+
}
|
|
165
|
+
})();
|
|
166
|
+
}
|
|
167
|
+
return inFlight;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Creates a TokenProvider that exchanges an external JWT for a platform token
|
|
172
|
+
* via RFC 8693 token exchange. After the initial exchange, uses the refresh
|
|
173
|
+
* token for subsequent calls.
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```ts
|
|
177
|
+
* const client = new OpenTDF({
|
|
178
|
+
* interceptors: [authTokenInterceptor(externalJwtTokenProvider({
|
|
179
|
+
* clientId: 'my-app',
|
|
180
|
+
* externalJwt: 'eyJhbGciOi...',
|
|
181
|
+
* oidcOrigin: 'http://localhost:8080/auth/realms/opentdf',
|
|
182
|
+
* }))],
|
|
183
|
+
* platformUrl: 'http://localhost:8080',
|
|
184
|
+
* });
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
function externalJwtTokenProvider(options) {
|
|
188
|
+
if (!options.clientId || !options.externalJwt) {
|
|
189
|
+
throw new errors_js_1.ConfigurationError('clientId and externalJwt are required');
|
|
190
|
+
}
|
|
191
|
+
const tokenEndpoint = resolveTokenEndpoint(options.oidcOrigin, options.oidcTokenEndpoint);
|
|
192
|
+
let cachedToken;
|
|
193
|
+
let cachedExpiry;
|
|
194
|
+
let currentRefreshToken;
|
|
195
|
+
let initialExchangeDone = false;
|
|
196
|
+
let inFlight;
|
|
197
|
+
return async () => {
|
|
198
|
+
if (cachedToken && !isTokenExpired(cachedExpiry)) {
|
|
199
|
+
return cachedToken;
|
|
200
|
+
}
|
|
201
|
+
if (!inFlight) {
|
|
202
|
+
inFlight = (async () => {
|
|
203
|
+
try {
|
|
204
|
+
let resp;
|
|
205
|
+
if (!initialExchangeDone) {
|
|
206
|
+
resp = await fetchToken(tokenEndpoint, {
|
|
207
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
|
|
208
|
+
subject_token: options.externalJwt,
|
|
209
|
+
subject_token_type: 'urn:ietf:params:oauth:token-type:jwt',
|
|
210
|
+
audience: options.clientId,
|
|
211
|
+
client_id: options.clientId,
|
|
212
|
+
});
|
|
213
|
+
initialExchangeDone = true;
|
|
214
|
+
}
|
|
215
|
+
else if (currentRefreshToken) {
|
|
216
|
+
resp = await fetchToken(tokenEndpoint, {
|
|
217
|
+
grant_type: 'refresh_token',
|
|
218
|
+
refresh_token: currentRefreshToken,
|
|
219
|
+
client_id: options.clientId,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Re-exchange the original JWT if no refresh token available
|
|
224
|
+
resp = await fetchToken(tokenEndpoint, {
|
|
225
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
|
|
226
|
+
subject_token: options.externalJwt,
|
|
227
|
+
subject_token_type: 'urn:ietf:params:oauth:token-type:jwt',
|
|
228
|
+
audience: options.clientId,
|
|
229
|
+
client_id: options.clientId,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
cachedToken = resp.access_token;
|
|
233
|
+
cachedExpiry = resolveTokenExpiry(resp.access_token, resp.expires_in);
|
|
234
|
+
if (resp.refresh_token) {
|
|
235
|
+
currentRefreshToken = resp.refresh_token;
|
|
236
|
+
}
|
|
237
|
+
return cachedToken;
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
inFlight = undefined;
|
|
241
|
+
}
|
|
242
|
+
})();
|
|
243
|
+
}
|
|
244
|
+
return inFlight;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F1dGgvdG9rZW4tcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMElBLHdFQWlDQztBQW1CRCxvREFtQ0M7QUFtQkQsNERBMERDO0FBN1NELDRDQUE0RDtBQUM1RCwwQ0FBcUM7QUFxRHJDLFNBQVMsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxRQUFpQjtJQUNqRSxJQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLDhCQUFrQixDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxJQUFBLGlCQUFNLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFhO0lBQ3JDLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN6QywrQkFBK0I7UUFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMs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
|
package/dist/cjs/src/index.js
CHANGED
|
@@ -36,13 +36,27 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
36
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.ConfigurationError = exports.AttributeNotFoundError = exports.AttributeValidationError = exports.NetworkError = exports.DecryptError = exports.InvalidFileError = exports.IntegrityError = exports.PermissionDeniedError = exports.TdfError = exports.PlatformClient = exports.tdfSpecVersion = exports.clientType = exports.version = exports.attributeValueExists = exports.attributeExists = exports.validateAttributes = exports.listAttributes = exports.attributeFQNsAsValues = exports.AuthProviders = exports.withHeaders = exports.HttpRequest = void 0;
|
|
39
|
+
exports.ConfigurationError = exports.AttributeNotFoundError = exports.AttributeValidationError = exports.NetworkError = exports.DecryptError = exports.InvalidFileError = exports.IntegrityError = exports.PermissionDeniedError = exports.TdfError = exports.PlatformClient = exports.tdfSpecVersion = exports.clientType = exports.version = exports.attributeValueExists = exports.attributeExists = exports.validateAttributes = exports.listAttributes = exports.withRequestToken = exports.forToken = exports.forUserName = exports.forClientId = exports.forEmail = exports.attributeFQNsAsValues = exports.externalJwtTokenProvider = exports.refreshTokenProvider = exports.clientCredentialsTokenProvider = exports.authProviderInterceptor = exports.authTokenDPoPInterceptor = exports.authTokenInterceptor = exports.AuthProviders = exports.withHeaders = exports.HttpRequest = void 0;
|
|
40
40
|
var auth_js_1 = require("./auth/auth.js");
|
|
41
41
|
Object.defineProperty(exports, "HttpRequest", { enumerable: true, get: function () { return auth_js_1.HttpRequest; } });
|
|
42
42
|
Object.defineProperty(exports, "withHeaders", { enumerable: true, get: function () { return auth_js_1.withHeaders; } });
|
|
43
43
|
exports.AuthProviders = __importStar(require("./auth/providers.js"));
|
|
44
|
+
var interceptors_js_1 = require("./auth/interceptors.js");
|
|
45
|
+
Object.defineProperty(exports, "authTokenInterceptor", { enumerable: true, get: function () { return interceptors_js_1.authTokenInterceptor; } });
|
|
46
|
+
Object.defineProperty(exports, "authTokenDPoPInterceptor", { enumerable: true, get: function () { return interceptors_js_1.authTokenDPoPInterceptor; } });
|
|
47
|
+
Object.defineProperty(exports, "authProviderInterceptor", { enumerable: true, get: function () { return interceptors_js_1.authProviderInterceptor; } });
|
|
48
|
+
var token_providers_js_1 = require("./auth/token-providers.js");
|
|
49
|
+
Object.defineProperty(exports, "clientCredentialsTokenProvider", { enumerable: true, get: function () { return token_providers_js_1.clientCredentialsTokenProvider; } });
|
|
50
|
+
Object.defineProperty(exports, "refreshTokenProvider", { enumerable: true, get: function () { return token_providers_js_1.refreshTokenProvider; } });
|
|
51
|
+
Object.defineProperty(exports, "externalJwtTokenProvider", { enumerable: true, get: function () { return token_providers_js_1.externalJwtTokenProvider; } });
|
|
44
52
|
var api_js_1 = require("./policy/api.js");
|
|
45
53
|
Object.defineProperty(exports, "attributeFQNsAsValues", { enumerable: true, get: function () { return api_js_1.attributeFQNsAsValues; } });
|
|
54
|
+
var entity_identifiers_js_1 = require("./platform/authorization/entity-identifiers.js");
|
|
55
|
+
Object.defineProperty(exports, "forEmail", { enumerable: true, get: function () { return entity_identifiers_js_1.forEmail; } });
|
|
56
|
+
Object.defineProperty(exports, "forClientId", { enumerable: true, get: function () { return entity_identifiers_js_1.forClientId; } });
|
|
57
|
+
Object.defineProperty(exports, "forUserName", { enumerable: true, get: function () { return entity_identifiers_js_1.forUserName; } });
|
|
58
|
+
Object.defineProperty(exports, "forToken", { enumerable: true, get: function () { return entity_identifiers_js_1.forToken; } });
|
|
59
|
+
Object.defineProperty(exports, "withRequestToken", { enumerable: true, get: function () { return entity_identifiers_js_1.withRequestToken; } });
|
|
46
60
|
var discovery_js_1 = require("./policy/discovery.js");
|
|
47
61
|
Object.defineProperty(exports, "listAttributes", { enumerable: true, get: function () { return discovery_js_1.listAttributes; } });
|
|
48
62
|
Object.defineProperty(exports, "validateAttributes", { enumerable: true, get: function () { return discovery_js_1.validateAttributes; } });
|
|
@@ -67,4 +81,4 @@ Object.defineProperty(exports, "AttributeNotFoundError", { enumerable: true, get
|
|
|
67
81
|
Object.defineProperty(exports, "ConfigurationError", { enumerable: true, get: function () { return errors_js_1.ConfigurationError; } });
|
|
68
82
|
__exportStar(require("./seekable.js"), exports);
|
|
69
83
|
__exportStar(require("../tdf3/src/models/index.js"), exports);
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQThGO0FBQWpELHNHQUFBLFdBQVcsT0FBQTtBQUFFLHNHQUFBLFdBQVcsT0FBQTtBQUNyRSxxRUFBcUQ7QUFDckQsMERBU2dDO0FBUjlCLHVIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLDJIQUFBLHdCQUF3QixPQUFBO0FBQ3hCLDBIQUFBLHVCQUF1QixPQUFBO0FBT3pCLGdFQU9tQztBQU5qQyxvSUFBQSw4QkFBOEIsT0FBQTtBQUM5QiwwSEFBQSxvQkFBb0IsT0FBQTtBQUNwQiw4SEFBQSx3QkFBd0IsT0FBQTtBQUsxQiwwQ0FBd0Q7QUFBL0MsK0dBQUEscUJBQXFCLE9BQUE7QUFDOUIsd0ZBTXdEO0FBTHRELGlIQUFBLFFBQVEsT0FBQTtBQUNSLG9IQUFBLFdBQVcsT0FBQTtBQUNYLG9IQUFBLFdBQVcsT0FBQTtBQUNYLGlIQUFBLFFBQVEsT0FBQTtBQUNSLHlIQUFBLGdCQUFnQixPQUFBO0FBRWxCLHNEQUsrQjtBQUo3Qiw4R0FBQSxjQUFjLE9BQUE7QUFDZCxrSEFBQSxrQkFBa0IsT0FBQTtBQUNsQiwrR0FBQSxlQUFlLE9BQUE7QUFDZixvSEFBQSxvQkFBb0IsT0FBQTtBQUV0QiwyQ0FBbUU7QUFBMUQscUdBQUEsT0FBTyxPQUFBO0FBQUUsd0dBQUEsVUFBVSxPQUFBO0FBQUUsNEdBQUEsY0FBYyxPQUFBO0FBQzVDLDZDQUFrRztBQUF6Riw2R0FBQSxjQUFjLE9BQUE7QUFDdkIsK0NBQTZCO0FBQzdCLHlDQVVxQjtBQVRuQixxR0FBQSxRQUFRLE9BQUE7QUFDUixrSEFBQSxxQkFBcUIsT0FBQTtBQUNyQiwyR0FBQSxjQUFjLE9BQUE7QUFDZCw2R0FBQSxnQkFBZ0IsT0FBQTtBQUNoQix5R0FBQSxZQUFZLE9BQUE7QUFDWix5R0FBQSxZQUFZLE9BQUE7QUFDWixxSEFBQSx3QkFBd0IsT0FBQTtBQUN4QixtSEFBQSxzQkFBc0IsT0FBQTtBQUN0QiwrR0FBQSxrQkFBa0IsT0FBQTtBQUVwQixnREFBOEI7QUFDOUIsOERBQTRDIn0=
|
package/dist/cjs/src/opentdf.js
CHANGED
|
@@ -52,18 +52,10 @@ const index_js_3 = require("./encodings/index.js");
|
|
|
52
52
|
* It also requires a platform URL to be set, which is used to fetch key access servers and policies.
|
|
53
53
|
* @example
|
|
54
54
|
* ```
|
|
55
|
-
* import {
|
|
56
|
-
*
|
|
57
|
-
* const oidcCredentials: RefreshTokenCredentials = {
|
|
58
|
-
* clientId: keycloakClientId,
|
|
59
|
-
* exchange: 'refresh',
|
|
60
|
-
* refreshToken: refreshToken,
|
|
61
|
-
* oidcOrigin: keycloakUrl,
|
|
62
|
-
* };
|
|
63
|
-
* const authProvider = await AuthProviders.refreshAuthProvider(oidcCredentials);
|
|
55
|
+
* import { authTokenInterceptor, OpenTDF } from '@opentdf/sdk';
|
|
64
56
|
*
|
|
65
57
|
* const client = new OpenTDF({
|
|
66
|
-
*
|
|
58
|
+
* interceptors: [authTokenInterceptor(() => `${myAuth.token.accessToken}`)],
|
|
67
59
|
* platformUrl: 'https://platform.example.com',
|
|
68
60
|
* });
|
|
69
61
|
*
|
|
@@ -76,8 +68,12 @@ const index_js_3 = require("./encodings/index.js");
|
|
|
76
68
|
* ```
|
|
77
69
|
*/
|
|
78
70
|
class OpenTDF {
|
|
79
|
-
constructor({ authProvider, dpopKeys, defaultCreateOptions, defaultReadOptions, disableDPoP, policyEndpoint, platformUrl, cryptoService, }) {
|
|
71
|
+
constructor({ authProvider, interceptors, dpopKeys, defaultCreateOptions, defaultReadOptions, disableDPoP, policyEndpoint, platformUrl, cryptoService, }) {
|
|
72
|
+
if (!authProvider && !interceptors?.length) {
|
|
73
|
+
throw new errors_js_1.ConfigurationError('Either authProvider or interceptors must be provided.');
|
|
74
|
+
}
|
|
80
75
|
this.authProvider = authProvider;
|
|
76
|
+
this.interceptors = interceptors;
|
|
81
77
|
this.defaultCreateOptions = defaultCreateOptions || {};
|
|
82
78
|
this.defaultReadOptions = defaultReadOptions || {};
|
|
83
79
|
this.dpopEnabled = !disableDPoP;
|
|
@@ -93,6 +89,7 @@ class OpenTDF {
|
|
|
93
89
|
this.dpopKeys = dpopKeys ?? this.cryptoService.generateSigningKeyPair();
|
|
94
90
|
this.tdf3Client = new index_js_2.Client({
|
|
95
91
|
authProvider,
|
|
92
|
+
interceptors,
|
|
96
93
|
dpopEnabled: this.dpopEnabled,
|
|
97
94
|
dpopKeys: this.dpopEnabled ? this.dpopKeys : undefined,
|
|
98
95
|
kasEndpoint: this.platformUrl || 'https://disallow.all.invalid',
|
|
@@ -100,21 +97,32 @@ class OpenTDF {
|
|
|
100
97
|
policyEndpoint,
|
|
101
98
|
cryptoService: this.cryptoService,
|
|
102
99
|
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
100
|
+
if (interceptors?.length && !authProvider) {
|
|
101
|
+
// Interceptor path: no updateClientPublicKey needed.
|
|
102
|
+
// DPoP key binding is handled by the interceptor itself.
|
|
103
|
+
this.ready = Promise.resolve();
|
|
104
|
+
}
|
|
105
|
+
else if (authProvider) {
|
|
106
|
+
// Legacy AuthProvider path: eagerly bind DPoP keys to the auth provider
|
|
107
|
+
// so PlatformClient can make gRPC calls without waiting for a TDF
|
|
108
|
+
// operation first.
|
|
109
|
+
// Note: TDF3Client.createSessionKeys() also calls updateClientPublicKey
|
|
110
|
+
// with the same keys, but the duplicate call is benign —
|
|
111
|
+
// refreshTokenClaimsWithClientPubkeyIfNeeded short-circuits when
|
|
112
|
+
// the signing key hasn't changed.
|
|
113
|
+
this.ready = this.dpopEnabled
|
|
114
|
+
? this.dpopKeys.then((keys) => authProvider.updateClientPublicKey(keys))
|
|
115
|
+
: Promise.resolve();
|
|
116
|
+
// Prevent unhandled rejection if caller doesn't await ready.
|
|
117
|
+
// The error will still surface via TDF3Client's own key binding
|
|
118
|
+
// when encrypt/decrypt is called.
|
|
119
|
+
this.ready.catch((err) => {
|
|
120
|
+
console.warn('OpenTDF: DPoP key binding failed during initialization:', err);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
this.ready = Promise.resolve();
|
|
125
|
+
}
|
|
118
126
|
}
|
|
119
127
|
/** Creates a new TDF stream. */
|
|
120
128
|
async createTDF(opts) {
|
|
@@ -243,21 +251,21 @@ class ZTDFReader {
|
|
|
243
251
|
throw new errors_js_1.ConfigurationError('platformUrl is required when allowedKasEndpoints is empty');
|
|
244
252
|
}
|
|
245
253
|
const dpopKeys = await this.client.dpopKeys;
|
|
246
|
-
const {
|
|
247
|
-
if (!
|
|
248
|
-
throw new errors_js_1.ConfigurationError('authProvider
|
|
254
|
+
const { auth, cryptoService } = this.client;
|
|
255
|
+
if (!auth) {
|
|
256
|
+
throw new errors_js_1.ConfigurationError('authProvider or interceptors are required');
|
|
249
257
|
}
|
|
250
258
|
let allowList;
|
|
251
259
|
if (this.opts.allowedKASEndpoints?.length || this.opts.ignoreAllowlist) {
|
|
252
260
|
allowList = new access_js_1.OriginAllowList(this.opts.allowedKASEndpoints || [], this.opts.ignoreAllowlist);
|
|
253
261
|
}
|
|
254
262
|
else if (this.opts.platformUrl) {
|
|
255
|
-
allowList = await (0, access_js_1.fetchKeyAccessServers)(this.opts.platformUrl,
|
|
263
|
+
allowList = await (0, access_js_1.fetchKeyAccessServers)(this.opts.platformUrl, auth);
|
|
256
264
|
}
|
|
257
265
|
const overview = await this.overview;
|
|
258
266
|
const oldStream = await (0, tdf_js_1.decryptStreamFrom)({
|
|
259
267
|
allowList,
|
|
260
|
-
|
|
268
|
+
auth,
|
|
261
269
|
chunker: this.source,
|
|
262
270
|
concurrencyLimit: 1,
|
|
263
271
|
cryptoService,
|
|
@@ -305,4 +313,4 @@ class ZTDFReader {
|
|
|
305
313
|
return this.requiredObligations ?? { fqns: [] };
|
|
306
314
|
}
|
|
307
315
|
}
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnRkZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVudGRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDJDQUFtRTtBQUNuRSx3REFBbUU7QUFBMUQsc0dBQUEsTUFBTSxPQUFjO0FBQzdCLCtDQUFpRjtBQUNqRiwwREFBbUU7QUFFbkUsa0ZBQW9FO0FBTXBFLDJDQUtxQjtBQTZCbkIscUdBOUJBLGdDQUFvQixPQThCQTtBQXBCdEIsK0NBSzRCO0FBQzVCLG1EQUE4QztBQXNNOUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQWEsT0FBTztJQXNCbEIsWUFBWSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsY0FBYyxFQUNkLFdBQVcsRUFDWCxhQUFhLEdBQ0U7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLElBQUksRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsSUFBSSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNoQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FDVix1SEFBdUgsQ0FDeEgsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLElBQUksb0JBQW9CLENBQUM7UUFDM0QsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxRQUFRLEdB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
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnRkZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVudGRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLDJDQUFtRTtBQUNuRSx3REFBbUU7QUFBMUQsc0dBQUEsTUFBTSxPQUFjO0FBQzdCLCtDQUFpRjtBQUNqRiwwREFBbUU7QUFFbkUsa0ZBQW9FO0FBTXBFLDJDQUtxQjtBQTZCbkIscUdBOUJBLGdDQUFvQixPQThCQTtBQXBCdEIsK0NBSzRCO0FBQzVCLG1EQUE4QztBQStNOUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFhLE9BQU87SUF3QmxCLFlBQVksRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsR0FDRTtRQUNmLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLDhCQUFrQixDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ2hDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBSSxDQUNWLHVIQUF1SCxD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
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.forEmail = forEmail;
|
|
4
|
+
exports.forClientId = forClientId;
|
|
5
|
+
exports.forUserName = forUserName;
|
|
6
|
+
exports.forToken = forToken;
|
|
7
|
+
exports.withRequestToken = withRequestToken;
|
|
8
|
+
const protobuf_1 = require("@bufbuild/protobuf");
|
|
9
|
+
const wkt_1 = require("@bufbuild/protobuf/wkt");
|
|
10
|
+
const authorization_pb_js_1 = require("./v2/authorization_pb.js");
|
|
11
|
+
const entity_pb_js_1 = require("../entity/entity_pb.js");
|
|
12
|
+
/**
|
|
13
|
+
* Convenience constructors for {@link EntityIdentifier}, mirroring the Go SDK
|
|
14
|
+
* helpers (`ForEmail`, `ForClientID`, etc.).
|
|
15
|
+
*
|
|
16
|
+
* Each function builds a complete `EntityIdentifier` so callers avoid deeply
|
|
17
|
+
* nested object literals.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* // Before
|
|
22
|
+
* const eid = create(EntityIdentifierSchema, {
|
|
23
|
+
* identifier: {
|
|
24
|
+
* case: 'entityChain',
|
|
25
|
+
* value: create(EntityChainSchema, {
|
|
26
|
+
* entities: [create(EntitySchema, {
|
|
27
|
+
* entityType: { case: 'emailAddress', value: 'jen@example.com' },
|
|
28
|
+
* category: Entity_Category.SUBJECT,
|
|
29
|
+
* })],
|
|
30
|
+
* }),
|
|
31
|
+
* },
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // After
|
|
35
|
+
* const eid = forEmail('jen@example.com');
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
/** Returns an EntityIdentifier for a subject identified by email address. */
|
|
39
|
+
function forEmail(email) {
|
|
40
|
+
return fromEntity((0, protobuf_1.create)(entity_pb_js_1.EntitySchema, {
|
|
41
|
+
entityType: { case: 'emailAddress', value: email },
|
|
42
|
+
category: entity_pb_js_1.Entity_Category.SUBJECT,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
/** Returns an EntityIdentifier for a subject identified by client ID. */
|
|
46
|
+
function forClientId(clientId) {
|
|
47
|
+
return fromEntity((0, protobuf_1.create)(entity_pb_js_1.EntitySchema, {
|
|
48
|
+
entityType: { case: 'clientId', value: clientId },
|
|
49
|
+
category: entity_pb_js_1.Entity_Category.SUBJECT,
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
/** Returns an EntityIdentifier for a subject identified by username. */
|
|
53
|
+
function forUserName(userName) {
|
|
54
|
+
return fromEntity((0, protobuf_1.create)(entity_pb_js_1.EntitySchema, {
|
|
55
|
+
entityType: { case: 'userName', value: userName },
|
|
56
|
+
category: entity_pb_js_1.Entity_Category.SUBJECT,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
/** Returns an EntityIdentifier that resolves the entity from the given JWT. */
|
|
60
|
+
function forToken(jwt) {
|
|
61
|
+
return (0, protobuf_1.create)(authorization_pb_js_1.EntityIdentifierSchema, {
|
|
62
|
+
identifier: {
|
|
63
|
+
case: 'token',
|
|
64
|
+
value: (0, protobuf_1.create)(entity_pb_js_1.TokenSchema, { jwt }),
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns an EntityIdentifier that instructs the authorization service to
|
|
70
|
+
* derive the entity from the request's Authorization header token.
|
|
71
|
+
*/
|
|
72
|
+
function withRequestToken() {
|
|
73
|
+
return (0, protobuf_1.create)(authorization_pb_js_1.EntityIdentifierSchema, {
|
|
74
|
+
identifier: {
|
|
75
|
+
case: 'withRequestToken',
|
|
76
|
+
value: (0, protobuf_1.create)(wkt_1.BoolValueSchema, { value: true }),
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function fromEntity(entity) {
|
|
81
|
+
return (0, protobuf_1.create)(authorization_pb_js_1.EntityIdentifierSchema, {
|
|
82
|
+
identifier: {
|
|
83
|
+
case: 'entityChain',
|
|
84
|
+
value: (0, protobuf_1.create)(entity_pb_js_1.EntityChainSchema, { entities: [entity] }),
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWlkZW50aWZpZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3BsYXRmb3JtL2F1dGhvcml6YXRpb24vZW50aXR5LWlkZW50aWZpZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMENBLDRCQU9DO0FBR0Qsa0NBT0M7QUFHRCxrQ0FPQztBQUdELDRCQU9DO0FBTUQsNENBT0M7QUE1RkQsaURBQTRDO0FBQzVDLGdEQUF5RDtBQUN6RCxrRUFHa0M7QUFDbEMseURBTWdDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBRUgsNkVBQTZFO0FBQzdFLFNBQWdCLFFBQVEsQ0FBQyxLQUFhO0lBQ3BDLE9BQU8sVUFBVSxDQUNmLElBQUEsaUJBQU0sRUFBQywyQkFBWSxFQUFFO1FBQ25CLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtRQUNsRCxRQUFRLEVBQUUsOEJBQWUsQ0FBQyxPQUFPO0tBQ2xDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxTQUFnQixXQUFXLENBQUMsUUFBZ0I7SUFDMUMsT0FBTyxVQUFVLENBQ2YsSUFBQSxpQkFBTSxFQUFDLDJCQUFZLEVBQUU7UUFDbkIsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQ2pELFFBQVEsRUFBRSw4QkFBZSxDQUFDLE9BQU87S0FDbEMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLFNBQWdCLFdBQVcsQ0FBQyxRQUFnQjtJQUMxQyxPQUFPLFVBQVUsQ0FDZixJQUFBLGlCQUFNLEVBQUMsMkJBQVksRUFBRTtRQUNuQixVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7UUFDakQsUUFBUSxFQUFFLDhCQUFlLENBQUMsT0FBTztLQUNsQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsU0FBZ0IsUUFBUSxDQUFDLEdBQVc7SUFDbEMsT0FBTyxJQUFBLGlCQUFNLEVBQUMsNENBQXNCLEVBQUU7UUFDcEMsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsSUFBQSxpQkFBTSxFQUFDLDBCQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNwQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0I7SUFDOUIsT0FBTyxJQUFBLGlCQUFNLEVBQUMsNENBQXNCLEVBQUU7UUFDcEMsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixLQUFLLEVBQUUsSUFBQSxpQkFBTSxFQUFDLHFCQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDaEQ7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsTUFBYztJQUNoQyxPQUFPLElBQUEsaUJBQU0sRUFBQyw0Q0FBc0IsRUFBRTtRQUNwQyxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsYUFBYTtZQUNuQixLQUFLLEVBQUUsSUFBQSxpQkFBTSxFQUFDLGdDQUFpQixFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUN6RDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|
package/dist/cjs/src/platform.js
CHANGED
|
@@ -38,6 +38,7 @@ exports.PlatformClient = exports.platformConnect = exports.platformConnectWeb =
|
|
|
38
38
|
exports.platformConnectWeb = __importStar(require("@connectrpc/connect-web"));
|
|
39
39
|
exports.platformConnect = __importStar(require("@connectrpc/connect"));
|
|
40
40
|
const connect_web_1 = require("@connectrpc/connect-web");
|
|
41
|
+
const interceptors_js_1 = require("./auth/interceptors.js");
|
|
41
42
|
const connect_1 = require("@connectrpc/connect");
|
|
42
43
|
const wellknown_configuration_pb_js_1 = require("./platform/wellknownconfiguration/wellknown_configuration_pb.js");
|
|
43
44
|
const authorization_pb_js_1 = require("./platform/authorization/authorization_pb.js");
|
|
@@ -82,8 +83,7 @@ class PlatformClient {
|
|
|
82
83
|
constructor(options) {
|
|
83
84
|
const interceptors = [];
|
|
84
85
|
if (options.authProvider) {
|
|
85
|
-
|
|
86
|
-
interceptors.push(authInterceptor);
|
|
86
|
+
interceptors.push((0, interceptors_js_1.authProviderInterceptor)(options.authProvider));
|
|
87
87
|
}
|
|
88
88
|
if (options.interceptors?.length) {
|
|
89
89
|
interceptors.push(...options.interceptors);
|
|
@@ -114,47 +114,4 @@ class PlatformClient {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
exports.PlatformClient = PlatformClient;
|
|
117
|
-
|
|
118
|
-
* Creates an interceptor that adds authentication headers to outgoing requests.
|
|
119
|
-
*
|
|
120
|
-
* This function uses the provided `AuthProvider` to generate authentication credentials
|
|
121
|
-
* for each request. The `AuthProvider` is expected to implement a `withCreds` method
|
|
122
|
-
* that returns an object containing authentication headers. These headers are then
|
|
123
|
-
* added to the request before it is sent to the server.
|
|
124
|
-
*
|
|
125
|
-
*/
|
|
126
|
-
function createAuthInterceptor(authProvider) {
|
|
127
|
-
const authInterceptor = (next) => async (req) => {
|
|
128
|
-
const url = new URL(req.url);
|
|
129
|
-
const pathOnly = url.pathname;
|
|
130
|
-
// Signs only the path of the url in the request
|
|
131
|
-
let token;
|
|
132
|
-
try {
|
|
133
|
-
token = await authProvider.withCreds({
|
|
134
|
-
url: pathOnly,
|
|
135
|
-
method: 'POST',
|
|
136
|
-
// Start with any headers Connect already has
|
|
137
|
-
headers: {
|
|
138
|
-
...Object.fromEntries(req.header.entries()),
|
|
139
|
-
'Content-Type': 'application/json',
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
catch (err) {
|
|
144
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
145
|
-
if (msg.includes('public key') || msg.includes('updateClientPublicKey')) {
|
|
146
|
-
throw new Error('PlatformClient: DPoP key binding is not complete. ' +
|
|
147
|
-
'If you are using OpenTDF with PlatformClient, create OpenTDF first and ' +
|
|
148
|
-
'`await client.ready` before constructing PlatformClient. ' +
|
|
149
|
-
`Original error: ${msg}`);
|
|
150
|
-
}
|
|
151
|
-
throw err;
|
|
152
|
-
}
|
|
153
|
-
Object.entries(token.headers).forEach(([key, value]) => {
|
|
154
|
-
req.header.set(key, value);
|
|
155
|
-
});
|
|
156
|
-
return await next(req);
|
|
157
|
-
};
|
|
158
|
-
return authInterceptor;
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGxhdGZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLDhFQUE4RDtBQUM5RCx1RUFBdUQ7QUFFdkQseURBQWlFO0FBR2pFLGlEQUF3RTtBQUN4RSxtSEFBbUc7QUFDbkcsc0ZBQW9GO0FBQ3BGLHlGQUFpSDtBQUNqSCxpR0FBOEY7QUFDOUYsd0RBQXlEO0FBQ3pELDJFQUF3RTtBQUN4RSxvRkFBa0Y7QUFDbEYscUhBQWdIO0FBQ2hILCtGQUE0RjtBQUM1Rix1RkFBK0Y7QUFDL0Ysb0ZBQWlGO0FBQ2pGLGlIQUE4RztBQUM5RyxxR0FBa0c7QUFDbEcsa0dBQStGO0FBQy9GLHdFQUFzRTtBQWdDdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsTUFBYSxjQUFjO0lBSXpCLFlBQVksT0FBOEI7UUFDeEMsTUFBTSxZQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUV2QyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixNQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEUsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUEsb0NBQXNCLEVBQUM7WUFDdkMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQzVCLFlBQVk7U0FDYixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsRUFBRSxHQUFHO1lBQ1IsYUFBYSxFQUFFLElB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
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGxhdGZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLDhFQUE4RDtBQUM5RCx1RUFBdUQ7QUFFdkQseURBQWlFO0FBRWpFLDREQUFpRTtBQUVqRSxpREFBd0U7QUFDeEUsbUhBQW1HO0FBQ25HLHNGQUFvRjtBQUNwRix5RkFBaUg7QUFDakgsaUdBQThGO0FBQzlGLHdEQUF5RDtBQUN6RCwyRUFBd0U7QUFDeEUsb0ZBQWtGO0FBQ2xGLHFIQUFnSDtBQUNoSCwrRkFBNEY7QUFDNUYsdUZBQStGO0FBQy9GLG9GQUFpRjtBQUNqRixpSEFBOEc7QUFDOUcscUdBQWtHO0FBQ2xHLGtHQUErRjtBQUMvRix3RUFBc0U7QUFtQ3RFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUVILE1BQWEsY0FBYztJQUl6QixZQUFZLE9BQThCO1FBQ3hDLE1BQU0sWUFBWSxHQUFrQixFQUFFLENBQUM7UUFFdkMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFBLHlDQUF1QixFQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDakMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBQSxvQ0FBc0IsRUFBQztZQUN2QyxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWTtTQUNiLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxFQUFFLEdBQUc7WUFDUixhQUFhLEVBQUUsSUFBQSxzQkFBWSxFQUFDLDBDQUFvQixFQUFFLFNBQVMsQ0FBQztZQUM1RCxnQkFBZ0IsRUFBRSxJQUFBLHNCQUFZLEVBQUMsaURBQXVCLEVBQUUsU0FBUyxDQUFDO1lBQ2xFLE1BQU0sRUFBRSxJQUFBLHNCQUFZLEVBQUMseUJBQWEsRUFBRSxTQUFTLENBQUM7WUFDOUMsTUFBTSxFQUFFLElBQUEsc0JBQVksRUFBQyw2QkFBYSxFQUFFLFNBQVMsQ0FBQztZQUM5QyxVQUFVLEVBQUUsSUFBQSxzQkFBWSxFQUFDLG9DQUFpQixFQUFFLFNBQVMsQ0FBQztZQUN0RCx1QkFBdUIsRUFBRSxJQUFBLHNCQUFZLEVBQUMsaUVBQThCLEVBQUUsU0FBUyxDQUFDO1lBQ2hGLGFBQWEsRUFBRSxJQUFBLHNCQUFZLEVBQUMsMkNBQW9CLEVBQUUsU0FBUyxDQUFDO1lBQzVELFNBQVMsRUFBRSxJQUFBLHNCQUFZLEVBQUMsbUNBQWdCLEVBQUUsU0FBUyxDQUFDO1lBQ3BELFVBQVUsRUFBRSxJQUFBLHNCQUFZLEVBQUMsMkJBQWlCLEVBQUUsU0FBUyxDQUFDO1lBQ3RELG1CQUFtQixFQUFFLElBQUEsc0JBQVksRUFBQyx1REFBMEIsRUFBRSxTQUFTLENBQUM7WUFDeEUsZUFBZSxFQUFFLElBQUEsc0JBQVksRUFBQywrQ0FBc0IsRUFBRSxTQUFTLENBQUM7WUFDaEUsY0FBYyxFQUFFLElBQUEsc0JBQVksRUFBQyw2Q0FBcUIsRUFBRSxTQUFTLENBQUM7WUFDOUQsTUFBTSxFQUFFLElBQUEsc0JBQVksRUFBQyw0QkFBYSxFQUFFLFNBQVMsQ0FBQztZQUM5QyxTQUFTLEVBQUUsSUFBQSxzQkFBWSxFQUFDLGdEQUFnQixFQUFFLFNBQVMsQ0FBQztTQUNyRCxDQUFDO1FBRUYsSUFBSSxDQUFDLEVBQUUsR0FBRztZQUNSLGFBQWEsRUFBRSxJQUFBLHNCQUFZLEVBQUMsMENBQXNCLEVBQUUsU0FBUyxDQUFDO1NBQy9ELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF6Q0Qsd0NBeUNDIn0=
|