@bosonprotocol/core-sdk 1.16.0-alpha.8 → 1.16.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 (101) hide show
  1. package/README.md +3 -104
  2. package/dist/cjs/core-sdk.d.ts +38 -1
  3. package/dist/cjs/core-sdk.d.ts.map +1 -1
  4. package/dist/cjs/core-sdk.js +80 -1
  5. package/dist/cjs/core-sdk.js.map +1 -1
  6. package/dist/cjs/event-logs/index.d.ts +2 -0
  7. package/dist/cjs/event-logs/index.d.ts.map +1 -0
  8. package/dist/cjs/event-logs/index.js +28 -0
  9. package/dist/cjs/event-logs/index.js.map +1 -0
  10. package/dist/cjs/event-logs/subgraph.d.ts +3 -0
  11. package/dist/cjs/event-logs/subgraph.d.ts.map +1 -0
  12. package/dist/cjs/event-logs/subgraph.js +22 -0
  13. package/dist/cjs/event-logs/subgraph.js.map +1 -0
  14. package/dist/cjs/exchanges/handler.d.ts +3 -0
  15. package/dist/cjs/exchanges/handler.d.ts.map +1 -1
  16. package/dist/cjs/exchanges/handler.js +34 -11
  17. package/dist/cjs/exchanges/handler.js.map +1 -1
  18. package/dist/cjs/exchanges/interface.d.ts +1 -0
  19. package/dist/cjs/exchanges/interface.d.ts.map +1 -1
  20. package/dist/cjs/exchanges/interface.js +7 -1
  21. package/dist/cjs/exchanges/interface.js.map +1 -1
  22. package/dist/cjs/index.d.ts +1 -1
  23. package/dist/cjs/index.d.ts.map +1 -1
  24. package/dist/cjs/index.js.map +1 -1
  25. package/dist/cjs/meta-tx/biconomy.d.ts +45 -0
  26. package/dist/cjs/meta-tx/biconomy.d.ts.map +1 -0
  27. package/dist/cjs/meta-tx/biconomy.js +76 -0
  28. package/dist/cjs/meta-tx/biconomy.js.map +1 -0
  29. package/dist/cjs/meta-tx/handler.d.ts +20 -1
  30. package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
  31. package/dist/cjs/meta-tx/handler.js +61 -1
  32. package/dist/cjs/meta-tx/handler.js.map +1 -1
  33. package/dist/cjs/subgraph.d.ts +2848 -280
  34. package/dist/cjs/subgraph.d.ts.map +1 -1
  35. package/dist/cjs/subgraph.js +287 -41
  36. package/dist/cjs/subgraph.js.map +1 -1
  37. package/dist/cjs/utils/errors.d.ts +5 -0
  38. package/dist/cjs/utils/errors.d.ts.map +1 -0
  39. package/dist/cjs/utils/errors.js +11 -0
  40. package/dist/cjs/utils/errors.js.map +1 -0
  41. package/dist/cjs/utils/graphql.d.ts +43 -0
  42. package/dist/cjs/utils/graphql.d.ts.map +1 -1
  43. package/dist/esm/core-sdk.d.ts +38 -1
  44. package/dist/esm/core-sdk.d.ts.map +1 -1
  45. package/dist/esm/core-sdk.js +77 -1
  46. package/dist/esm/core-sdk.js.map +1 -1
  47. package/dist/esm/event-logs/index.d.ts +2 -0
  48. package/dist/esm/event-logs/index.d.ts.map +1 -0
  49. package/dist/esm/event-logs/index.js +2 -0
  50. package/dist/esm/event-logs/index.js.map +1 -0
  51. package/dist/esm/event-logs/subgraph.d.ts +3 -0
  52. package/dist/esm/event-logs/subgraph.d.ts.map +1 -0
  53. package/dist/esm/event-logs/subgraph.js +7 -0
  54. package/dist/esm/event-logs/subgraph.js.map +1 -0
  55. package/dist/esm/exchanges/handler.d.ts +3 -0
  56. package/dist/esm/exchanges/handler.d.ts.map +1 -1
  57. package/dist/esm/exchanges/handler.js +32 -12
  58. package/dist/esm/exchanges/handler.js.map +1 -1
  59. package/dist/esm/exchanges/interface.d.ts +1 -0
  60. package/dist/esm/exchanges/interface.d.ts.map +1 -1
  61. package/dist/esm/exchanges/interface.js +5 -0
  62. package/dist/esm/exchanges/interface.js.map +1 -1
  63. package/dist/esm/index.d.ts +1 -1
  64. package/dist/esm/index.d.ts.map +1 -1
  65. package/dist/esm/index.js.map +1 -1
  66. package/dist/esm/meta-tx/biconomy.d.ts +45 -0
  67. package/dist/esm/meta-tx/biconomy.d.ts.map +1 -0
  68. package/dist/esm/meta-tx/biconomy.js +60 -0
  69. package/dist/esm/meta-tx/biconomy.js.map +1 -0
  70. package/dist/esm/meta-tx/handler.d.ts +20 -1
  71. package/dist/esm/meta-tx/handler.d.ts.map +1 -1
  72. package/dist/esm/meta-tx/handler.js +56 -0
  73. package/dist/esm/meta-tx/handler.js.map +1 -1
  74. package/dist/esm/subgraph.d.ts +2848 -280
  75. package/dist/esm/subgraph.d.ts.map +1 -1
  76. package/dist/esm/subgraph.js +284 -39
  77. package/dist/esm/subgraph.js.map +1 -1
  78. package/dist/esm/utils/errors.d.ts +5 -0
  79. package/dist/esm/utils/errors.d.ts.map +1 -0
  80. package/dist/esm/utils/errors.js +8 -0
  81. package/dist/esm/utils/errors.js.map +1 -0
  82. package/dist/esm/utils/graphql.d.ts +43 -0
  83. package/dist/esm/utils/graphql.d.ts.map +1 -1
  84. package/package.json +3 -3
  85. package/src/accounts/queries.graphql +63 -0
  86. package/src/core-sdk.ts +117 -2
  87. package/src/disputes/queries.graphql +9 -9
  88. package/src/event-logs/index.ts +1 -0
  89. package/src/event-logs/queries.graphql +53 -0
  90. package/src/event-logs/subgraph.ts +14 -0
  91. package/src/exchanges/handler.ts +50 -20
  92. package/src/exchanges/interface.ts +6 -0
  93. package/src/exchanges/queries.graphql +9 -9
  94. package/src/index.ts +2 -1
  95. package/src/meta-tx/biconomy.ts +129 -0
  96. package/src/meta-tx/handler.ts +84 -2
  97. package/src/metadata/base.graphql +2 -0
  98. package/src/metadata/product-v1.graphql +2 -1
  99. package/src/offers/queries.graphql +3 -0
  100. package/src/subgraph.ts +2603 -240
  101. package/src/utils/errors.ts +5 -0
