@bosonprotocol/core-sdk 1.25.0-alpha.9 → 1.25.0

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 (215) hide show
  1. package/dist/cjs/accounts/handler.d.ts +5 -1
  2. package/dist/cjs/accounts/handler.d.ts.map +1 -1
  3. package/dist/cjs/accounts/handler.js +11 -0
  4. package/dist/cjs/accounts/handler.js.map +1 -1
  5. package/dist/cjs/accounts/interface.js.map +1 -1
  6. package/dist/cjs/accounts/mixin.d.ts +4 -4
  7. package/dist/cjs/accounts/mixin.d.ts.map +1 -1
  8. package/dist/cjs/accounts/mixin.js +12 -8
  9. package/dist/cjs/accounts/mixin.js.map +1 -1
  10. package/dist/cjs/accounts/subgraph.d.ts +1 -1
  11. package/dist/cjs/accounts/subgraph.d.ts.map +1 -1
  12. package/dist/cjs/accounts/subgraph.js +7 -7
  13. package/dist/cjs/accounts/subgraph.js.map +1 -1
  14. package/dist/cjs/accounts/types.d.ts +1 -1
  15. package/dist/cjs/accounts/types.d.ts.map +1 -1
  16. package/dist/cjs/core-sdk.d.ts +1 -0
  17. package/dist/cjs/core-sdk.d.ts.map +1 -1
  18. package/dist/cjs/core-sdk.js +3 -0
  19. package/dist/cjs/core-sdk.js.map +1 -1
  20. package/dist/cjs/exchanges/handler.js +12 -12
  21. package/dist/cjs/exchanges/handler.js.map +1 -1
  22. package/dist/cjs/exchanges/mixin.d.ts +3 -3
  23. package/dist/cjs/exchanges/mixin.js +3 -3
  24. package/dist/cjs/forwarder/handler.d.ts +1 -1
  25. package/dist/cjs/forwarder/handler.d.ts.map +1 -1
  26. package/dist/cjs/forwarder/handler.js +2 -4
  27. package/dist/cjs/forwarder/handler.js.map +1 -1
  28. package/dist/cjs/index.d.ts +2 -1
  29. package/dist/cjs/index.d.ts.map +1 -1
  30. package/dist/cjs/index.js +2 -1
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/meta-tx/biconomy.d.ts +17 -3
  33. package/dist/cjs/meta-tx/biconomy.d.ts.map +1 -1
  34. package/dist/cjs/meta-tx/biconomy.js +19 -0
  35. package/dist/cjs/meta-tx/biconomy.js.map +1 -1
  36. package/dist/cjs/meta-tx/handler.d.ts +42 -4
  37. package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
  38. package/dist/cjs/meta-tx/handler.js +97 -21
  39. package/dist/cjs/meta-tx/handler.js.map +1 -1
  40. package/dist/cjs/meta-tx/mixin.d.ts +27 -3
  41. package/dist/cjs/meta-tx/mixin.d.ts.map +1 -1
  42. package/dist/cjs/meta-tx/mixin.js +124 -22
  43. package/dist/cjs/meta-tx/mixin.js.map +1 -1
  44. package/dist/cjs/metadata/mixin.d.ts +3 -3
  45. package/dist/cjs/metadata/mixin.d.ts.map +1 -1
  46. package/dist/cjs/metadata/mixin.js.map +1 -1
  47. package/dist/cjs/offers/handler.d.ts +15 -0
  48. package/dist/cjs/offers/handler.d.ts.map +1 -1
  49. package/dist/cjs/offers/handler.js +28 -4
  50. package/dist/cjs/offers/handler.js.map +1 -1
  51. package/dist/cjs/offers/interface.d.ts +1 -1
  52. package/dist/cjs/offers/interface.d.ts.map +1 -1
  53. package/dist/cjs/offers/interface.js +3 -2
  54. package/dist/cjs/offers/interface.js.map +1 -1
  55. package/dist/cjs/offers/mixin.d.ts +26 -3
  56. package/dist/cjs/offers/mixin.d.ts.map +1 -1
  57. package/dist/cjs/offers/mixin.js +46 -3
  58. package/dist/cjs/offers/mixin.js.map +1 -1
  59. package/dist/cjs/offers/renderContractualAgreement.d.ts.map +1 -1
  60. package/dist/cjs/offers/renderContractualAgreement.js +5 -4
  61. package/dist/cjs/offers/renderContractualAgreement.js.map +1 -1
  62. package/dist/cjs/orchestration/handler.d.ts.map +1 -1
  63. package/dist/cjs/orchestration/handler.js +12 -12
  64. package/dist/cjs/orchestration/handler.js.map +1 -1
  65. package/dist/cjs/seaport/abi.d.ts +41 -0
  66. package/dist/cjs/seaport/abi.d.ts.map +1 -0
  67. package/dist/cjs/seaport/abi.js +153 -0
  68. package/dist/cjs/seaport/abi.js.map +1 -0
  69. package/dist/cjs/seaport/handler.d.ts +46 -0
  70. package/dist/cjs/seaport/handler.d.ts.map +1 -0
  71. package/dist/cjs/seaport/handler.js +28 -0
  72. package/dist/cjs/seaport/handler.js.map +1 -0
  73. package/dist/cjs/seaport/index.d.ts +2 -0
  74. package/dist/cjs/seaport/index.d.ts.map +1 -0
  75. package/dist/cjs/seaport/index.js +28 -0
  76. package/dist/cjs/seaport/index.js.map +1 -0
  77. package/dist/cjs/subgraph.d.ts +6523 -511
  78. package/dist/cjs/subgraph.d.ts.map +1 -1
  79. package/dist/cjs/subgraph.js +138 -20
  80. package/dist/cjs/subgraph.js.map +1 -1
  81. package/dist/cjs/voucher/handler.d.ts +31 -0
  82. package/dist/cjs/voucher/handler.d.ts.map +1 -1
  83. package/dist/cjs/voucher/handler.js +57 -1
  84. package/dist/cjs/voucher/handler.js.map +1 -1
  85. package/dist/cjs/voucher/interface.d.ts +8 -0
  86. package/dist/cjs/voucher/interface.d.ts.map +1 -1
  87. package/dist/cjs/voucher/interface.js +81 -1
  88. package/dist/cjs/voucher/interface.js.map +1 -1
  89. package/dist/cjs/voucher/mixin.d.ts +11 -0
  90. package/dist/cjs/voucher/mixin.d.ts.map +1 -1
  91. package/dist/cjs/voucher/mixin.js +47 -0
  92. package/dist/cjs/voucher/mixin.js.map +1 -1
  93. package/dist/esm/accounts/handler.d.ts +5 -1
  94. package/dist/esm/accounts/handler.d.ts.map +1 -1
  95. package/dist/esm/accounts/handler.js +11 -0
  96. package/dist/esm/accounts/handler.js.map +1 -1
  97. package/dist/esm/accounts/interface.js.map +1 -1
  98. package/dist/esm/accounts/mixin.d.ts +4 -4
  99. package/dist/esm/accounts/mixin.d.ts.map +1 -1
  100. package/dist/esm/accounts/mixin.js +12 -8
  101. package/dist/esm/accounts/mixin.js.map +1 -1
  102. package/dist/esm/accounts/subgraph.d.ts +1 -1
  103. package/dist/esm/accounts/subgraph.d.ts.map +1 -1
  104. package/dist/esm/accounts/subgraph.js +5 -5
  105. package/dist/esm/accounts/subgraph.js.map +1 -1
  106. package/dist/esm/accounts/types.d.ts +1 -1
  107. package/dist/esm/accounts/types.d.ts.map +1 -1
  108. package/dist/esm/core-sdk.d.ts +1 -0
  109. package/dist/esm/core-sdk.d.ts.map +1 -1
  110. package/dist/esm/core-sdk.js +3 -0
  111. package/dist/esm/core-sdk.js.map +1 -1
  112. package/dist/esm/exchanges/handler.js +12 -12
  113. package/dist/esm/exchanges/handler.js.map +1 -1
  114. package/dist/esm/exchanges/mixin.d.ts +3 -3
  115. package/dist/esm/exchanges/mixin.js +3 -3
  116. package/dist/esm/forwarder/handler.d.ts +1 -1
  117. package/dist/esm/forwarder/handler.d.ts.map +1 -1
  118. package/dist/esm/forwarder/handler.js +2 -4
  119. package/dist/esm/forwarder/handler.js.map +1 -1
  120. package/dist/esm/index.d.ts +2 -1
  121. package/dist/esm/index.d.ts.map +1 -1
  122. package/dist/esm/index.js +1 -0
  123. package/dist/esm/index.js.map +1 -1
  124. package/dist/esm/meta-tx/biconomy.d.ts +17 -3
  125. package/dist/esm/meta-tx/biconomy.d.ts.map +1 -1
  126. package/dist/esm/meta-tx/biconomy.js +17 -0
  127. package/dist/esm/meta-tx/biconomy.js.map +1 -1
  128. package/dist/esm/meta-tx/handler.d.ts +42 -4
  129. package/dist/esm/meta-tx/handler.d.ts.map +1 -1
  130. package/dist/esm/meta-tx/handler.js +123 -19
  131. package/dist/esm/meta-tx/handler.js.map +1 -1
  132. package/dist/esm/meta-tx/mixin.d.ts +27 -3
  133. package/dist/esm/meta-tx/mixin.d.ts.map +1 -1
  134. package/dist/esm/meta-tx/mixin.js +137 -17
  135. package/dist/esm/meta-tx/mixin.js.map +1 -1
  136. package/dist/esm/metadata/mixin.d.ts +3 -3
  137. package/dist/esm/metadata/mixin.d.ts.map +1 -1
  138. package/dist/esm/metadata/mixin.js.map +1 -1
  139. package/dist/esm/offers/handler.d.ts +15 -0
  140. package/dist/esm/offers/handler.d.ts.map +1 -1
  141. package/dist/esm/offers/handler.js +21 -3
  142. package/dist/esm/offers/handler.js.map +1 -1
  143. package/dist/esm/offers/interface.d.ts +1 -1
  144. package/dist/esm/offers/interface.d.ts.map +1 -1
  145. package/dist/esm/offers/interface.js +3 -2
  146. package/dist/esm/offers/interface.js.map +1 -1
  147. package/dist/esm/offers/mixin.d.ts +26 -3
  148. package/dist/esm/offers/mixin.d.ts.map +1 -1
  149. package/dist/esm/offers/mixin.js +42 -3
  150. package/dist/esm/offers/mixin.js.map +1 -1
  151. package/dist/esm/offers/renderContractualAgreement.d.ts.map +1 -1
  152. package/dist/esm/offers/renderContractualAgreement.js +5 -4
  153. package/dist/esm/offers/renderContractualAgreement.js.map +1 -1
  154. package/dist/esm/orchestration/handler.d.ts.map +1 -1
  155. package/dist/esm/orchestration/handler.js +12 -12
  156. package/dist/esm/orchestration/handler.js.map +1 -1
  157. package/dist/esm/seaport/abi.d.ts +41 -0
  158. package/dist/esm/seaport/abi.d.ts.map +1 -0
  159. package/dist/esm/seaport/abi.js +150 -0
  160. package/dist/esm/seaport/abi.js.map +1 -0
  161. package/dist/esm/seaport/handler.d.ts +46 -0
  162. package/dist/esm/seaport/handler.d.ts.map +1 -0
  163. package/dist/esm/seaport/handler.js +24 -0
  164. package/dist/esm/seaport/handler.js.map +1 -0
  165. package/dist/esm/seaport/index.d.ts +2 -0
  166. package/dist/esm/seaport/index.d.ts.map +1 -0
  167. package/dist/esm/seaport/index.js +2 -0
  168. package/dist/esm/seaport/index.js.map +1 -0
  169. package/dist/esm/subgraph.d.ts +6523 -511
  170. package/dist/esm/subgraph.d.ts.map +1 -1
  171. package/dist/esm/subgraph.js +135 -17
  172. package/dist/esm/subgraph.js.map +1 -1
  173. package/dist/esm/voucher/handler.d.ts +31 -0
  174. package/dist/esm/voucher/handler.d.ts.map +1 -1
  175. package/dist/esm/voucher/handler.js +39 -1
  176. package/dist/esm/voucher/handler.js.map +1 -1
  177. package/dist/esm/voucher/interface.d.ts +8 -0
  178. package/dist/esm/voucher/interface.d.ts.map +1 -1
  179. package/dist/esm/voucher/interface.js +72 -0
  180. package/dist/esm/voucher/interface.js.map +1 -1
  181. package/dist/esm/voucher/mixin.d.ts +11 -0
  182. package/dist/esm/voucher/mixin.d.ts.map +1 -1
  183. package/dist/esm/voucher/mixin.js +41 -0
  184. package/dist/esm/voucher/mixin.js.map +1 -1
  185. package/package.json +3 -3
  186. package/src/accounts/handler.ts +17 -1
  187. package/src/accounts/interface.ts +2 -1
  188. package/src/accounts/mixin.ts +19 -14
  189. package/src/accounts/queries.graphql +46 -4
  190. package/src/accounts/subgraph.ts +6 -6
  191. package/src/accounts/types.ts +1 -1
  192. package/src/core-sdk.ts +4 -0
  193. package/src/exchanges/handler.ts +13 -13
  194. package/src/exchanges/mixin.ts +3 -3
  195. package/src/forwarder/handler.ts +3 -5
  196. package/src/index.ts +2 -0
  197. package/src/meta-tx/biconomy.ts +35 -2
  198. package/src/meta-tx/handler.ts +209 -24
  199. package/src/meta-tx/mixin.ts +226 -23
  200. package/src/metadata/base.graphql +3 -0
  201. package/src/metadata/mixin.ts +5 -3
  202. package/src/metadata/product-v1.graphql +2 -2
  203. package/src/offers/handler.ts +36 -3
  204. package/src/offers/interface.ts +4 -2
  205. package/src/offers/mixin.ts +57 -2
  206. package/src/offers/queries.graphql +13 -0
  207. package/src/offers/renderContractualAgreement.ts +6 -9
  208. package/src/orchestration/handler.ts +40 -20
  209. package/src/seaport/abi.ts +149 -0
  210. package/src/seaport/handler.ts +57 -0
  211. package/src/seaport/index.ts +1 -0
  212. package/src/subgraph.ts +6622 -509
  213. package/src/voucher/handler.ts +78 -1
  214. package/src/voucher/interface.ts +88 -0
  215. package/src/voucher/mixin.ts +76 -0
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,21 +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";
44
+ import {
45
+ encodeCallExternalContract,
46
+ encodePreMint,
47
+ encodeSetApprovalForAll,
48
+ encodeSetApprovalForAllToContract
49
+ } from "../voucher/interface";
41
50
  import { hexZeroPad } from "@ethersproject/bytes";
