@bosonprotocol/core-sdk 1.25.0-alpha.3 → 1.25.0-alpha.30

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 (226) hide show
  1. package/dist/cjs/accounts/interface.js.map +1 -1
  2. package/dist/cjs/accounts/mixin.d.ts +4 -4
  3. package/dist/cjs/accounts/mixin.d.ts.map +1 -1
  4. package/dist/cjs/accounts/mixin.js +8 -8
  5. package/dist/cjs/accounts/mixin.js.map +1 -1
  6. package/dist/cjs/accounts/subgraph.d.ts +1 -1
  7. package/dist/cjs/accounts/subgraph.d.ts.map +1 -1
  8. package/dist/cjs/accounts/subgraph.js +7 -7
  9. package/dist/cjs/accounts/subgraph.js.map +1 -1
  10. package/dist/cjs/accounts/types.d.ts +1 -1
  11. package/dist/cjs/accounts/types.d.ts.map +1 -1
  12. package/dist/cjs/core-sdk.d.ts +1 -0
  13. package/dist/cjs/core-sdk.d.ts.map +1 -1
  14. package/dist/cjs/core-sdk.js +3 -0
  15. package/dist/cjs/core-sdk.js.map +1 -1
  16. package/dist/cjs/erc1155/mixin.d.ts +1 -1
  17. package/dist/cjs/erc1155/mixin.d.ts.map +1 -1
  18. package/dist/cjs/erc1155/mixin.js +2 -2
  19. package/dist/cjs/erc1155/mixin.js.map +1 -1
  20. package/dist/cjs/erc20/mixin.d.ts +7 -7
  21. package/dist/cjs/erc20/mixin.d.ts.map +1 -1
  22. package/dist/cjs/erc20/mixin.js +14 -14
  23. package/dist/cjs/erc20/mixin.js.map +1 -1
  24. package/dist/cjs/erc721/mixin.d.ts +3 -3
  25. package/dist/cjs/erc721/mixin.d.ts.map +1 -1
  26. package/dist/cjs/erc721/mixin.js +6 -6
  27. package/dist/cjs/erc721/mixin.js.map +1 -1
  28. package/dist/cjs/exchanges/handler.js +12 -12
  29. package/dist/cjs/exchanges/handler.js.map +1 -1
  30. package/dist/cjs/exchanges/mixin.d.ts +3 -3
  31. package/dist/cjs/exchanges/mixin.js +3 -3
  32. package/dist/cjs/forwarder/handler.d.ts +1 -1
  33. package/dist/cjs/forwarder/handler.d.ts.map +1 -1
  34. package/dist/cjs/forwarder/handler.js +2 -4
  35. package/dist/cjs/forwarder/handler.js.map +1 -1
  36. package/dist/cjs/index.d.ts +2 -1
  37. package/dist/cjs/index.d.ts.map +1 -1
  38. package/dist/cjs/index.js +2 -1
  39. package/dist/cjs/index.js.map +1 -1
  40. package/dist/cjs/meta-tx/biconomy.d.ts +17 -3
  41. package/dist/cjs/meta-tx/biconomy.d.ts.map +1 -1
  42. package/dist/cjs/meta-tx/biconomy.js +19 -0
  43. package/dist/cjs/meta-tx/biconomy.js.map +1 -1
  44. package/dist/cjs/meta-tx/handler.d.ts +38 -4
  45. package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
  46. package/dist/cjs/meta-tx/handler.js +94 -25
  47. package/dist/cjs/meta-tx/handler.js.map +1 -1
  48. package/dist/cjs/meta-tx/mixin.d.ts +25 -3
  49. package/dist/cjs/meta-tx/mixin.d.ts.map +1 -1
  50. package/dist/cjs/meta-tx/mixin.js +51 -22
  51. package/dist/cjs/meta-tx/mixin.js.map +1 -1
  52. package/dist/cjs/metadata/mixin.d.ts +3 -3
  53. package/dist/cjs/metadata/mixin.d.ts.map +1 -1
  54. package/dist/cjs/metadata/mixin.js.map +1 -1
  55. package/dist/cjs/offers/handler.d.ts +15 -0
  56. package/dist/cjs/offers/handler.d.ts.map +1 -1
  57. package/dist/cjs/offers/handler.js +28 -4
  58. package/dist/cjs/offers/handler.js.map +1 -1
  59. package/dist/cjs/offers/interface.d.ts +1 -1
  60. package/dist/cjs/offers/interface.d.ts.map +1 -1
  61. package/dist/cjs/offers/interface.js +3 -2
  62. package/dist/cjs/offers/interface.js.map +1 -1
  63. package/dist/cjs/offers/mixin.d.ts +26 -3
  64. package/dist/cjs/offers/mixin.d.ts.map +1 -1
  65. package/dist/cjs/offers/mixin.js +46 -3
  66. package/dist/cjs/offers/mixin.js.map +1 -1
  67. package/dist/cjs/offers/renderContractualAgreement.d.ts.map +1 -1
  68. package/dist/cjs/offers/renderContractualAgreement.js +5 -4
  69. package/dist/cjs/offers/renderContractualAgreement.js.map +1 -1
  70. package/dist/cjs/seaport/abi.d.ts +41 -0
  71. package/dist/cjs/seaport/abi.d.ts.map +1 -0
  72. package/dist/cjs/seaport/abi.js +153 -0
  73. package/dist/cjs/seaport/abi.js.map +1 -0
  74. package/dist/cjs/seaport/handler.d.ts +46 -0
  75. package/dist/cjs/seaport/handler.d.ts.map +1 -0
  76. package/dist/cjs/seaport/handler.js +28 -0
  77. package/dist/cjs/seaport/handler.js.map +1 -0
  78. package/dist/cjs/seaport/index.d.ts +2 -0
  79. package/dist/cjs/seaport/index.d.ts.map +1 -0
  80. package/dist/cjs/seaport/index.js +28 -0
  81. package/dist/cjs/seaport/index.js.map +1 -0
  82. package/dist/cjs/subgraph.d.ts +7036 -358
  83. package/dist/cjs/subgraph.d.ts.map +1 -1
  84. package/dist/cjs/subgraph.js +166 -11
  85. package/dist/cjs/subgraph.js.map +1 -1
  86. package/dist/cjs/voucher/handler.d.ts +31 -0
  87. package/dist/cjs/voucher/handler.d.ts.map +1 -1
  88. package/dist/cjs/voucher/handler.js +57 -1
  89. package/dist/cjs/voucher/handler.js.map +1 -1
  90. package/dist/cjs/voucher/interface.d.ts +8 -0
  91. package/dist/cjs/voucher/interface.d.ts.map +1 -1
  92. package/dist/cjs/voucher/interface.js +81 -1
  93. package/dist/cjs/voucher/interface.js.map +1 -1
  94. package/dist/cjs/voucher/mixin.d.ts +11 -0
  95. package/dist/cjs/voucher/mixin.d.ts.map +1 -1
  96. package/dist/cjs/voucher/mixin.js +47 -0
  97. package/dist/cjs/voucher/mixin.js.map +1 -1
  98. package/dist/esm/accounts/interface.js.map +1 -1
  99. package/dist/esm/accounts/mixin.d.ts +4 -4
  100. package/dist/esm/accounts/mixin.d.ts.map +1 -1
  101. package/dist/esm/accounts/mixin.js +8 -8
  102. package/dist/esm/accounts/mixin.js.map +1 -1
  103. package/dist/esm/accounts/subgraph.d.ts +1 -1
  104. package/dist/esm/accounts/subgraph.d.ts.map +1 -1
  105. package/dist/esm/accounts/subgraph.js +5 -5
  106. package/dist/esm/accounts/subgraph.js.map +1 -1
  107. package/dist/esm/accounts/types.d.ts +1 -1
  108. package/dist/esm/accounts/types.d.ts.map +1 -1
  109. package/dist/esm/core-sdk.d.ts +1 -0
  110. package/dist/esm/core-sdk.d.ts.map +1 -1
  111. package/dist/esm/core-sdk.js +3 -0
  112. package/dist/esm/core-sdk.js.map +1 -1
  113. package/dist/esm/erc1155/mixin.d.ts +1 -1
  114. package/dist/esm/erc1155/mixin.d.ts.map +1 -1
  115. package/dist/esm/erc1155/mixin.js +2 -2
  116. package/dist/esm/erc1155/mixin.js.map +1 -1
  117. package/dist/esm/erc20/mixin.d.ts +7 -7
  118. package/dist/esm/erc20/mixin.d.ts.map +1 -1
  119. package/dist/esm/erc20/mixin.js +14 -14
  120. package/dist/esm/erc20/mixin.js.map +1 -1
  121. package/dist/esm/erc721/mixin.d.ts +3 -3
  122. package/dist/esm/erc721/mixin.d.ts.map +1 -1
  123. package/dist/esm/erc721/mixin.js +6 -6
  124. package/dist/esm/erc721/mixin.js.map +1 -1
  125. package/dist/esm/exchanges/handler.js +12 -12
  126. package/dist/esm/exchanges/handler.js.map +1 -1
  127. package/dist/esm/exchanges/mixin.d.ts +3 -3
  128. package/dist/esm/exchanges/mixin.js +3 -3
  129. package/dist/esm/forwarder/handler.d.ts +1 -1
  130. package/dist/esm/forwarder/handler.d.ts.map +1 -1
  131. package/dist/esm/forwarder/handler.js +2 -4
  132. package/dist/esm/forwarder/handler.js.map +1 -1
  133. package/dist/esm/index.d.ts +2 -1
  134. package/dist/esm/index.d.ts.map +1 -1
  135. package/dist/esm/index.js +1 -0
  136. package/dist/esm/index.js.map +1 -1
  137. package/dist/esm/meta-tx/biconomy.d.ts +17 -3
  138. package/dist/esm/meta-tx/biconomy.d.ts.map +1 -1
  139. package/dist/esm/meta-tx/biconomy.js +17 -0
  140. package/dist/esm/meta-tx/biconomy.js.map +1 -1
  141. package/dist/esm/meta-tx/handler.d.ts +38 -4
  142. package/dist/esm/meta-tx/handler.d.ts.map +1 -1
  143. package/dist/esm/meta-tx/handler.js +120 -23
  144. package/dist/esm/meta-tx/handler.js.map +1 -1
  145. package/dist/esm/meta-tx/mixin.d.ts +25 -3
  146. package/dist/esm/meta-tx/mixin.d.ts.map +1 -1
  147. package/dist/esm/meta-tx/mixin.js +67 -17
  148. package/dist/esm/meta-tx/mixin.js.map +1 -1
  149. package/dist/esm/metadata/mixin.d.ts +3 -3
  150. package/dist/esm/metadata/mixin.d.ts.map +1 -1
  151. package/dist/esm/metadata/mixin.js.map +1 -1
  152. package/dist/esm/offers/handler.d.ts +15 -0
  153. package/dist/esm/offers/handler.d.ts.map +1 -1
  154. package/dist/esm/offers/handler.js +21 -3
  155. package/dist/esm/offers/handler.js.map +1 -1
  156. package/dist/esm/offers/interface.d.ts +1 -1
  157. package/dist/esm/offers/interface.d.ts.map +1 -1
  158. package/dist/esm/offers/interface.js +3 -2
  159. package/dist/esm/offers/interface.js.map +1 -1
  160. package/dist/esm/offers/mixin.d.ts +26 -3
  161. package/dist/esm/offers/mixin.d.ts.map +1 -1
  162. package/dist/esm/offers/mixin.js +42 -3
  163. package/dist/esm/offers/mixin.js.map +1 -1
  164. package/dist/esm/offers/renderContractualAgreement.d.ts.map +1 -1
  165. package/dist/esm/offers/renderContractualAgreement.js +5 -4
  166. package/dist/esm/offers/renderContractualAgreement.js.map +1 -1
  167. package/dist/esm/seaport/abi.d.ts +41 -0
  168. package/dist/esm/seaport/abi.d.ts.map +1 -0
  169. package/dist/esm/seaport/abi.js +150 -0
  170. package/dist/esm/seaport/abi.js.map +1 -0
  171. package/dist/esm/seaport/handler.d.ts +46 -0
  172. package/dist/esm/seaport/handler.d.ts.map +1 -0
  173. package/dist/esm/seaport/handler.js +24 -0
  174. package/dist/esm/seaport/handler.js.map +1 -0
  175. package/dist/esm/seaport/index.d.ts +2 -0
  176. package/dist/esm/seaport/index.d.ts.map +1 -0
  177. package/dist/esm/seaport/index.js +2 -0
  178. package/dist/esm/seaport/index.js.map +1 -0
  179. package/dist/esm/subgraph.d.ts +7036 -358
  180. package/dist/esm/subgraph.d.ts.map +1 -1
  181. package/dist/esm/subgraph.js +163 -8
  182. package/dist/esm/subgraph.js.map +1 -1
  183. package/dist/esm/voucher/handler.d.ts +31 -0
  184. package/dist/esm/voucher/handler.d.ts.map +1 -1
  185. package/dist/esm/voucher/handler.js +39 -1
  186. package/dist/esm/voucher/handler.js.map +1 -1
  187. package/dist/esm/voucher/interface.d.ts +8 -0
  188. package/dist/esm/voucher/interface.d.ts.map +1 -1
  189. package/dist/esm/voucher/interface.js +72 -0
  190. package/dist/esm/voucher/interface.js.map +1 -1
  191. package/dist/esm/voucher/mixin.d.ts +11 -0
  192. package/dist/esm/voucher/mixin.d.ts.map +1 -1
  193. package/dist/esm/voucher/mixin.js +41 -0
  194. package/dist/esm/voucher/mixin.js.map +1 -1
  195. package/package.json +3 -3
  196. package/src/accounts/interface.ts +2 -1
  197. package/src/accounts/mixin.ts +15 -14
  198. package/src/accounts/queries.graphql +46 -4
  199. package/src/accounts/subgraph.ts +6 -6
  200. package/src/accounts/types.ts +1 -1
  201. package/src/core-sdk.ts +4 -0
  202. package/src/erc1155/mixin.ts +2 -2
  203. package/src/erc20/mixin.ts +14 -14
  204. package/src/erc721/mixin.ts +6 -6
  205. package/src/exchanges/handler.ts +13 -13
  206. package/src/exchanges/mixin.ts +3 -3
  207. package/src/forwarder/handler.ts +3 -5
  208. package/src/index.ts +2 -0
  209. package/src/meta-tx/biconomy.ts +35 -2
  210. package/src/meta-tx/handler.ts +204 -33
  211. package/src/meta-tx/mixin.ts +135 -21
  212. package/src/metadata/base.graphql +3 -0
  213. package/src/metadata/mixin.ts +5 -3
  214. package/src/metadata/product-v1.graphql +13 -0
  215. package/src/offers/handler.ts +36 -3
  216. package/src/offers/interface.ts +4 -2
  217. package/src/offers/mixin.ts +57 -2
  218. package/src/offers/queries.graphql +13 -0
  219. package/src/offers/renderContractualAgreement.ts +6 -9
  220. package/src/seaport/abi.ts +149 -0
  221. package/src/seaport/handler.ts +57 -0
  222. package/src/seaport/index.ts +1 -0
  223. package/src/subgraph.ts +7124 -320
  224. package/src/voucher/handler.ts +78 -1
  225. package/src/voucher/interface.ts +88 -0
  226. package/src/voucher/mixin.ts +76 -0
