@bosonprotocol/core-sdk 1.40.0-alpha.2 → 1.40.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.
- package/dist/cjs/core-sdk.d.ts +3 -1
- package/dist/cjs/core-sdk.d.ts.map +1 -1
- package/dist/cjs/core-sdk.js +5 -1
- package/dist/cjs/core-sdk.js.map +1 -1
- package/dist/cjs/errors/mixin.d.ts +9 -0
- package/dist/cjs/errors/mixin.d.ts.map +1 -0
- package/dist/cjs/errors/mixin.js +44 -0
- package/dist/cjs/errors/mixin.js.map +1 -0
- package/dist/cjs/exchanges/mixin.d.ts +6 -1
- package/dist/cjs/exchanges/mixin.d.ts.map +1 -1
- package/dist/cjs/exchanges/mixin.js +10 -0
- package/dist/cjs/exchanges/mixin.js.map +1 -1
- package/dist/cjs/metadata/storeMetadataItems.js +1 -1
- package/dist/cjs/metadata/storeMetadataItems.js.map +1 -1
- package/dist/cjs/mixins/base-core-sdk.d.ts +2 -1
- package/dist/cjs/mixins/base-core-sdk.d.ts.map +1 -1
- package/dist/cjs/mixins/base-core-sdk.js +1 -0
- package/dist/cjs/mixins/base-core-sdk.js.map +1 -1
- package/dist/cjs/subgraph/mixin.d.ts +8 -0
- package/dist/cjs/subgraph/mixin.d.ts.map +1 -0
- package/dist/cjs/subgraph/mixin.js +116 -0
- package/dist/cjs/subgraph/mixin.js.map +1 -0
- package/dist/cjs/subgraph.d.ts +345 -368
- package/dist/cjs/subgraph.d.ts.map +1 -1
- package/dist/cjs/subgraph.js +24 -20
- package/dist/cjs/subgraph.js.map +1 -1
- package/dist/cjs/utils/tokenInfoManager.d.ts.map +1 -1
- package/dist/cjs/utils/tokenInfoManager.js +2 -14
- package/dist/cjs/utils/tokenInfoManager.js.map +1 -1
- package/dist/cjs/voucher/mixin.d.ts +1 -3
- package/dist/cjs/voucher/mixin.d.ts.map +1 -1
- package/dist/cjs/voucher/mixin.js +10 -2
- package/dist/cjs/voucher/mixin.js.map +1 -1
- package/dist/esm/core-sdk.d.ts +3 -1
- package/dist/esm/core-sdk.d.ts.map +1 -1
- package/dist/esm/core-sdk.js +5 -1
- package/dist/esm/core-sdk.js.map +1 -1
- package/dist/esm/errors/mixin.d.ts +9 -0
- package/dist/esm/errors/mixin.d.ts.map +1 -0
- package/dist/esm/errors/mixin.js +40 -0
- package/dist/esm/errors/mixin.js.map +1 -0
- package/dist/esm/exchanges/mixin.d.ts +6 -1
- package/dist/esm/exchanges/mixin.d.ts.map +1 -1
- package/dist/esm/exchanges/mixin.js +10 -0
- package/dist/esm/exchanges/mixin.js.map +1 -1
- package/dist/esm/metadata/storeMetadataItems.js +1 -1
- package/dist/esm/metadata/storeMetadataItems.js.map +1 -1
- package/dist/esm/mixins/base-core-sdk.d.ts +2 -1
- package/dist/esm/mixins/base-core-sdk.d.ts.map +1 -1
- package/dist/esm/mixins/base-core-sdk.js +1 -0
- package/dist/esm/mixins/base-core-sdk.js.map +1 -1
- package/dist/esm/subgraph/mixin.d.ts +8 -0
- package/dist/esm/subgraph/mixin.d.ts.map +1 -0
- package/dist/esm/subgraph/mixin.js +96 -0
- package/dist/esm/subgraph/mixin.js.map +1 -0
- package/dist/esm/subgraph.d.ts +345 -368
- package/dist/esm/subgraph.d.ts.map +1 -1
- package/dist/esm/subgraph.js +20 -16
- package/dist/esm/subgraph.js.map +1 -1
- package/dist/esm/utils/tokenInfoManager.d.ts.map +1 -1
- package/dist/esm/utils/tokenInfoManager.js +2 -14
- package/dist/esm/utils/tokenInfoManager.js.map +1 -1
- package/dist/esm/voucher/mixin.d.ts +1 -3
- package/dist/esm/voucher/mixin.d.ts.map +1 -1
- package/dist/esm/voucher/mixin.js +10 -2
- package/dist/esm/voucher/mixin.js.map +1 -1
- package/package.json +3 -3
- package/src/accounts/queries.graphql +4 -2
- package/src/core-sdk.ts +8 -2
- package/src/errors/mixin.ts +47 -0
- package/src/exchanges/mixin.ts +18 -1
- package/src/metadata/storeMetadataItems.ts +1 -1
- package/src/mixins/base-core-sdk.ts +4 -1
- package/src/subgraph/mixin.ts +113 -0
- package/src/subgraph.ts +364 -370
- package/src/utils/tokenInfoManager.ts +2 -14
- package/src/voucher/mixin.ts +14 -5
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Interface } from "@ethersproject/abi";
|
|
2
|
+
import { abis, ErrorFragment } from "@bosonprotocol/common";
|
|
3
|
+
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
|
|
4
|
+
|
|
5
|
+
export class ErrorMixin extends BaseCoreSDK {
|
|
6
|
+
public parseError(error: object): object {
|
|
7
|
+
return { ...error, decoded: this.recurseParseError(error) };
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
private recurseParseError(error: object): string | undefined {
|
|
11
|
+
if (this.isValidError(error)) {
|
|
12
|
+
return this.decodeError(error["data"]);
|
|
13
|
+
}
|
|
14
|
+
if (error["data"] && error["data"]["originalError"]) {
|
|
15
|
+
return this.recurseParseError(error["data"]["originalError"]);
|
|
16
|
+
}
|
|
17
|
+
if (error["error"]) {
|
|
18
|
+
return this.recurseParseError(error["error"]);
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private isValidError(error: object): boolean {
|
|
24
|
+
return error["data"] && /^0x[0-9a-fA-F]{8}$/.test(error["data"]);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
private decodeError(data: string): string | undefined {
|
|
28
|
+
this.parseAbis();
|
|
29
|
+
const error = this._errorsMap.get(data.toLowerCase());
|
|
30
|
+
return error?.name;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private parseAbis() {
|
|
34
|
+
if (this._errorsMap.size === 0) {
|
|
35
|
+
Object.keys(abis).forEach((abi) => {
|
|
36
|
+
const iface = new Interface(abis[abi]);
|
|
37
|
+
Object.keys(iface.errors).forEach((error) => {
|
|
38
|
+
const sigHash = iface.getSighash(error);
|
|
39
|
+
this._errorsMap.set(
|
|
40
|
+
sigHash.toLowerCase(),
|
|
41
|
+
iface.errors[error] as ErrorFragment
|
|
42
|
+
);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
package/src/exchanges/mixin.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
|
|
2
2
|
import * as subgraph from "../subgraph";
|
|
3
3
|
import { TransactionResponse, Log } from "@bosonprotocol/common";
|
|
4
|
-
import { BigNumberish } from "@ethersproject/bignumber";
|
|
4
|
+
import { BigNumberish, BigNumber } from "@ethersproject/bignumber";
|
|
5
5
|
import { getValueFromLogs } from "../utils/logs";
|
|
6
6
|
import {
|
|
7
7
|
commitToOffer,
|
|
@@ -208,4 +208,21 @@ export class ExchangesMixin extends BaseCoreSDK {
|
|
|
208
208
|
subgraphUrl: this._subgraphUrl
|
|
209
209
|
});
|
|
210
210
|
}
|
|
211
|
+
|
|
212
|
+
public getExchangeTokenId(
|
|
213
|
+
exchangeId: BigNumberish,
|
|
214
|
+
offerId: BigNumberish
|
|
215
|
+
): BigNumber {
|
|
216
|
+
// Since v2.2.1, tokenId = exchangeId | offerId << 128
|
|
217
|
+
return BigNumber.from(offerId).shl(128).add(exchangeId);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
public parseTokenId(tokenId: BigNumberish): {
|
|
221
|
+
offerId: BigNumber;
|
|
222
|
+
exchangeId: BigNumber;
|
|
223
|
+
} {
|
|
224
|
+
const offerId = BigNumber.from(tokenId).shr(128);
|
|
225
|
+
const exchangeId = BigNumber.from(tokenId).mask(128);
|
|
226
|
+
return { offerId, exchangeId };
|
|
227
|
+
}
|
|
211
228
|
}
|
|
@@ -11,7 +11,7 @@ export async function storeMetadataItems(args: {
|
|
|
11
11
|
const offerMetadata = await args.metadataStorage?.getMetadata(
|
|
12
12
|
offerToCreate.metadataUri
|
|
13
13
|
);
|
|
14
|
-
if (offerMetadata
|
|
14
|
+
if (offerMetadata?.type === "BUNDLE") {
|
|
15
15
|
await Promise.all(
|
|
16
16
|
offerMetadata.items.map((item) => {
|
|
17
17
|
return storeMetadataOnTheGraph({
|
|
@@ -3,7 +3,8 @@ import {
|
|
|
3
3
|
MetadataStorage,
|
|
4
4
|
MetaTxConfig,
|
|
5
5
|
ContractAddresses,
|
|
6
|
-
Lens
|
|
6
|
+
Lens,
|
|
7
|
+
ErrorFragment
|
|
7
8
|
} from "@bosonprotocol/common";
|
|
8
9
|
import { TokenInfoManager } from "../utils/tokenInfoManager";
|
|
9
10
|
|
|
@@ -17,6 +18,8 @@ export class BaseCoreSDK {
|
|
|
17
18
|
protected _chainId: number;
|
|
18
19
|
protected _tokenInfoManager: TokenInfoManager;
|
|
19
20
|
|
|
21
|
+
protected _errorsMap = new Map<string, ErrorFragment>();
|
|
22
|
+
|
|
20
23
|
protected _metaTxConfig?: Partial<MetaTxConfig>;
|
|
21
24
|
protected _lens?: Lens;
|
|
22
25
|
protected _contracts?: ContractAddresses;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { GraphQLClient, gql } from "graphql-request";
|
|
2
|
+
import { TransactionReceipt, TransactionResponse } from "@bosonprotocol/common";
|
|
3
|
+
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
|
|
4
|
+
|
|
5
|
+
const DELAYS_PER_CHAINID: {
|
|
6
|
+
[key: number]: {
|
|
7
|
+
BLOCK_DELAY: number;
|
|
8
|
+
MAX_SAME_BLOCK: number;
|
|
9
|
+
MAX_SAME_BLOCK_DELAY: number;
|
|
10
|
+
DEFAULT_TIMEOUT: number;
|
|
11
|
+
};
|
|
12
|
+
} = {
|
|
13
|
+
1: {
|
|
14
|
+
BLOCK_DELAY: 12000,
|
|
15
|
+
MAX_SAME_BLOCK: 20,
|
|
16
|
+
MAX_SAME_BLOCK_DELAY: 30000,
|
|
17
|
+
DEFAULT_TIMEOUT: 60000
|
|
18
|
+
},
|
|
19
|
+
137: {
|
|
20
|
+
BLOCK_DELAY: 1000,
|
|
21
|
+
MAX_SAME_BLOCK: 20,
|
|
22
|
+
MAX_SAME_BLOCK_DELAY: 5000,
|
|
23
|
+
DEFAULT_TIMEOUT: 30000
|
|
24
|
+
},
|
|
25
|
+
80001: {
|
|
26
|
+
BLOCK_DELAY: 1000,
|
|
27
|
+
MAX_SAME_BLOCK: 20,
|
|
28
|
+
MAX_SAME_BLOCK_DELAY: 5000,
|
|
29
|
+
DEFAULT_TIMEOUT: 30000
|
|
30
|
+
},
|
|
31
|
+
80002: {
|
|
32
|
+
BLOCK_DELAY: 1000,
|
|
33
|
+
MAX_SAME_BLOCK: 20,
|
|
34
|
+
MAX_SAME_BLOCK_DELAY: 5000,
|
|
35
|
+
DEFAULT_TIMEOUT: 30000
|
|
36
|
+
},
|
|
37
|
+
11155111: {
|
|
38
|
+
BLOCK_DELAY: 12000,
|
|
39
|
+
MAX_SAME_BLOCK: 20,
|
|
40
|
+
MAX_SAME_BLOCK_DELAY: 30000,
|
|
41
|
+
DEFAULT_TIMEOUT: 60000
|
|
42
|
+
},
|
|
43
|
+
31337: {
|
|
44
|
+
BLOCK_DELAY: 200,
|
|
45
|
+
MAX_SAME_BLOCK: 20,
|
|
46
|
+
MAX_SAME_BLOCK_DELAY: 1000,
|
|
47
|
+
DEFAULT_TIMEOUT: 3000
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export class SubgraphMixin extends BaseCoreSDK {
|
|
52
|
+
public async waitForGraphNodeIndexing(
|
|
53
|
+
blockNumberOrTransaction?: number | TransactionResponse | TransactionReceipt
|
|
54
|
+
) {
|
|
55
|
+
const delays = DELAYS_PER_CHAINID[this._chainId];
|
|
56
|
+
let blockToWaitFor = 0;
|
|
57
|
+
if (typeof blockNumberOrTransaction === "number") {
|
|
58
|
+
blockToWaitFor = blockNumberOrTransaction;
|
|
59
|
+
} else if (blockNumberOrTransaction?.["blockNumber"]) {
|
|
60
|
+
blockToWaitFor = (blockNumberOrTransaction as TransactionReceipt)
|
|
61
|
+
.blockNumber;
|
|
62
|
+
} else if (blockNumberOrTransaction?.["wait"]) {
|
|
63
|
+
const txReceipt = await (
|
|
64
|
+
blockNumberOrTransaction as TransactionResponse
|
|
65
|
+
).wait();
|
|
66
|
+
blockToWaitFor = txReceipt.blockNumber;
|
|
67
|
+
}
|
|
68
|
+
if (blockToWaitFor > 0) {
|
|
69
|
+
let currentBlock = await this.getSubgraphBlockNumber();
|
|
70
|
+
let oldCurrentBlock = currentBlock;
|
|
71
|
+
let sameBlockNumber = 0;
|
|
72
|
+
while (currentBlock < blockToWaitFor) {
|
|
73
|
+
await this.wait(delays.BLOCK_DELAY);
|
|
74
|
+
currentBlock = await this.getSubgraphBlockNumber();
|
|
75
|
+
if (currentBlock === oldCurrentBlock) {
|
|
76
|
+
if (sameBlockNumber++ >= delays.MAX_SAME_BLOCK) {
|
|
77
|
+
// Seems that the subgraph does not update its current block
|
|
78
|
+
console.error(
|
|
79
|
+
`Seems that the subgraph does not update its current block after ${currentBlock}`
|
|
80
|
+
);
|
|
81
|
+
await this.wait(delays.MAX_SAME_BLOCK_DELAY);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
oldCurrentBlock = currentBlock;
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
await this.wait(delays.DEFAULT_TIMEOUT);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public async getSubgraphBlockNumber(): Promise<number> {
|
|
93
|
+
const client = new GraphQLClient(this._subgraphUrl);
|
|
94
|
+
const response = await client.request<{
|
|
95
|
+
_meta?: { block?: { number?: number } };
|
|
96
|
+
}>(gql`
|
|
97
|
+
query MyQuery {
|
|
98
|
+
_meta {
|
|
99
|
+
block {
|
|
100
|
+
number
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
`);
|
|
105
|
+
return response?._meta?.block?.number || 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
protected async wait(ms: number) {
|
|
109
|
+
return new Promise((resolve) => {
|
|
110
|
+
setTimeout(resolve, ms);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|