@opentdf/sdk 0.4.0-beta.4 → 0.4.0-beta.41
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/cjs/src/access/access-fetch.js +2 -1
- package/dist/cjs/src/access/access-rpc.js +11 -5
- package/dist/cjs/src/access/constants.js +6 -0
- package/dist/cjs/src/access.js +39 -4
- package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +4 -2
- package/dist/cjs/src/auth/oidc-externaljwt-provider.js +5 -3
- package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +19 -3
- package/dist/cjs/src/auth/oidc.js +9 -8
- package/dist/cjs/src/auth/providers.js +7 -1
- package/dist/cjs/src/index.js +4 -2
- package/dist/cjs/src/nanoclients.js +4 -4
- package/dist/cjs/src/nanotdf/Client.js +10 -6
- package/dist/cjs/src/opentdf.js +103 -13
- package/dist/cjs/src/platform/authorization/v2/authorization_pb.js +112 -0
- package/dist/cjs/src/platform/buf/validate/validate_pb.js +114 -170
- package/dist/cjs/src/platform/common/common_pb.js +16 -5
- package/dist/cjs/src/platform/entity/entity_pb.js +51 -0
- package/dist/cjs/src/platform/entityresolution/entity_resolution_pb.js +1 -1
- package/dist/cjs/src/platform/entityresolution/v2/entity_resolution_pb.js +49 -0
- package/dist/cjs/src/platform/google/api/annotations_pb.js +1 -1
- package/dist/cjs/src/platform/google/api/http_pb.js +3 -3
- package/dist/cjs/src/platform/kas/kas_pb.js +2 -2
- package/dist/cjs/src/platform/policy/attributes/attributes_pb.js +12 -2
- package/dist/cjs/src/platform/policy/kasregistry/key_access_server_registry_pb.js +57 -4
- package/dist/cjs/src/platform/policy/keymanagement/key_management_pb.js +2 -2
- package/dist/cjs/src/platform/policy/namespaces/namespaces_pb.js +31 -4
- package/dist/cjs/src/platform/policy/objects_pb.js +116 -42
- package/dist/cjs/src/platform/policy/obligations/obligations_pb.js +159 -0
- package/dist/cjs/src/platform/policy/registeredresources/registered_resources_pb.js +20 -15
- package/dist/cjs/src/platform/policy/resourcemapping/resource_mapping_pb.js +2 -3
- package/dist/cjs/src/platform/policy/selectors_pb.js +1 -1
- package/dist/cjs/src/platform/policy/subjectmapping/subject_mapping_pb.js +2 -3
- package/dist/cjs/src/platform/policy/unsafe/unsafe_pb.js +2 -4
- package/dist/cjs/src/platform.js +20 -3
- package/dist/cjs/src/policy/api.js +27 -7
- package/dist/cjs/src/policy/granter.js +75 -48
- package/dist/cjs/src/seekable.js +32 -1
- package/dist/cjs/src/utils.js +85 -3
- package/dist/cjs/tdf3/src/assertions.js +39 -2
- package/dist/cjs/tdf3/src/client/DecoratedReadableStream.js +8 -1
- package/dist/cjs/tdf3/src/client/builders.js +13 -1
- package/dist/cjs/tdf3/src/client/index.js +213 -54
- package/dist/cjs/tdf3/src/client/validation.js +3 -3
- package/dist/cjs/tdf3/src/tdf.js +42 -9
- package/dist/cjs/tdf3/src/utils/unwrap.js +2 -2
- package/dist/types/src/access/access-fetch.d.ts +1 -0
- package/dist/types/src/access/access-fetch.d.ts.map +1 -1
- package/dist/types/src/access/access-rpc.d.ts +2 -1
- package/dist/types/src/access/access-rpc.d.ts.map +1 -1
- package/dist/types/src/access/constants.d.ts +3 -0
- package/dist/types/src/access/constants.d.ts.map +1 -0
- package/dist/types/src/access.d.ts +30 -1
- package/dist/types/src/access.d.ts.map +1 -1
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +1 -1
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -1
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +1 -1
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -1
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +15 -1
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -1
- package/dist/types/src/auth/oidc.d.ts +4 -0
- package/dist/types/src/auth/oidc.d.ts.map +1 -1
- package/dist/types/src/auth/providers.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/nanotdf/Client.d.ts +8 -1
- package/dist/types/src/nanotdf/Client.d.ts.map +1 -1
- package/dist/types/src/opentdf.d.ts +137 -6
- package/dist/types/src/opentdf.d.ts.map +1 -1
- package/dist/types/src/platform/authorization/v2/authorization_pb.d.ts +439 -0
- package/dist/types/src/platform/authorization/v2/authorization_pb.d.ts.map +1 -0
- package/dist/types/src/platform/buf/validate/validate_pb.d.ts +495 -370
- package/dist/types/src/platform/buf/validate/validate_pb.d.ts.map +1 -1
- package/dist/types/src/platform/common/common_pb.d.ts +36 -0
- package/dist/types/src/platform/common/common_pb.d.ts.map +1 -1
- package/dist/types/src/platform/entity/entity_pb.d.ts +130 -0
- package/dist/types/src/platform/entity/entity_pb.d.ts.map +1 -0
- package/dist/types/src/platform/entityresolution/entity_resolution_pb.d.ts +4 -0
- package/dist/types/src/platform/entityresolution/entity_resolution_pb.d.ts.map +1 -1
- package/dist/types/src/platform/entityresolution/v2/entity_resolution_pb.d.ts +136 -0
- package/dist/types/src/platform/entityresolution/v2/entity_resolution_pb.d.ts.map +1 -0
- package/dist/types/src/platform/google/api/http_pb.d.ts.map +1 -1
- package/dist/types/src/platform/kas/kas_pb.d.ts +5 -0
- package/dist/types/src/platform/kas/kas_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/attributes/attributes_pb.d.ts +44 -13
- package/dist/types/src/platform/policy/attributes/attributes_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +329 -24
- package/dist/types/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/keymanagement/key_management_pb.d.ts +20 -1
- package/dist/types/src/platform/policy/keymanagement/key_management_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/namespaces/namespaces_pb.d.ts +143 -5
- package/dist/types/src/platform/policy/namespaces/namespaces_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/objects_pb.d.ts +382 -33
- package/dist/types/src/platform/policy/objects_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/obligations/obligations_pb.d.ts +670 -0
- package/dist/types/src/platform/policy/obligations/obligations_pb.d.ts.map +1 -0
- package/dist/types/src/platform/policy/registeredresources/registered_resources_pb.d.ts +67 -0
- package/dist/types/src/platform/policy/registeredresources/registered_resources_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/selectors_pb.d.ts +18 -0
- package/dist/types/src/platform/policy/selectors_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts.map +1 -1
- package/dist/types/src/platform/policy/unsafe/unsafe_pb.d.ts +18 -4
- package/dist/types/src/platform/policy/unsafe/unsafe_pb.d.ts.map +1 -1
- package/dist/types/src/platform.d.ts +21 -0
- package/dist/types/src/platform.d.ts.map +1 -1
- package/dist/types/src/policy/api.d.ts +2 -0
- package/dist/types/src/policy/api.d.ts.map +1 -1
- package/dist/types/src/policy/granter.d.ts +11 -6
- package/dist/types/src/policy/granter.d.ts.map +1 -1
- package/dist/types/src/seekable.d.ts +31 -0
- package/dist/types/src/seekable.d.ts.map +1 -1
- package/dist/types/src/utils.d.ts +61 -2
- package/dist/types/src/utils.d.ts.map +1 -1
- package/dist/types/tdf3/src/assertions.d.ts +4 -0
- package/dist/types/tdf3/src/assertions.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +6 -0
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/builders.d.ts +14 -0
- package/dist/types/tdf3/src/client/builders.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/index.d.ts +25 -4
- package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/validation.d.ts +3 -3
- package/dist/types/tdf3/src/client/validation.d.ts.map +1 -1
- package/dist/types/tdf3/src/tdf.d.ts +3 -1
- package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
- package/dist/types/tdf3/src/utils/unwrap.d.ts.map +1 -1
- package/dist/web/src/access/access-fetch.js +2 -1
- package/dist/web/src/access/access-rpc.js +11 -5
- package/dist/web/src/access/constants.js +3 -0
- package/dist/web/src/access.js +37 -3
- package/dist/web/src/auth/oidc-clientcredentials-provider.js +4 -2
- package/dist/web/src/auth/oidc-externaljwt-provider.js +5 -3
- package/dist/web/src/auth/oidc-refreshtoken-provider.js +19 -3
- package/dist/web/src/auth/oidc.js +9 -8
- package/dist/web/src/auth/providers.js +7 -1
- package/dist/web/src/index.js +2 -1
- package/dist/web/src/nanoclients.js +4 -4
- package/dist/web/src/nanotdf/Client.js +11 -7
- package/dist/web/src/opentdf.js +103 -13
- package/dist/web/src/platform/authorization/v2/authorization_pb.js +109 -0
- package/dist/web/src/platform/buf/validate/validate_pb.js +113 -169
- package/dist/web/src/platform/common/common_pb.js +15 -4
- package/dist/web/src/platform/entity/entity_pb.js +48 -0
- package/dist/web/src/platform/entityresolution/entity_resolution_pb.js +1 -1
- package/dist/web/src/platform/entityresolution/v2/entity_resolution_pb.js +46 -0
- package/dist/web/src/platform/google/api/annotations_pb.js +1 -1
- package/dist/web/src/platform/google/api/http_pb.js +3 -3
- package/dist/web/src/platform/kas/kas_pb.js +2 -2
- package/dist/web/src/platform/policy/attributes/attributes_pb.js +12 -2
- package/dist/web/src/platform/policy/kasregistry/key_access_server_registry_pb.js +55 -3
- package/dist/web/src/platform/policy/keymanagement/key_management_pb.js +2 -2
- package/dist/web/src/platform/policy/namespaces/namespaces_pb.js +30 -3
- package/dist/web/src/platform/policy/objects_pb.js +114 -41
- package/dist/web/src/platform/policy/obligations/obligations_pb.js +156 -0
- package/dist/web/src/platform/policy/registeredresources/registered_resources_pb.js +19 -14
- package/dist/web/src/platform/policy/resourcemapping/resource_mapping_pb.js +2 -3
- package/dist/web/src/platform/policy/selectors_pb.js +1 -1
- package/dist/web/src/platform/policy/subjectmapping/subject_mapping_pb.js +2 -3
- package/dist/web/src/platform/policy/unsafe/unsafe_pb.js +2 -4
- package/dist/web/src/platform.js +20 -3
- package/dist/web/src/policy/api.js +26 -7
- package/dist/web/src/policy/granter.js +75 -48
- package/dist/web/src/seekable.js +32 -1
- package/dist/web/src/utils.js +84 -3
- package/dist/web/tdf3/src/assertions.js +38 -2
- package/dist/web/tdf3/src/client/DecoratedReadableStream.js +8 -1
- package/dist/web/tdf3/src/client/builders.js +13 -1
- package/dist/web/tdf3/src/client/index.js +215 -57
- package/dist/web/tdf3/src/client/validation.js +3 -3
- package/dist/web/tdf3/src/tdf.js +42 -9
- package/dist/web/tdf3/src/utils/unwrap.js +2 -2
- package/package.json +7 -5
- package/src/access/access-fetch.ts +1 -0
- package/src/access/access-rpc.ts +13 -4
- package/src/access/constants.ts +2 -0
- package/src/access.ts +54 -2
- package/src/auth/oidc-clientcredentials-provider.ts +4 -0
- package/src/auth/oidc-externaljwt-provider.ts +5 -1
- package/src/auth/oidc-refreshtoken-provider.ts +19 -1
- package/src/auth/oidc.ts +12 -7
- package/src/auth/providers.ts +6 -0
- package/src/index.ts +1 -0
- package/src/nanoclients.ts +3 -3
- package/src/nanotdf/Client.ts +28 -6
- package/src/opentdf.ts +206 -73
- package/src/platform/authorization/v2/authorization_pb.ts +503 -0
- package/src/platform/buf/validate/validate_pb.ts +529 -401
- package/src/platform/common/common_pb.ts +48 -3
- package/src/platform/entity/entity_pb.ts +154 -0
- package/src/platform/entityresolution/entity_resolution_pb.ts +4 -0
- package/src/platform/entityresolution/v2/entity_resolution_pb.ts +170 -0
- package/src/platform/google/api/annotations_pb.ts +1 -1
- package/src/platform/google/api/http_pb.ts +2 -2
- package/src/platform/kas/kas_pb.ts +6 -1
- package/src/platform/policy/attributes/attributes_pb.ts +46 -16
- package/src/platform/policy/kasregistry/key_access_server_registry_pb.ts +371 -27
- package/src/platform/policy/keymanagement/key_management_pb.ts +24 -2
- package/src/platform/policy/namespaces/namespaces_pb.ts +163 -7
- package/src/platform/policy/objects_pb.ts +474 -59
- package/src/platform/policy/obligations/obligations_pb.ts +788 -0
- package/src/platform/policy/registeredresources/registered_resources_pb.ts +80 -13
- package/src/platform/policy/resourcemapping/resource_mapping_pb.ts +1 -2
- package/src/platform/policy/selectors_pb.ts +18 -0
- package/src/platform/policy/subjectmapping/subject_mapping_pb.ts +1 -2
- package/src/platform/policy/unsafe/unsafe_pb.ts +21 -6
- package/src/platform.ts +29 -5
- package/src/policy/api.ts +37 -6
- package/src/policy/granter.ts +82 -56
- package/src/seekable.ts +31 -0
- package/src/utils.ts +88 -2
- package/tdf3/src/assertions.ts +52 -1
- package/tdf3/src/client/DecoratedReadableStream.ts +9 -0
- package/tdf3/src/client/builders.ts +16 -0
- package/tdf3/src/client/index.ts +309 -73
- package/tdf3/src/client/validation.ts +2 -2
- package/tdf3/src/tdf.ts +53 -9
- package/tdf3/src/utils/unwrap.ts +2 -1
package/src/auth/oidc.ts
CHANGED
|
@@ -12,6 +12,8 @@ export type CommonCredentials = {
|
|
|
12
12
|
clientId: string;
|
|
13
13
|
/** The endpoint of the OIDC IdP to authenticate against, ex. 'https://virtru.com/auth' */
|
|
14
14
|
oidcOrigin: string;
|
|
15
|
+
oidcTokenEndpoint?: string;
|
|
16
|
+
oidcUserInfoEndpoint?: string;
|
|
15
17
|
/** Whether or not DPoP is enabled. */
|
|
16
18
|
dpopEnabled?: boolean;
|
|
17
19
|
|
|
@@ -89,6 +91,8 @@ export class AccessToken {
|
|
|
89
91
|
data?: AccessTokenResponse;
|
|
90
92
|
|
|
91
93
|
baseUrl: string;
|
|
94
|
+
tokenEndpoint: string;
|
|
95
|
+
userInfoEndpoint: string;
|
|
92
96
|
|
|
93
97
|
signingKey?: CryptoKeyPair;
|
|
94
98
|
|
|
@@ -119,6 +123,9 @@ export class AccessToken {
|
|
|
119
123
|
this.config = cfg;
|
|
120
124
|
this.request = request;
|
|
121
125
|
this.baseUrl = rstrip(cfg.oidcOrigin, '/');
|
|
126
|
+
this.tokenEndpoint = cfg.oidcTokenEndpoint || `${this.baseUrl}/protocol/openid-connect/token`;
|
|
127
|
+
this.userInfoEndpoint =
|
|
128
|
+
cfg.oidcUserInfoEndpoint || `${this.baseUrl}/protocol/openid-connect/userinfo`;
|
|
122
129
|
this.signingKey = cfg.signingKey;
|
|
123
130
|
}
|
|
124
131
|
|
|
@@ -128,21 +135,20 @@ export class AccessToken {
|
|
|
128
135
|
* @returns
|
|
129
136
|
*/
|
|
130
137
|
async info(accessToken: string): Promise<unknown> {
|
|
131
|
-
const url = `${this.baseUrl}/protocol/openid-connect/userinfo`;
|
|
132
138
|
const headers = {
|
|
133
139
|
...this.extraHeaders,
|
|
134
140
|
Authorization: `Bearer ${accessToken}`,
|
|
135
141
|
} as Record<string, string>;
|
|
136
142
|
if (this.config.dpopEnabled && this.signingKey) {
|
|
137
|
-
headers.DPoP = await dpopFn(this.signingKey,
|
|
143
|
+
headers.DPoP = await dpopFn(this.signingKey, this.userInfoEndpoint, 'POST');
|
|
138
144
|
}
|
|
139
|
-
const response = await (this.request || fetch)(
|
|
145
|
+
const response = await (this.request || fetch)(this.userInfoEndpoint, {
|
|
140
146
|
headers,
|
|
141
147
|
});
|
|
142
148
|
if (!response.ok) {
|
|
143
149
|
console.error(await response.text());
|
|
144
150
|
throw new TdfError(
|
|
145
|
-
`auth info fail: GET [${
|
|
151
|
+
`auth info fail: GET [${this.userInfoEndpoint}] => ${response.status} ${response.statusText}`
|
|
146
152
|
);
|
|
147
153
|
}
|
|
148
154
|
|
|
@@ -171,7 +177,6 @@ export class AccessToken {
|
|
|
171
177
|
}
|
|
172
178
|
|
|
173
179
|
async accessTokenLookup(cfg: OIDCCredentials) {
|
|
174
|
-
const url = `${this.baseUrl}/protocol/openid-connect/token`;
|
|
175
180
|
let body;
|
|
176
181
|
switch (cfg.exchange) {
|
|
177
182
|
case 'client':
|
|
@@ -198,11 +203,11 @@ export class AccessToken {
|
|
|
198
203
|
};
|
|
199
204
|
break;
|
|
200
205
|
}
|
|
201
|
-
const response = await this.doPost(
|
|
206
|
+
const response = await this.doPost(this.tokenEndpoint, body);
|
|
202
207
|
if (!response.ok) {
|
|
203
208
|
console.error(await response.text());
|
|
204
209
|
throw new TdfError(
|
|
205
|
-
`token/code exchange fail: POST [${
|
|
210
|
+
`token/code exchange fail: POST [${this.tokenEndpoint}] => ${response.status} ${response.statusText}`
|
|
206
211
|
);
|
|
207
212
|
}
|
|
208
213
|
return response.json();
|
package/src/auth/providers.ts
CHANGED
|
@@ -36,6 +36,8 @@ export const clientSecretAuthProvider = async (
|
|
|
36
36
|
clientId: clientConfig.clientId,
|
|
37
37
|
clientSecret: clientConfig.clientSecret,
|
|
38
38
|
oidcOrigin: clientConfig.oidcOrigin,
|
|
39
|
+
oidcTokenEndpoint: clientConfig.oidcTokenEndpoint,
|
|
40
|
+
oidcUserInfoEndpoint: clientConfig.oidcUserInfoEndpoint,
|
|
39
41
|
});
|
|
40
42
|
};
|
|
41
43
|
|
|
@@ -62,6 +64,8 @@ export const externalAuthProvider = async (
|
|
|
62
64
|
clientId: clientConfig.clientId,
|
|
63
65
|
externalJwt: clientConfig.externalJwt,
|
|
64
66
|
oidcOrigin: clientConfig.oidcOrigin,
|
|
67
|
+
oidcTokenEndpoint: clientConfig.oidcTokenEndpoint,
|
|
68
|
+
oidcUserInfoEndpoint: clientConfig.oidcUserInfoEndpoint,
|
|
65
69
|
});
|
|
66
70
|
};
|
|
67
71
|
|
|
@@ -86,6 +90,8 @@ export const refreshAuthProvider = async (
|
|
|
86
90
|
clientId: clientConfig.clientId,
|
|
87
91
|
refreshToken: clientConfig.refreshToken,
|
|
88
92
|
oidcOrigin: clientConfig.oidcOrigin,
|
|
93
|
+
oidcTokenEndpoint: clientConfig.oidcTokenEndpoint,
|
|
94
|
+
oidcUserInfoEndpoint: clientConfig.oidcUserInfoEndpoint,
|
|
89
95
|
});
|
|
90
96
|
};
|
|
91
97
|
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { type AuthProvider, type HttpMethod, HttpRequest, withHeaders } from './
|
|
|
2
2
|
export * as AuthProviders from './auth/providers.js';
|
|
3
3
|
export { attributeFQNsAsValues } from './policy/api.js';
|
|
4
4
|
export { version, clientType, tdfSpecVersion } from './version.js';
|
|
5
|
+
export { PlatformClient, type PlatformClientOptions, type PlatformServices } from './platform.js';
|
|
5
6
|
export * from './opentdf.js';
|
|
6
7
|
export * from './seekable.js';
|
|
7
8
|
export * from '../tdf3/src/models/index.js';
|
package/src/nanoclients.ts
CHANGED
|
@@ -46,7 +46,7 @@ export class NanoTDFClient extends Client {
|
|
|
46
46
|
const kasUrl = nanotdf.header.getKasRewrapUrl();
|
|
47
47
|
|
|
48
48
|
// Rewrap key on every request
|
|
49
|
-
const ukey = await this.rewrapKey(
|
|
49
|
+
const { unwrappedKey: ukey } = await this.rewrapKey(
|
|
50
50
|
nanotdf.header.toBuffer(),
|
|
51
51
|
kasUrl,
|
|
52
52
|
nanotdf.header.magicNumberVersion,
|
|
@@ -73,7 +73,7 @@ export class NanoTDFClient extends Client {
|
|
|
73
73
|
|
|
74
74
|
const legacyVersion = '0.0.0';
|
|
75
75
|
// Rewrap key on every request
|
|
76
|
-
const key = await this.rewrapKey(
|
|
76
|
+
const { unwrappedKey: key } = await this.rewrapKey(
|
|
77
77
|
nanotdf.header.toBuffer(),
|
|
78
78
|
nanotdf.header.getKasRewrapUrl(),
|
|
79
79
|
nanotdf.header.magicNumberVersion,
|
|
@@ -351,7 +351,7 @@ export class NanoTDFDatasetClient extends Client {
|
|
|
351
351
|
// TODO: The version number should be fetched from the API
|
|
352
352
|
const version = '0.0.1';
|
|
353
353
|
// Rewrap key on every request
|
|
354
|
-
const ukey = await this.rewrapKey(
|
|
354
|
+
const { unwrappedKey: ukey } = await this.rewrapKey(
|
|
355
355
|
nanotdf.header.toBuffer(),
|
|
356
356
|
nanotdf.header.getKasRewrapUrl(),
|
|
357
357
|
nanotdf.header.magicNumberVersion,
|
package/src/nanotdf/Client.ts
CHANGED
|
@@ -10,10 +10,16 @@ import {
|
|
|
10
10
|
} from '../access.js';
|
|
11
11
|
import { AuthProvider, isAuthProvider, reqSignature } from '../auth/providers.js';
|
|
12
12
|
import { ConfigurationError, DecryptError, TdfError, UnsafeUrlError } from '../errors.js';
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
cryptoPublicToPem,
|
|
15
|
+
getRequiredObligationFQNs,
|
|
16
|
+
pemToCryptoPublicKey,
|
|
17
|
+
validateSecureUrl,
|
|
18
|
+
} from '../utils.js';
|
|
14
19
|
|
|
15
20
|
export interface ClientConfig {
|
|
16
21
|
allowedKases?: string[];
|
|
22
|
+
fulfillableObligationFQNs?: string[];
|
|
17
23
|
ignoreAllowList?: boolean;
|
|
18
24
|
authProvider: AuthProvider;
|
|
19
25
|
dpopEnabled?: boolean;
|
|
@@ -23,6 +29,11 @@ export interface ClientConfig {
|
|
|
23
29
|
platformUrl: string;
|
|
24
30
|
}
|
|
25
31
|
|
|
32
|
+
type RewrapKeyResult = {
|
|
33
|
+
unwrappedKey: CryptoKey;
|
|
34
|
+
requiredObligations: string[];
|
|
35
|
+
};
|
|
36
|
+
|
|
26
37
|
function toJWSAlg(c: CryptoKey): string {
|
|
27
38
|
const { algorithm } = c;
|
|
28
39
|
switch (algorithm.name) {
|
|
@@ -106,6 +117,7 @@ export default class Client {
|
|
|
106
117
|
static readonly IV_SIZE = 12;
|
|
107
118
|
|
|
108
119
|
allowedKases?: OriginAllowList;
|
|
120
|
+
readonly fulfillableObligationFQNs: string[];
|
|
109
121
|
/*
|
|
110
122
|
These variables are expected to be either assigned during initialization or within the methods.
|
|
111
123
|
This is needed as the flow is very specific. Errors should be thrown if the necessary step is not completed.
|
|
@@ -168,6 +180,7 @@ export default class Client {
|
|
|
168
180
|
} else {
|
|
169
181
|
const {
|
|
170
182
|
allowedKases,
|
|
183
|
+
fulfillableObligationFQNs = [],
|
|
171
184
|
ignoreAllowList,
|
|
172
185
|
authProvider,
|
|
173
186
|
dpopEnabled,
|
|
@@ -184,6 +197,7 @@ export default class Client {
|
|
|
184
197
|
if (allowedKases?.length || ignoreAllowList) {
|
|
185
198
|
this.allowedKases = new OriginAllowList(allowedKases || [], ignoreAllowList);
|
|
186
199
|
}
|
|
200
|
+
this.fulfillableObligationFQNs = fulfillableObligationFQNs;
|
|
187
201
|
this.dpopEnabled = !!dpopEnabled;
|
|
188
202
|
if (dpopKeys) {
|
|
189
203
|
this.requestSignerKeyPair = dpopKeys;
|
|
@@ -223,7 +237,7 @@ export default class Client {
|
|
|
223
237
|
kasRewrapUrl: string,
|
|
224
238
|
magicNumberVersion: ArrayBufferLike,
|
|
225
239
|
clientVersion: string
|
|
226
|
-
): Promise<
|
|
240
|
+
): Promise<RewrapKeyResult> {
|
|
227
241
|
let allowedKases = this.allowedKases;
|
|
228
242
|
|
|
229
243
|
if (!allowedKases) {
|
|
@@ -265,10 +279,15 @@ export default class Client {
|
|
|
265
279
|
});
|
|
266
280
|
|
|
267
281
|
// Wrapped
|
|
268
|
-
const
|
|
282
|
+
const rewrapResp = await fetchWrappedKey(
|
|
283
|
+
kasRewrapUrl,
|
|
284
|
+
signedRequestToken,
|
|
285
|
+
this.authProvider,
|
|
286
|
+
this.fulfillableObligationFQNs
|
|
287
|
+
);
|
|
269
288
|
|
|
270
289
|
// Extract the iv and ciphertext
|
|
271
|
-
const entityWrappedKey =
|
|
290
|
+
const entityWrappedKey = rewrapResp.entityWrappedKey;
|
|
272
291
|
const ivLength =
|
|
273
292
|
clientVersion == Client.SDK_INITIAL_RELEASE ? Client.INITIAL_RELEASE_IV_SIZE : Client.IV_SIZE;
|
|
274
293
|
const iv = entityWrappedKey.subarray(0, ivLength);
|
|
@@ -277,7 +296,7 @@ export default class Client {
|
|
|
277
296
|
let kasPublicKey;
|
|
278
297
|
try {
|
|
279
298
|
// Let us import public key as a cert or public key
|
|
280
|
-
kasPublicKey = await pemToCryptoPublicKey(
|
|
299
|
+
kasPublicKey = await pemToCryptoPublicKey(rewrapResp.sessionPublicKey);
|
|
281
300
|
} catch (cause) {
|
|
282
301
|
throw new ConfigurationError(
|
|
283
302
|
`internal: [${kasRewrapUrl}] PEM Public Key to crypto public key failed. Is PEM formatted correctly?`,
|
|
@@ -346,6 +365,9 @@ export default class Client {
|
|
|
346
365
|
throw new DecryptError('Unable to import raw key.', cause);
|
|
347
366
|
}
|
|
348
367
|
|
|
349
|
-
return
|
|
368
|
+
return {
|
|
369
|
+
requiredObligations: getRequiredObligationFQNs(rewrapResp),
|
|
370
|
+
unwrappedKey: unwrappedKey,
|
|
371
|
+
};
|
|
350
372
|
}
|
|
351
373
|
}
|