@@ -24,7 +24,12 @@ import {
2424import { OIDCRefreshTokenProvider } from '../../../src/auth/oidc-refreshtoken-provider.js' ;
2525import { OIDCExternalJwtProvider } from '../../../src/auth/oidc-externaljwt-provider.js' ;
2626import { CryptoService , PemKeyPair } from '../crypto/declarations.js' ;
27- import { AuthProvider , AppIdAuthProvider , HttpRequest } from '../../../src/auth/auth.js' ;
27+ import {
28+ type AuthProvider ,
29+ AppIdAuthProvider ,
30+ HttpRequest ,
31+ withHeaders ,
32+ } from '../../../src/auth/auth.js' ;
2833import EAS from '../../../src/auth/Eas.js' ;
2934import { validateSecureUrl } from '../../../src/utils.js' ;
3035
@@ -119,6 +124,7 @@ export interface ClientConfig {
119124 organizationName ?: string ;
120125 clientId ?: string ;
121126 dpopEnabled ?: boolean ;
127+ dpopKeys ?: Promise < CryptoKeyPair > ;
122128 kasEndpoint ?: string ;
123129 /**
124130 * List of allowed KASes to connect to for rewrap requests.
@@ -152,18 +158,22 @@ export async function createSessionKeys({
152158 cryptoService,
153159 dpopEnabled,
154160 keypair,
161+ dpopKeys,
155162} : {
156163 authProvider ?: AuthProvider | AppIdAuthProvider ;
157164 cryptoService : CryptoService ;
158165 dpopEnabled ?: boolean ;
159166 keypair ?: PemKeyPair ;
167+ dpopKeys ?: Promise < CryptoKeyPair > ;
160168} ) : Promise < SessionKeys > {
161169 //If clientconfig has keypair, assume auth provider was already set up with pubkey and bail
162170 const k2 =
163171 keypair ?? ( await cryptoService . cryptoToPemPair ( await cryptoService . generateKeyPair ( ) ) ) ;
164172 let signingKeys ;
165173
166- if ( dpopEnabled ) {
174+ if ( dpopKeys ) {
175+ signingKeys = await dpopKeys ;
176+ } else if ( dpopEnabled ) {
167177 signingKeys = await crypto . subtle . generateKey ( rsaPkcs1Sha256 ( ) , true , [ 'sign' ] ) ;
168178 }
169179
@@ -251,7 +261,7 @@ export class Client {
251261 constructor ( config : ClientConfig ) {
252262 const clientConfig = { ...defaultClientConfig , ...config } ;
253263 this . cryptoService = clientConfig . cryptoService ;
254- this . dpopEnabled = ! ! clientConfig . dpopEnabled ;
264+ this . dpopEnabled = ! ! ( clientConfig . dpopEnabled || clientConfig . dpopKeys ) ;
255265
256266 clientConfig . readerUrl && ( this . readerUrl = clientConfig . readerUrl ) ;
257267
@@ -316,16 +326,13 @@ export class Client {
316326 } ) ;
317327 }
318328 }
319- if ( clientConfig . keypair ) {
320- this . sessionKeys = Promise . resolve ( { keypair : clientConfig . keypair } ) ;
321- } else {
322- this . sessionKeys = createSessionKeys ( {
323- authProvider : this . authProvider ,
324- cryptoService : this . cryptoService ,
325- dpopEnabled : this . dpopEnabled ,
326- keypair : clientConfig . keypair ,
327- } ) ;
328- }
329+ this . sessionKeys = createSessionKeys ( {
330+ authProvider : this . authProvider ,
331+ cryptoService : this . cryptoService ,
332+ dpopEnabled : this . dpopEnabled ,
333+ dpopKeys : clientConfig . dpopKeys ,
334+ keypair : clientConfig . keypair ,
335+ } ) ;
329336 if ( clientConfig . kasPublicKey ) {
330337 this . kasPublicKey = Promise . resolve ( {
331338 url : this . kasEndpoint ,
@@ -535,12 +542,14 @@ export class Client {
535542 }
536543}
537544
545+ export type { AuthProvider } ;
546+
538547export {
539- AuthProvider ,
540548 AppIdAuthProvider ,
541549 DecryptParamsBuilder ,
542550 DecryptSource ,
543551 EncryptParamsBuilder ,
544552 HttpRequest ,
545553 fromDataSource ,
554+ withHeaders ,
546555} ;
0 commit comments