@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
@@ -1,12 +1,17 @@
1
- import { MetaTxConfig, TransactionResponse } from "@bosonprotocol/common";
1
+ import {
2
+ AuthTokenType,
3
+ MetaTxConfig,
4
+ TransactionResponse
5
+ } from "@bosonprotocol/common";
2
6
  import { BigNumberish } from "@ethersproject/bignumber";
3
7
  import { BytesLike } from "@ethersproject/bytes";
4
8
  import { handler } from ".";
5
9
  import { getOfferById } from "../offers/subgraph";
6
10
  import { BaseCoreSDK } from "./../mixins/base-core-sdk";
7
11
  import { GetRetriedHashesData } from "./biconomy";
8
- import { getNonce } from "../forwarder/handler";
9
12
  import { accounts } from "..";
13
+ import { AccountsMixin } from "../accounts/mixin";
14
+ import { SellerFieldsFragment } from "../subgraph";
10
15
  export class MetaTxMixin extends BaseCoreSDK {
11
16
  /* -------------------------------------------------------------------------- */
12
17
  /* Meta Tx related methods */
@@ -78,6 +83,90 @@ export class MetaTxMixin extends BaseCoreSDK {
78
83
  });
79
84
  }
80
85
 
86
+ public async signMetaTxUpdateSellerAndOptIn(
87
+ sellerUpdates: accounts.UpdateSellerArgs
88
+ ): Promise<TransactionResponse> {
89
+ let nonce = Date.now();
90
+ const updateMetaTx = await this.signMetaTxUpdateSeller({
91
+ updateSellerArgs: sellerUpdates,
92
+ nonce,
93
+ theGraphStorage: this._theGraphStorage,
94
+ metadataStorage: this._metadataStorage
95
+ });
96
+ const updateTx = await this.relayMetaTransaction({
97
+ functionName: updateMetaTx.functionName,
98
+ functionSignature: updateMetaTx.functionSignature,
99
+ sigR: updateMetaTx.r,
100
+ sigS: updateMetaTx.s,
101
+ sigV: updateMetaTx.v,
102
+ nonce
103
+ });
104
+ await updateTx.wait();
105
+ let seller: SellerFieldsFragment | undefined;
106
+ let count = 200;
107
+ while ((!seller || !seller.pendingSeller) && count-- > 0) {
108
+ await new Promise((resolve) => setTimeout(resolve, 300));
109
+ type getSellerById = typeof AccountsMixin.prototype.getSellerById;
110
+ seller = await (this["getSellerById"] as getSellerById)(sellerUpdates.id);
111
+ }
112
+ if (!seller) {
113
+ throw new Error(
114
+ "[signMetaTxUpdateSellerAndOptIn] seller could not be retrieved in time"
115
+ );
116
+ }
117
+ const pendingSellerUpdate = seller.pendingSeller;
118
+ if (!pendingSellerUpdate) {
119
+ throw new Error(
120
+ "[signMetaTxUpdateSellerAndOptIn] seller.pendingSeller could not be retrieved in time"
121
+ );
122
+ }
123
+ // Find all updates that can be opted in by the current account
124
+ const currentAccount = (
125
+ await this._web3Lib.getSignerAddress()
126
+ ).toLowerCase();
127
+ const fieldsToUpdate = {
128
+ assistant:
129
+ currentAccount === pendingSellerUpdate.assistant?.toLowerCase(),
130
+ clerk: currentAccount === pendingSellerUpdate.clerk?.toLowerCase(),
131
+ admin: currentAccount === pendingSellerUpdate.admin?.toLowerCase(),
132
+ authToken:
133
+ pendingSellerUpdate.authTokenType !== undefined &&
134
+ pendingSellerUpdate.authTokenType !== null &&
135
+ pendingSellerUpdate.authTokenType !== AuthTokenType.NONE
136
+ };
137
+ if (
138
+ fieldsToUpdate.assistant ||
139
+ fieldsToUpdate.clerk ||
140
+ fieldsToUpdate.admin ||
141
+ fieldsToUpdate.authToken
142
+ ) {
143
+ nonce = Date.now();
144
+ const optInMetaTx = await this.signMetaTxOptInToSellerUpdate({
145
+ optInToSellerUpdateArgs: {
146
+ id: sellerUpdates.id,
147
+ fieldsToUpdate: {
148
+ assistant:
149
+ currentAccount === pendingSellerUpdate.assistant.toLowerCase(),
150
+ clerk: currentAccount === pendingSellerUpdate.clerk.toLowerCase(),
151
+ admin: currentAccount === pendingSellerUpdate.admin.toLowerCase(),
152
+ authToken: pendingSellerUpdate.authTokenType !== AuthTokenType.NONE
153
+ }
154
+ },
155
+ nonce
156
+ });
157
+ return this.relayMetaTransaction({
158
+ functionName: optInMetaTx.functionName,
159
+ functionSignature: optInMetaTx.functionSignature,
160
+ sigR: optInMetaTx.r,
161
+ sigS: optInMetaTx.s,
162
+ sigV: optInMetaTx.v,
163
+ nonce
164
+ });
165
+ }
166
+ // If there is nothing to optIn from the current account, then return the response from updateSeller
167
+ return updateTx;
168
+ }
169
+
81
170
  /**
82
171
  * Encodes and signs a meta transaction for `createOffer` that can be relayed.
83
172
  * @param args - Meta transaction args.
@@ -142,14 +231,20 @@ export class MetaTxMixin extends BaseCoreSDK {
142
231
  public async signMetaTxReserveRange(
143
232
  args: Omit<
144
233
  Parameters<typeof handler.signMetaTxReserveRange>[0],
145
- "web3Lib" | "metaTxHandlerAddress" | "chainId"
146
- >
234
+ "web3Lib" | "metaTxHandlerAddress" | "chainId" | "to"
235
+ > & { to: "seller" | "contract" }
147
236
  ) {
237
+ const offer = await getOfferById(this._subgraphUrl, args.offerId);
238
+
148
239
  return handler.signMetaTxReserveRange({
149
240
  web3Lib: this._web3Lib,
150
241
  metaTxHandlerAddress: this._protocolDiamond,
151
242
  chainId: this._chainId,
152
- ...args
243
+ ...args,
244
+ to:
245
+ args.to === "contract"
246
+ ? offer.seller.voucherCloneAddress
247
+ : offer.seller.assistant
153
248
  });
154
249
  }
155
250
 
@@ -159,25 +254,17 @@ export class MetaTxMixin extends BaseCoreSDK {
159
254
  | "web3Lib"
160
255
  | "bosonVoucherAddress"
161
256
  | "chainId"
162
- | "nonce"
163
257
  | "forwarderAddress"
164
258
  | "batchId"
165
259
  | "forwarderAbi"
260
+ | "relayerUrl"
166
261
  >,
167
262
  overrides: Partial<{
168
263
  batchId: BigNumberish;
169
264
  }> = {}
170
265
  ) {
171
- const signerAddress = await this._web3Lib.getSignerAddress();
172
266
  const forwarderAddress = this._contracts.forwarder;
173
267
  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
268
  const offerFromSubgraph = await getOfferById(
182
269
  this._subgraphUrl,
183
270
  args.offerId
@@ -186,10 +273,10 @@ export class MetaTxMixin extends BaseCoreSDK {
186
273
  web3Lib: this._web3Lib,
187
274
  bosonVoucherAddress: offerFromSubgraph.seller.voucherCloneAddress,
188
275
  chainId: this._chainId,
189
- nonce,
190
276
  forwarderAddress,
191
277
  batchId,
192
278
  forwarderAbi: this._metaTxConfig.forwarderAbi,
279
+ relayerUrl: this._metaTxConfig.relayerUrl,
193
280
  ...args
194
281
  });
195
282
  }
@@ -204,6 +291,7 @@ export class MetaTxMixin extends BaseCoreSDK {
204
291
  | "forwarderAddress"
205
292
  | "batchId"
206
293
  | "forwarderAbi"
294
+ | "relayerUrl"
207
295
  >,
208
296
  overrides: Partial<{
209
297
  batchId: BigNumberish;
@@ -216,26 +304,103 @@ export class MetaTxMixin extends BaseCoreSDK {
216
304
  );
217
305
  const forwarderAddress = this._contracts.forwarder;
218
306
  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
307
 
227
308
  return handler.signMetaTxSetApprovalForAll({
228
309
  web3Lib: this._web3Lib,
229
310
  bosonVoucherAddress: seller.voucherCloneAddress,
230
311
  chainId: this._chainId,
231
- nonce,
232
312
  forwarderAddress,
233
313
  batchId,
234
314
  forwarderAbi: this._metaTxConfig.forwarderAbi,
315
+ relayerUrl: this._metaTxConfig.relayerUrl,
235
316
  ...args
236
317
  });
237
318
  }
238
319
 
320
+ public async signMetaTxSetApprovalForAllToContract(
321
+ args: Omit<
322
+ Parameters<typeof handler.signMetaTxSetApprovalForAllToContract>[0],
323
+ | "web3Lib"
324
+ | "bosonVoucherAddress"
325
+ | "chainId"
326
+ | "nonce"
327
+ | "forwarderAddress"
328
+ | "batchId"
329
+ | "forwarderAbi"
330
+ | "relayerUrl"
331
+ >,
332
+ overrides: Partial<{
333
+ batchId?: BigNumberish;
334
+ txGas?: number;
335
+ }> = {}
336
+ ) {
337
+ const sellerAddress = await this._web3Lib.getSignerAddress();
338
+ const seller = await accounts.subgraph.getSellerByAddress(
339
+ this._subgraphUrl,
340
+ sellerAddress
341
+ );
342
+ const forwarderAddress = this._contracts.forwarder;
343
+ const batchId = overrides.batchId || 0;
344
+
345
+ return handler.signMetaTxSetApprovalForAllToContract(
346
+ {
347
+ web3Lib: this._web3Lib,
348
+ bosonVoucherAddress: seller.voucherCloneAddress,
349
+ chainId: this._chainId,
350
+ forwarderAddress,
351
+ batchId,
352
+ forwarderAbi: this._metaTxConfig.forwarderAbi,
353
+ relayerUrl: this._metaTxConfig.relayerUrl,
354
+ ...args
355
+ },
356
+ {
357
+ txGas: overrides.txGas
358
+ }
359
+ );
360
+ }
361
+
362
+ public async signMetaTxCallExternalContract(
363
+ args: Omit<
364
+ Parameters<typeof handler.signMetaTxCallExternalContract>[0],
365
+ | "web3Lib"
366
+ | "bosonVoucherAddress"
367
+ | "chainId"
368
+ | "nonce"
369
+ | "forwarderAddress"
370
+ | "batchId"
371
+ | "forwarderAbi"
372
+ | "relayerUrl"
373
+ >,
374
+ overrides: Partial<{
375
+ batchId?: BigNumberish;
376
+ txGas?: number;
377
+ }> = {}
378
+ ) {
379
+ const sellerAddress = await this._web3Lib.getSignerAddress();
380
+ const seller = await accounts.subgraph.getSellerByAddress(
381
+ this._subgraphUrl,
382
+ sellerAddress
383
+ );
384
+ const forwarderAddress = this._contracts.forwarder;
385
+ const batchId = overrides.batchId || 0;
386
+
387
+ return handler.signMetaTxCallExternalContract(
388
+ {
389
+ web3Lib: this._web3Lib,
390
+ bosonVoucherAddress: seller.voucherCloneAddress,
391
+ chainId: this._chainId,
392
+ forwarderAddress,
393
+ batchId,
394
+ forwarderAbi: this._metaTxConfig.forwarderAbi,
395
+ relayerUrl: this._metaTxConfig.relayerUrl,
396
+ ...args
397
+ },
398
+ {
399
+ txGas: overrides.txGas
400
+ }
401
+ );
402
+ }
403
+
239
404
  public async relayBiconomyMetaTransaction(
240
405
  contractAddress: string,
241
406
  metaTxParams: {
@@ -340,6 +505,44 @@ export class MetaTxMixin extends BaseCoreSDK {
340
505
  });
341
506
  }
342
507
 
508
+ /**
509
+ * Encodes and signs a meta transaction for `extendOffer` that can be relayed.
510
+ * @param args - Meta transaction args.
511
+ * @returns Signature.
512
+ */
513
+ public async signMetaTxExtendOffer(
514
+ args: Omit<
515
+ Parameters<typeof handler.signMetaTxExtendOffer>[0],
516
+ "web3Lib" | "metaTxHandlerAddress" | "chainId"
517
+ >
518
+ ) {
519
+ return handler.signMetaTxExtendOffer({
520
+ web3Lib: this._web3Lib,
521
+ metaTxHandlerAddress: this._protocolDiamond,
522
+ chainId: this._chainId,
523
+ ...args
524
+ });
525
+ }
526
+
527
+ /**
528
+ * Encodes and signs a meta transaction for `extendOfferBatch` that can be relayed.
529
+ * @param args - Meta transaction args.
530
+ * @returns Signature.
531
+ */
532
+ public async signMetaTxExtendOfferBatch(
533
+ args: Omit<
534
+ Parameters<typeof handler.signMetaTxExtendOfferBatch>[0],
535
+ "web3Lib" | "metaTxHandlerAddress" | "chainId"
536
+ >
537
+ ) {
538
+ return handler.signMetaTxExtendOfferBatch({
539
+ web3Lib: this._web3Lib,
540
+ metaTxHandlerAddress: this._protocolDiamond,
541
+ chainId: this._chainId,
542
+ ...args
543
+ });
544
+ }
545
+
343
546
  /**
344
547
  * Encodes and signs a meta transaction for `completeExchangeBatch` that can be relayed.
345
548
  * @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
@@ -1,6 +1,6 @@
1
1
  import { BaseCoreSDK } from "./../mixins/base-core-sdk";
2
2
  import * as subgraph from "../subgraph";
3
- import { AnyMetadata } from "..";
3
+ import { OfferOrSellerMetadata } from "..";
4
4
  import {
5
5
  getBaseMetadataEntities,
6
6
  getProductV1MetadataEntities,
@@ -21,7 +21,7 @@ export class MetadataMixin extends BaseCoreSDK {
21
21
  * @param metadata - Offer metadata of type `BASE` or `PRODUCT_V1`.
22
22
  * @returns Metadata hash / identifier.
23
23
  */
