@bosonprotocol/core-sdk 1.9.1-alpha.2 → 1.9.1-alpha.4
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/exchanges/handler.js +9 -7
- package/dist/cjs/exchanges/handler.js.map +1 -1
- package/dist/cjs/subgraph.d.ts +10 -0
- package/dist/cjs/subgraph.d.ts.map +1 -1
- package/dist/cjs/subgraph.js +1 -0
- package/dist/cjs/subgraph.js.map +1 -1
- package/dist/esm/exchanges/handler.js +9 -7
- package/dist/esm/exchanges/handler.js.map +1 -1
- package/dist/esm/subgraph.d.ts +10 -0
- package/dist/esm/subgraph.d.ts.map +1 -1
- package/dist/esm/subgraph.js +1 -0
- package/dist/esm/subgraph.js.map +1 -1
- package/package.json +3 -3
- package/src/exchanges/handler.ts +12 -7
- package/src/exchanges/queries.graphql +1 -0
- package/src/subgraph.ts +11 -0
|
@@ -48,8 +48,8 @@ function completeExchange(args) {
|
|
|
48
48
|
args.web3Lib.getSignerAddress()
|
|
49
49
|
]);
|
|
50
50
|
assertExchange(args.exchangeId, exchange);
|
|
51
|
-
const {
|
|
52
|
-
if (
|
|
51
|
+
const { isSignerOperator } = assertSignerIsBuyerOrOperator(signerAddress, exchange);
|
|
52
|
+
if (isSignerOperator) {
|
|
53
53
|
const elapsedSinceRedeemMS = Date.now() - Number(exchange.redeemedDate || "0") * 1000;
|
|
54
54
|
const didFulfillmentPeriodElapse = elapsedSinceRedeemMS >
|
|
55
55
|
Number(exchange.offer.fulfillmentPeriodDuration) * 1000;
|
|
@@ -154,11 +154,13 @@ function assertSignerIsBuyer(signer, exchange) {
|
|
|
154
154
|
}
|
|
155
155
|
function assertSignerIsBuyerOrOperator(signer, exchange) {
|
|
156
156
|
const { seller, buyer } = exchange;
|
|
157
|
-
const
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
157
|
+
const buyerAddress = buyer.wallet;
|
|
158
|
+
const operatorAddress = seller.operator;
|
|
159
|
+
const isSignerOperator = signer.toLowerCase() === operatorAddress.toLowerCase();
|
|
160
|
+
const isSignerBuyer = signer.toLowerCase() === buyerAddress.toLowerCase();
|
|
161
|
+
if (!isSignerOperator && !isSignerBuyer) {
|
|
162
|
+
throw new Error(`Signer ${signer} is required to be the buyer ${buyerAddress} or operator ${operatorAddress}`);
|
|
161
163
|
}
|
|
162
|
-
return { isSignerBuyer,
|
|
164
|
+
return { isSignerBuyer, isSignerOperator };
|
|
163
165
|
}
|
|
164
166
|
//# sourceMappingURL=handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/exchanges/handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,wDAAuD;AAEvD,2CAOqB;AACrB,iDAAkD;AAClD,oDAAwD;AACxD,0CAAoE;AAQpE,SAAsB,aAAa,CACjC,IAGC;;QAED,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAY,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjE,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAC;SACjE;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;SAClE;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,EAAE;YACnD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,OAAO,mBAAmB,CAAC,CAAC;SACnE;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,OAAO,uBAAuB,CAAC,CAAC;SACvE;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,OAAO,cAAc,CAAC,CAAC;SAC9D;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YAClC,EAAE,EAAE,IAAI,CAAC,eAAe;YACxB,IAAI,EAAE,IAAA,+BAAmB,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;YACnD,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,KAAK,uBAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;SACvE,CAAC,CAAC;IACL,CAAC;CAAA;AAjCD,sCAiCC;AAED,SAAsB,gBAAgB,CACpC,IAEC;;QAED,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAClD,IAAA,0BAAe,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;SAChC,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE1C,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/exchanges/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/subgraph.d.ts
CHANGED
|
@@ -2288,6 +2288,7 @@ export declare type GetSellerByIdQueryQuery = {
|
|
|
2288
2288
|
redeemedDate?: string | null;
|
|
2289
2289
|
revokedDate?: string | null;
|
|
2290
2290
|
cancelledDate?: string | null;
|
|
2291
|
+
completedDate?: string | null;
|
|
2291
2292
|
expired: boolean;
|
|
2292
2293
|
}>;
|
|
2293
2294
|
} | null;
|
|
@@ -2404,6 +2405,7 @@ export declare type GetSellersQueryQuery = {
|
|
|
2404
2405
|
redeemedDate?: string | null;
|
|
2405
2406
|
revokedDate?: string | null;
|
|
2406
2407
|
cancelledDate?: string | null;
|
|
2408
|
+
completedDate?: string | null;
|
|
2407
2409
|
expired: boolean;
|
|
2408
2410
|
}>;
|
|
2409
2411
|
}>;
|
|
@@ -2493,6 +2495,7 @@ export declare type SellerFieldsFragment = {
|
|
|
2493
2495
|
redeemedDate?: string | null;
|
|
2494
2496
|
revokedDate?: string | null;
|
|
2495
2497
|
cancelledDate?: string | null;
|
|
2498
|
+
completedDate?: string | null;
|
|
2496
2499
|
expired: boolean;
|
|
2497
2500
|
}>;
|
|
2498
2501
|
};
|
|
@@ -2527,6 +2530,7 @@ export declare type GetExchangeByIdQueryQuery = {
|
|
|
2527
2530
|
redeemedDate?: string | null;
|
|
2528
2531
|
revokedDate?: string | null;
|
|
2529
2532
|
cancelledDate?: string | null;
|
|
2533
|
+
completedDate?: string | null;
|
|
2530
2534
|
expired: boolean;
|
|
2531
2535
|
buyer: {
|
|
2532
2536
|
__typename?: "Buyer";
|
|
@@ -2618,6 +2622,7 @@ export declare type GetExchangesQueryQuery = {
|
|
|
2618
2622
|
redeemedDate?: string | null;
|
|
2619
2623
|
revokedDate?: string | null;
|
|
2620
2624
|
cancelledDate?: string | null;
|
|
2625
|
+
completedDate?: string | null;
|
|
2621
2626
|
expired: boolean;
|
|
2622
2627
|
buyer: {
|
|
2623
2628
|
__typename?: "Buyer";
|
|
@@ -2700,6 +2705,7 @@ export declare type ExchangeFieldsFragment = {
|
|
|
2700
2705
|
redeemedDate?: string | null;
|
|
2701
2706
|
revokedDate?: string | null;
|
|
2702
2707
|
cancelledDate?: string | null;
|
|
2708
|
+
completedDate?: string | null;
|
|
2703
2709
|
expired: boolean;
|
|
2704
2710
|
buyer: {
|
|
2705
2711
|
__typename?: "Buyer";
|
|
@@ -2781,6 +2787,7 @@ export declare type BaseExchangeFieldsFragment = {
|
|
|
2781
2787
|
redeemedDate?: string | null;
|
|
2782
2788
|
revokedDate?: string | null;
|
|
2783
2789
|
cancelledDate?: string | null;
|
|
2790
|
+
completedDate?: string | null;
|
|
2784
2791
|
expired: boolean;
|
|
2785
2792
|
};
|
|
2786
2793
|
export declare type GetFundsByIdQueryVariables = Exact<{
|
|
@@ -2881,6 +2888,7 @@ export declare type GetOfferByIdQueryQuery = {
|
|
|
2881
2888
|
redeemedDate?: string | null;
|
|
2882
2889
|
revokedDate?: string | null;
|
|
2883
2890
|
cancelledDate?: string | null;
|
|
2891
|
+
completedDate?: string | null;
|
|
2884
2892
|
expired: boolean;
|
|
2885
2893
|
}>;
|
|
2886
2894
|
seller: {
|
|
@@ -2963,6 +2971,7 @@ export declare type GetOffersQueryQuery = {
|
|
|
2963
2971
|
redeemedDate?: string | null;
|
|
2964
2972
|
revokedDate?: string | null;
|
|
2965
2973
|
cancelledDate?: string | null;
|
|
2974
|
+
completedDate?: string | null;
|
|
2966
2975
|
expired: boolean;
|
|
2967
2976
|
}>;
|
|
2968
2977
|
seller: {
|
|
@@ -3030,6 +3039,7 @@ export declare type OfferFieldsFragment = {
|
|
|
3030
3039
|
redeemedDate?: string | null;
|
|
3031
3040
|
revokedDate?: string | null;
|
|
3032
3041
|
cancelledDate?: string | null;
|
|
3042
|
+
completedDate?: string | null;
|
|
3033
3043
|
expired: boolean;
|
|
3034
3044
|
}>;
|
|
3035
3045
|
seller: {
|