@bosonprotocol/core-sdk 1.25.0-alpha.2 → 1.25.0-alpha.21

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 (217) hide show
  1. package/dist/cjs/accounts/mixin.d.ts +4 -4
  2. package/dist/cjs/accounts/mixin.d.ts.map +1 -1
  3. package/dist/cjs/accounts/mixin.js +8 -8
  4. package/dist/cjs/accounts/mixin.js.map +1 -1
  5. package/dist/cjs/accounts/subgraph.d.ts +1 -1
  6. package/dist/cjs/accounts/subgraph.d.ts.map +1 -1
  7. package/dist/cjs/accounts/subgraph.js +7 -7
  8. package/dist/cjs/accounts/subgraph.js.map +1 -1
  9. package/dist/cjs/accounts/types.d.ts +1 -1
  10. package/dist/cjs/accounts/types.d.ts.map +1 -1
  11. package/dist/cjs/core-sdk.d.ts +1 -0
  12. package/dist/cjs/core-sdk.d.ts.map +1 -1
  13. package/dist/cjs/core-sdk.js +3 -0
  14. package/dist/cjs/core-sdk.js.map +1 -1
  15. package/dist/cjs/erc1155/mixin.d.ts +1 -1
  16. package/dist/cjs/erc1155/mixin.d.ts.map +1 -1
  17. package/dist/cjs/erc1155/mixin.js +2 -2
  18. package/dist/cjs/erc1155/mixin.js.map +1 -1
  19. package/dist/cjs/erc20/mixin.d.ts +7 -7
  20. package/dist/cjs/erc20/mixin.d.ts.map +1 -1
  21. package/dist/cjs/erc20/mixin.js +14 -14
  22. package/dist/cjs/erc20/mixin.js.map +1 -1
  23. package/dist/cjs/erc721/mixin.d.ts +3 -3
  24. package/dist/cjs/erc721/mixin.d.ts.map +1 -1
  25. package/dist/cjs/erc721/mixin.js +6 -6
  26. package/dist/cjs/erc721/mixin.js.map +1 -1
  27. package/dist/cjs/exchanges/handler.js +12 -12
  28. package/dist/cjs/exchanges/handler.js.map +1 -1
  29. package/dist/cjs/exchanges/mixin.d.ts +3 -3
  30. package/dist/cjs/exchanges/mixin.js +3 -3
  31. package/dist/cjs/forwarder/handler.d.ts +1 -1
  32. package/dist/cjs/forwarder/handler.d.ts.map +1 -1
  33. package/dist/cjs/forwarder/handler.js +2 -4
  34. package/dist/cjs/forwarder/handler.js.map +1 -1
  35. package/dist/cjs/index.d.ts +1 -0
  36. package/dist/cjs/index.d.ts.map +1 -1
  37. package/dist/cjs/index.js +2 -1
  38. package/dist/cjs/index.js.map +1 -1
  39. package/dist/cjs/meta-tx/biconomy.d.ts +17 -3
  40. package/dist/cjs/meta-tx/biconomy.d.ts.map +1 -1
  41. package/dist/cjs/meta-tx/biconomy.js +19 -0
  42. package/dist/cjs/meta-tx/biconomy.js.map +1 -1
  43. package/dist/cjs/meta-tx/handler.d.ts +38 -4
  44. package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
  45. package/dist/cjs/meta-tx/handler.js +92 -23
  46. package/dist/cjs/meta-tx/handler.js.map +1 -1
  47. package/dist/cjs/meta-tx/mixin.d.ts +25 -3
  48. package/dist/cjs/meta-tx/mixin.d.ts.map +1 -1
  49. package/dist/cjs/meta-tx/mixin.js +51 -22
  50. package/dist/cjs/meta-tx/mixin.js.map +1 -1
  51. package/dist/cjs/offers/handler.d.ts +15 -0
  52. package/dist/cjs/offers/handler.d.ts.map +1 -1
  53. package/dist/cjs/offers/handler.js +28 -4
  54. package/dist/cjs/offers/handler.js.map +1 -1
  55. package/dist/cjs/offers/interface.d.ts +1 -1
  56. package/dist/cjs/offers/interface.d.ts.map +1 -1
  57. package/dist/cjs/offers/interface.js +3 -2
  58. package/dist/cjs/offers/interface.js.map +1 -1
  59. package/dist/cjs/offers/mixin.d.ts +26 -3
  60. package/dist/cjs/offers/mixin.d.ts.map +1 -1
  61. package/dist/cjs/offers/mixin.js +46 -3
  62. package/dist/cjs/offers/mixin.js.map +1 -1
  63. package/dist/cjs/offers/renderContractualAgreement.d.ts.map +1 -1
  64. package/dist/cjs/offers/renderContractualAgreement.js +5 -4
  65. package/dist/cjs/offers/renderContractualAgreement.js.map +1 -1
  66. package/dist/cjs/seaport/abi.d.ts +41 -0
  67. package/dist/cjs/seaport/abi.d.ts.map +1 -0
  68. package/dist/cjs/seaport/abi.js +153 -0
  69. package/dist/cjs/seaport/abi.js.map +1 -0
  70. package/dist/cjs/seaport/handler.d.ts +46 -0
  71. package/dist/cjs/seaport/handler.d.ts.map +1 -0
  72. package/dist/cjs/seaport/handler.js +28 -0
  73. package/dist/cjs/seaport/handler.js.map +1 -0
  74. package/dist/cjs/seaport/index.d.ts +2 -0
  75. package/dist/cjs/seaport/index.d.ts.map +1 -0
  76. package/dist/cjs/seaport/index.js +28 -0
  77. package/dist/cjs/seaport/index.js.map +1 -0
  78. package/dist/cjs/subgraph.d.ts +1451 -212
  79. package/dist/cjs/subgraph.d.ts.map +1 -1
  80. package/dist/cjs/subgraph.js +67 -11
  81. package/dist/cjs/subgraph.js.map +1 -1
  82. package/dist/cjs/voucher/handler.d.ts +31 -0
  83. package/dist/cjs/voucher/handler.d.ts.map +1 -1
  84. package/dist/cjs/voucher/handler.js +57 -1
  85. package/dist/cjs/voucher/handler.js.map +1 -1
  86. package/dist/cjs/voucher/interface.d.ts +8 -0
  87. package/dist/cjs/voucher/interface.d.ts.map +1 -1
  88. package/dist/cjs/voucher/interface.js +81 -1
  89. package/dist/cjs/voucher/interface.js.map +1 -1
  90. package/dist/cjs/voucher/mixin.d.ts +11 -0
  91. package/dist/cjs/voucher/mixin.d.ts.map +1 -1
  92. package/dist/cjs/voucher/mixin.js +47 -0
  93. package/dist/cjs/voucher/mixin.js.map +1 -1
  94. package/dist/esm/accounts/mixin.d.ts +4 -4
  95. package/dist/esm/accounts/mixin.d.ts.map +1 -1
  96. package/dist/esm/accounts/mixin.js +8 -8
  97. package/dist/esm/accounts/mixin.js.map +1 -1
  98. package/dist/esm/accounts/subgraph.d.ts +1 -1
  99. package/dist/esm/accounts/subgraph.d.ts.map +1 -1
  100. package/dist/esm/accounts/subgraph.js +5 -5
  101. package/dist/esm/accounts/subgraph.js.map +1 -1
  102. package/dist/esm/accounts/types.d.ts +1 -1
  103. package/dist/esm/accounts/types.d.ts.map +1 -1
  104. package/dist/esm/core-sdk.d.ts +1 -0
  105. package/dist/esm/core-sdk.d.ts.map +1 -1
  106. package/dist/esm/core-sdk.js +3 -0
  107. package/dist/esm/core-sdk.js.map +1 -1
  108. package/dist/esm/erc1155/mixin.d.ts +1 -1
  109. package/dist/esm/erc1155/mixin.d.ts.map +1 -1
  110. package/dist/esm/erc1155/mixin.js +2 -2
  111. package/dist/esm/erc1155/mixin.js.map +1 -1
  112. package/dist/esm/erc20/mixin.d.ts +7 -7
  113. package/dist/esm/erc20/mixin.d.ts.map +1 -1
  114. package/dist/esm/erc20/mixin.js +14 -14
  115. package/dist/esm/erc20/mixin.js.map +1 -1
  116. package/dist/esm/erc721/mixin.d.ts +3 -3
  117. package/dist/esm/erc721/mixin.d.ts.map +1 -1
  118. package/dist/esm/erc721/mixin.js +6 -6
  119. package/dist/esm/erc721/mixin.js.map +1 -1
  120. package/dist/esm/exchanges/handler.js +12 -12
  121. package/dist/esm/exchanges/handler.js.map +1 -1
  122. package/dist/esm/exchanges/mixin.d.ts +3 -3
  123. package/dist/esm/exchanges/mixin.js +3 -3
  124. package/dist/esm/forwarder/handler.d.ts +1 -1
  125. package/dist/esm/forwarder/handler.d.ts.map +1 -1
  126. package/dist/esm/forwarder/handler.js +2 -4
  127. package/dist/esm/forwarder/handler.js.map +1 -1
  128. package/dist/esm/index.d.ts +1 -0
  129. package/dist/esm/index.d.ts.map +1 -1
  130. package/dist/esm/index.js +1 -0
  131. package/dist/esm/index.js.map +1 -1
  132. package/dist/esm/meta-tx/biconomy.d.ts +17 -3
  133. package/dist/esm/meta-tx/biconomy.d.ts.map +1 -1
  134. package/dist/esm/meta-tx/biconomy.js +17 -0
  135. package/dist/esm/meta-tx/biconomy.js.map +1 -1
  136. package/dist/esm/meta-tx/handler.d.ts +38 -4
  137. package/dist/esm/meta-tx/handler.d.ts.map +1 -1
  138. package/dist/esm/meta-tx/handler.js +118 -21
  139. package/dist/esm/meta-tx/handler.js.map +1 -1
  140. package/dist/esm/meta-tx/mixin.d.ts +25 -3
  141. package/dist/esm/meta-tx/mixin.d.ts.map +1 -1
  142. package/dist/esm/meta-tx/mixin.js +67 -17
  143. package/dist/esm/meta-tx/mixin.js.map +1 -1
  144. package/dist/esm/offers/handler.d.ts +15 -0
  145. package/dist/esm/offers/handler.d.ts.map +1 -1
  146. package/dist/esm/offers/handler.js +21 -3
  147. package/dist/esm/offers/handler.js.map +1 -1
  148. package/dist/esm/offers/interface.d.ts +1 -1
  149. package/dist/esm/offers/interface.d.ts.map +1 -1
  150. package/dist/esm/offers/interface.js +3 -2
  151. package/dist/esm/offers/interface.js.map +1 -1
  152. package/dist/esm/offers/mixin.d.ts +26 -3
  153. package/dist/esm/offers/mixin.d.ts.map +1 -1
  154. package/dist/esm/offers/mixin.js +42 -3
  155. package/dist/esm/offers/mixin.js.map +1 -1
  156. package/dist/esm/offers/renderContractualAgreement.d.ts.map +1 -1
  157. package/dist/esm/offers/renderContractualAgreement.js +5 -4
  158. package/dist/esm/offers/renderContractualAgreement.js.map +1 -1
  159. package/dist/esm/seaport/abi.d.ts +41 -0
  160. package/dist/esm/seaport/abi.d.ts.map +1 -0
  161. package/dist/esm/seaport/abi.js +150 -0
  162. package/dist/esm/seaport/abi.js.map +1 -0
  163. package/dist/esm/seaport/handler.d.ts +46 -0
  164. package/dist/esm/seaport/handler.d.ts.map +1 -0
  165. package/dist/esm/seaport/handler.js +24 -0
  166. package/dist/esm/seaport/handler.js.map +1 -0
  167. package/dist/esm/seaport/index.d.ts +2 -0
  168. package/dist/esm/seaport/index.d.ts.map +1 -0
  169. package/dist/esm/seaport/index.js +2 -0
  170. package/dist/esm/seaport/index.js.map +1 -0
  171. package/dist/esm/subgraph.d.ts +1451 -212
  172. package/dist/esm/subgraph.d.ts.map +1 -1
  173. package/dist/esm/subgraph.js +64 -8
  174. package/dist/esm/subgraph.js.map +1 -1
  175. package/dist/esm/voucher/handler.d.ts +31 -0
  176. package/dist/esm/voucher/handler.d.ts.map +1 -1
  177. package/dist/esm/voucher/handler.js +39 -1
  178. package/dist/esm/voucher/handler.js.map +1 -1
  179. package/dist/esm/voucher/interface.d.ts +8 -0
  180. package/dist/esm/voucher/interface.d.ts.map +1 -1
  181. package/dist/esm/voucher/interface.js +72 -0
  182. package/dist/esm/voucher/interface.js.map +1 -1
  183. package/dist/esm/voucher/mixin.d.ts +11 -0
  184. package/dist/esm/voucher/mixin.d.ts.map +1 -1
  185. package/dist/esm/voucher/mixin.js +41 -0
  186. package/dist/esm/voucher/mixin.js.map +1 -1
  187. package/package.json +3 -3
  188. package/src/accounts/interface.ts +1 -1
  189. package/src/accounts/mixin.ts +15 -14
  190. package/src/accounts/queries.graphql +4 -4
  191. package/src/accounts/subgraph.ts +6 -6
  192. package/src/accounts/types.ts +1 -1
  193. package/src/core-sdk.ts +4 -0
  194. package/src/erc1155/mixin.ts +2 -2
  195. package/src/erc20/mixin.ts +14 -14
  196. package/src/erc721/mixin.ts +6 -6
  197. package/src/exchanges/handler.ts +13 -13
  198. package/src/exchanges/mixin.ts +3 -3
  199. package/src/forwarder/handler.ts +3 -5
  200. package/src/index.ts +1 -0
  201. package/src/meta-tx/biconomy.ts +35 -2
  202. package/src/meta-tx/handler.ts +202 -31
  203. package/src/meta-tx/mixin.ts +135 -21
  204. package/src/metadata/base.graphql +3 -0
  205. package/src/metadata/product-v1.graphql +12 -0
  206. package/src/offers/handler.ts +36 -3
  207. package/src/offers/interface.ts +4 -2
  208. package/src/offers/mixin.ts +57 -2
  209. package/src/offers/queries.graphql +13 -0
  210. package/src/offers/renderContractualAgreement.ts +6 -9
  211. package/src/seaport/abi.ts +149 -0
  212. package/src/seaport/handler.ts +57 -0
  213. package/src/seaport/index.ts +1 -0
  214. package/src/subgraph.ts +1501 -216
  215. package/src/voucher/handler.ts +78 -1
  216. package/src/voucher/interface.ts +88 -0
  217. package/src/voucher/mixin.ts +76 -0