@@ -24,18 +24,9 @@ query getExchangesQuery(
24
24
 
25
25
  fragment ExchangeFields on Exchange {
26
26
  ...BaseExchangeFields
27
- buyer {
28
- ...BaseBuyerFields
29
- }
30
- seller {
31
- ...BaseSellerFields
32
- }
33
27
  offer {
34
28
  ...BaseOfferFields
35
29
  }
36
- dispute {
37
- ...BaseDisputeFields
38
- }
39
30
  }
40
31
 
41
32
  fragment BaseExchangeFields on Exchange {
@@ -51,4 +42,13 @@ fragment BaseExchangeFields on Exchange {
51
42
  completedDate
52
43
  disputedDate
53
44
  expired
45
+ dispute {
46
+ ...BaseDisputeFields
47
+ }
48
+ buyer {
49
+ ...BaseBuyerFields
50
+ }
51
+ seller {
52
+ ...BaseSellerFields
53
+ }
54
54
  }
package/src/index.ts CHANGED
@@ -12,7 +12,8 @@ export * as subgraph from "./subgraph";
12
12
  export {
13
13
  defaultConfigs,
14
14
  getDefaultConfig,
15
- EnvironmentType
15
+ EnvironmentType,
16
+ MetaTxConfig
16
17
  } from "@bosonprotocol/common";
17
18
 
18
19
  export { MetadataType, AnyMetadata } from "@bosonprotocol/metadata";
@@ -0,0 +1,129 @@
1
+ import fetch from "cross-fetch";
2
+
3
+ import { ApiError } from "../utils/errors";
4
+
5
+ export type RelayTransactionResponse = {
6
+ txHash: string;
7
+ log: string;
8
+ retryDuration: number;
9
+ flag: number;
10
+ };
11
+
12
+ export type RelayTransactionArgs = {
13
+ to: string;
14
+ params: unknown[];
15
+ from: string;
16
+ };
17
+
18
+ export type RelayOverrides = {
19
+ relayerUrl: string;
20
+ apiKey: string;
21
+ apiId: string;
22
+ };
23
+
24
+ export type GetRetriedHashesResponse = {
25
+ code: number;
26
+ message: string;
27
+ data: {
28
+ oldHash: string;
29
+ newHash: string;
30
+ oldGasPrice: string;
31
+ newGasPrice: string;
32
+ timestamp: number;
33
+ retryCount: number;
34
+ relayerAddress: string;
35
+ newStatus: string;
36
+ };
37
+ events?: unknown[];
38
+ };
39
+
40
+ export type GetRetriedHashesArgs = {
41
+ networkId: number;
42
+ transactionHash: string;
43
+ };
44
+
45
+ export class Biconomy {
46
+ public constructor(
47
+ private _relayerUrl: string,
48
+ private _apiKey: string,
49
+ private _apiId: string
50
+ ) {}
51
+
52
+ public async relayTransaction(
53
+ args: RelayTransactionArgs,
54
+ overrides: Partial<RelayOverrides> = {}
55
+ ): Promise<RelayTransactionResponse> {
56
+ const url = `${
57
+ overrides.relayerUrl || this._relayerUrl
58
+ }/api/v2/meta-tx/native`;
59
+ const response = await fetch(url, {
60
+ method: "POST",
61
+ headers: {
62
+ "x-api-key": overrides.apiKey || this._apiKey,
63
+ "content-type": "application/json;charset=UTF-8",
64
+ "Access-Control-Allow-Origin": "*"
65
+ },
66
+ body: JSON.stringify({
67
+ ...args,
68
+ apiId: overrides.apiId || this._apiId
69
+ })
70
+ });
71
+
72
+ if (!response.ok) {
73
+ throw new ApiError(
74
+ response.status,
75
+ `Failed to relay tx: ${response.statusText}`
76
+ );
77
+ }
78
+
79
+ return response.json() as Promise<RelayTransactionResponse>;
80
+ }
81
+
82
+ public async getResubmitted(
83
+ args: GetRetriedHashesArgs,
84
+ overrides: Partial<RelayOverrides> = {}
85
+ ): Promise<GetRetriedHashesResponse> {
86
+ const url = `${
87
+ overrides.relayerUrl || this._relayerUrl
88
+ }/api/v1/meta-tx/resubmitted?networkId=${args.networkId}&transactionHash=${
89
+ args.transactionHash
90
+ }`;
91
+ const response = await fetch(url, {
92
+ method: "GET",
93
+ headers: {
94
+ "content-type": "application/json;charset=UTF-8",
95
+ "Access-Control-Allow-Origin": "*"
96
+ }
97
+ });
98
+
99
+ if (!response.ok) {
100
+ throw new ApiError(
101
+ response.status,
102
+ `Failed to get resubmitted tx: ${response.statusText}`
103
+ );
104
+ }
105
+
106
+ return response.json() as Promise<GetRetriedHashesResponse>;
107
+ }
108
+
109
+ public async wait(
110
+ args: GetRetriedHashesArgs,
111
+ overrides: Partial<RelayOverrides> = {}
112
+ ): Promise<GetRetriedHashesResponse> {
113
+ let pending = true;
114
+ let resubmittedResponse: GetRetriedHashesResponse;
115
+
116
+ while (pending) {
117
+ resubmittedResponse = await this.getResubmitted(args, overrides);
118
+
119
+ pending = resubmittedResponse.data.newStatus === "PENDING";
120
+ if (pending) {
121
+ await new Promise((resolve) => {
122
+ setTimeout(resolve, 1000);
123
+ });
124
+ }
125
+ }
126
+
127
+ return resubmittedResponse;
128
+ }
129
+ }
@@ -1,8 +1,11 @@
1
- import { Web3LibAdapter } from "@bosonprotocol/common";
2
- import { BigNumberish } from "@ethersproject/bignumber";
1
+ import { MetaTxConfig, Web3LibAdapter } from "@bosonprotocol/common";
2
+ import { BigNumber, BigNumberish } from "@ethersproject/bignumber";
3
+ import { BytesLike } from "@ethersproject/bytes";
4
+ import { ContractTransaction } from "@ethersproject/contracts";
3
5
 
4
6
  import { bosonExchangeHandlerIface } from "../exchanges/interface";
5
7
  import { prepareDataSignatureParameters } from "../utils/signature";
8
+ import { Biconomy } from "./biconomy";
6
9
 
7
10
  type BaseMetaTxArgs = {
8
11
  web3Lib: Web3LibAdapter;
@@ -357,3 +360,82 @@ function makeExchangeMetaTxSigner(
357
360
  };
358
361
  };
359
362
  }
363
+
364
+ export async function relayMetaTransaction(args: {
365
+ web3LibAdapter: Web3LibAdapter;
366
+ chainId: number;
367
+ contractAddress: string;
368
+ metaTx: {
369
+ config: MetaTxConfig;
370
+ params: {
371
+ userAddress: string;
372
+ functionName: string;
373
+ functionSignature: BytesLike;
374
+ nonce: BigNumberish;
375
+ sigR: BytesLike;
376
+ sigS: BytesLike;
377
+ sigV: BigNumberish;
378
+ };
379
+ };
380
+ }): Promise<ContractTransaction> {
381
+ const { chainId, contractAddress, metaTx } = args;
382
+
383
+ const biconomy = new Biconomy(
384
+ metaTx.config.relayerUrl,
385
+ metaTx.config.apiKey,
386
+ metaTx.config.apiId
387
+ );
388
+
389
+ const relayTxResponse = await biconomy.relayTransaction({
390
+ to: contractAddress,
391
+ params: [
392
+ metaTx.params.userAddress,
393
+ metaTx.params.functionName,
394
+ metaTx.params.functionSignature,
395
+ metaTx.params.nonce,
396
+ metaTx.params.sigR,
397
+ metaTx.params.sigS,
398
+ metaTx.params.sigV
399
+ ],
400
+ from: metaTx.params.userAddress
401
+ });
402
+
403
+ return {
404
+ wait: async () => {
405
+ const waitResponse = await biconomy.wait({
406
+ networkId: chainId,
407
+ transactionHash: relayTxResponse.txHash
408
+ });
409
+
410
+ // TODO: add `getTransaction(hash)` to `Web3LibAdapter` and respective implementations
411
+ // in ethers and eth-connect flavors. This way we can populate the correct transaction
412
+ // data below.
413
+ return {
414
+ to: contractAddress,
415
+ from: metaTx.params.userAddress,
416
+ contractAddress: contractAddress,
417
+ transactionIndex: 0,
418
+ gasUsed: BigNumber.from(0),
419
+ logsBloom: "",
420
+ blockHash: "string",
421
+ transactionHash: waitResponse.data.newHash,
422
+ logs: [],
423
+ blockNumber: 0,
424
+ confirmations: 0,
425
+ cumulativeGasUsed: BigNumber.from(0),
426
+ effectiveGasPrice: BigNumber.from(waitResponse.data.newGasPrice),
427
+ byzantium: true,
428
+ type: 0,
429
+ events: waitResponse.events?.map((event) => JSON.parse(event as string))
430
+ };
431
+ },
432
+ hash: relayTxResponse.txHash,
433
+ confirmations: 0,
434
+ from: metaTx.params.userAddress,
435
+ nonce: 0,
436
+ gasLimit: BigNumber.from(0),
437
+ data: "",
438
+ value: BigNumber.from(0),
439
+ chainId: chainId
440
+ };
441
+ }
@@ -60,4 +60,6 @@ fragment BaseBaseMetadataEntityFields on BaseMetadataEntity {
60
60
  validFromDate
61
61
  validUntilDate
62
62
  quantityAvailable
63
+ numberOfCommits
64
+ numberOfRedemptions
63
65
  }
@@ -96,7 +96,8 @@ fragment BaseProductV1MetadataEntityFields on ProductV1MetadataEntity {
96
96
  validFromDate
97
97
  validUntilDate
98
98
  quantityAvailable
99
-
99
+ numberOfCommits
100
+ numberOfRedemptions
100
101
  uuid
101
102
  product {
102
103
  ...BaseProductV1ProductFields
@@ -69,8 +69,11 @@ fragment BaseOfferFields on Offer {
69
69
  resolutionPeriodDuration
70
70
  metadataUri
71
71
  metadataHash
72
+ voided
72
73
  voidedAt
73
74
  disputeResolverId
75
+ numberOfCommits
76
+ numberOfRedemptions
74
77
  seller {
75
78
  ...BaseSellerFields
76
79
  }