@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.
- package/README.md +3 -104
- package/dist/cjs/core-sdk.d.ts +38 -1
- package/dist/cjs/core-sdk.d.ts.map +1 -1
- package/dist/cjs/core-sdk.js +80 -1
- package/dist/cjs/core-sdk.js.map +1 -1
- package/dist/cjs/event-logs/index.d.ts +2 -0
- package/dist/cjs/event-logs/index.d.ts.map +1 -0
- package/dist/cjs/event-logs/index.js +28 -0
- package/dist/cjs/event-logs/index.js.map +1 -0
- package/dist/cjs/event-logs/subgraph.d.ts +3 -0
- package/dist/cjs/event-logs/subgraph.d.ts.map +1 -0
- package/dist/cjs/event-logs/subgraph.js +22 -0
- package/dist/cjs/event-logs/subgraph.js.map +1 -0
- package/dist/cjs/exchanges/handler.d.ts +3 -0
- package/dist/cjs/exchanges/handler.d.ts.map +1 -1
- package/dist/cjs/exchanges/handler.js +34 -11
- package/dist/cjs/exchanges/handler.js.map +1 -1
- package/dist/cjs/exchanges/interface.d.ts +1 -0
- package/dist/cjs/exchanges/interface.d.ts.map +1 -1
- package/dist/cjs/exchanges/interface.js +7 -1
- package/dist/cjs/exchanges/interface.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/meta-tx/biconomy.d.ts +45 -0
- package/dist/cjs/meta-tx/biconomy.d.ts.map +1 -0
- package/dist/cjs/meta-tx/biconomy.js +76 -0
- package/dist/cjs/meta-tx/biconomy.js.map +1 -0
- package/dist/cjs/meta-tx/handler.d.ts +20 -1
- package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
- package/dist/cjs/meta-tx/handler.js +61 -1
- package/dist/cjs/meta-tx/handler.js.map +1 -1
- package/dist/cjs/subgraph.d.ts +2848 -280
- package/dist/cjs/subgraph.d.ts.map +1 -1
- package/dist/cjs/subgraph.js +287 -41
- package/dist/cjs/subgraph.js.map +1 -1
- package/dist/cjs/utils/errors.d.ts +5 -0
- package/dist/cjs/utils/errors.d.ts.map +1 -0
- package/dist/cjs/utils/errors.js +11 -0
- package/dist/cjs/utils/errors.js.map +1 -0
- package/dist/cjs/utils/graphql.d.ts +43 -0
- package/dist/cjs/utils/graphql.d.ts.map +1 -1
- package/dist/esm/core-sdk.d.ts +38 -1
- package/dist/esm/core-sdk.d.ts.map +1 -1
- package/dist/esm/core-sdk.js +77 -1
- package/dist/esm/core-sdk.js.map +1 -1
- package/dist/esm/event-logs/index.d.ts +2 -0
- package/dist/esm/event-logs/index.d.ts.map +1 -0
- package/dist/esm/event-logs/index.js +2 -0
- package/dist/esm/event-logs/index.js.map +1 -0
- package/dist/esm/event-logs/subgraph.d.ts +3 -0
- package/dist/esm/event-logs/subgraph.d.ts.map +1 -0
- package/dist/esm/event-logs/subgraph.js +7 -0
- package/dist/esm/event-logs/subgraph.js.map +1 -0
- package/dist/esm/exchanges/handler.d.ts +3 -0
- package/dist/esm/exchanges/handler.d.ts.map +1 -1
- package/dist/esm/exchanges/handler.js +32 -12
- package/dist/esm/exchanges/handler.js.map +1 -1
- package/dist/esm/exchanges/interface.d.ts +1 -0
- package/dist/esm/exchanges/interface.d.ts.map +1 -1
- package/dist/esm/exchanges/interface.js +5 -0
- package/dist/esm/exchanges/interface.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/meta-tx/biconomy.d.ts +45 -0
- package/dist/esm/meta-tx/biconomy.d.ts.map +1 -0
- package/dist/esm/meta-tx/biconomy.js +60 -0
- package/dist/esm/meta-tx/biconomy.js.map +1 -0
- package/dist/esm/meta-tx/handler.d.ts +20 -1
- package/dist/esm/meta-tx/handler.d.ts.map +1 -1
- package/dist/esm/meta-tx/handler.js +56 -0
- package/dist/esm/meta-tx/handler.js.map +1 -1
- package/dist/esm/subgraph.d.ts +2848 -280
- package/dist/esm/subgraph.d.ts.map +1 -1
- package/dist/esm/subgraph.js +284 -39
- package/dist/esm/subgraph.js.map +1 -1
- package/dist/esm/utils/errors.d.ts +5 -0
- package/dist/esm/utils/errors.d.ts.map +1 -0
- package/dist/esm/utils/errors.js +8 -0
- package/dist/esm/utils/errors.js.map +1 -0
- package/dist/esm/utils/graphql.d.ts +43 -0
- package/dist/esm/utils/graphql.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/accounts/queries.graphql +63 -0
- package/src/core-sdk.ts +117 -2
- package/src/disputes/queries.graphql +9 -9
- package/src/event-logs/index.ts +1 -0
- package/src/event-logs/queries.graphql +53 -0
- package/src/event-logs/subgraph.ts +14 -0
- package/src/exchanges/handler.ts +50 -20
- package/src/exchanges/interface.ts +6 -0
- package/src/exchanges/queries.graphql +9 -9
- package/src/index.ts +2 -1
- package/src/meta-tx/biconomy.ts +129 -0
- package/src/meta-tx/handler.ts +84 -2
- package/src/metadata/base.graphql +2 -0
- package/src/metadata/product-v1.graphql +2 -1
- package/src/offers/queries.graphql +3 -0
- package/src/subgraph.ts +2603 -240
- 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
|
@@ -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
|
+
}
|
package/src/meta-tx/handler.ts
CHANGED
|
@@ -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
|
+
}
|