42
51
  import { keccak256 } from "@ethersproject/keccak256";
43
52
  import { id } from "@ethersproject/hash";
44
53
  import { defaultAbiCoder } from "@ethersproject/abi";
45
54
  import { ERC20ForwardRequest } from "../forwarder/biconomy-interface";
46
- import { verifyEIP712 } from "../forwarder/handler";
55
+ import { getNonce, verifyEIP712 } from "../forwarder/handler";
47
56
  import { MockForwardRequest } from "../forwarder/mock-interface";
57
+ import { isTrustedForwarder, owner } from "../voucher/handler";
48
58
 
49
59
  export type BaseMetaTxArgs = {
50
60
  web3Lib: Web3LibAdapter;
@@ -55,9 +65,7 @@ export type BaseMetaTxArgs = {
55
65
 
56
66
  export type BaseVoucherMetaTxArgs = {
57
67
  web3Lib: Web3LibAdapter;
58
- nonce: BigNumberish;
59
68
  bosonVoucherAddress: string;
60
- forwarderAddress: string;
61
69
  chainId: number;
62
70
  };
63
71
 
@@ -121,7 +129,9 @@ export async function signMetaTx(
121
129
 
122
130
  export async function signVoucherMetaTx(
123
131
  args: BaseVoucherMetaTxArgs & {
132
+ forwarderAbi: typeof abis.MockForwarderABI;
124
133
  functionSignature: string;
134
+ forwarderAddress: string;
125
135
  }
126
136
  ): Promise<SignedVoucherMetaTx> {
127
137
  const forwardType = [
@@ -143,11 +153,17 @@ export async function signVoucherMetaTx(
143
153
 
144
154
  const signerAddress = await args.web3Lib.getSignerAddress();
145
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
+ });
146
162
 
147
163
  const message = {
148
164
  from: signerAddress,
149
165
  to: args.bosonVoucherAddress,
150
- nonce: args.nonce,
166
+ nonce,
151
167
  data: args.functionSignature
152
168
  };
153
169
 
@@ -181,6 +197,7 @@ export async function signBiconomyVoucherMetaTx(
181
197
  | typeof abis.MockForwarderABI
182
198
  | typeof abis.BiconomyForwarderABI;
183
199
  txGas: BigNumberish;
200
+ relayerUrl: string;
184
201
  }
185
202
  ): Promise<SignedVoucherMetaTx> {
186
203
  const customSignatureType = {
@@ -208,6 +225,43 @@ export async function signBiconomyVoucherMetaTx(
208
225
  const signerAddress = await args.web3Lib.getSignerAddress();
209
226
  const chainId = await args.web3Lib.getChainId();
210
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
+
211
265
  const message = {
212
266
  from: signerAddress,
213
267
  to: args.bosonVoucherAddress,
@@ -215,22 +269,15 @@ export async function signBiconomyVoucherMetaTx(
215
269
  txGas: args.txGas,
216
270
  tokenGasPrice: "0",
217
271
  batchId: args.batchId,
218
- batchNonce: args.nonce,
272
+ batchNonce: nonce,
219
273
  deadline: Math.floor(Date.now() / 1000 + 3600),
220
274
  data: args.functionSignature
221
275
  };
222
276
 
223
- const biconomyForwarderDomainData = {
224
- name: "Biconomy Forwarder",
225
- version: "1",
226
- verifyingContract: args.forwarderAddress,
227
- salt: hexZeroPad(BigNumber.from(chainId).toHexString(), 32)
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,
@@ -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,
@@ -340,12 +387,19 @@ export async function relayBiconomyMetaTransaction(args: {
340
387
  export async function signMetaTxCreateSeller(
341
388
  args: BaseMetaTxArgs & {
342
389
  createSellerArgs: CreateSellerArgs;
390
+ metadataStorage?: MetadataStorage;
391
+ theGraphStorage?: MetadataStorage;
343
392
  }
344
393
  ) {
394
+ await storeMetadataOnTheGraph({
395
+ metadataUriOrHash: args.createSellerArgs.metadataUri,
396
+ metadataStorage: args.metadataStorage,
397
+ theGraphStorage: args.theGraphStorage
398
+ });
345
399
  return signMetaTx({
346
400
  ...args,
347
401
  functionName:
348
- "createSeller((uint256,address,address,address,address,bool),(uint256,uint8),(string,uint256))",
402
+ "createSeller((uint256,address,address,address,address,bool,string),(uint256,uint8),(string,uint256))",
349
403
  functionSignature: encodeCreateSeller(args.createSellerArgs)
350
404
  });
351
405
  }
@@ -353,12 +407,19 @@ export async function signMetaTxCreateSeller(
353
407
  export async function signMetaTxUpdateSeller(
354
408
  args: BaseMetaTxArgs & {
355
409
  updateSellerArgs: UpdateSellerArgs;
410
+ metadataStorage?: MetadataStorage;
411
+ theGraphStorage?: MetadataStorage;
356
412
  }
357
413
  ) {
414
+ await storeMetadataOnTheGraph({
415
+ metadataUriOrHash: args.updateSellerArgs.metadataUri,
416
+ metadataStorage: args.metadataStorage,
417
+ theGraphStorage: args.theGraphStorage
418
+ });
358
419
  return signMetaTx({
359
420
  ...args,
360
421
  functionName:
361
- "updateSeller((uint256,address,address,address,address,bool),(uint256,uint8))",
422
+ "updateSeller((uint256,address,address,address,address,bool,string),(uint256,uint8))",
362
423
  functionSignature: encodeUpdateSeller(args.updateSellerArgs)
363
424
  });
364
425
  }
@@ -460,6 +521,38 @@ export async function signMetaTxVoidOfferBatch(
460
521
  });
461
522
  }
462
523
 
524
+ export async function signMetaTxExtendOffer(
525
+ args: BaseMetaTxArgs & {
526
+ offerId: BigNumberish;
527
+ validUntil: BigNumberish;
528
+ }
529
+ ) {
530
+ return signMetaTx({
531
+ ...args,
532
+ functionName: "extendOffer(uint256,uint256)",
533
+ functionSignature: bosonOfferHandlerIface.encodeFunctionData(
534
+ "extendOffer",
535
+ [args.offerId, args.validUntil]
536
+ )
537
+ });
538
+ }
539
+
540
+ export async function signMetaTxExtendOfferBatch(
541
+ args: BaseMetaTxArgs & {
542
+ offerIds: BigNumberish[];
543
+ validUntil: BigNumberish;
544
+ }
545
+ ) {
546
+ return signMetaTx({
547
+ ...args,
548
+ functionName: "extendOfferBatch(uint256[],uint256)",
549
+ functionSignature: bosonOfferHandlerIface.encodeFunctionData(
550
+ "extendOfferBatch",
551
+ [args.offerIds, args.validUntil]
552
+ )
553
+ });
554
+ }
555
+
463
556
  export async function signMetaTxCompleteExchangeBatch(
464
557
  args: BaseMetaTxArgs & {
465
558
  exchangeIds: BigNumberish[];
@@ -522,12 +615,13 @@ export async function signMetaTxReserveRange(
522
615
  args: BaseMetaTxArgs & {
523
616
  offerId: BigNumberish;
524
617
  length: BigNumberish;
618
+ to: string;
525
619
  }
526
620
  ) {
527
621
  return signMetaTx({
528
622
  ...args,
529
- functionName: "reserveRange(uint256,uint256)",
530
- functionSignature: encodeReserveRange(args.offerId, args.length)
623
+ functionName: "reserveRange(uint256,uint256,address)",
624
+ functionSignature: encodeReserveRange(args.offerId, args.length, args.to)
531
625
  });
532
626
  }
533
627
 
@@ -535,10 +629,12 @@ export async function signMetaTxPreMint(
535
629
  args: BaseVoucherMetaTxArgs & {
536
630
  offerId: BigNumberish;
537
631
  amount: BigNumberish;
538
- batchId: BigNumberish;
632
+ batchId?: BigNumberish;
633
+ forwarderAddress?: string;
539
634
  forwarderAbi:
540
635
  | typeof abis.MockForwarderABI
541
636
  | typeof abis.BiconomyForwarderABI;
637
+ relayerUrl: string;
542
638
  }
543
639
  ): Promise<SignedVoucherMetaTx> {
544
640
  const localConfig = defaultConfigs.find(
@@ -549,13 +645,17 @@ export async function signMetaTxPreMint(
549
645
  if (isLocal) {
550
646
  return signVoucherMetaTx({
551
647
  ...args,
552
- functionSignature
648
+ forwarderAddress: args.forwarderAddress,
649
+ functionSignature,
650
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
553
651
  });
554
652
  }
555
653
  const txGas = 200000 + BigNumber.from(args.amount).mul(2500).toNumber(); // ~(180000 + 2250*N) estimation on 2023/02/03
556
654
  return signBiconomyVoucherMetaTx({
557
655
  ...args,
558
656
  functionSignature,
657
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
658
+ batchId: args.batchId || "0",
559
659
  txGas
560
660
  });
561
661
  }
@@ -564,10 +664,12 @@ export async function signMetaTxSetApprovalForAll(
564
664
  args: BaseVoucherMetaTxArgs & {
565
665
  operator: string;
566
666
  approved: boolean;
567
- batchId: BigNumberish;
667
+ batchId?: BigNumberish;
668
+ forwarderAddress?: string;
568
669
  forwarderAbi:
569
670
  | typeof abis.MockForwarderABI
570
671
  | typeof abis.BiconomyForwarderABI;
672
+ relayerUrl: string;
571
673
  }
572
674
  ): Promise<SignedVoucherMetaTx> {
573
675
  const localConfig = defaultConfigs.find(
@@ -581,13 +683,96 @@ export async function signMetaTxSetApprovalForAll(
581
683
  if (isLocal) {
582
684
  return signVoucherMetaTx({
583
685
  ...args,
584
- functionSignature
686
+ forwarderAddress: args.forwarderAddress,
687
+ functionSignature,
688
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
585
689
  });
586
690
  }
587
691
  const txGas = 100000; // ~70000 estimation on 2023/02/03
588
692
  return signBiconomyVoucherMetaTx({
589
693
  ...args,
590
694
  functionSignature,
695
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
696
+ batchId: args.batchId || "0",
697
+ txGas
698
+ });
699
+ }
700
+
701
+ export async function signMetaTxSetApprovalForAllToContract(
702
+ args: BaseVoucherMetaTxArgs & {
703
+ operator: string;
704
+ approved: boolean;
705
+ batchId?: BigNumberish;
706
+ forwarderAddress?: string;
707
+ forwarderAbi:
708
+ | typeof abis.MockForwarderABI
709
+ | typeof abis.BiconomyForwarderABI;
710
+ relayerUrl: string;
711
+ },
712
+ overrides: {
713
+ txGas?: number;
714
+ } = {}
715
+ ): Promise<SignedVoucherMetaTx> {
716
+ const localConfig = defaultConfigs.find(
717
+ (config) => config.envName === "local"
718
+ );
719
+ const isLocal = localConfig.chainId === args.chainId;
720
+ const functionSignature = encodeSetApprovalForAllToContract(
721
+ args.operator,
722
+ args.approved
723
+ );
724
+ if (isLocal) {
725
+ return signVoucherMetaTx({
726
+ ...args,
727
+ forwarderAddress: args.forwarderAddress,
728
+ functionSignature,
729
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
730
+ });
731
+ }
732
+ const txGas = overrides.txGas || 100000; // TODO: estimate the gas needed
733
+ return signBiconomyVoucherMetaTx({
734
+ ...args,
735
+ functionSignature,
736
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
737
+ batchId: args.batchId || "0",
738
+ txGas
739
+ });
740
+ }
741
+
742
+ export async function signMetaTxCallExternalContract(
743
+ args: BaseVoucherMetaTxArgs & {
744
+ to: string;
745
+ data: string;
746
+ batchId?: BigNumberish;
747
+ forwarderAddress?: string;
748
+ forwarderAbi:
749
+ | typeof abis.MockForwarderABI
750
+ | typeof abis.BiconomyForwarderABI;
751
+ relayerUrl: string;
752
+ },
753
+ overrides: {
754
+ txGas?: number;
755
+ } = {}
756
+ ): Promise<SignedVoucherMetaTx> {
757
+ const localConfig = defaultConfigs.find(
758
+ (config) => config.envName === "local"
759
+ );
760
+ const isLocal = localConfig.chainId === args.chainId;
761
+ const functionSignature = encodeCallExternalContract(args.to, args.data);
762
+ if (isLocal) {
763
+ return signVoucherMetaTx({
764
+ ...args,
765
+ forwarderAddress: args.forwarderAddress,
766
+ functionSignature,
767
+ forwarderAbi: args.forwarderAbi as typeof abis.MockForwarderABI
768
+ });
769
+ }
770
+ const txGas = overrides.txGas || 500000; // TODO: estimate the gas needed
771
+ return signBiconomyVoucherMetaTx({
772
+ ...args,
773
+ functionSignature,
774
+ forwarderAbi: args.forwarderAbi as typeof abis.BiconomyForwarderABI,
775
+ batchId: args.batchId || "0",
591
776
  txGas
592
777
  });
593
778
  }