24
- public async storeMetadata(metadata: AnyMetadata): Promise<string> {
24
+ public async storeMetadata(metadata: OfferOrSellerMetadata): Promise<string> {
25
25
  if (!this._metadataStorage) {
26
26
  throw new Error("No metadata storage set");
27
27
  }
@@ -35,7 +35,9 @@ export class MetadataMixin extends BaseCoreSDK {
35
35
  * storage instance.
36
36
  * @returns Offer metadata.
37
37
  */
38
- public async getMetadata(metadataHashOrUri: string): Promise<AnyMetadata> {
38
+ public async getMetadata(
39
+ metadataHashOrUri: string
40
+ ): Promise<OfferOrSellerMetadata> {
39
41
  if (!this._metadataStorage) {
40
42
  throw new Error("No metadata storage set");
41
43
  }
@@ -180,7 +180,7 @@ fragment BaseAnimationMetadataFields on AnimationMetadata {
180
180
  id
181
181
  width
182
182
  height
183
- name
183
+ type
184
184
  }
185
185
 
186
186
  fragment BaseProductV1ProductFields on ProductV1Product {
@@ -311,7 +311,6 @@ fragment BaseProductV1MediaFields on ProductV1Media {
311
311
  type
312
312
  width
313
313
  height
314
- name
315
314
  }
316
315
 
317
316
  fragment BaseProductV1PersonalisationFields on ProductV1Personalisation {
@@ -339,6 +338,7 @@ fragment BaseProductV1SellerFields on ProductV1Seller {
339
338
  contactLinks {
340
339
  ...BaseProductV1SellerContactLinkFields
341
340
  }
341
+ contactPreference
342
342
  seller {
343
343
  ...BaseSellerFields
344
344
  }
@@ -73,6 +73,7 @@ export async function reserveRange(args: {
73
73
  subgraphUrl: string;
74
74
  offerId: BigNumberish;
75
75
  length: BigNumberish;
76
+ to: string;
76
77
  web3Lib: Web3LibAdapter;
77
78
  }): Promise<TransactionResponse> {
78
79
  const offerFromSubgraph = await getOfferById(args.subgraphUrl, args.offerId);
@@ -87,7 +88,7 @@ export async function reserveRange(args: {
87
88
 
88
89
  return args.web3Lib.sendTransaction({
89
90
  to: args.contractAddress,
90
- data: encodeReserveRange(args.offerId, args.length)
91
+ data: encodeReserveRange(args.offerId, args.length, args.to)
91
92
  });
92
93
  }
93
94
 
@@ -145,6 +146,38 @@ export async function voidOfferBatch(args: {
145
146
  });
146
147
  }
147
148
 
149
+ export async function extendOffer(args: {
150
+ contractAddress: string;
151
+ subgraphUrl: string;
152
+ offerId: BigNumberish;
153
+ validUntil: BigNumberish;
154
+ web3Lib: Web3LibAdapter;
155
+ }): Promise<TransactionResponse> {
156
+ return args.web3Lib.sendTransaction({
157
+ to: args.contractAddress,
158
+ data: bosonOfferHandlerIface.encodeFunctionData("extendOffer", [
159
+ args.offerId,
160
+ args.validUntil
161
+ ])
162
+ });
163
+ }
164
+
165
+ export async function extendOfferBatch(args: {
166
+ contractAddress: string;
167
+ subgraphUrl: string;
168
+ offerIds: BigNumberish[];
169
+ validUntil: BigNumberish;
170
+ web3Lib: Web3LibAdapter;
171
+ }): Promise<TransactionResponse> {
172
+ return args.web3Lib.sendTransaction({
173
+ to: args.contractAddress,
174
+ data: bosonOfferHandlerIface.encodeFunctionData("extendOfferBatch", [
175
+ args.offerIds,
176
+ args.validUntil
177
+ ])
178
+ });
179
+ }
180
+
148
181
  function checkIfOfferVoidable(
149
182
  offerId: BigNumberish,
150
183
  signerAddress: string,
@@ -159,11 +192,11 @@ function checkIfOfferVoidable(
159
192
  }
160
193
 
161
194
  if (
162
- offerFromSubgraph.seller.operator.toLowerCase() !==
195
+ offerFromSubgraph.seller.assistant.toLowerCase() !==
163
196
  signerAddress.toLowerCase()
164
197
  ) {
165
198
  throw new Error(
166
- `Signer with address "${signerAddress}" is not the operator "${offerFromSubgraph.seller.operator}" of offer with id "${offerId}"`
199
+ `Signer with address "${signerAddress}" is not the assistant "${offerFromSubgraph.seller.assistant}" of offer with id "${offerId}"`
167
200
  );
168
201
  }
169
202
  }
@@ -132,10 +132,12 @@ export function argsToOfferDurationsStruct(
132
132
 
133
133
  export function encodeReserveRange(
134
134
  offerId: BigNumberish,
135
- length: BigNumberish
135
+ length: BigNumberish,
136
+ to: string
136
137
  ) {
137
138
  return bosonOfferHandlerIface.encodeFunctionData("reserveRange", [
138
139
  offerId,
139
- length
140
+ length,
141
+ to
140
142
  ]);
141
143
  }
@@ -146,7 +146,7 @@ export class OfferMixin extends BaseCoreSDK {
146
146
 
147
147
  /**
148
148
  * Voids an existing offer by calling the `OfferHandlerFacet` contract.
149
- * This transaction only succeeds if the connected signer is the `operator`.
149
+ * This transaction only succeeds if the connected signer is the `assistant`.
150
150
  * @param offerId - ID of offer to void.
151
151
  * @param overrides - Optional overrides.
152
152
  * @returns Transaction response.
@@ -167,7 +167,7 @@ export class OfferMixin extends BaseCoreSDK {
167
167
 
168
168
  /**
169
169
  * Voids a batch of existing offers by calling the `OfferHandlerFacet` contract.
170
- * This transaction only succeeds if the connected signer is the `operator` of all
170
+ * This transaction only succeeds if the connected signer is the `assistant` of all
171
171
  * provided offers.
172
172
  * @param offerIds - IDs of offers to void.
173
173
  * @param overrides - Optional overrides.
@@ -187,6 +187,55 @@ export class OfferMixin extends BaseCoreSDK {
187
187
  });
188
188
  }
189
189
 
190
+ /**
191
+ * Extends an existing offer by calling the `OfferHandlerFacet` contract.
192
+ * This transaction only succeeds if the connected signer is the `assistant`.
193
+ * @param offerId - ID of offer to void.
194
+ * @param validUntil - new validity date.
195
+ * @param overrides - Optional overrides.
196
+ * @returns Transaction response.
197
+ */
198
+ public async extendOffer(
199
+ offerId: BigNumberish,
200
+ validUntil: BigNumberish,
201
+ overrides: Partial<{
202
+ contractAddress: string;
203
+ }> = {}
204
+ ): Promise<TransactionResponse> {
205
+ return offers.handler.extendOffer({
206
+ offerId,
207
+ validUntil,
208
+ web3Lib: this._web3Lib,
209
+ subgraphUrl: this._subgraphUrl,
210
+ contractAddress: overrides.contractAddress || this._protocolDiamond
211
+ });
212
+ }
213
+
214
+ /**
215
+ * Extends a batch of existing offers by calling the `OfferHandlerFacet` contract.
216
+ * This transaction only succeeds if the connected signer is the `assistant` of all
217
+ * provided offers.
218
+ * @param offerIds - IDs of offers to void.
219
+ * @param validUntil - new validity date.
220
+ * @param overrides - Optional overrides.
221
+ * @returns Transaction response.
222
+ */
223
+ public async extendOfferBatch(
224
+ offerIds: BigNumberish[],
225
+ validUntil: BigNumberish,
226
+ overrides: Partial<{
227
+ contractAddress: string;
228
+ }> = {}
229
+ ): Promise<TransactionResponse> {
230
+ return offers.handler.extendOfferBatch({
231
+ offerIds,
232
+ validUntil,
233
+ web3Lib: this._web3Lib,
234
+ subgraphUrl: this._subgraphUrl,
235
+ contractAddress: overrides.contractAddress || this._protocolDiamond
236
+ });
237
+ }
238
+
190
239
  /**
191
240
  * Returns offer from subgraph.
192
241
  * @param offerId - ID of offer.
@@ -255,13 +304,19 @@ export class OfferMixin extends BaseCoreSDK {
255
304
  public async reserveRange(
256
305
  offerId: BigNumberish,
257
306
  length: BigNumberish,
307
+ to: "seller" | "contract",
258
308
  overrides: Partial<{
259
309
  contractAddress: string;
260
310
  }> = {}
261
311
  ): Promise<TransactionResponse> {
312
+ const offer = await this.getOfferById(offerId);
262
313
  return offers.handler.reserveRange({
263
314
  offerId,
264
315
  length,
316
+ to:
317
+ to === "contract"
318
+ ? offer.seller.voucherCloneAddress
319
+ : offer.seller.assistant,
265
320
  subgraphUrl: this._subgraphUrl,
266
321
  contractAddress: overrides.contractAddress || this._protocolDiamond,
267
322
  web3Lib: this._web3Lib
@@ -94,6 +94,9 @@ fragment BaseOfferFields on Offer {
94
94
  description
95
95
  externalUrl
96
96
  animationUrl
97
+ animationMetadata {
98
+ ...BaseAnimationMetadataFields
99
+ }
97
100
  licenseUrl
98
101
  condition
99
102
  schemaUrl
@@ -128,4 +131,14 @@ fragment BaseOfferFields on Offer {
128
131
  }
129
132
  }
130
133
  }
134
+ range {
135
+ ...BaseRangeFields
136
+ }
137
+ }
138
+
139
+ fragment BaseRangeFields on RangeEntity {
140
+ id
141
+ start
142
+ end
143
+ owner
131
144
  }
@@ -292,21 +292,18 @@ export async function renderContractualAgreementForOffer(
292
292
  `Invalid Offer Metadata: Type is not supported: '${existingOfferData.metadata.type}'`
293
293
  );
294
294
  }
295
- if (
296
- !(existingOfferData.metadata as productV1.ProductV1Metadata).exchangePolicy
297
- ) {
295
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
296
+ if (!(existingOfferData.metadata as any).exchangePolicy) {
298
297
  throw new Error(`Invalid Offer Metadata: exchangePolicy is not defined`);
299
298
  }
300
- if (
301
- !(existingOfferData.metadata as productV1.ProductV1Metadata).exchangePolicy
302
- .template
303
- ) {
299
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
300
+ if (!(existingOfferData.metadata as any).exchangePolicy.template) {
304
301
  throw new Error(
305
302
  `Invalid Offer Metadata: exchangePolicy.template is not defined`
306
303
  );
307
304
  }
308
- const template = (existingOfferData.metadata as productV1.ProductV1Metadata)
309
- .exchangePolicy.template;
305
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
306
+ const template = (existingOfferData.metadata as any).exchangePolicy.template;
310
307
  const convertedOfferArgs = convertExistingOfferData(existingOfferData);
311
308
  return renderContractualAgreement(
312
309
  template,