@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.
Files changed (77) hide show
  1. package/dist/cjs/core-sdk.d.ts +3 -1
  2. package/dist/cjs/core-sdk.d.ts.map +1 -1
  3. package/dist/cjs/core-sdk.js +5 -1
  4. package/dist/cjs/core-sdk.js.map +1 -1
  5. package/dist/cjs/errors/mixin.d.ts +9 -0
  6. package/dist/cjs/errors/mixin.d.ts.map +1 -0
  7. package/dist/cjs/errors/mixin.js +44 -0
  8. package/dist/cjs/errors/mixin.js.map +1 -0
  9. package/dist/cjs/exchanges/mixin.d.ts +6 -1
  10. package/dist/cjs/exchanges/mixin.d.ts.map +1 -1
  11. package/dist/cjs/exchanges/mixin.js +10 -0
  12. package/dist/cjs/exchanges/mixin.js.map +1 -1
  13. package/dist/cjs/metadata/storeMetadataItems.js +1 -1
  14. package/dist/cjs/metadata/storeMetadataItems.js.map +1 -1
  15. package/dist/cjs/mixins/base-core-sdk.d.ts +2 -1
  16. package/dist/cjs/mixins/base-core-sdk.d.ts.map +1 -1
  17. package/dist/cjs/mixins/base-core-sdk.js +1 -0
  18. package/dist/cjs/mixins/base-core-sdk.js.map +1 -1
  19. package/dist/cjs/subgraph/mixin.d.ts +8 -0
  20. package/dist/cjs/subgraph/mixin.d.ts.map +1 -0
  21. package/dist/cjs/subgraph/mixin.js +116 -0
  22. package/dist/cjs/subgraph/mixin.js.map +1 -0
  23. package/dist/cjs/subgraph.d.ts +345 -368
  24. package/dist/cjs/subgraph.d.ts.map +1 -1
  25. package/dist/cjs/subgraph.js +24 -20
  26. package/dist/cjs/subgraph.js.map +1 -1
  27. package/dist/cjs/utils/tokenInfoManager.d.ts.map +1 -1
  28. package/dist/cjs/utils/tokenInfoManager.js +2 -14
  29. package/dist/cjs/utils/tokenInfoManager.js.map +1 -1
  30. package/dist/cjs/voucher/mixin.d.ts +1 -3
  31. package/dist/cjs/voucher/mixin.d.ts.map +1 -1
  32. package/dist/cjs/voucher/mixin.js +10 -2
  33. package/dist/cjs/voucher/mixin.js.map +1 -1
  34. package/dist/esm/core-sdk.d.ts +3 -1
  35. package/dist/esm/core-sdk.d.ts.map +1 -1
  36. package/dist/esm/core-sdk.js +5 -1
  37. package/dist/esm/core-sdk.js.map +1 -1
  38. package/dist/esm/errors/mixin.d.ts +9 -0
  39. package/dist/esm/errors/mixin.d.ts.map +1 -0
  40. package/dist/esm/errors/mixin.js +40 -0
  41. package/dist/esm/errors/mixin.js.map +1 -0
  42. package/dist/esm/exchanges/mixin.d.ts +6 -1
  43. package/dist/esm/exchanges/mixin.d.ts.map +1 -1
  44. package/dist/esm/exchanges/mixin.js +10 -0
  45. package/dist/esm/exchanges/mixin.js.map +1 -1
  46. package/dist/esm/metadata/storeMetadataItems.js +1 -1
  47. package/dist/esm/metadata/storeMetadataItems.js.map +1 -1
  48. package/dist/esm/mixins/base-core-sdk.d.ts +2 -1
  49. package/dist/esm/mixins/base-core-sdk.d.ts.map +1 -1
  50. package/dist/esm/mixins/base-core-sdk.js +1 -0
  51. package/dist/esm/mixins/base-core-sdk.js.map +1 -1
  52. package/dist/esm/subgraph/mixin.d.ts +8 -0
  53. package/dist/esm/subgraph/mixin.d.ts.map +1 -0
  54. package/dist/esm/subgraph/mixin.js +96 -0
  55. package/dist/esm/subgraph/mixin.js.map +1 -0
  56. package/dist/esm/subgraph.d.ts +345 -368
  57. package/dist/esm/subgraph.d.ts.map +1 -1
  58. package/dist/esm/subgraph.js +20 -16
  59. package/dist/esm/subgraph.js.map +1 -1
  60. package/dist/esm/utils/tokenInfoManager.d.ts.map +1 -1
  61. package/dist/esm/utils/tokenInfoManager.js +2 -14
  62. package/dist/esm/utils/tokenInfoManager.js.map +1 -1
  63. package/dist/esm/voucher/mixin.d.ts +1 -3
  64. package/dist/esm/voucher/mixin.d.ts.map +1 -1
  65. package/dist/esm/voucher/mixin.js +10 -2
  66. package/dist/esm/voucher/mixin.js.map +1 -1
  67. package/package.json +3 -3
  68. package/src/accounts/queries.graphql +4 -2
  69. package/src/core-sdk.ts +8 -2
  70. package/src/errors/mixin.ts +47 -0
  71. package/src/exchanges/mixin.ts +18 -1
  72. package/src/metadata/storeMetadataItems.ts +1 -1
  73. package/src/mixins/base-core-sdk.ts +4 -1
  74. package/src/subgraph/mixin.ts +113 -0
  75. package/src/subgraph.ts +364 -370
  76. package/src/utils/tokenInfoManager.ts +2 -14
  77. 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
+ }
@@ -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.type === "BUNDLE") {
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
+ }