@@ -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,
@@ -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
  }
@@ -142,14 +142,20 @@ export class MetaTxMixin extends BaseCoreSDK {
142
142
  public async signMetaTxReserveRange(
143
143
  args: Omit<
144
144
  Parameters<typeof handler.signMetaTxReserveRange>[0],
145
- "web3Lib" | "metaTxHandlerAddress" | "chainId"
146
- >
145
+ "web3Lib" | "metaTxHandlerAddress" | "chainId" | "to"
146
+ > & { to: "seller" | "contract" }
147
147
  ) {
148
+ const offer = await getOfferById(this._subgraphUrl, args.offerId);
149
+
148
150
  return handler.signMetaTxReserveRange({
149
151
  web3Lib: this._web3Lib,
150
152
  metaTxHandlerAddress: this._protocolDiamond,
151
153
  chainId: this._chainId,
152
- ...args
154
+ ...args,
155
+ to:
156
+ args.to === "contract"
157
+ ? offer.seller.voucherCloneAddress
158
+ : offer.seller.assistant
153
159
  });
154
160
  }
155
161
 
@@ -159,25 +165,17 @@ export class MetaTxMixin extends BaseCoreSDK {
159
165
  | "web3Lib"
160
166
  | "bosonVoucherAddress"
161
167
  | "chainId"
162
- | "nonce"
163
168
  | "forwarderAddress"
164
169
  | "batchId"
165
170
  | "forwarderAbi"
171
+ | "relayerUrl"
166
172
  >,
167
173
  overrides: Partial<{
168
174
  batchId: BigNumberish;
169
175
  }> = {}
170
176
  ) {
171
- const signerAddress = await this._web3Lib.getSignerAddress();
172
177
  const forwarderAddress = this._contracts.forwarder;
173
178
  const batchId = overrides.batchId || 0;
174
- const nonce = await getNonce({
175
- contractAddress: forwarderAddress,
176
- user: signerAddress,
177
- web3Lib: this._web3Lib,
178
- batchId,
179
- forwarderAbi: this._metaTxConfig.forwarderAbi
180
- });
181
179
  const offerFromSubgraph = await getOfferById(
182
180
  this._subgraphUrl,
183
181
  args.offerId
@@ -186,10 +184,10 @@ export class MetaTxMixin extends BaseCoreSDK {
186
184
  web3Lib: this._web3Lib,
187
185
  bosonVoucherAddress: offerFromSubgraph.seller.voucherCloneAddress,
188
186
  chainId: this._chainId,
189
- nonce,
190
187
  forwarderAddress,
191
188
  batchId,
192
189
  forwarderAbi: this._metaTxConfig.forwarderAbi,
190
+ relayerUrl: this._metaTxConfig.relayerUrl,
193
191
  ...args
194
192
  });
195
193
  }
@@ -204,6 +202,7 @@ export class MetaTxMixin extends BaseCoreSDK {
204
202
  | "forwarderAddress"
205
203
  | "batchId"
206
204
  | "forwarderAbi"
205
+ | "relayerUrl"
207
206
  >,
208
207
  overrides: Partial<{
209
208
  batchId: BigNumberish;
@@ -216,26 +215,103 @@ export class MetaTxMixin extends BaseCoreSDK {
216
215
  );
217
216
  const forwarderAddress = this._contracts.forwarder;
218
217
  const batchId = overrides.batchId || 0;
219
- const nonce = await getNonce({
220
- contractAddress: forwarderAddress,
221
- user: sellerAddress,
222
- web3Lib: this._web3Lib,
223
- batchId,
224
- forwarderAbi: this._metaTxConfig.forwarderAbi
225
- });
226
218
 
227
219
  return handler.signMetaTxSetApprovalForAll({
228
220
  web3Lib: this._web3Lib,
229
221
  bosonVoucherAddress: seller.voucherCloneAddress,
230
222
  chainId: this._chainId,
231
- nonce,
232
223
  forwarderAddress,
233
224
  batchId,
234
225
  forwarderAbi: this._metaTxConfig.forwarderAbi,
226
+ relayerUrl: this._metaTxConfig.relayerUrl,
235
227
  ...args
236
228
  });
237
229
  }
238
230
 
231
+ public async signMetaTxSetApprovalForAllToContract(
232
+ args: Omit<
233
+ Parameters<typeof handler.signMetaTxSetApprovalForAllToContract>[0],
234
+ | "web3Lib"
235
+ | "bosonVoucherAddress"
236
+ | "chainId"
237
+ | "nonce"
238
+ | "forwarderAddress"
239
+ | "batchId"
240
+ | "forwarderAbi"
241
+ | "relayerUrl"
242
+ >,
243
+ overrides: Partial<{
244
+ batchId?: BigNumberish;
245
+ txGas?: number;
246
+ }> = {}
247
+ ) {
248
+ const sellerAddress = await this._web3Lib.getSignerAddress();
249
+ const seller = await accounts.subgraph.getSellerByAddress(
250
+ this._subgraphUrl,
251
+ sellerAddress
252
+ );
253
+ const forwarderAddress = this._contracts.forwarder;
254
+ const batchId = overrides.batchId || 0;
255
+
256
+ return handler.signMetaTxSetApprovalForAllToContract(
257
+ {
258
+ web3Lib: this._web3Lib,
259
+ bosonVoucherAddress: seller.voucherCloneAddress,
260
+ chainId: this._chainId,
261
+ forwarderAddress,
262
+ batchId,
263
+ forwarderAbi: this._metaTxConfig.forwarderAbi,
264
+ relayerUrl: this._metaTxConfig.relayerUrl,
265
+ ...args
266
+ },
267
+ {
268
+ txGas: overrides.txGas
269
+ }
270
+ );
271
+ }
272
+
273
+ public async signMetaTxCallExternalContract(
274
+ args: Omit<
275
+ Parameters<typeof handler.signMetaTxCallExternalContract>[0],
276
+ | "web3Lib"
277
+ | "bosonVoucherAddress"
278
+ | "chainId"
279
+ | "nonce"
280
+ | "forwarderAddress"
281
+ | "batchId"
282
+ | "forwarderAbi"
283
+ | "relayerUrl"
284
+ >,
285
+ overrides: Partial<{
286
+ batchId?: BigNumberish;
287
+ txGas?: number;
288
+ }> = {}
289
+ ) {
290
+ const sellerAddress = await this._web3Lib.getSignerAddress();
291
+ const seller = await accounts.subgraph.getSellerByAddress(
292
+ this._subgraphUrl,
293
+ sellerAddress
294
+ );
295
+ const forwarderAddress = this._contracts.forwarder;
296
+ const batchId = overrides.batchId || 0;
297
+
298
+ return handler.signMetaTxCallExternalContract(
299
+ {
300
+ web3Lib: this._web3Lib,
301
+ bosonVoucherAddress: seller.voucherCloneAddress,
302
+ chainId: this._chainId,
303
+ forwarderAddress,
304
+ batchId,
305
+ forwarderAbi: this._metaTxConfig.forwarderAbi,
306
+ relayerUrl: this._metaTxConfig.relayerUrl,
307
+ ...args
308
+ },
309
+ {
310
+ txGas: overrides.txGas
311
+ }
312
+ );
313
+ }
314
+
239
315
  public async relayBiconomyMetaTransaction(
240
316
  contractAddress: string,
241
317
  metaTxParams: {
@@ -340,6 +416,44 @@ export class MetaTxMixin extends BaseCoreSDK {
340
416
  });
341
417
  }
342
418
 
419
+ /**
420
+ * Encodes and signs a meta transaction for `extendOffer` that can be relayed.
421
+ * @param args - Meta transaction args.
422
+ * @returns Signature.
423
+ */
424
+ public async signMetaTxExtendOffer(
425
+ args: Omit<
426
+ Parameters<typeof handler.signMetaTxExtendOffer>[0],
427
+ "web3Lib" | "metaTxHandlerAddress" | "chainId"
428
+ >
429
+ ) {
430
+ return handler.signMetaTxExtendOffer({
431
+ web3Lib: this._web3Lib,
432
+ metaTxHandlerAddress: this._protocolDiamond,
433
+ chainId: this._chainId,
434
+ ...args
435
+ });
436
+ }
437
+
438
+ /**
439
+ * Encodes and signs a meta transaction for `extendOfferBatch` that can be relayed.
440
+ * @param args - Meta transaction args.
441
+ * @returns Signature.
442
+ */
443
+ public async signMetaTxExtendOfferBatch(
444
+ args: Omit<
445
+ Parameters<typeof handler.signMetaTxExtendOfferBatch>[0],
446
+ "web3Lib" | "metaTxHandlerAddress" | "chainId"
447
+ >
448
+ ) {
449
+ return handler.signMetaTxExtendOfferBatch({
450
+ web3Lib: this._web3Lib,
451
+ metaTxHandlerAddress: this._protocolDiamond,
452
+ chainId: this._chainId,
453
+ ...args
454
+ });
455
+ }
456
+
343
457
  /**
344
458
  * Encodes and signs a meta transaction for `completeExchangeBatch` that can be relayed.
345
459
  * @param args - Meta transaction args.
@@ -39,6 +39,9 @@ fragment BaseBaseMetadataEntityFields on BaseMetadataEntity {
39
39
  description
40
40
  externalUrl
41
41
  animationUrl
42
+ animationMetadata {
43
+ ...BaseAnimationMetadataFields
44
+ }
42
45
  licenseUrl
43
46
  condition
44
47
  schemaUrl
@@ -129,6 +129,9 @@ fragment BaseProductV1MetadataEntityFields on ProductV1MetadataEntity {
129
129
  description
130
130
  externalUrl
131
131
  animationUrl
132
+ animationMetadata {
133
+ ...BaseAnimationMetadataFields
134
+ }
132
135
  licenseUrl
133
136
  condition
134
137
  schemaUrl
@@ -173,6 +176,13 @@ fragment BaseProductV1MetadataEntityFields on ProductV1MetadataEntity {
173
176
  }
174
177
  }
175
178
 
179
+ fragment BaseAnimationMetadataFields on AnimationMetadata {
180
+ id
181
+ width
182
+ height
183
+ type
184
+ }
185
+
176
186
  fragment BaseProductV1ProductFields on ProductV1Product {
177
187
  id
178
188
  uuid
@@ -299,6 +309,8 @@ fragment BaseProductV1MediaFields on ProductV1Media {
299
309
  url
300
310
  tag
301
311
  type
312
+ width
313
+ height
302
314
  }
303
315
 
304
316
  fragment BaseProductV1PersonalisationFields on ProductV1Personalisation {