@bosonprotocol/core-sdk 1.47.0-alpha.4 → 1.47.0-alpha.5

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.
Files changed (37) hide show
  1. package/dist/cjs/meta-tx/handler.d.ts +186 -0
  2. package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
  3. package/dist/cjs/meta-tx/handler.js +170 -30
  4. package/dist/cjs/meta-tx/handler.js.map +1 -1
  5. package/dist/cjs/meta-tx/mixin.d.ts +182 -31
  6. package/dist/cjs/meta-tx/mixin.d.ts.map +1 -1
  7. package/dist/cjs/meta-tx/mixin.js +157 -169
  8. package/dist/cjs/meta-tx/mixin.js.map +1 -1
  9. package/dist/cjs/native-meta-tx/handler.d.ts +16 -3
  10. package/dist/cjs/native-meta-tx/handler.d.ts.map +1 -1
  11. package/dist/cjs/native-meta-tx/handler.js +16 -5
  12. package/dist/cjs/native-meta-tx/handler.js.map +1 -1
  13. package/dist/cjs/native-meta-tx/mixin.d.ts +11 -3
  14. package/dist/cjs/native-meta-tx/mixin.d.ts.map +1 -1
  15. package/dist/cjs/native-meta-tx/mixin.js +7 -9
  16. package/dist/cjs/native-meta-tx/mixin.js.map +1 -1
  17. package/dist/esm/meta-tx/handler.d.ts +186 -0
  18. package/dist/esm/meta-tx/handler.d.ts.map +1 -1
  19. package/dist/esm/meta-tx/handler.js +229 -48
  20. package/dist/esm/meta-tx/handler.js.map +1 -1
  21. package/dist/esm/meta-tx/mixin.d.ts +182 -31
  22. package/dist/esm/meta-tx/mixin.d.ts.map +1 -1
  23. package/dist/esm/meta-tx/mixin.js +380 -169
  24. package/dist/esm/meta-tx/mixin.js.map +1 -1
  25. package/dist/esm/native-meta-tx/handler.d.ts +16 -3
  26. package/dist/esm/native-meta-tx/handler.d.ts.map +1 -1
  27. package/dist/esm/native-meta-tx/handler.js +26 -6
  28. package/dist/esm/native-meta-tx/handler.js.map +1 -1
  29. package/dist/esm/native-meta-tx/mixin.d.ts +11 -3
  30. package/dist/esm/native-meta-tx/mixin.d.ts.map +1 -1
  31. package/dist/esm/native-meta-tx/mixin.js +12 -8
  32. package/dist/esm/native-meta-tx/mixin.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/meta-tx/handler.ts +808 -93
  35. package/src/meta-tx/mixin.ts +839 -64
  36. package/src/native-meta-tx/handler.ts +68 -18
  37. package/src/native-meta-tx/mixin.ts +30 -4
@@ -38,6 +38,7 @@ import {
38
38
  } from "../offers/interface";
39
39
  import {
40
40
  prepareDataSignatureParameters,
41
+ StructuredData,
41
42
  rebuildSignature
42
43
  } from "../utils/signature";
