@@ -388,21 +388,14 @@ export class FieldEncryptionExecutorTransform implements FieldTransform {
388388 encryptedDek = await kmsClient . encrypt ( rawDek )
389389 }
390390 const newVersion = isExpired ? dek ! . version ! + 1 : null
391- const newDekId : DekId = {
392- kekName : this . kekName ,
393- subject : ctx . subject ,
394- version : newVersion ,
395- algorithm : this . cryptor . dekFormat ,
396- deleted : isRead ,
397- }
398- // encryptedDek may be passed as null if kek is shared
399- dek = await this . storeDekToRegistry ( newDekId , encryptedDek )
400- if ( dek == null ) {
401- // handle conflicts (409)
402- dek = await this . retrieveDekFromRegistry ( dekId )
403- }
404- if ( dek == null ) {
405- throw new RuleError ( `no dek found for ${ this . kekName } during produce` )
391+ try {
392+ dek = await this . createDek ( dekId , newVersion , encryptedDek )
393+ } catch ( err ) {
394+ if ( dek == null ) {
395+ throw err ;
396+ }
397+ console . warn ( "failed to create dek for %s, subject %s, version %d, using existing dek" ,
398+ this . kekName , ctx . subject , newVersion )
406399 }
407400 }
408401
@@ -419,6 +412,27 @@ export class FieldEncryptionExecutorTransform implements FieldTransform {
419412 return dek
420413 }
421414
415+ async createDek ( dekId : DekId , newVersion : number | null , encryptedDek : Buffer | null ) : Promise < Dek > {
416+ const newDekId : DekId = {
417+ kekName : dekId . kekName ,
418+ subject : dekId . subject ,
419+ version : newVersion ,
420+ algorithm : dekId . algorithm ,
421+ deleted : dekId . deleted ,
422+ }
423+ // encryptedDek may be passed as null if kek is shared
424+ let dek = await this . storeDekToRegistry ( newDekId , encryptedDek )
425+ if ( dek == null ) {
426+ // handle conflicts (409)
427+ dek = await this . retrieveDekFromRegistry ( dekId )
428+ }
429+ if ( dek == null ) {
430+ throw new RuleError ( `no dek found for ${ dekId . kekName } during produce` )
431+ }
432+
433+ return dek
434+ }
435+
422436 async retrieveDekFromRegistry ( key : DekId ) : Promise < Dek | null > {
423437 try {
424438 let dek : Dek
0 commit comments