@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.
- package/dist/cjs/accounts/handler.d.ts +5 -1
- package/dist/cjs/accounts/handler.d.ts.map +1 -1
- package/dist/cjs/accounts/handler.js +11 -0
- package/dist/cjs/accounts/handler.js.map +1 -1
- package/dist/cjs/accounts/interface.js.map +1 -1
- package/dist/cjs/accounts/mixin.d.ts +4 -4
- package/dist/cjs/accounts/mixin.d.ts.map +1 -1
- package/dist/cjs/accounts/mixin.js +12 -8
- package/dist/cjs/accounts/mixin.js.map +1 -1
- package/dist/cjs/accounts/subgraph.d.ts +1 -1
- package/dist/cjs/accounts/subgraph.d.ts.map +1 -1
- package/dist/cjs/accounts/subgraph.js +7 -7
- package/dist/cjs/accounts/subgraph.js.map +1 -1
- package/dist/cjs/accounts/types.d.ts +1 -1
- package/dist/cjs/accounts/types.d.ts.map +1 -1
- package/dist/cjs/core-sdk.d.ts +1 -0
- package/dist/cjs/core-sdk.d.ts.map +1 -1
- package/dist/cjs/core-sdk.js +3 -0
- package/dist/cjs/core-sdk.js.map +1 -1
- package/dist/cjs/exchanges/handler.js +12 -12
- package/dist/cjs/exchanges/handler.js.map +1 -1
- package/dist/cjs/exchanges/mixin.d.ts +3 -3
- package/dist/cjs/exchanges/mixin.js +3 -3
- package/dist/cjs/forwarder/handler.d.ts +1 -1
- package/dist/cjs/forwarder/handler.d.ts.map +1 -1
- package/dist/cjs/forwarder/handler.js +2 -4
- package/dist/cjs/forwarder/handler.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/meta-tx/biconomy.d.ts +17 -3
- package/dist/cjs/meta-tx/biconomy.d.ts.map +1 -1
- package/dist/cjs/meta-tx/biconomy.js +19 -0
- package/dist/cjs/meta-tx/biconomy.js.map +1 -1
- package/dist/cjs/meta-tx/handler.d.ts +42 -4
- package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
- package/dist/cjs/meta-tx/handler.js +97 -21
- package/dist/cjs/meta-tx/handler.js.map +1 -1
- package/dist/cjs/meta-tx/mixin.d.ts +27 -3
- package/dist/cjs/meta-tx/mixin.d.ts.map +1 -1
- package/dist/cjs/meta-tx/mixin.js +124 -22
- package/dist/cjs/meta-tx/mixin.js.map +1 -1
- package/dist/cjs/metadata/mixin.d.ts +3 -3
- package/dist/cjs/metadata/mixin.d.ts.map +1 -1
- package/dist/cjs/metadata/mixin.js.map +1 -1
- package/dist/cjs/offers/handler.d.ts +15 -0
- package/dist/cjs/offers/handler.d.ts.map +1 -1
- package/dist/cjs/offers/handler.js +28 -4
- package/dist/cjs/offers/handler.js.map +1 -1
- package/dist/cjs/offers/interface.d.ts +1 -1
- package/dist/cjs/offers/interface.d.ts.map +1 -1
- package/dist/cjs/offers/interface.js +3 -2
- package/dist/cjs/offers/interface.js.map +1 -1
- package/dist/cjs/offers/mixin.d.ts +26 -3
- package/dist/cjs/offers/mixin.d.ts.map +1 -1
- package/dist/cjs/offers/mixin.js +46 -3
- package/dist/cjs/offers/mixin.js.map +1 -1
- package/dist/cjs/offers/renderContractualAgreement.d.ts.map +1 -1
- package/dist/cjs/offers/renderContractualAgreement.js +5 -4
- package/dist/cjs/offers/renderContractualAgreement.js.map +1 -1
- package/dist/cjs/orchestration/handler.d.ts.map +1 -1
- package/dist/cjs/orchestration/handler.js +12 -12
- package/dist/cjs/orchestration/handler.js.map +1 -1
- package/dist/cjs/seaport/abi.d.ts +41 -0
- package/dist/cjs/seaport/abi.d.ts.map +1 -0
- package/dist/cjs/seaport/abi.js +153 -0
- package/dist/cjs/seaport/abi.js.map +1 -0
- package/dist/cjs/seaport/handler.d.ts +46 -0
- package/dist/cjs/seaport/handler.d.ts.map +1 -0
- package/dist/cjs/seaport/handler.js +28 -0
- package/dist/cjs/seaport/handler.js.map +1 -0
- package/dist/cjs/seaport/index.d.ts +2 -0
- package/dist/cjs/seaport/index.d.ts.map +1 -0
- package/dist/cjs/seaport/index.js +28 -0
- package/dist/cjs/seaport/index.js.map +1 -0
- package/dist/cjs/subgraph.d.ts +6523 -511
- package/dist/cjs/subgraph.d.ts.map +1 -1
- package/dist/cjs/subgraph.js +138 -20
- package/dist/cjs/subgraph.js.map +1 -1
- package/dist/cjs/voucher/handler.d.ts +31 -0
- package/dist/cjs/voucher/handler.d.ts.map +1 -1
- package/dist/cjs/voucher/handler.js +57 -1
- package/dist/cjs/voucher/handler.js.map +1 -1
- package/dist/cjs/voucher/interface.d.ts +8 -0
- package/dist/cjs/voucher/interface.d.ts.map +1 -1
- package/dist/cjs/voucher/interface.js +81 -1
- package/dist/cjs/voucher/interface.js.map +1 -1
- package/dist/cjs/voucher/mixin.d.ts +11 -0
- package/dist/cjs/voucher/mixin.d.ts.map +1 -1
- package/dist/cjs/voucher/mixin.js +47 -0
- package/dist/cjs/voucher/mixin.js.map +1 -1
- package/dist/esm/accounts/handler.d.ts +5 -1
- package/dist/esm/accounts/handler.d.ts.map +1 -1
- package/dist/esm/accounts/handler.js +11 -0
- package/dist/esm/accounts/handler.js.map +1 -1
- package/dist/esm/accounts/interface.js.map +1 -1
- package/dist/esm/accounts/mixin.d.ts +4 -4
- package/dist/esm/accounts/mixin.d.ts.map +1 -1
- package/dist/esm/accounts/mixin.js +12 -8
- package/dist/esm/accounts/mixin.js.map +1 -1
- package/dist/esm/accounts/subgraph.d.ts +1 -1
- package/dist/esm/accounts/subgraph.d.ts.map +1 -1
- package/dist/esm/accounts/subgraph.js +5 -5
- package/dist/esm/accounts/subgraph.js.map +1 -1
- package/dist/esm/accounts/types.d.ts +1 -1
- package/dist/esm/accounts/types.d.ts.map +1 -1
- package/dist/esm/core-sdk.d.ts +1 -0
- package/dist/esm/core-sdk.d.ts.map +1 -1
- package/dist/esm/core-sdk.js +3 -0
- package/dist/esm/core-sdk.js.map +1 -1
- package/dist/esm/exchanges/handler.js +12 -12
- package/dist/esm/exchanges/handler.js.map +1 -1
- package/dist/esm/exchanges/mixin.d.ts +3 -3
- package/dist/esm/exchanges/mixin.js +3 -3
- package/dist/esm/forwarder/handler.d.ts +1 -1
- package/dist/esm/forwarder/handler.d.ts.map +1 -1
- package/dist/esm/forwarder/handler.js +2 -4
- package/dist/esm/forwarder/handler.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/meta-tx/biconomy.d.ts +17 -3
- package/dist/esm/meta-tx/biconomy.d.ts.map +1 -1
- package/dist/esm/meta-tx/biconomy.js +17 -0
- package/dist/esm/meta-tx/biconomy.js.map +1 -1
- package/dist/esm/meta-tx/handler.d.ts +42 -4
- package/dist/esm/meta-tx/handler.d.ts.map +1 -1
- package/dist/esm/meta-tx/handler.js +123 -19
- package/dist/esm/meta-tx/handler.js.map +1 -1
- package/dist/esm/meta-tx/mixin.d.ts +27 -3
- package/dist/esm/meta-tx/mixin.d.ts.map +1 -1
- package/dist/esm/meta-tx/mixin.js +137 -17
- package/dist/esm/meta-tx/mixin.js.map +1 -1
- package/dist/esm/metadata/mixin.d.ts +3 -3
- package/dist/esm/metadata/mixin.d.ts.map +1 -1
- package/dist/esm/metadata/mixin.js.map +1 -1
- package/dist/esm/offers/handler.d.ts +15 -0
- package/dist/esm/offers/handler.d.ts.map +1 -1
- package/dist/esm/offers/handler.js +21 -3
- package/dist/esm/offers/handler.js.map +1 -1
- package/dist/esm/offers/interface.d.ts +1 -1
- package/dist/esm/offers/interface.d.ts.map +1 -1
- package/dist/esm/offers/interface.js +3 -2
- package/dist/esm/offers/interface.js.map +1 -1
- package/dist/esm/offers/mixin.d.ts +26 -3
- package/dist/esm/offers/mixin.d.ts.map +1 -1
- package/dist/esm/offers/mixin.js +42 -3
- package/dist/esm/offers/mixin.js.map +1 -1
- package/dist/esm/offers/renderContractualAgreement.d.ts.map +1 -1
- package/dist/esm/offers/renderContractualAgreement.js +5 -4
- package/dist/esm/offers/renderContractualAgreement.js.map +1 -1
- package/dist/esm/orchestration/handler.d.ts.map +1 -1
- package/dist/esm/orchestration/handler.js +12 -12
- package/dist/esm/orchestration/handler.js.map +1 -1
- package/dist/esm/seaport/abi.d.ts +41 -0
- package/dist/esm/seaport/abi.d.ts.map +1 -0
- package/dist/esm/seaport/abi.js +150 -0
- package/dist/esm/seaport/abi.js.map +1 -0
- package/dist/esm/seaport/handler.d.ts +46 -0
- package/dist/esm/seaport/handler.d.ts.map +1 -0
- package/dist/esm/seaport/handler.js +24 -0
- package/dist/esm/seaport/handler.js.map +1 -0
- package/dist/esm/seaport/index.d.ts +2 -0
- package/dist/esm/seaport/index.d.ts.map +1 -0
- package/dist/esm/seaport/index.js +2 -0
- package/dist/esm/seaport/index.js.map +1 -0
- package/dist/esm/subgraph.d.ts +6523 -511
- package/dist/esm/subgraph.d.ts.map +1 -1
- package/dist/esm/subgraph.js +135 -17
- package/dist/esm/subgraph.js.map +1 -1
- package/dist/esm/voucher/handler.d.ts +31 -0
- package/dist/esm/voucher/handler.d.ts.map +1 -1
- package/dist/esm/voucher/handler.js +39 -1
- package/dist/esm/voucher/handler.js.map +1 -1
- package/dist/esm/voucher/interface.d.ts +8 -0
- package/dist/esm/voucher/interface.d.ts.map +1 -1
- package/dist/esm/voucher/interface.js +72 -0
- package/dist/esm/voucher/interface.js.map +1 -1
- package/dist/esm/voucher/mixin.d.ts +11 -0
- package/dist/esm/voucher/mixin.d.ts.map +1 -1
- package/dist/esm/voucher/mixin.js +41 -0
- package/dist/esm/voucher/mixin.js.map +1 -1
- package/package.json +3 -3
- package/src/accounts/handler.ts +17 -1
- package/src/accounts/interface.ts +2 -1
- package/src/accounts/mixin.ts +19 -14
- package/src/accounts/queries.graphql +46 -4
- package/src/accounts/subgraph.ts +6 -6
- package/src/accounts/types.ts +1 -1
- package/src/core-sdk.ts +4 -0
- package/src/exchanges/handler.ts +13 -13
- package/src/exchanges/mixin.ts +3 -3
- package/src/forwarder/handler.ts +3 -5
- package/src/index.ts +2 -0
- package/src/meta-tx/biconomy.ts +35 -2
- package/src/meta-tx/handler.ts +209 -24
- package/src/meta-tx/mixin.ts +226 -23
- package/src/metadata/base.graphql +3 -0
- package/src/metadata/mixin.ts +5 -3
- package/src/metadata/product-v1.graphql +2 -2
- package/src/offers/handler.ts +36 -3
- package/src/offers/interface.ts +4 -2
- package/src/offers/mixin.ts +57 -2
- package/src/offers/queries.graphql +13 -0
- package/src/offers/renderContractualAgreement.ts +6 -9
- package/src/orchestration/handler.ts +40 -20
- package/src/seaport/abi.ts +149 -0
- package/src/seaport/handler.ts +57 -0
- package/src/seaport/index.ts +1 -0
- package/src/subgraph.ts +6622 -509
- package/src/voucher/handler.ts +78 -1
- package/src/voucher/interface.ts +88 -0
- package/src/voucher/mixin.ts +76 -0
package/src/meta-tx/mixin.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
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.
|
package/src/metadata/mixin.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
|
|
2
2
|
import * as subgraph from "../subgraph";
|
|
3
|
-
import {
|
|
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:
|
|
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(
|
|
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
|
-
|
|
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
|
}
|
package/src/offers/handler.ts
CHANGED
|
@@ -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.
|
|
195
|
+
offerFromSubgraph.seller.assistant.toLowerCase() !==
|
|
163
196
|
signerAddress.toLowerCase()
|
|
164
197
|
) {
|
|
165
198
|
throw new Error(
|
|
166
|
-
`Signer with address "${signerAddress}" is not the
|
|
199
|
+
`Signer with address "${signerAddress}" is not the assistant "${offerFromSubgraph.seller.assistant}" of offer with id "${offerId}"`
|
|
167
200
|
);
|
|
168
201
|
}
|
|
169
202
|
}
|
package/src/offers/interface.ts
CHANGED
|
@@ -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
|
}
|
package/src/offers/mixin.ts
CHANGED
|
@@ -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 `
|
|
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 `
|
|
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
|
-
|
|
296
|
-
|
|
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
|
-
|
|
301
|
-
|
|
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
|
-
|
|
309
|
-
|
|
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,
|