@@ -108,6 +108,13 @@ export class PrivateDriveKeyData {
108
108
}
109
109
}
110
110
111
+ export interface PrepareObjectTransactionParams {
112
+ objectMetaData : ArFSObjectMetadataPrototype ;
113
+ rewardSettings ?: RewardSettings ;
114
+ excludedTagNames ?: string [ ] ;
115
+ otherTags ?: GQLTagInterface [ ] ;
116
+ }
117
+
111
118
export interface ArFSMoveParams < O extends ArFSFileOrFolderEntity , T extends ArFSObjectTransactionData > {
112
119
originalMetaData : O ;
113
120
newParentFolderId : FolderID ;
@@ -208,7 +215,7 @@ export class ArFSDAO extends ArFSDAOAnonymous {
208
215
209
216
// Create a root folder metadata transaction
210
217
const folderMetadata = folderPrototypeFactory ( folderId , parentFolderId ) ;
211
- const folderTrx = await this . prepareArFSObjectTransaction ( folderMetadata , rewardSettings ) ;
218
+ const folderTrx = await this . prepareArFSObjectTransaction ( { objectMetaData : folderMetadata , rewardSettings } ) ;
212
219
213
220
// Execute the upload
214
221
if ( ! this . dryRun ) {
@@ -275,7 +282,10 @@ export class ArFSDAO extends ArFSDAOAnonymous {
275
282
276
283
// Create a drive metadata transaction
277
284
const driveMetaData = await createMetadataFn ( driveId , rootFolderId ) ;
278
- const driveTrx = await this . prepareArFSObjectTransaction ( driveMetaData , driveRewardSettings ) ;
285
+ const driveTrx = await this . prepareArFSObjectTransaction ( {
286
+ objectMetaData : driveMetaData ,
287
+ rewardSettings : driveRewardSettings
288
+ } ) ;
279
289
280
290
// Execute the upload
281
291
if ( ! this . dryRun ) {
@@ -369,7 +379,10 @@ export class ArFSDAO extends ArFSDAOAnonymous {
369
379
const metadataPrototype = metaDataFactory ( ) ;
370
380
371
381
// Prepare meta data transaction
372
- const metaDataTrx = await this . prepareArFSObjectTransaction ( metadataPrototype , metaDataBaseReward ) ;
382
+ const metaDataTrx = await this . prepareArFSObjectTransaction ( {
383
+ objectMetaData : metadataPrototype ,
384
+ rewardSettings : metaDataBaseReward
385
+ } ) ;
373
386
374
387
// Upload meta data
375
388
if ( ! this . dryRun ) {
@@ -493,7 +506,11 @@ export class ArFSDAO extends ArFSDAOAnonymous {
493
506
494
507
// Build file data transaction
495
508
const fileDataPrototype = await dataPrototypeFactoryFn ( fileData , dataContentType , fileId ) ;
496
- const dataTrx = await this . prepareArFSObjectTransaction ( fileDataPrototype , fileDataRewardSettings ) ;
509
+ const dataTrx = await this . prepareArFSObjectTransaction ( {
510
+ objectMetaData : fileDataPrototype ,
511
+ rewardSettings : fileDataRewardSettings ,
512
+ excludedTagNames : [ 'ArFS' ]
513
+ } ) ;
497
514
498
515
// Upload file data
499
516
if ( ! this . dryRun ) {
@@ -513,7 +530,10 @@ export class ArFSDAO extends ArFSDAOAnonymous {
513
530
fileId
514
531
) ;
515
532
const fileMetadata = metadataFactoryFn ( metadataTrxData , fileId ) ;
516
- const metaDataTrx = await this . prepareArFSObjectTransaction ( fileMetadata , metadataRewardSettings ) ;
533
+ const metaDataTrx = await this . prepareArFSObjectTransaction ( {
534
+ objectMetaData : fileMetadata ,
535
+ rewardSettings : metadataRewardSettings
536
+ } ) ;
517
537
518
538
// Upload meta data
519
539
if ( ! this . dryRun ) {
@@ -612,11 +632,12 @@ export class ArFSDAO extends ArFSDAOAnonymous {
612
632
) ;
613
633
}
614
634
615
- async prepareArFSObjectTransaction (
616
- objectMetaData : ArFSObjectMetadataPrototype ,
617
- rewardSettings : RewardSettings = { } ,
618
- otherTags : GQLTagInterface [ ] = [ ]
619
- ) : Promise < Transaction > {
635
+ async prepareArFSObjectTransaction ( {
636
+ objectMetaData,
637
+ rewardSettings = { } ,
638
+ excludedTagNames = [ ] ,
639
+ otherTags = [ ]
640
+ } : PrepareObjectTransactionParams ) : Promise < Transaction > {
620
641
const wallet = this . wallet as JWKWallet ;
621
642
622
643
// Create transaction
@@ -641,23 +662,31 @@ export class ArFSDAO extends ArFSDAOAnonymous {
641
662
transaction . reward = rewardSettings . feeMultiple . boostReward ( transaction . reward ) ;
642
663
}
643
664
644
- // Add baseline ArFS Tags
645
- transaction . addTag ( 'App-Name' , this . appName ) ;
646
- transaction . addTag ( 'App-Version' , this . appVersion ) ;
647
- transaction . addTag ( 'ArFS' , CURRENT_ARFS_VERSION ) ;
665
+ let tagsToAdd : GQLTagInterface [ ] = [
666
+ // Add baseline App Name and App Version Tags
667
+ { name : 'App-Name' , value : this . appName } ,
668
+ { name : 'App-Version' , value : this . appVersion } ,
669
+ { name : 'ArFS' , value : CURRENT_ARFS_VERSION }
670
+ ] ;
671
+
648
672
if ( rewardSettings . feeMultiple ?. wouldBoostReward ( ) ) {
649
- transaction . addTag ( 'Boost' , rewardSettings . feeMultiple . toString ( ) ) ;
673
+ tagsToAdd . push ( { name : 'Boost' , value : rewardSettings . feeMultiple . toString ( ) } ) ;
650
674
}
651
675
652
- // Add object-specific tags
653
- objectMetaData . addTagsToTransaction ( transaction ) ;
654
-
655
676
// Enforce that other tags are not protected
656
677
objectMetaData . assertProtectedTags ( otherTags ) ;
657
- otherTags . forEach ( ( tag ) => {
678
+ tagsToAdd . push ( ...otherTags ) ;
679
+
680
+ // Remove any excluded tags
681
+ tagsToAdd = tagsToAdd . filter ( ( tag ) => ! excludedTagNames . includes ( tag . name ) ) ;
682
+
683
+ tagsToAdd . forEach ( ( tag ) => {
658
684
transaction . addTag ( tag . name , tag . value ) ;
659
685
} ) ;
660
686
687
+ // Add object-specific tags
688
+ objectMetaData . addTagsToTransaction ( transaction ) ;
689
+
661
690
// Sign the transaction
662
691
await this . arweave . transactions . sign ( transaction , wallet . getPrivateKey ( ) ) ;
663
692
return transaction ;
0 commit comments