43
44
  import {
@@ -67,6 +68,11 @@ import { isTrustedForwarder } from "../voucher/handler";
67
68
  import { findCollectionSalt } from "../accounts/handler";
68
69
  import { storeMetadataItems } from "../metadata/storeMetadataItems";
69
70
 
71
+ export type UnsignedMetaTx = StructuredData & {
72
+ functionName: string;
73
+ functionSignature: string;
74
+ };
75
+
70
76
  export type BaseMetaTxArgs = {
71
77
  web3Lib: Web3LibAdapter;
72
78
  nonce: BigNumberish;
@@ -95,12 +101,30 @@ export type SignedVoucherMetaTx = Omit<SignedMetaTx, "functionName"> & {
95
101
  domainSeparator?: string;
96
102
  };
97
103
 
104
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
98
105
  export async function signMetaTx(
99
106
  args: BaseMetaTxArgs & {
100
107
  functionName: string;
101
108
  functionSignature: string;
109
+ returnTypedDataToSign: true;
102
110
  }
103
- ): Promise<SignedMetaTx> {
111
+ ): Promise<UnsignedMetaTx>;
112
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
113
+ export async function signMetaTx(
114
+ args: BaseMetaTxArgs & {
115
+ functionName: string;
116
+ functionSignature: string;
117
+ returnTypedDataToSign?: false | undefined;
118
+ }
119
+ ): Promise<SignedMetaTx>;
120
+ // Implementation
121
+ export async function signMetaTx(
122
+ args: BaseMetaTxArgs & {
123
+ functionName: string;
124
+ functionSignature: string;
125
+ returnTypedDataToSign?: boolean;
126
+ }
127
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
104
128
  const metaTransactionType = [
105
129
  { name: "nonce", type: "uint256" },
106
130
  { name: "from", type: "address" },
@@ -116,13 +140,29 @@ export async function signMetaTx(
116
140
  const signerAddress = await args.web3Lib.getSignerAddress();
117
141
 
118
142
  const message = {
119
- nonce: args.nonce,
143
+ nonce: args.nonce.toString(),
120
144
  from: signerAddress,
121
145
  contractAddress: args.metaTxHandlerAddress,
122
146
  functionName: args.functionName,
123
147
  functionSignature: args.functionSignature
124
148
  };
125
149
 
150
+ if (args.returnTypedDataToSign) {
151
+ const structuredData = await prepareDataSignatureParameters({
152
+ ...args,
153
+ verifyingContractAddress: args.metaTxHandlerAddress,
154
+ customSignatureType,
155
+ primaryType: "MetaTransaction",
156
+ message,
157
+ returnTypedDataToSign: true
158
+ });
159
+ return {
160
+ ...structuredData,
161
+ functionName: args.functionName,
162
+ functionSignature: args.functionSignature
163
+ };
164
+ }
165
+
126
166
  const signature = await prepareDataSignatureParameters({
127
167
  ...args,
128
168
  verifyingContractAddress: args.metaTxHandlerAddress,
@@ -400,13 +440,33 @@ export async function relayBiconomyMetaTransaction(args: {
400
440
  };
401
441
  }
402
442
 
443
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
403
444
  export async function signMetaTxCreateSeller(
404
445
  args: BaseMetaTxArgs & {
405
446
  createSellerArgs: CreateSellerArgs;
406
447
  metadataStorage?: MetadataStorage;
407
448
  theGraphStorage?: MetadataStorage;
449
+ returnTypedDataToSign: true;
408
450
  }
409
- ) {
451
+ ): Promise<UnsignedMetaTx>;
452
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
453
+ export async function signMetaTxCreateSeller(
454
+ args: BaseMetaTxArgs & {
455
+ createSellerArgs: CreateSellerArgs;
456
+ metadataStorage?: MetadataStorage;
457
+ theGraphStorage?: MetadataStorage;
458
+ returnTypedDataToSign?: false | undefined;
459
+ }
460
+ ): Promise<SignedMetaTx>;
461
+ // Implementation
462
+ export async function signMetaTxCreateSeller(
463
+ args: BaseMetaTxArgs & {
464
+ createSellerArgs: CreateSellerArgs;
465
+ metadataStorage?: MetadataStorage;
466
+ theGraphStorage?: MetadataStorage;
467
+ returnTypedDataToSign?: boolean;
468
+ }
469
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
410
470
  await Promise.all(
411
471
  [args.createSellerArgs.contractUri, args.createSellerArgs.metadataUri].map(
412
472
  (metadataUri) =>
@@ -422,53 +482,121 @@ export async function signMetaTxCreateSeller(
422
482
  contractAddress: args.metaTxHandlerAddress,
423
483
  ...args
424
484
  });
425
- return signMetaTx({
485
+ const signMetaTxArgs = {
426
486
  ...args,
427
487
  functionName:
428
488
  "createSeller((uint256,address,address,address,address,bool,string),(uint256,uint8),(string,uint256,bytes32))",
429
489
  functionSignature: encodeCreateSeller(args.createSellerArgs, collectionSalt)
430
- });
490
+ };
491
+ if (args.returnTypedDataToSign) {
492
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
493
+ }
494
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
431
495
  }
432
496
 
497
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
433
498
  export async function signMetaTxUpdateSeller(
434
499
  args: BaseMetaTxArgs & {
435
500
  updateSellerArgs: UpdateSellerArgs;
436
501
  metadataStorage?: MetadataStorage;
437
502
  theGraphStorage?: MetadataStorage;
503
+ returnTypedDataToSign: true;
438
504
  }
439
- ) {
505
+ ): Promise<UnsignedMetaTx>;
506
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
507
+ export async function signMetaTxUpdateSeller(
508
+ args: BaseMetaTxArgs & {
509
+ updateSellerArgs: UpdateSellerArgs;
510
+ metadataStorage?: MetadataStorage;
511
+ theGraphStorage?: MetadataStorage;
512
+ returnTypedDataToSign?: false | undefined;
513
+ }
514
+ ): Promise<SignedMetaTx>;
515
+ // Implementation
516
+ export async function signMetaTxUpdateSeller(
517
+ args: BaseMetaTxArgs & {
518
+ updateSellerArgs: UpdateSellerArgs;
519
+ metadataStorage?: MetadataStorage;
520
+ theGraphStorage?: MetadataStorage;
521
+ returnTypedDataToSign?: boolean;
522
+ }
523
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
440
524
  await storeMetadataOnTheGraph({
441
525
  metadataUriOrHash: args.updateSellerArgs.metadataUri,
442
526
  metadataStorage: args.metadataStorage,
443
527
  theGraphStorage: args.theGraphStorage
444
528
  });
445
- return signMetaTx({
529
+ const signMetaTxArgs = {
446
530
  ...args,
447
531
  functionName:
448
532
  "updateSeller((uint256,address,address,address,address,bool,string),(uint256,uint8))",
449
533
  functionSignature: encodeUpdateSeller(args.updateSellerArgs)
450
- });
534
+ };
535
+ if (args.returnTypedDataToSign) {
536
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
537
+ }
538
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
451
539
  }
452
540
 
541
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
453
542
  export async function signMetaTxOptInToSellerUpdate(
454
543
  args: BaseMetaTxArgs & {
455
544
  optInToSellerUpdateArgs: OptInToSellerUpdateArgs;
545
+ returnTypedDataToSign: true;
456
546
  }
457
- ) {
458
- return signMetaTx({
547
+ ): Promise<UnsignedMetaTx>;
548
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
549
+ export async function signMetaTxOptInToSellerUpdate(
550
+ args: BaseMetaTxArgs & {
551
+ optInToSellerUpdateArgs: OptInToSellerUpdateArgs;
552
+ returnTypedDataToSign?: false | undefined;
553
+ }
554
+ ): Promise<SignedMetaTx>;
555
+ // Implementation
556
+ export async function signMetaTxOptInToSellerUpdate(
557
+ args: BaseMetaTxArgs & {
558
+ optInToSellerUpdateArgs: OptInToSellerUpdateArgs;
559
+ returnTypedDataToSign?: boolean;
560
+ }
561
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
562
+ const signMetaTxArgs = {
459
563
  ...args,
460
564
  functionName: "optInToSellerUpdate(uint256,uint8[])",
461
565
  functionSignature: encodeOptInToSellerUpdate(args.optInToSellerUpdateArgs)
462
- });
566
+ };
567
+ if (args.returnTypedDataToSign) {
568
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
569
+ }
570
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
463
571
  }
464
572
 
573
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
465
574
  export async function signMetaTxCreateOffer(
466
575
  args: BaseMetaTxArgs & {
467
576
  createOfferArgs: CreateOfferArgs;
468
577
  metadataStorage?: MetadataStorage;
469
578
  theGraphStorage?: MetadataStorage;
579
+ returnTypedDataToSign: true;
470
580
  }
471
- ) {
581
+ ): Promise<UnsignedMetaTx>;
582
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
583
+ export async function signMetaTxCreateOffer(
584
+ args: BaseMetaTxArgs & {
585
+ createOfferArgs: CreateOfferArgs;
586
+ metadataStorage?: MetadataStorage;
587
+ theGraphStorage?: MetadataStorage;
588
+ returnTypedDataToSign?: false | undefined;
589
+ }
590
+ ): Promise<SignedMetaTx>;
591
+ // Implementation
592
+ export async function signMetaTxCreateOffer(
593
+ args: BaseMetaTxArgs & {
594
+ createOfferArgs: CreateOfferArgs;
595
+ metadataStorage?: MetadataStorage;
596
+ theGraphStorage?: MetadataStorage;
597
+ returnTypedDataToSign?: boolean;
598
+ }
599
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
472
600
  utils.validation.createOfferArgsSchema.validateSync(args.createOfferArgs, {
473
601
  abortEarly: false
474
602
  });
@@ -483,21 +611,45 @@ export async function signMetaTxCreateOffer(
483
611
  createOffersArgs: [args.createOfferArgs]
484
612
  });
485
613
 
486
- return signMetaTx({
614
+ const signMetaTxArgs = {
487
615
  ...args,
488
616
  functionName:
489
617
  "createOffer((uint256,uint256,uint256,uint256,uint256,uint256,address,uint8,uint8,string,string,bool,uint256,(address[],uint256[])[],uint256),(uint256,uint256,uint256,uint256),(uint256,uint256,uint256),(uint256,address),uint256,uint256)",
490
618
  functionSignature: encodeCreateOffer(args.createOfferArgs)
491
- });
619
+ };
620
+ if (args.returnTypedDataToSign) {
621
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
622
+ }
623
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
492
624
  }
493
625
 
626
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
494
627
  export async function signMetaTxCreateOfferBatch(
495
628
  args: BaseMetaTxArgs & {
496
629
  createOffersArgs: CreateOfferArgs[];
497
630
  metadataStorage?: MetadataStorage;
498
631
  theGraphStorage?: MetadataStorage;
632
+ returnTypedDataToSign: true;
499
633
  }
500
- ) {
634
+ ): Promise<UnsignedMetaTx>;
635
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
636
+ export async function signMetaTxCreateOfferBatch(
637
+ args: BaseMetaTxArgs & {
638
+ createOffersArgs: CreateOfferArgs[];
639
+ metadataStorage?: MetadataStorage;
640
+ theGraphStorage?: MetadataStorage;
641
+ returnTypedDataToSign?: false | undefined;
642
+ }
643
+ ): Promise<SignedMetaTx>;
644
+ // Implementation
645
+ export async function signMetaTxCreateOfferBatch(
646
+ args: BaseMetaTxArgs & {
647
+ createOffersArgs: CreateOfferArgs[];
648
+ metadataStorage?: MetadataStorage;
649
+ theGraphStorage?: MetadataStorage;
650
+ returnTypedDataToSign?: boolean;
651
+ }
652
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
501
653
  for (const offerToCreate of args.createOffersArgs) {
502
654
  utils.validation.createOfferArgsSchema.validateSync(offerToCreate, {
503
655
  abortEarly: false
@@ -515,145 +667,337 @@ export async function signMetaTxCreateOfferBatch(
515
667
  );
516
668
  await storeMetadataItems(args);
517
669
 
518
- return signMetaTx({
670
+ const signMetaTxArgs = {
519
671
  ...args,
520
672
  functionName:
521
673
  "createOfferBatch((uint256,uint256,uint256,uint256,uint256,uint256,address,uint8,uint8,string,string,bool,uint256,(address[],uint256[])[],uint256)[],(uint256,uint256,uint256,uint256)[],(uint256,uint256,uint256)[],(uint256,address)[],uint256[],uint256[])",
522
674
  functionSignature: encodeCreateOfferBatch(args.createOffersArgs)
523
- });
675
+ };
676
+ if (args.returnTypedDataToSign) {
677
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
678
+ }
679
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
524
680
  }
525
681
 
682
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
526
683
  export async function signMetaTxVoidOffer(
527
684
  args: BaseMetaTxArgs & {
528
685
  offerId: BigNumberish;
686
+ returnTypedDataToSign: true;
529
687
  }
530
- ) {
531
- return signMetaTx({
688
+ ): Promise<UnsignedMetaTx>;
689
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
690
+ export async function signMetaTxVoidOffer(
691
+ args: BaseMetaTxArgs & {
692
+ offerId: BigNumberish;
693
+ returnTypedDataToSign?: false | undefined;
694
+ }
695
+ ): Promise<SignedMetaTx>;
696
+ // Implementation
697
+ export async function signMetaTxVoidOffer(
698
+ args: BaseMetaTxArgs & {
699
+ offerId: BigNumberish;
700
+ returnTypedDataToSign?: boolean;
701
+ }
702
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
703
+ const signMetaTxArgs = {
532
704
  ...args,
533
705
  functionName: "voidOffer(uint256)",
534
706
  functionSignature: bosonOfferHandlerIface.encodeFunctionData("voidOffer", [
535
707
  args.offerId
536
708
  ])
537
- });
709
+ };
710
+ if (args.returnTypedDataToSign) {
711
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
712
+ }
713
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
538
714
  }
539
715
 
716
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
540
717
  export async function signMetaTxVoidOfferBatch(
541
718
  args: BaseMetaTxArgs & {
542
719
  offerIds: BigNumberish[];
720
+ returnTypedDataToSign: true;
543
721
  }
544
- ) {
545
- return signMetaTx({
722
+ ): Promise<UnsignedMetaTx>;
723
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
724
+ export async function signMetaTxVoidOfferBatch(
725
+ args: BaseMetaTxArgs & {
726
+ offerIds: BigNumberish[];
727
+ returnTypedDataToSign?: false | undefined;
728
+ }
729
+ ): Promise<SignedMetaTx>;
730
+ // Implementation
731
+ export async function signMetaTxVoidOfferBatch(
732
+ args: BaseMetaTxArgs & {
733
+ offerIds: BigNumberish[];
734
+ returnTypedDataToSign?: boolean;
735
+ }
736
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
737
+ const signMetaTxArgs = {
546
738
  ...args,
547
739
  functionName: "voidOfferBatch(uint256[])",
548
740
  functionSignature: bosonOfferHandlerIface.encodeFunctionData(
549
741
  "voidOfferBatch",
550
742
  [args.offerIds]
551
743
  )
552
- });
744
+ };
745
+ if (args.returnTypedDataToSign) {
746
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
747
+ }
748
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
553
749
  }
554
750
 
751
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
555
752
  export async function signMetaTxExtendOffer(
556
753
  args: BaseMetaTxArgs & {
557
754
  offerId: BigNumberish;
558
755
  validUntil: BigNumberish;
756
+ returnTypedDataToSign: true;
559
757
  }
560
- ) {
561
- return signMetaTx({
758
+ ): Promise<UnsignedMetaTx>;
759
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
760
+ export async function signMetaTxExtendOffer(
761
+ args: BaseMetaTxArgs & {
762
+ offerId: BigNumberish;
763
+ validUntil: BigNumberish;
764
+ returnTypedDataToSign?: false | undefined;
765
+ }
766
+ ): Promise<SignedMetaTx>;
767
+ // Implementation
768
+ export async function signMetaTxExtendOffer(
769
+ args: BaseMetaTxArgs & {
770
+ offerId: BigNumberish;
771
+ validUntil: BigNumberish;
772
+ returnTypedDataToSign?: boolean;
773
+ }
774
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
775
+ const signMetaTxArgs = {
562
776
  ...args,
563
777
  functionName: "extendOffer(uint256,uint256)",
564
778
  functionSignature: bosonOfferHandlerIface.encodeFunctionData(
565
779
  "extendOffer",
566
780
  [args.offerId, args.validUntil]
567
781
  )
568
- });
782
+ };
783
+ if (args.returnTypedDataToSign) {
784
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
785
+ }
786
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
569
787
  }
570
788
 
789
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
571
790
  export async function signMetaTxExtendOfferBatch(
572
791
  args: BaseMetaTxArgs & {
573
792
  offerIds: BigNumberish[];
574
793
  validUntil: BigNumberish;
794
+ returnTypedDataToSign: true;
575
795
  }
576
- ) {
577
- return signMetaTx({
796
+ ): Promise<UnsignedMetaTx>;
797
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
798
+ export async function signMetaTxExtendOfferBatch(
799
+ args: BaseMetaTxArgs & {
800
+ offerIds: BigNumberish[];
801
+ validUntil: BigNumberish;
802
+ returnTypedDataToSign?: false | undefined;
803
+ }
804
+ ): Promise<SignedMetaTx>;
805
+ // Implementation
806
+ export async function signMetaTxExtendOfferBatch(
807
+ args: BaseMetaTxArgs & {
808
+ offerIds: BigNumberish[];
809
+ validUntil: BigNumberish;
810
+ returnTypedDataToSign?: boolean;
811
+ }
812
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
813
+ const signMetaTxArgs = {
578
814
  ...args,
579
815
  functionName: "extendOfferBatch(uint256[],uint256)",
580
816
  functionSignature: bosonOfferHandlerIface.encodeFunctionData(
581
817
  "extendOfferBatch",
582
818
  [args.offerIds, args.validUntil]
583
819
  )
584
- });
820
+ };
821
+ if (args.returnTypedDataToSign) {
822
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
823
+ }
824
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
585
825
  }
586
826
 
827
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
587
828
  export async function signMetaTxCompleteExchangeBatch(
588
829
  args: BaseMetaTxArgs & {
589
830
  exchangeIds: BigNumberish[];
831
+ returnTypedDataToSign: true;
590
832
  }
591
- ) {
592
- return signMetaTx({
833
+ ): Promise<UnsignedMetaTx>;
834
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
835
+ export async function signMetaTxCompleteExchangeBatch(
836
+ args: BaseMetaTxArgs & {
837
+ exchangeIds: BigNumberish[];
838
+ returnTypedDataToSign?: false | undefined;
839
+ }
840
+ ): Promise<SignedMetaTx>;
841
+ // Implementation
842
+ export async function signMetaTxCompleteExchangeBatch(
843
+ args: BaseMetaTxArgs & {
844
+ exchangeIds: BigNumberish[];
845
+ returnTypedDataToSign?: boolean;
846
+ }
847
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
848
+ const signMetaTxArgs = {
593
849
  ...args,
594
850
  functionName: "completeExchangeBatch(uint256[])",
595
851
  functionSignature: bosonExchangeHandlerIface.encodeFunctionData(
596
852
  "completeExchangeBatch",
597
853
  [args.exchangeIds]
598
854
  )
599
- });
855
+ };
856
+ if (args.returnTypedDataToSign) {
857
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
858
+ }
859
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
600
860
  }
601
861
 
862
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
602
863
  export async function signMetaTxExpireVoucher(
603
864
  args: BaseMetaTxArgs & {
604
865
  exchangeId: BigNumberish;
866
+ returnTypedDataToSign: true;
605
867
  }
606
- ) {
607
- return signMetaTx({
868
+ ): Promise<UnsignedMetaTx>;
869
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
870
+ export async function signMetaTxExpireVoucher(
871
+ args: BaseMetaTxArgs & {
872
+ exchangeId: BigNumberish;
873
+ returnTypedDataToSign?: false | undefined;
874
+ }
875
+ ): Promise<SignedMetaTx>;
876
+ // Implementation
877
+ export async function signMetaTxExpireVoucher(
878
+ args: BaseMetaTxArgs & {
879
+ exchangeId: BigNumberish;
880
+ returnTypedDataToSign?: boolean;
881
+ }
882
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
883
+ const signMetaTxArgs = {
608
884
  ...args,
609
885
  functionName: "expireVoucher(uint256)",
610
886
  functionSignature: bosonExchangeHandlerIface.encodeFunctionData(
611
887
  "expireVoucher",
612
888
  [args.exchangeId]
613
889
  )
614
- });
890
+ };
891
+ if (args.returnTypedDataToSign) {
892
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
893
+ }
894
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
615
895
  }
616
896
 
897
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
617
898
  export async function signMetaTxRevokeVoucher(
618
899
  args: BaseMetaTxArgs & {
619
900
  exchangeId: BigNumberish;
901
+ returnTypedDataToSign: true;
620
902
  }
621
- ) {
622
- return signMetaTx({
903
+ ): Promise<UnsignedMetaTx>;
904
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
905
+ export async function signMetaTxRevokeVoucher(
906
+ args: BaseMetaTxArgs & {
907
+ exchangeId: BigNumberish;
908
+ returnTypedDataToSign?: false | undefined;
909
+ }
910
+ ): Promise<SignedMetaTx>;
911
+ // Implementation
912
+ export async function signMetaTxRevokeVoucher(
913
+ args: BaseMetaTxArgs & {
914
+ exchangeId: BigNumberish;
915
+ returnTypedDataToSign?: boolean;
916
+ }
917
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
918
+ const signMetaTxArgs = {
623
919
  ...args,
624
920
  functionName: "revokeVoucher(uint256)",
625
921
  functionSignature: bosonExchangeHandlerIface.encodeFunctionData(
626
922
  "revokeVoucher",
627
923
  [args.exchangeId]
628
924
  )
629
- });
925
+ };
926
+ if (args.returnTypedDataToSign) {
927
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
928
+ }
929
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
630
930
  }
631
931
 
932
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
632
933
  export async function signMetaTxCreateGroup(
633
934
  args: BaseMetaTxArgs & {
634
935
  createGroupArgs: CreateGroupArgs;
936
+ returnTypedDataToSign: true;
635
937
  }
636
- ) {
637
- return signMetaTx({
938
+ ): Promise<UnsignedMetaTx>;
939
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
940
+ export async function signMetaTxCreateGroup(
941
+ args: BaseMetaTxArgs & {
942
+ createGroupArgs: CreateGroupArgs;
943
+ returnTypedDataToSign?: false | undefined;
944
+ }
945
+ ): Promise<SignedMetaTx>;
946
+ // Implementation
947
+ export async function signMetaTxCreateGroup(
948
+ args: BaseMetaTxArgs & {
949
+ createGroupArgs: CreateGroupArgs;
950
+ returnTypedDataToSign?: boolean;
951
+ }
952
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
953
+ const signMetaTxArgs = {
638
954
  ...args,
639
955
  functionName:
640
956
  "createGroup((uint256,uint256,uint256[]),(uint8,uint8,address,uint8,uint256,uint256,uint256,uint256))",
641
957
  functionSignature: encodeCreateGroup(args.createGroupArgs)
642
- });
958
+ };
959
+ if (args.returnTypedDataToSign) {
960
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
961
+ }
962
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
643
963
  }
644
964
 
965
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
645
966
  export async function signMetaTxReserveRange(
646
967
  args: BaseMetaTxArgs & {
647
968
  offerId: BigNumberish;
648
969
  length: BigNumberish;
649
970
  to: string;
971
+ returnTypedDataToSign: true;
650
972
  }
651
- ) {
652
- return signMetaTx({
973
+ ): Promise<UnsignedMetaTx>;
974
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
975
+ export async function signMetaTxReserveRange(
976
+ args: BaseMetaTxArgs & {
977
+ offerId: BigNumberish;
978
+ length: BigNumberish;
979
+ to: string;
980
+ returnTypedDataToSign?: false | undefined;
981
+ }
982
+ ): Promise<SignedMetaTx>;
983
+ // Implementation
984
+ export async function signMetaTxReserveRange(
985
+ args: BaseMetaTxArgs & {
986
+ offerId: BigNumberish;
987
+ length: BigNumberish;
988
+ to: string;
989
+ returnTypedDataToSign?: boolean;
990
+ }
991
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
992
+ const signMetaTxArgs = {
653
993
  ...args,
654
994
  functionName: "reserveRange(uint256,uint256,address)",
655
995
  functionSignature: encodeReserveRange(args.offerId, args.length, args.to)
656
- });
996
+ };
997
+ if (args.returnTypedDataToSign) {
998
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
999
+ }
1000
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
657
1001
  }
658
1002
 
659
1003
  function isLocal(chainId: number): boolean {
@@ -797,14 +1141,36 @@ export async function signMetaTxCallExternalContract(
797
1141
  });
798
1142
  }
799
1143
 
1144
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
800
1145
  export async function signMetaTxCreateOfferWithCondition(
801
1146
  args: BaseMetaTxArgs & {
802
1147
  offerToCreate: CreateOfferArgs;
803
1148
  condition: ConditionStruct;
804
1149
  metadataStorage?: MetadataStorage;
805
1150
  theGraphStorage?: MetadataStorage;
1151
+ returnTypedDataToSign: true;
806
1152
  }
807
- ) {
1153
+ ): Promise<UnsignedMetaTx>;
1154
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1155
+ export async function signMetaTxCreateOfferWithCondition(
1156
+ args: BaseMetaTxArgs & {
1157
+ offerToCreate: CreateOfferArgs;
1158
+ condition: ConditionStruct;
1159
+ metadataStorage?: MetadataStorage;
1160
+ theGraphStorage?: MetadataStorage;
1161
+ returnTypedDataToSign?: false | undefined;
1162
+ }
1163
+ ): Promise<SignedMetaTx>;
1164
+ // Implementation
1165
+ export async function signMetaTxCreateOfferWithCondition(
1166
+ args: BaseMetaTxArgs & {
1167
+ offerToCreate: CreateOfferArgs;
1168
+ condition: ConditionStruct;
1169
+ metadataStorage?: MetadataStorage;
1170
+ theGraphStorage?: MetadataStorage;
1171
+ returnTypedDataToSign?: boolean;
1172
+ }
1173
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
808
1174
  utils.validation.createOfferArgsSchema.validateSync(args.offerToCreate, {
809
1175
  abortEarly: false
810
1176
  });
@@ -820,7 +1186,7 @@ export async function signMetaTxCreateOfferWithCondition(
820
1186
  createOffersArgs: [args.offerToCreate]
821
1187
  });
822
1188
 
823
- return signMetaTx({
1189
+ const signMetaTxArgs = {
824
1190
  ...args,
825
1191
  functionName:
826
1192
  "createOfferWithCondition((uint256,uint256,uint256,uint256,uint256,uint256,address,uint8,uint8,string,string,bool,uint256,(address[],uint256[])[],uint256),(uint256,uint256,uint256,uint256),(uint256,uint256,uint256),(uint256,address),(uint8,uint8,address,uint8,uint256,uint256,uint256,uint256),uint256,uint256)",
@@ -828,14 +1194,34 @@ export async function signMetaTxCreateOfferWithCondition(
828
1194
  args.offerToCreate,
829
1195
  args.condition
830
1196
  )
831
- });
1197
+ };
1198
+ if (args.returnTypedDataToSign) {
1199
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
1200
+ }
1201
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
832
1202
  }
833
1203
 
1204
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1205
+ export async function signMetaTxCommitToOffer(
1206
+ args: BaseMetaTxArgs & {
1207
+ offerId: BigNumberish;
1208
+ returnTypedDataToSign: true;
1209
+ }
1210
+ ): Promise<UnsignedMetaTx>;
1211
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1212
+ export async function signMetaTxCommitToOffer(
1213
+ args: BaseMetaTxArgs & {
1214
+ offerId: BigNumberish;
1215
+ returnTypedDataToSign?: false | undefined;
1216
+ }
1217
+ ): Promise<SignedMetaTx>;
1218
+ // Implementation
834
1219
  export async function signMetaTxCommitToOffer(
835
1220
  args: BaseMetaTxArgs & {
836
1221
  offerId: BigNumberish;
1222
+ returnTypedDataToSign?: boolean;
837
1223
  }
838
- ): Promise<SignedMetaTx> {
1224
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
839
1225
  const functionName = "commitToOffer(address,uint256)";
840
1226
 
841
1227
  const offerType = [
@@ -869,6 +1255,23 @@ export async function signMetaTxCommitToOffer(
869
1255
  }
870
1256
  };
871
1257
 
1258
+ const functionSignature = bosonExchangeCommitHandlerIface.encodeFunctionData(
1259
+ "commitToOffer",
1260
+ [buyerAddress, args.offerId]
1261
+ );
1262
+
1263
+ if (args.returnTypedDataToSign) {
1264
+ const structuredData = await prepareDataSignatureParameters({
1265
+ ...args,
1266
+ verifyingContractAddress: args.metaTxHandlerAddress,
1267
+ customSignatureType,
1268
+ primaryType: "MetaTxCommitToOffer",
1269
+ message,
1270
+ returnTypedDataToSign: true
1271
+ });
1272
+ return { ...structuredData, functionName, functionSignature };
1273
+ }
1274
+
872
1275
  const signatureParams = await prepareDataSignatureParameters({
873
1276
  ...args,
874
1277
  verifyingContractAddress: args.metaTxHandlerAddress,
@@ -881,19 +1284,34 @@ export async function signMetaTxCommitToOffer(
881
1284
  return {
882
1285
  ...signatureParams,
883
1286
  functionName,
884
- functionSignature: bosonExchangeCommitHandlerIface.encodeFunctionData(
885
- "commitToOffer",
886
- [buyerAddress, args.offerId]
887
- )
1287
+ functionSignature
888
1288
  };
889
1289
  }
890
1290
 
1291
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
891
1292
  export async function signMetaTxCommitToConditionalOffer(
892
1293
  args: BaseMetaTxArgs & {
893
1294
  offerId: BigNumberish;
894
1295
  tokenId: BigNumberish;
1296
+ returnTypedDataToSign: true;
895
1297
  }
896
- ): Promise<SignedMetaTx> {
1298
+ ): Promise<UnsignedMetaTx>;
1299
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1300
+ export async function signMetaTxCommitToConditionalOffer(
1301
+ args: BaseMetaTxArgs & {
1302
+ offerId: BigNumberish;
1303
+ tokenId: BigNumberish;
1304
+ returnTypedDataToSign?: false | undefined;
1305
+ }
1306
+ ): Promise<SignedMetaTx>;
1307
+ // Implementation
1308
+ export async function signMetaTxCommitToConditionalOffer(
1309
+ args: BaseMetaTxArgs & {
1310
+ offerId: BigNumberish;
1311
+ tokenId: BigNumberish;
1312
+ returnTypedDataToSign?: boolean;
1313
+ }
1314
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
897
1315
  const functionName = "commitToConditionalOffer(address,uint256,uint256)";
898
1316
 
899
1317
  const offerType = [
@@ -929,6 +1347,23 @@ export async function signMetaTxCommitToConditionalOffer(
929
1347
  }
930
1348
  };
931
1349
 
1350
+ const functionSignature = bosonExchangeCommitHandlerIface.encodeFunctionData(
1351
+ "commitToConditionalOffer",
1352
+ [buyerAddress, args.offerId, args.tokenId]
1353
+ );
1354
+
1355
+ if (args.returnTypedDataToSign) {
1356
+ const structuredData = await prepareDataSignatureParameters({
1357
+ ...args,
1358
+ verifyingContractAddress: args.metaTxHandlerAddress,
1359
+ customSignatureType,
1360
+ primaryType: "MetaTxCommitToConditionalOffer",
1361
+ message,
1362
+ returnTypedDataToSign: true
1363
+ });
1364
+ return { ...structuredData, functionName, functionSignature };
1365
+ }
1366
+
932
1367
  const signatureParams = await prepareDataSignatureParameters({
933
1368
  ...args,
934
1369
  verifyingContractAddress: args.metaTxHandlerAddress,
@@ -941,36 +1376,75 @@ export async function signMetaTxCommitToConditionalOffer(
941
1376
  return {
942
1377
  ...signatureParams,
943
1378
  functionName,
944
- functionSignature: bosonExchangeCommitHandlerIface.encodeFunctionData(
945
- "commitToConditionalOffer",
946
- [buyerAddress, args.offerId, args.tokenId]
947
- )
1379
+ functionSignature
948
1380
  };
949
1381
  }
950
1382
 
1383
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1384
+ export async function signMetaTxCommitToBuyerOffer(
1385
+ args: BaseMetaTxArgs & {
1386
+ offerId: BigNumberish;
1387
+ sellerParams: SellerOfferArgs;
1388
+ returnTypedDataToSign: true;
1389
+ }
1390
+ ): Promise<UnsignedMetaTx>;
1391
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
951
1392
  export async function signMetaTxCommitToBuyerOffer(
952
1393
  args: BaseMetaTxArgs & {
953
1394
  offerId: BigNumberish;
954
1395
  sellerParams: SellerOfferArgs;
1396
+ returnTypedDataToSign?: false | undefined;
955
1397
  }
956
- ): Promise<SignedMetaTx> {
1398
+ ): Promise<SignedMetaTx>;
1399
+ // Implementation
1400
+ export async function signMetaTxCommitToBuyerOffer(
1401
+ args: BaseMetaTxArgs & {
1402
+ offerId: BigNumberish;
1403
+ sellerParams: SellerOfferArgs;
1404
+ returnTypedDataToSign?: boolean;
1405
+ }
1406
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
957
1407
  const functionName =
958
1408
  "commitToBuyerOffer(uint256,(uint256,(address[],uint256[]),address))";
959
1409
 
960
- return signMetaTx({
1410
+ const signMetaTxArgs = {
961
1411
  ...args,
962
1412
  functionName,
963
1413
  functionSignature: encodeCommitToBuyerOffer(args.offerId, args.sellerParams)
964
- });
1414
+ };
1415
+ if (args.returnTypedDataToSign) {
1416
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
1417
+ }
1418
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
965
1419
  }
966
1420
 
1421
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1422
+ export async function signMetaTxCreateOfferAndCommit(
1423
+ args: BaseMetaTxArgs & {
1424
+ createOfferAndCommitArgs: FullOfferArgs;
1425
+ metadataStorage?: MetadataStorage;
1426
+ theGraphStorage?: MetadataStorage;
1427
+ returnTypedDataToSign: true;
1428
+ }
1429
+ ): Promise<UnsignedMetaTx>;
1430
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
967
1431
  export async function signMetaTxCreateOfferAndCommit(
968
1432
  args: BaseMetaTxArgs & {
969
1433
  createOfferAndCommitArgs: FullOfferArgs;
970
1434
  metadataStorage?: MetadataStorage;
971
1435
  theGraphStorage?: MetadataStorage;
1436
+ returnTypedDataToSign?: false | undefined;
972
1437
  }
973
- ): Promise<SignedMetaTx> {
1438
+ ): Promise<SignedMetaTx>;
1439
+ // Implementation
1440
+ export async function signMetaTxCreateOfferAndCommit(
1441
+ args: BaseMetaTxArgs & {
1442
+ createOfferAndCommitArgs: FullOfferArgs;
1443
+ metadataStorage?: MetadataStorage;
1444
+ theGraphStorage?: MetadataStorage;
1445
+ returnTypedDataToSign?: boolean;
1446
+ }
1447
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
974
1448
  utils.validation.createOfferAndCommitArgsSchema.validateSync(
975
1449
  args.createOfferAndCommitArgs,
976
1450
  { abortEarly: false }
@@ -987,71 +1461,172 @@ export async function signMetaTxCreateOfferAndCommit(
987
1461
  createOffersArgs: [args.createOfferAndCommitArgs]
988
1462
  });
989
1463
 
990
- return signMetaTx({
1464
+ const signMetaTxArgs = {
991
1465
  ...args,
992
1466
  functionName:
993
1467
  "createOfferAndCommit(((uint256,uint256,uint256,uint256,uint256,uint256,address,uint8,uint8,string,string,bool,uint256,(address[],uint256[])[],uint256),(uint256,uint256,uint256,uint256),(uint256,uint256,uint256),(uint256,address),(uint8,uint8,address,uint8,uint256,uint256,uint256,uint256),uint256,uint256,bool),address,address,bytes,uint256,(uint256,(address[],uint256[]),address))",
994
1468
  functionSignature: encodeCreateOfferAndCommit(args.createOfferAndCommitArgs)
995
- });
1469
+ };
1470
+ if (args.returnTypedDataToSign) {
1471
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
1472
+ }
1473
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
996
1474
  }
997
1475
 
1476
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
998
1477
  export async function signMetaTxCancelVoucher(
999
1478
  args: BaseMetaTxArgs & {
1000
1479
  exchangeId: BigNumberish;
1480
+ returnTypedDataToSign: true;
1001
1481
  }
1002
- ) {
1482
+ ): Promise<UnsignedMetaTx>;
1483
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1484
+ export async function signMetaTxCancelVoucher(
1485
+ args: BaseMetaTxArgs & {
1486
+ exchangeId: BigNumberish;
1487
+ returnTypedDataToSign?: false | undefined;
1488
+ }
1489
+ ): Promise<SignedMetaTx>;
1490
+ // Implementation
1491
+ export async function signMetaTxCancelVoucher(
1492
+ args: BaseMetaTxArgs & {
1493
+ exchangeId: BigNumberish;
1494
+ returnTypedDataToSign?: boolean;
1495
+ }
1496
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1003
1497
  return makeExchangeMetaTxSigner("cancelVoucher(uint256)")(args);
1004
1498
  }
1005
1499
 
1500
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1006
1501
  export async function signMetaTxRedeemVoucher(
1007
1502
  args: BaseMetaTxArgs & {
1008
1503
  exchangeId: BigNumberish;
1504
+ returnTypedDataToSign: true;
1009
1505
  }
1010
- ) {
1506
+ ): Promise<UnsignedMetaTx>;
1507
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1508
+ export async function signMetaTxRedeemVoucher(
1509
+ args: BaseMetaTxArgs & {
1510
+ exchangeId: BigNumberish;
1511
+ returnTypedDataToSign?: false | undefined;
1512
+ }
1513
+ ): Promise<SignedMetaTx>;
1514
+ // Implementation
1515
+ export async function signMetaTxRedeemVoucher(
1516
+ args: BaseMetaTxArgs & {
1517
+ exchangeId: BigNumberish;
1518
+ returnTypedDataToSign?: boolean;
1519
+ }
1520
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1011
1521
  return makeExchangeMetaTxSigner("redeemVoucher(uint256)")(args);
1012
1522
  }
1013
1523
 
1524
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1014
1525
  export async function signMetaTxCompleteExchange(
1015
1526
  args: BaseMetaTxArgs & {
1016
1527
  exchangeId: BigNumberish;
1528
+ returnTypedDataToSign: true;
1017
1529
  }
1018
- ) {
1530
+ ): Promise<UnsignedMetaTx>;
1531
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1532
+ export async function signMetaTxCompleteExchange(
1533
+ args: BaseMetaTxArgs & {
1534
+ exchangeId: BigNumberish;
1535
+ returnTypedDataToSign?: false | undefined;
1536
+ }
1537
+ ): Promise<SignedMetaTx>;
1538
+ // Implementation
1539
+ export async function signMetaTxCompleteExchange(
1540
+ args: BaseMetaTxArgs & {
1541
+ exchangeId: BigNumberish;
1542
+ returnTypedDataToSign?: boolean;
1543
+ }
1544
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1019
1545
  return makeExchangeMetaTxSigner("completeExchange(uint256)")(args);
1020
1546
  }
1021
1547
 
1548
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1022
1549
  export async function signMetaTxRetractDispute(
1023
1550
  args: BaseMetaTxArgs & {
1024
1551
  exchangeId: BigNumberish;
1552
+ returnTypedDataToSign: true;
1025
1553
  }
1026
- ) {
1554
+ ): Promise<UnsignedMetaTx>;
1555
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1556
+ export async function signMetaTxRetractDispute(
1557
+ args: BaseMetaTxArgs & {
1558
+ exchangeId: BigNumberish;
1559
+ returnTypedDataToSign?: false | undefined;
1560
+ }
1561
+ ): Promise<SignedMetaTx>;
1562
+ // Implementation
1563
+ export async function signMetaTxRetractDispute(
1564
+ args: BaseMetaTxArgs & {
1565
+ exchangeId: BigNumberish;
1566
+ returnTypedDataToSign?: boolean;
1567
+ }
1568
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1027
1569
  return makeExchangeMetaTxSigner(
1028
1570
  "retractDispute(uint256)",
1029
1571
  bosonDisputeHandlerIface
1030
1572
  )(args);
1031
1573
  }
1032
1574
 
1575
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1033
1576
  export async function signMetaTxEscalateDispute(
1034
1577
  args: BaseMetaTxArgs & {
1035
1578
  exchangeId: BigNumberish;
1579
+ returnTypedDataToSign: true;
1036
1580
  }
1037
- ) {
1581
+ ): Promise<UnsignedMetaTx>;
1582
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1583
+ export async function signMetaTxEscalateDispute(
1584
+ args: BaseMetaTxArgs & {
1585
+ exchangeId: BigNumberish;
1586
+ returnTypedDataToSign?: false | undefined;
1587
+ }
1588
+ ): Promise<SignedMetaTx>;
1589
+ // Implementation
1590
+ export async function signMetaTxEscalateDispute(
1591
+ args: BaseMetaTxArgs & {
1592
+ exchangeId: BigNumberish;
1593
+ returnTypedDataToSign?: boolean;
1594
+ }
1595
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1038
1596
  return makeExchangeMetaTxSigner(
1039
1597
  "escalateDispute(uint256)",
1040
1598
  bosonDisputeHandlerIface
1041
1599
  )(args);
1042
1600
  }
1043
1601
 
1602
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1044
1603
  export async function signMetaTxRaiseDispute(
1045
1604
  args: BaseMetaTxArgs & {
1046
1605
  exchangeId: BigNumberish;
1606
+ returnTypedDataToSign: true;
1047
1607
  }
1048
- ) {
1608
+ ): Promise<UnsignedMetaTx>;
1609
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1610
+ export async function signMetaTxRaiseDispute(
1611
+ args: BaseMetaTxArgs & {
1612
+ exchangeId: BigNumberish;
1613
+ returnTypedDataToSign?: false | undefined;
1614
+ }
1615
+ ): Promise<SignedMetaTx>;
1616
+ // Implementation
1617
+ export async function signMetaTxRaiseDispute(
1618
+ args: BaseMetaTxArgs & {
1619
+ exchangeId: BigNumberish;
1620
+ returnTypedDataToSign?: boolean;
1621
+ }
1622
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1049
1623
  return makeExchangeMetaTxSigner(
1050
1624
  "raiseDispute(uint256)",
1051
1625
  bosonDisputeHandlerIface
1052
1626
  )(args);
1053
1627
  }
1054
1628
 
1629
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1055
1630
  export async function signMetaTxResolveDispute(
1056
1631
  args: BaseMetaTxArgs & {
1057
1632
  exchangeId: BigNumberish;
@@ -1063,8 +1638,39 @@ export async function signMetaTxResolveDispute(
1063
1638
  v: number;
1064
1639
  }
1065
1640
  | string;
1641
+ returnTypedDataToSign: true;
1066
1642
  }
1067
- ): Promise<SignedMetaTx> {
1643
+ ): Promise<UnsignedMetaTx>;
1644
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1645
+ export async function signMetaTxResolveDispute(
1646
+ args: BaseMetaTxArgs & {
1647
+ exchangeId: BigNumberish;
1648
+ buyerPercent: BigNumberish;
1649
+ counterpartySig:
1650
+ | {
1651
+ r: string;
1652
+ s: string;
1653
+ v: number;
1654
+ }
1655
+ | string;
1656
+ returnTypedDataToSign?: false | undefined;
1657
+ }
1658
+ ): Promise<SignedMetaTx>;
1659
+ // Implementation
1660
+ export async function signMetaTxResolveDispute(
1661
+ args: BaseMetaTxArgs & {
1662
+ exchangeId: BigNumberish;
1663
+ buyerPercent: BigNumberish;
1664
+ counterpartySig:
1665
+ | {
1666
+ r: string;
1667
+ s: string;
1668
+ v: number;
1669
+ }
1670
+ | string;
1671
+ returnTypedDataToSign?: boolean;
1672
+ }
1673
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1068
1674
  const functionName = "resolveDispute(uint256,uint256,bytes)";
1069
1675
  const counterpartySig =
1070
1676
  typeof args.counterpartySig === "string"
@@ -1102,6 +1708,24 @@ export async function signMetaTxResolveDispute(
1102
1708
  }
1103
1709
  };
1104
1710
 
1711
+ const functionSignature = bosonDisputeHandlerIface.encodeFunctionData(
1712
+ // remove params in brackets from string
1713
+ functionName.replace(/\(([^)]*)\)[^(]*$/, ""),
1714
+ [args.exchangeId, args.buyerPercent, counterpartySig]
1715
+ );
1716
+
1717
+ if (args.returnTypedDataToSign) {
1718
+ const structuredData = await prepareDataSignatureParameters({
1719
+ ...args,
1720
+ verifyingContractAddress: args.metaTxHandlerAddress,
1721
+ customSignatureType,
1722
+ primaryType: "MetaTxDisputeResolution",
1723
+ message,
1724
+ returnTypedDataToSign: true
1725
+ });
1726
+ return { ...structuredData, functionName, functionSignature };
1727
+ }
1728
+
1105
1729
  const signatureParams = await prepareDataSignatureParameters({
1106
1730
  ...args,
1107
1731
  verifyingContractAddress: args.metaTxHandlerAddress,
@@ -1114,37 +1738,75 @@ export async function signMetaTxResolveDispute(
1114
1738
  return {
1115
1739
  ...signatureParams,
1116
1740
  functionName,
1117
- functionSignature: bosonDisputeHandlerIface.encodeFunctionData(
1118
- // remove params in brackets from string
1119
- functionName.replace(/\(([^)]*)\)[^(]*$/, ""),
1120
- [args.exchangeId, args.buyerPercent, counterpartySig]
1121
- )
1741
+ functionSignature
1122
1742
  };
1123
1743
  }
1124
1744
 
1745
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1125
1746
  export async function signMetaTxExtendDisputeTimeout(
1126
1747
  args: BaseMetaTxArgs & {
1127
1748
  exchangeId: BigNumberish;
1128
1749
  newTimeout: BigNumberish;
1750
+ returnTypedDataToSign: true;
1129
1751
  }
1130
- ) {
1131
- return signMetaTx({
1752
+ ): Promise<UnsignedMetaTx>;
1753
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1754
+ export async function signMetaTxExtendDisputeTimeout(
1755
+ args: BaseMetaTxArgs & {
1756
+ exchangeId: BigNumberish;
1757
+ newTimeout: BigNumberish;
1758
+ returnTypedDataToSign?: false | undefined;
1759
+ }
1760
+ ): Promise<SignedMetaTx>;
1761
+ // Implementation
1762
+ export async function signMetaTxExtendDisputeTimeout(
1763
+ args: BaseMetaTxArgs & {
1764
+ exchangeId: BigNumberish;
1765
+ newTimeout: BigNumberish;
1766
+ returnTypedDataToSign?: boolean;
1767
+ }
1768
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1769
+ const signMetaTxArgs = {
1132
1770
  ...args,
1133
1771
  functionName: "extendDisputeTimeout(uint256,uint256)",
1134
1772
  functionSignature: bosonDisputeHandlerIface.encodeFunctionData(
1135
1773
  "extendDisputeTimeout",
1136
1774
  [args.exchangeId, args.newTimeout]
1137
1775
  )
1138
- });
1776
+ };
1777
+ if (args.returnTypedDataToSign) {
1778
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
1779
+ }
1780
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
1139
1781
  }
1140
1782
 
1783
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1784
+ export async function signMetaTxWithdrawFunds(
1785
+ args: BaseMetaTxArgs & {
1786
+ entityId: BigNumberish;
1787
+ tokenList: string[];
1788
+ tokenAmounts: BigNumberish[];
1789
+ returnTypedDataToSign: true;
1790
+ }
1791
+ ): Promise<UnsignedMetaTx>;
1792
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1141
1793
  export async function signMetaTxWithdrawFunds(
1142
1794
  args: BaseMetaTxArgs & {
1143
1795
  entityId: BigNumberish;
1144
1796
  tokenList: string[];
1145
1797
  tokenAmounts: BigNumberish[];
1798
+ returnTypedDataToSign?: false | undefined;
1146
1799
  }
1147
- ): Promise<SignedMetaTx> {
1800
+ ): Promise<SignedMetaTx>;
1801
+ // Implementation
1802
+ export async function signMetaTxWithdrawFunds(
1803
+ args: BaseMetaTxArgs & {
1804
+ entityId: BigNumberish;
1805
+ tokenList: string[];
1806
+ tokenAmounts: BigNumberish[];
1807
+ returnTypedDataToSign?: boolean;
1808
+ }
1809
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1148
1810
  const functionName = "withdrawFunds(uint256,address[],uint256[])";
1149
1811
 
1150
1812
  const fundType = [
@@ -1178,6 +1840,24 @@ export async function signMetaTxWithdrawFunds(
1178
1840
  }
1179
1841
  };
1180
1842
 
1843
+ const functionSignature = encodeWithdrawFunds(
1844
+ args.entityId,
1845
+ args.tokenList,
1846
+ args.tokenAmounts
1847
+ );
1848
+
1849
+ if (args.returnTypedDataToSign) {
1850
+ const structuredData = await prepareDataSignatureParameters({
1851
+ ...args,
1852
+ verifyingContractAddress: args.metaTxHandlerAddress,
1853
+ customSignatureType,
1854
+ primaryType: "MetaTxFund",
1855
+ message,
1856
+ returnTypedDataToSign: true
1857
+ });
1858
+ return { ...structuredData, functionName, functionSignature };
1859
+ }
1860
+
1181
1861
  const signatureParams = await prepareDataSignatureParameters({
1182
1862
  ...args,
1183
1863
  verifyingContractAddress: args.metaTxHandlerAddress,
@@ -1190,21 +1870,37 @@ export async function signMetaTxWithdrawFunds(
1190
1870
  return {
1191
1871
  ...signatureParams,
1192
1872
  functionName,
1193
- functionSignature: encodeWithdrawFunds(
1194
- args.entityId,
1195
- args.tokenList,
1196
- args.tokenAmounts
1197
- )
1873
+ functionSignature
1198
1874
  };
1199
1875
  }
1200
1876
 
1877
+ // Overload: returnTypedDataToSign is true → returns UnsignedMetaTx
1201
1878
  export async function signMetaTxDepositFunds(
1202
1879
  args: BaseMetaTxArgs & {
1203
1880
  entityId: BigNumberish;
1204
1881
  fundsTokenAddress: string;
1205
1882
  fundsAmount: BigNumberish;
1883
+ returnTypedDataToSign: true;
1206
1884
  }
1207
- ) {
1885
+ ): Promise<UnsignedMetaTx>;
1886
+ // Overload: returnTypedDataToSign is false or undefined → returns SignedMetaTx
1887
+ export async function signMetaTxDepositFunds(
1888
+ args: BaseMetaTxArgs & {
1889
+ entityId: BigNumberish;
1890
+ fundsTokenAddress: string;
1891
+ fundsAmount: BigNumberish;
1892
+ returnTypedDataToSign?: false | undefined;
1893
+ }
1894
+ ): Promise<SignedMetaTx>;
1895
+ // Implementation
1896
+ export async function signMetaTxDepositFunds(
1897
+ args: BaseMetaTxArgs & {
1898
+ entityId: BigNumberish;
1899
+ fundsTokenAddress: string;
1900
+ fundsAmount: BigNumberish;
1901
+ returnTypedDataToSign?: boolean;
1902
+ }
1903
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1208
1904
  if (!isAddress(args.fundsTokenAddress)) {
1209
1905
  throw new Error(`Invalid fundsTokenAddress: ${args.fundsTokenAddress}`);
1210
1906
  }
@@ -1215,7 +1911,7 @@ export async function signMetaTxDepositFunds(
1215
1911
  );
1216
1912
  }
1217
1913
 
1218
- return signMetaTx({
1914
+ const signMetaTxArgs = {
1219
1915
  ...args,
1220
1916
  functionName: "depositFunds(uint256,address,uint256)",
1221
1917
  functionSignature: encodeDepositFunds(
@@ -1223,7 +1919,11 @@ export async function signMetaTxDepositFunds(
1223
1919
  args.fundsTokenAddress,
1224
1920
  args.fundsAmount
1225
1921
  )
1226
- });
1922
+ };
1923
+ if (args.returnTypedDataToSign) {
1924
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: true });
1925
+ }
1926
+ return signMetaTx({ ...signMetaTxArgs, returnTypedDataToSign: false });
1227
1927
  }
1228
1928
 
1229
1929
  function makeExchangeMetaTxSigner(
@@ -1239,8 +1939,9 @@ function makeExchangeMetaTxSigner(
1239
1939
  return async function signExchangeMetaTx(
1240
1940
  args: BaseMetaTxArgs & {
1241
1941
  exchangeId: BigNumberish;
1942
+ returnTypedDataToSign?: boolean;
1242
1943
  }
1243
- ): Promise<SignedMetaTx> {
1944
+ ): Promise<SignedMetaTx | UnsignedMetaTx> {
1244
1945
  const exchangeType = [{ name: "exchangeId", type: "uint256" }];
1245
1946
 
1246
1947
  const metaTransactionType = [
@@ -1268,6 +1969,24 @@ function makeExchangeMetaTxSigner(
1268
1969
  }
1269
1970
  };
1270
1971
 
1972
+ const functionSignature = handlerIface.encodeFunctionData(
1973
+ // remove params in brackets from string
1974
+ functionName.replace(/\(([^)]*)\)[^(]*$/, ""),
1975
+ [args.exchangeId]
1976
+ );
1977
+
1978
+ if (args.returnTypedDataToSign) {
1979
+ const structuredData = await prepareDataSignatureParameters({
1980
+ ...args,
1981
+ verifyingContractAddress: args.metaTxHandlerAddress,
1982
+ customSignatureType,
1983
+ primaryType: "MetaTxExchange",
1984
+ message,
1985
+ returnTypedDataToSign: true
1986
+ });
1987
+ return { ...structuredData, functionName, functionSignature };
1988
+ }
1989
+
1271
1990
  const signatureParams = await prepareDataSignatureParameters({
1272
1991
  ...args,
1273
1992
  verifyingContractAddress: args.metaTxHandlerAddress,
@@ -1280,11 +1999,7 @@ function makeExchangeMetaTxSigner(
1280
1999
  return {
1281
2000
  ...signatureParams,
1282
2001
  functionName,
1283
- functionSignature: handlerIface.encodeFunctionData(
1284
- // remove params in brackets from string
1285
- functionName.replace(/\(([^)]*)\)[^(]*$/, ""),
1286
- [args.exchangeId]
1287
- )
2002
+ functionSignature
1288
2003
  };
1289
2004
  };
1290
2005
  }