@@ -83,7 +83,7 @@ export class ExchangesMixin extends BaseCoreSDK {
83
83
 
84
84
  /**
85
85
  * Revokes an existing voucher by calling the `ExchangeHandlerContract`.
86
- * Callable by seller `operator`.
86
+ * Callable by seller `assistant`.
87
87
  * @param exchangeId - ID of exchange to revoke.
88
88
  * @returns Transaction response.
89
89
  */
@@ -134,7 +134,7 @@ export class ExchangesMixin extends BaseCoreSDK {
134
134
 
135
135
  /**
136
136
  * Completes an existing voucher by calling the `ExchangeHandlerContract`.
137
- * Callable by buyer or seller operator.
137
+ * Callable by buyer or seller assistant.
138
138
  * @param exchangeId - ID of exchange to complete.
139
139
  * @returns Transaction response.
140
140
  */
@@ -151,7 +151,7 @@ export class ExchangesMixin extends BaseCoreSDK {
151
151
 
152
152
  /**
153
153
  * Completes a batch of existing vouchers by calling the `ExchangeHandlerContract`.
154
- * Callable by buyer or seller operator.
154
+ * Callable by buyer or seller assistant.
155
155
  * @param exchangeIds - IDs of exchange to complete.
156
156
  * @returns Transaction response.
157
157
  */
@@ -7,13 +7,13 @@ export async function getNonce(args: {
7
7
  contractAddress: string;
8
8
  user: string;
9
9
  web3Lib: Web3LibAdapter;
10
- batchId: BigNumberish;
10
+ batchId?: BigNumberish;
11
11
  forwarderAbi: typeof abis.MockForwarderABI | typeof abis.BiconomyForwarderABI;
12
12
  }): Promise<string> {
13
13
  const isMock = args.forwarderAbi === mockInterface.abi;
14
14
  const data = isMock
15
15
  ? mockInterface.encodeGetNonce(args.user)
16
- : biconomyInterface.encodeGetNonce(args.user, args.batchId);
16
+ : biconomyInterface.encodeGetNonce(args.user, args.batchId || "0");
17
17
 
18
18
  const result = await args.web3Lib.call({
19
19
  to: args.contractAddress,
@@ -45,12 +45,10 @@ export async function verifyEIP712(args: {
45
45
  args.signature
46
46
  );
47
47
  try {
48
- const result = await args.web3Lib.call({
48
+ await args.web3Lib.call({
49
49
  to: args.contractAddress,
50
50
  data
51
51
  });
52
- const ret = biconomyInterface.decodeVerifyEIP712(result);
53
- console.log({ ret });
54
52
  return true;
55
53
  } catch (e) {
56
54
  return false;
package/src/index.ts CHANGED
@@ -13,6 +13,7 @@ export * as subgraph from "./subgraph";
13
13
  export * as groups from "./groups";
14
14
  export * as forwarder from "./forwarder";
15
15
  export * as voucher from "./voucher";
16
+ export * as seaport from "./seaport";
16
17
 
17
18
  export {
18
19
  defaultConfigs,
@@ -26,6 +27,7 @@ export {
26
27
  export {
27
28
  MetadataType,
28
29
  AnyMetadata,
30
+ OfferOrSellerMetadata,
29
31
  validateMetadata,
30
32
  base,
31
33
  productV1
@@ -44,13 +44,46 @@ export type GetRetriedHashesArgs = {
44
44
  transactionHash: string;
45
45
  };
46
46
 
47
+ export type ForwarderDomainData = {
48
+ name: string;
49
+ version: string;
50
+ verifyingContract: string;
51
+ salt: string;
52
+ };
53
+
47
54
  export class Biconomy {
48
55
  public constructor(
49
56
  private _relayerUrl: string,
50
- private _apiKey: string,
51
- private _apiId: string
57
+ private _apiKey?: string,
58
+ private _apiId?: string
52
59
  ) {}
53
60
 
61
+ public async getForwarderDomainDetails(
62
+ args: { chainId: number },
63
+ overrides: Partial<{
64
+ relayerUrl: string;
65
+ forwarderAddress: string;
66
+ }> = {}
67
+ ): Promise<{ [key: string]: ForwarderDomainData }> {
68
+ const url = `${
69
+ overrides.relayerUrl || this._relayerUrl
70
+ }/api/v2/meta-tx/systemInfo?networkId=${args.chainId}`;
71
+ const response = await fetch(url, { method: "GET" });
72
+
73
+ if (!response.ok) {
74
+ let message;
75
+ try {
76
+ const jsonResponse = await response.json();
77
+ message = JSON.stringify(jsonResponse);
78
+ } catch {
79
+ message = response.statusText;
80
+ }
81
+ throw new ApiError(response.status, `Failed to relay tx: ${message}`);
82
+ }
83
+ const txResponse = await response.json();
84
+ return txResponse?.forwarderDomainDetails;
85
+ }
86
+
54
87
  public async relayTransaction(
55
88
  args: RelayTransactionArgs,
56
89
  overrides: Partial<RelayOverrides> = {}
@@ -30,18 +30,31 @@ import {
30
30
  encodeReserveRange
31
31
  } from "../offers/interface";
32
32
  import { prepareDataSignatureParameters } from "../utils/signature";
33
- import { Biconomy, GetRetriedHashesData } from "./biconomy";
33
+ import {
34
+ Biconomy,
35
+ ForwarderDomainData,
36
+ GetRetriedHashesData
37
+ } from "./biconomy";
34
38
  import { isAddress } from "@ethersproject/address";
35
39
  import { AddressZero } from "@ethersproject/constants";
36
40
  import { encodeDepositFunds, encodeWithdrawFunds } from "../funds/interface";
37
41
  import { bosonDisputeHandlerIface } from "../disputes/interface";
38
42
  import { encodeCreateGroup } from "../groups/interface";
39
43
  import { encodeCreateOfferWithCondition } from "../orchestration/interface";
40
- import { encodePreMint, encodeSetApprovalForAll } from "../voucher/interface";
41
- import { ethers } from "ethers";
44
+ import {
45
+ encodeCallExternalContract,
46
+ encodePreMint,
47
+ encodeSetApprovalForAll,
48
+ encodeSetApprovalForAllToContract
49
+ } from "../voucher/interface";
50
+ import { hexZeroPad } from "@ethersproject/bytes";
51
+ import { keccak256 } from "@ethersproject/keccak256";
52
+ import { id } from "@ethersproject/hash";
53
+ import { defaultAbiCoder } from "@ethersproject/abi";
42
54
  import { ERC20ForwardRequest } from "../forwarder/biconomy-interface";
43
- import { verifyEIP712 } from "../forwarder/handler";
55
+ import { getNonce, verifyEIP712 } from "../forwarder/handler";
44
56
  import { MockForwardRequest } from "../forwarder/mock-interface";
57
+ import { isTrustedForwarder, owner } from "../voucher/handler";
45
58
 
46
59
  export type BaseMetaTxArgs = {
47
60
  web3Lib: Web3LibAdapter;
@@ -52,9 +65,7 @@ export type BaseMetaTxArgs = {
52
65
 
53
66
  export type BaseVoucherMetaTxArgs = {
54
67
  web3Lib: Web3LibAdapter;
55
- nonce: BigNumberish;
56
68
  bosonVoucherAddress: string;
57
- forwarderAddress: string;
58
69
  chainId: number;
59
70
  };
60
71
 
@@ -118,7 +129,9 @@ export async function signMetaTx(
118
129
 
119
130
  export async function signVoucherMetaTx(
120
131
  args: BaseVoucherMetaTxArgs & {
132
+ forwarderAbi: typeof abis.MockForwarderABI;
121
133
  functionSignature: string;
134
+ forwarderAddress: string;
122
135
  }
123
136
  ): Promise<SignedVoucherMetaTx> {
124
137
  const forwardType = [
@@ -140,11 +153,17 @@ export async function signVoucherMetaTx(
140
153
 
141
154
  const signerAddress = await args.web3Lib.getSignerAddress();
142
155
  const chainId = await args.web3Lib.getChainId();
156
+ const nonce = await getNonce({
157
+ contractAddress: args.forwarderAddress,
158
+ user: signerAddress,
159
+ web3Lib: args.web3Lib,
160
+ forwarderAbi: args.forwarderAbi
161
+ });
143
162
 
144
163
  const message = {
145
164
  from: signerAddress,
146
165
  to: args.bosonVoucherAddress,
147
- nonce: args.nonce,
166
+ nonce,
148
167
  data: args.functionSignature
149
168
  };
150
169
 
@@ -178,6 +197,7 @@ export async function signBiconomyVoucherMetaTx(
178
197
  | typeof abis.MockForwarderABI
179
198
  | typeof abis.BiconomyForwarderABI;
180
199
  txGas: BigNumberish;
200
+ relayerUrl: string;
181
201
  }
182
202
  ): Promise<SignedVoucherMetaTx> {
183
203
  const customSignatureType = {
@@ -205,6 +225,43 @@ export async function signBiconomyVoucherMetaTx(
205
225
  const signerAddress = await args.web3Lib.getSignerAddress();
206
226
  const chainId = await args.web3Lib.getChainId();
207
227
 
228
+ // Check which forwarder needs to be used for the contract
229
+ const biconomyForwarderDomainDetails = await new Biconomy(
230
+ args.relayerUrl
231
+ ).getForwarderDomainDetails({ chainId });
232
+
233
+ const biconomyForwarderDomainData = await new Promise<
234
+ ForwarderDomainData | undefined
235
+ // eslint-disable-next-line no-async-promise-executor
236
+ >(async (resolve, reject) => {
237
+ try {
238
+ for (const bFDD of Object.values(biconomyForwarderDomainDetails)) {
239
+ const ret = await isTrustedForwarder({
240
+ forwarder: bFDD.verifyingContract,
241
+ contractAddress: args.bosonVoucherAddress,
242
+ web3Lib: args.web3Lib
243
+ });
244
+ if (ret) {
245
+ resolve(bFDD);
246
+ }
247
+ }
248
+ resolve(undefined);
249
+ } catch (e) {
250
+ reject(e);
251
+ }
252
+ });
253
+ if (!biconomyForwarderDomainData) {
254
+ throw `Unable to find the trusted forwarder for BosonVoucher contract ${args.bosonVoucherAddress}`;
255
+ }
256
+
257
+ const nonce = await getNonce({
258
+ contractAddress: biconomyForwarderDomainData.verifyingContract,
259
+ user: signerAddress,
260
+ web3Lib: args.web3Lib,
261
+ batchId: args.batchId,
262
+ forwarderAbi: args.forwarderAbi
263
+ });
264
+
208
265
  const message = {
209
266
  from: signerAddress,
210
267
  to: args.bosonVoucherAddress,
@@ -212,25 +269,15 @@ export async function signBiconomyVoucherMetaTx(
212
269
  txGas: args.txGas,
213
270
  tokenGasPrice: "0",
214
271
  batchId: args.batchId,
215
- batchNonce: args.nonce,
272
+ batchNonce: nonce,
216
273
  deadline: Math.floor(Date.now() / 1000 + 3600),
217
274
  data: args.functionSignature
218
275
  };
219
276
 
220
- const biconomyForwarderDomainData = {
221
- name: "Biconomy Forwarder",
222
- version: "1",
223
- verifyingContract: args.forwarderAddress,
224
- salt: ethers.utils.hexZeroPad(
225
- ethers.BigNumber.from(chainId).toHexString(),
226
- 32
227
- )
228
- };
229
-
230
277
  const signatureParams = await prepareDataSignatureParameters({
231
278
  ...args,
232
279
  chainId,
233
- verifyingContractAddress: args.forwarderAddress,
280
+ verifyingContractAddress: biconomyForwarderDomainData.verifyingContract,
234
281
  customSignatureType,
235
282
  primaryType: "ERC20ForwardRequest",
236
283
  message,
@@ -243,15 +290,15 @@ export async function signBiconomyVoucherMetaTx(
243
290
  const signature = signatureParams.signature;
244
291
  const getDomainSeparator = async () => {
245
292
  const domainData = biconomyForwarderDomainData;
246
- const domainSeparator = ethers.utils.keccak256(
247
- ethers.utils.defaultAbiCoder.encode(
293
+ const domainSeparator = keccak256(
294
+ defaultAbiCoder.encode(
248
295
  ["bytes32", "bytes32", "bytes32", "address", "bytes32"],
249
296
  [
250
- ethers.utils.id(
297
+ id(
251
298
  "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)"
252
299
  ),
253
- ethers.utils.id(domainData.name),
254
- ethers.utils.id(domainData.version),
300
+ id(domainData.name),
301
+ id(domainData.version),
255
302
  domainData.verifyingContract,
256
303
  domainData.salt
257
304
  ]
@@ -263,7 +310,7 @@ export async function signBiconomyVoucherMetaTx(
263
310
  // verify signature
264
311
  const signatureVerified = await verifyEIP712({
265
312
  request: message,
266
- contractAddress: args.forwarderAddress,
313
+ contractAddress: biconomyForwarderDomainData.verifyingContract,
267
314
  web3Lib: args.web3Lib,
268
315
  domainSeparator,
269
316
  forwarderAbi: args.forwarderAbi,
@@ -345,7 +392,7 @@ export async function signMetaTxCreateSeller(
345
392
  return signMetaTx({
346
393
  ...args,
347
394
  functionName:
348
- "createSeller((uint256,address,address,address,address,bool),(uint256,uint8),(string,uint256))",
395
+ "createSeller((uint256,address,address,address,address,bool,string),(uint256,uint8),(string,uint256))",
349
396
  functionSignature: encodeCreateSeller(args.createSellerArgs)
350
397
  });
351
398
  }
@@ -358,7 +405,7 @@ export async function signMetaTxUpdateSeller(
358
405
  return signMetaTx({
359
406
  ...args,
360
407
  functionName:
361
- "updateSeller((uint256,address,address,address,address,bool),(uint256,uint8))",
408
+ "updateSeller((uint256,address,address,address,address,bool,string),(uint256,uint8))",
362
409
  functionSignature: encodeUpdateSeller(args.updateSellerArgs)
363
410
  });
364
411
  }
@@ -460,6 +507,38 @@ export async function signMetaTxVoidOfferBatch(
460
507
  });
461
508
  }
462
509
 
510
+ export async function signMetaTxExtendOffer(
511
+ args: BaseMetaTxArgs & {
512
+ offerId: BigNumberish;
513
+ validUntil: BigNumberish;
514
+ }
515
+ ) {
516
+ return signMetaTx({
517
+ ...args,
518
+ functionName: "extendOffer(uint256,uint256)",
519
+ functionSignature: bosonOfferHandlerIface.encodeFunctionData(
520
+ "extendOffer",
521
+ [args.offerId, args.validUntil]
522
+ )
523
+ });
524
+ }
525
+
526
+ export async function signMetaTxExtendOfferBatch(
527
+ args: BaseMetaTxArgs & {
528
+ offerIds: BigNumberish[];
529
+ validUntil: BigNumberish;
530
+ }
531
+ ) {
532
+ return signMetaTx({
533
+ ...args,
534
+ functionName: "extendOfferBatch(uint256[],uint256)",
535
+ functionSignature: bosonOfferHandlerIface.encodeFunctionData(
536
+ "extendOfferBatch",
537
+ [args.offerIds, args.validUntil]
538
+ )
539
+ });
540
+ }
541
+
463
542
  export async function signMetaTxCompleteExchangeBatch(
464
543
  args: BaseMetaTxArgs & {
465
544
  exchangeIds: BigNumberish[];
@@ -522,12 +601,13 @@ export async function signMetaTxReserveRange(
522
601
  args: BaseMetaTxArgs & {
523
602
  offerId: BigNumberish;
524
603
  length: BigNumberish;
604
+ to: string;
525
605
  }
526
606
  ) {
527
607
  return signMetaTx({
528
608
  ...args,
529
- functionName: "reserveRange(uint256,uint256)",
530
- functionSignature: encodeReserveRange(args.offerId, args.length)
609
+ functionName: "reserveRange(uint256,uint256,address)",
610
+ functionSignature: encodeReserveRange(args.offerId, args.length, args.to)
531
611
  });
532
612
  }
533
613
 
@@ -535,10 +615,12 @@ export async function signMetaTxPreMint(
535
615
  args: BaseVoucherMetaTxArgs & {
536
616
  offerId: BigNumberish;
537
617
  amount: BigNumberish;
538
- batchId: BigNumberish;
618
+ batchId?: BigNumberish;
619
+ forwarderAddress?: string;
539
620
  forwarderAbi:
540
621
  | typeof abis.MockForwarderABI
541
622
  | typeof abis.BiconomyForwarderABI;
623
+ relayerUrl: string;
542
624
  }
543
625
  ): Promise<SignedVoucherMetaTx> {
544
626
  const localConfig = defaultConfigs.find(
@@ -549,13 +631,17 @@ export async function signMetaTxPreMint(
549
631
  if (isLocal) {
550
632
  return signVoucherMetaTx({
551
633
  ...args,
552
- functionSignature
634
+ forwarderAddress: args.forwarderAddress,
635
+ functionSignature,
636
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
553
637
  });
554
638
  }
555
639
  const txGas = 200000 + BigNumber.from(args.amount).mul(2500).toNumber(); // ~(180000 + 2250*N) estimation on 2023/02/03
556
640
  return signBiconomyVoucherMetaTx({
557
641
  ...args,
558
642
  functionSignature,
643
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
644
+ batchId: args.batchId || "0",
559
645
  txGas
560
646
  });
561
647
  }
@@ -564,10 +650,12 @@ export async function signMetaTxSetApprovalForAll(
564
650
  args: BaseVoucherMetaTxArgs & {
565
651
  operator: string;
566
652
  approved: boolean;
567
- batchId: BigNumberish;
653
+ batchId?: BigNumberish;
654
+ forwarderAddress?: string;
568
655
  forwarderAbi:
569
656
  | typeof abis.MockForwarderABI
570
657
  | typeof abis.BiconomyForwarderABI;
658
+ relayerUrl: string;
571
659
  }
572
660
  ): Promise<SignedVoucherMetaTx> {
573
661
  const localConfig = defaultConfigs.find(
@@ -581,13 +669,96 @@ export async function signMetaTxSetApprovalForAll(
581
669
  if (isLocal) {
582
670
  return signVoucherMetaTx({
583
671
  ...args,
584
- functionSignature
672
+ forwarderAddress: args.forwarderAddress,
673
+ functionSignature,
674
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
585
675
  });
586
676
  }
587
677
  const txGas = 100000; // ~70000 estimation on 2023/02/03
588
678
  return signBiconomyVoucherMetaTx({
589
679
  ...args,
590
680
  functionSignature,
681
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
682
+ batchId: args.batchId || "0",
683
+ txGas
684
+ });
685
+ }
686
+
687
+ export async function signMetaTxSetApprovalForAllToContract(
688
+ args: BaseVoucherMetaTxArgs & {
689
+ operator: string;
690
+ approved: boolean;
691
+ batchId?: BigNumberish;
692
+ forwarderAddress?: string;
693
+ forwarderAbi:
694
+ | typeof abis.MockForwarderABI
695
+ | typeof abis.BiconomyForwarderABI;
696
+ relayerUrl: string;
697
+ },
698
+ overrides: {
699
+ txGas?: number;
700
+ } = {}
701
+ ): Promise<SignedVoucherMetaTx> {
702
+ const localConfig = defaultConfigs.find(
703
+ (config) => config.envName === "local"
704
+ );
705
+ const isLocal = localConfig.chainId === args.chainId;
706
+ const functionSignature = encodeSetApprovalForAllToContract(
707
+ args.operator,
708
+ args.approved
709
+ );
710
+ if (isLocal) {
711
+ return signVoucherMetaTx({
712
+ ...args,
713
+ forwarderAddress: args.forwarderAddress,
714
+ functionSignature,
715
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
716
+ });
717
+ }
718
+ const txGas = overrides.txGas || 100000; // TODO: estimate the gas needed
719
+ return signBiconomyVoucherMetaTx({
720
+ ...args,
721
+ functionSignature,
722
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
723
+ batchId: args.batchId || "0",
724
+ txGas
725
+ });
726
+ }
727
+
728
+ export async function signMetaTxCallExternalContract(
729
+ args: BaseVoucherMetaTxArgs & {
730
+ to: string;
731
+ data: string;
732
+ batchId?: BigNumberish;
733
+ forwarderAddress?: string;
734
+ forwarderAbi:
735
+ | typeof abis.MockForwarderABI
736
+ | typeof abis.BiconomyForwarderABI;
737
+ relayerUrl: string;
738
+ },
739
+ overrides: {
740
+ txGas?: number;
741
+ } = {}
742
+ ): Promise<SignedVoucherMetaTx> {
743
+ const localConfig = defaultConfigs.find(
744
+ (config) => config.envName === "local"
745
+ );
746
+ const isLocal = localConfig.chainId === args.chainId;
747
+ const functionSignature = encodeCallExternalContract(args.to, args.data);
748
+ if (isLocal) {
749
+ return signVoucherMetaTx({
750
+ ...args,
751
+ forwarderAddress: args.forwarderAddress,
752
+ functionSignature,
753
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
754
+ });
755
+ }
756
+ const txGas = overrides.txGas || 500000; // TODO: estimate the gas needed
757
+ return signBiconomyVoucherMetaTx({
758
+ ...args,
759
+ functionSignature,
760
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
761
+ batchId: args.batchId || "0",
591
762
  txGas
592
763
  });
593
764
  }