@bosonprotocol/core-sdk 1.23.0-alpha.2 → 1.23.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/accounts/mixin.d.ts +194 -0
- package/dist/cjs/accounts/mixin.d.ts.map +1 -0
- package/dist/cjs/accounts/mixin.js +426 -0
- package/dist/cjs/accounts/mixin.js.map +1 -0
- package/dist/cjs/core-sdk.d.ts +16 -818
- package/dist/cjs/core-sdk.d.ts.map +1 -1
- package/dist/cjs/core-sdk.js +26 -1579
- package/dist/cjs/core-sdk.js.map +1 -1
- package/dist/cjs/disputes/mixin.d.ts +113 -0
- package/dist/cjs/disputes/mixin.d.ts.map +1 -0
- package/dist/cjs/disputes/mixin.js +203 -0
- package/dist/cjs/disputes/mixin.js.map +1 -0
- package/dist/cjs/erc1155/handler.d.ts +9 -0
- package/dist/cjs/erc1155/handler.d.ts.map +1 -0
- package/dist/cjs/erc1155/handler.js +28 -0
- package/dist/cjs/erc1155/handler.js.map +1 -0
- package/dist/cjs/erc1155/index.d.ts +3 -0
- package/dist/cjs/erc1155/index.d.ts.map +1 -0
- package/dist/cjs/erc1155/index.js +29 -0
- package/dist/cjs/erc1155/index.js.map +1 -0
- package/dist/cjs/erc1155/interface.d.ts +3 -0
- package/dist/cjs/erc1155/interface.d.ts.map +1 -0
- package/dist/cjs/erc1155/interface.js +7 -0
- package/dist/cjs/erc1155/interface.js.map +1 -0
- package/dist/cjs/erc20/handler.d.ts +5 -0
- package/dist/cjs/erc20/handler.d.ts.map +1 -1
- package/dist/cjs/erc20/handler.js +12 -1
- package/dist/cjs/erc20/handler.js.map +1 -1
- package/dist/cjs/erc721/handler.d.ts +5 -0
- package/dist/cjs/erc721/handler.d.ts.map +1 -1
- package/dist/cjs/erc721/handler.js +12 -1
- package/dist/cjs/erc721/handler.js.map +1 -1
- package/dist/cjs/event-logs/mixin.d.ts +11 -0
- package/dist/cjs/event-logs/mixin.d.ts.map +1 -0
- package/dist/cjs/event-logs/mixin.js +28 -0
- package/dist/cjs/event-logs/mixin.js.map +1 -0
- package/dist/cjs/exchanges/mixin.d.ts +77 -0
- package/dist/cjs/exchanges/mixin.d.ts.map +1 -0
- package/dist/cjs/exchanges/mixin.js +172 -0
- package/dist/cjs/exchanges/mixin.js.map +1 -0
- package/dist/cjs/funds/mixin.d.ts +42 -0
- package/dist/cjs/funds/mixin.d.ts.map +1 -0
- package/dist/cjs/funds/mixin.js +95 -0
- package/dist/cjs/funds/mixin.js.map +1 -0
- package/dist/cjs/groups/mixin.d.ts +14 -0
- package/dist/cjs/groups/mixin.d.ts.map +1 -0
- package/dist/cjs/groups/mixin.js +33 -0
- package/dist/cjs/groups/mixin.js.map +1 -0
- package/dist/cjs/meta-tx/mixin.d.ts +176 -0
- package/dist/cjs/meta-tx/mixin.d.ts.map +1 -0
- package/dist/cjs/meta-tx/mixin.js +296 -0
- package/dist/cjs/meta-tx/mixin.js.map +1 -0
- package/dist/cjs/metadata/mixin.d.ts +42 -0
- package/dist/cjs/metadata/mixin.d.ts.map +1 -0
- package/dist/cjs/metadata/mixin.js +89 -0
- package/dist/cjs/metadata/mixin.js.map +1 -0
- package/dist/cjs/metadata/subgraph.d.ts +3 -1
- package/dist/cjs/metadata/subgraph.d.ts.map +1 -1
- package/dist/cjs/metadata/subgraph.js +17 -1
- package/dist/cjs/metadata/subgraph.js.map +1 -1
- package/dist/cjs/mixins/base-core-sdk.d.ts +41 -0
- package/dist/cjs/mixins/base-core-sdk.d.ts.map +1 -0
- package/dist/cjs/mixins/base-core-sdk.js +51 -0
- package/dist/cjs/mixins/base-core-sdk.js.map +1 -0
- package/dist/cjs/native-meta-tx/mixin.d.ts +35 -0
- package/dist/cjs/native-meta-tx/mixin.d.ts.map +1 -0
- package/dist/cjs/native-meta-tx/mixin.js +68 -0
- package/dist/cjs/native-meta-tx/mixin.js.map +1 -0
- package/dist/cjs/offers/mixin.d.ts +133 -0
- package/dist/cjs/offers/mixin.d.ts.map +1 -0
- package/dist/cjs/offers/mixin.js +338 -0
- package/dist/cjs/offers/mixin.js.map +1 -0
- package/dist/cjs/orchestration/mixin.d.ts +28 -0
- package/dist/cjs/orchestration/mixin.d.ts.map +1 -0
- package/dist/cjs/orchestration/mixin.js +59 -0
- package/dist/cjs/orchestration/mixin.js.map +1 -0
- package/dist/cjs/subgraph.d.ts +3707 -1509
- package/dist/cjs/subgraph.d.ts.map +1 -1
- package/dist/cjs/subgraph.js +113 -4
- package/dist/cjs/subgraph.js.map +1 -1
- package/dist/cjs/utils/graphql.d.ts +14 -0
- package/dist/cjs/utils/graphql.d.ts.map +1 -1
- package/dist/cjs/utils/signature.d.ts.map +1 -1
- package/dist/cjs/utils/signature.js +5 -1
- package/dist/cjs/utils/signature.js.map +1 -1
- package/dist/cjs/utils/tokenInfoManager.d.ts +6 -2
- package/dist/cjs/utils/tokenInfoManager.d.ts.map +1 -1
- package/dist/cjs/utils/tokenInfoManager.js +39 -6
- package/dist/cjs/utils/tokenInfoManager.js.map +1 -1
- package/dist/esm/accounts/mixin.d.ts +194 -0
- package/dist/esm/accounts/mixin.d.ts.map +1 -0
- package/dist/esm/accounts/mixin.js +342 -0
- package/dist/esm/accounts/mixin.js.map +1 -0
- package/dist/esm/core-sdk.d.ts +16 -818
- package/dist/esm/core-sdk.d.ts.map +1 -1
- package/dist/esm/core-sdk.js +27 -1483
- package/dist/esm/core-sdk.js.map +1 -1
- package/dist/esm/disputes/mixin.d.ts +113 -0
- package/dist/esm/disputes/mixin.d.ts.map +1 -0
- package/dist/esm/disputes/mixin.js +173 -0
- package/dist/esm/disputes/mixin.js.map +1 -0
- package/dist/esm/erc1155/handler.d.ts +9 -0
- package/dist/esm/erc1155/handler.d.ts.map +1 -0
- package/dist/esm/erc1155/handler.js +13 -0
- package/dist/esm/erc1155/handler.js.map +1 -0
- package/dist/esm/erc1155/index.d.ts +3 -0
- package/dist/esm/erc1155/index.d.ts.map +1 -0
- package/dist/esm/erc1155/index.js +3 -0
- package/dist/esm/erc1155/index.js.map +1 -0
- package/dist/esm/erc1155/interface.d.ts +3 -0
- package/dist/esm/erc1155/interface.d.ts.map +1 -0
- package/dist/esm/erc1155/interface.js +4 -0
- package/dist/esm/erc1155/interface.js.map +1 -0
- package/dist/esm/erc20/handler.d.ts +5 -0
- package/dist/esm/erc20/handler.d.ts.map +1 -1
- package/dist/esm/erc20/handler.js +8 -0
- package/dist/esm/erc20/handler.js.map +1 -1
- package/dist/esm/erc721/handler.d.ts +5 -0
- package/dist/esm/erc721/handler.d.ts.map +1 -1
- package/dist/esm/erc721/handler.js +8 -0
- package/dist/esm/erc721/handler.js.map +1 -1
- package/dist/esm/event-logs/mixin.d.ts +11 -0
- package/dist/esm/event-logs/mixin.d.ts.map +1 -0
- package/dist/esm/event-logs/mixin.js +13 -0
- package/dist/esm/event-logs/mixin.js.map +1 -0
- package/dist/esm/exchanges/mixin.d.ts +77 -0
- package/dist/esm/exchanges/mixin.d.ts.map +1 -0
- package/dist/esm/exchanges/mixin.js +141 -0
- package/dist/esm/exchanges/mixin.js.map +1 -0
- package/dist/esm/funds/mixin.d.ts +42 -0
- package/dist/esm/funds/mixin.d.ts.map +1 -0
- package/dist/esm/funds/mixin.js +72 -0
- package/dist/esm/funds/mixin.js.map +1 -0
- package/dist/esm/groups/mixin.d.ts +14 -0
- package/dist/esm/groups/mixin.d.ts.map +1 -0
- package/dist/esm/groups/mixin.js +18 -0
- package/dist/esm/groups/mixin.js.map +1 -0
- package/dist/esm/meta-tx/mixin.d.ts +176 -0
- package/dist/esm/meta-tx/mixin.d.ts.map +1 -0
- package/dist/esm/meta-tx/mixin.js +351 -0
- package/dist/esm/meta-tx/mixin.js.map +1 -0
- package/dist/esm/metadata/mixin.d.ts +42 -0
- package/dist/esm/metadata/mixin.d.ts.map +1 -0
- package/dist/esm/metadata/mixin.js +60 -0
- package/dist/esm/metadata/mixin.js.map +1 -0
- package/dist/esm/metadata/subgraph.d.ts +3 -1
- package/dist/esm/metadata/subgraph.d.ts.map +1 -1
- package/dist/esm/metadata/subgraph.js +14 -0
- package/dist/esm/metadata/subgraph.js.map +1 -1
- package/dist/esm/mixins/base-core-sdk.d.ts +41 -0
- package/dist/esm/mixins/base-core-sdk.d.ts.map +1 -0
- package/dist/esm/mixins/base-core-sdk.js +54 -0
- package/dist/esm/mixins/base-core-sdk.js.map +1 -0
- package/dist/esm/native-meta-tx/mixin.d.ts +35 -0
- package/dist/esm/native-meta-tx/mixin.d.ts.map +1 -0
- package/dist/esm/native-meta-tx/mixin.js +51 -0
- package/dist/esm/native-meta-tx/mixin.js.map +1 -0
- package/dist/esm/offers/mixin.d.ts +133 -0
- package/dist/esm/offers/mixin.d.ts.map +1 -0
- package/dist/esm/offers/mixin.js +276 -0
- package/dist/esm/offers/mixin.js.map +1 -0
- package/dist/esm/orchestration/mixin.d.ts +28 -0
- package/dist/esm/orchestration/mixin.d.ts.map +1 -0
- package/dist/esm/orchestration/mixin.js +42 -0
- package/dist/esm/orchestration/mixin.js.map +1 -0
- package/dist/esm/subgraph.d.ts +3707 -1509
- package/dist/esm/subgraph.d.ts.map +1 -1
- package/dist/esm/subgraph.js +110 -1
- package/dist/esm/subgraph.js.map +1 -1
- package/dist/esm/utils/graphql.d.ts +14 -0
- package/dist/esm/utils/graphql.d.ts.map +1 -1
- package/dist/esm/utils/signature.d.ts.map +1 -1
- package/dist/esm/utils/signature.js +5 -1
- package/dist/esm/utils/signature.js.map +1 -1
- package/dist/esm/utils/tokenInfoManager.d.ts +6 -2
- package/dist/esm/utils/tokenInfoManager.d.ts.map +1 -1
- package/dist/esm/utils/tokenInfoManager.js +39 -6
- package/dist/esm/utils/tokenInfoManager.js.map +1 -1
- package/package.json +3 -3
- package/src/accounts/mixin.ts +484 -0
- package/src/core-sdk.ts +42 -2102
- package/src/disputes/mixin.ts +240 -0
- package/src/erc1155/handler.ts +21 -0
- package/src/erc1155/index.ts +2 -0
- package/src/erc1155/interface.ts +4 -0
- package/src/erc20/handler.ts +14 -0
- package/src/erc721/handler.ts +14 -0
- package/src/event-logs/mixin.ts +16 -0
- package/src/exchanges/mixin.ts +184 -0
- package/src/funds/mixin.ts +99 -0
- package/src/groups/mixin.ts +24 -0
- package/src/meta-tx/mixin.ts +515 -0
- package/src/metadata/mixin.ts +97 -0
- package/src/metadata/product-v1.graphql +77 -1
- package/src/metadata/subgraph.ts +31 -1
- package/src/mixins/base-core-sdk.ts +96 -0
- package/src/native-meta-tx/mixin.ts +77 -0
- package/src/offers/mixin.ts +376 -0
- package/src/offers/queries.graphql +1 -1
- package/src/orchestration/mixin.ts +57 -0
- package/src/subgraph.ts +3620 -1296
- package/src/utils/signature.ts +6 -1
- package/src/utils/tokenInfoManager.ts +44 -6
package/src/metadata/subgraph.ts
CHANGED
|
@@ -14,7 +14,11 @@ import {
|
|
|
14
14
|
BaseProductV1ProductFieldsFragment,
|
|
15
15
|
BaseProductV1CategoryFieldsFragment,
|
|
16
16
|
OfferFieldsFragment,
|
|
17
|
-
ProductV1Variation
|
|
17
|
+
ProductV1Variation,
|
|
18
|
+
GetProductV1ProductsWithVariantsQueryQueryVariables,
|
|
19
|
+
BaseProductV1ProductWithNotVoidedVariantsFieldsFragment,
|
|
20
|
+
BaseProductV1ProductWithVariantsFieldsFragment,
|
|
21
|
+
GetAllProductsWithNotVoidedVariantsQueryQueryVariables
|
|
18
22
|
} from "../subgraph";
|
|
19
23
|
|
|
20
24
|
export type SingleBaseMetadataEntityQueryVariables = Omit<
|
|
@@ -121,6 +125,32 @@ export async function getProductV1Products(
|
|
|
121
125
|
return productV1Products;
|
|
122
126
|
}
|
|
123
127
|
|
|
128
|
+
export async function getAllProductsWithVariants(
|
|
129
|
+
subgraphUrl: string,
|
|
130
|
+
queryVars: GetProductV1ProductsWithVariantsQueryQueryVariables = {}
|
|
131
|
+
): Promise<BaseProductV1ProductWithVariantsFieldsFragment[]> {
|
|
132
|
+
const subgraphSdk = getSubgraphSdk(subgraphUrl);
|
|
133
|
+
const { productV1Products = [] } =
|
|
134
|
+
await subgraphSdk.getProductV1ProductsWithVariantsQuery({
|
|
135
|
+
...queryVars
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
return productV1Products;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export async function getAllProductsWithNotVoidedVariants(
|
|
142
|
+
subgraphUrl: string,
|
|
143
|
+
queryVars: GetAllProductsWithNotVoidedVariantsQueryQueryVariables = {}
|
|
144
|
+
): Promise<BaseProductV1ProductWithNotVoidedVariantsFieldsFragment[]> {
|
|
145
|
+
const subgraphSdk = getSubgraphSdk(subgraphUrl);
|
|
146
|
+
const { productV1Products = [] } =
|
|
147
|
+
await subgraphSdk.getAllProductsWithNotVoidedVariantsQuery({
|
|
148
|
+
...queryVars
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
return productV1Products;
|
|
152
|
+
}
|
|
153
|
+
|
|
124
154
|
export async function getProductWithVariants(
|
|
125
155
|
subgraphUrl: string,
|
|
126
156
|
productUuid: string
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Web3LibAdapter,
|
|
3
|
+
MetadataStorage,
|
|
4
|
+
MetaTxConfig,
|
|
5
|
+
LensContracts
|
|
6
|
+
} from "@bosonprotocol/common";
|
|
7
|
+
import { TokenInfoManager } from "../utils/tokenInfoManager";
|
|
8
|
+
|
|
9
|
+
export class BaseCoreSDK {
|
|
10
|
+
protected _web3Lib: Web3LibAdapter;
|
|
11
|
+
protected _metadataStorage?: MetadataStorage;
|
|
12
|
+
protected _theGraphStorage?: MetadataStorage;
|
|
13
|
+
|
|
14
|
+
protected _subgraphUrl: string;
|
|
15
|
+
protected _protocolDiamond: string;
|
|
16
|
+
protected _chainId: number;
|
|
17
|
+
protected _tokenInfoManager: TokenInfoManager;
|
|
18
|
+
|
|
19
|
+
protected _metaTxConfig?: Partial<MetaTxConfig>;
|
|
20
|
+
protected _lensContracts?: LensContracts;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Creates an instance of `BaseCoreSDK`
|
|
24
|
+
* @param args - Constructor args
|
|
25
|
+
*/
|
|
26
|
+
constructor(opts: {
|
|
27
|
+
web3Lib: Web3LibAdapter;
|
|
28
|
+
subgraphUrl: string;
|
|
29
|
+
protocolDiamond: string;
|
|
30
|
+
metadataStorage?: MetadataStorage;
|
|
31
|
+
theGraphStorage?: MetadataStorage;
|
|
32
|
+
chainId: number;
|
|
33
|
+
metaTx?: Partial<MetaTxConfig>;
|
|
34
|
+
lensContracts?: LensContracts;
|
|
35
|
+
}) {
|
|
36
|
+
this._web3Lib = opts.web3Lib;
|
|
37
|
+
this._subgraphUrl = opts.subgraphUrl;
|
|
38
|
+
this._protocolDiamond = opts.protocolDiamond;
|
|
39
|
+
this._metadataStorage = opts.metadataStorage;
|
|
40
|
+
this._theGraphStorage = opts.theGraphStorage;
|
|
41
|
+
this._chainId = opts.chainId;
|
|
42
|
+
this._metaTxConfig = opts.metaTx;
|
|
43
|
+
this._lensContracts = opts.lensContracts;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
protected assertAndGetMetaTxConfig(
|
|
47
|
+
overrides: Partial<{
|
|
48
|
+
contractAddress: string;
|
|
49
|
+
metaTxConfig: Partial<Omit<MetaTxConfig, "apiIds"> & { apiId: string }>;
|
|
50
|
+
metaTransactionMethod: string;
|
|
51
|
+
}> = {}
|
|
52
|
+
) {
|
|
53
|
+
const contractAddress = overrides.contractAddress || this._protocolDiamond;
|
|
54
|
+
const metaTransactionMethod =
|
|
55
|
+
overrides.metaTransactionMethod || "executeMetaTransaction";
|
|
56
|
+
const metaTxRelayerUrl =
|
|
57
|
+
overrides.metaTxConfig?.relayerUrl || this._metaTxConfig?.relayerUrl;
|
|
58
|
+
const metaTxApiKey =
|
|
59
|
+
overrides.metaTxConfig?.apiKey || this._metaTxConfig?.apiKey;
|
|
60
|
+
// metaTxApiId is depending on the contract/method(=executeMetaTransaction) to be called with Biconomy
|
|
61
|
+
const apiIds = this._metaTxConfig?.apiIds[contractAddress.toLowerCase()];
|
|
62
|
+
const metaTxApiId =
|
|
63
|
+
overrides.metaTxConfig?.apiId ||
|
|
64
|
+
(apiIds && apiIds[metaTransactionMethod]);
|
|
65
|
+
|
|
66
|
+
if (!(metaTxRelayerUrl && metaTxApiKey && metaTxApiId)) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
"CoreSDK not configured to relay meta transactions. Either pass in 'relayerUrl', 'apiKey' and 'apiId' during initialization OR as overrides arguments."
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
metaTxRelayerUrl,
|
|
74
|
+
metaTxApiId,
|
|
75
|
+
metaTxApiKey,
|
|
76
|
+
contractAddress
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Doc: https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern
|
|
82
|
+
export function applyMixins(
|
|
83
|
+
derivedCtor: typeof BaseCoreSDK,
|
|
84
|
+
constructors: typeof BaseCoreSDK[]
|
|
85
|
+
) {
|
|
86
|
+
constructors.forEach((baseCtor) => {
|
|
87
|
+
Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
|
|
88
|
+
Object.defineProperty(
|
|
89
|
+
derivedCtor.prototype,
|
|
90
|
+
name,
|
|
91
|
+
Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
|
|
92
|
+
Object.create(null)
|
|
93
|
+
);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { MetaTxConfig, TransactionResponse } from "@bosonprotocol/common";
|
|
2
|
+
import { BigNumberish } from "@ethersproject/bignumber";
|
|
3
|
+
import { BytesLike } from "@ethersproject/bytes";
|
|
4
|
+
import { handler } from ".";
|
|
5
|
+
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
|
|
6
|
+
|
|
7
|
+
export class NativeMetaTxMixin extends BaseCoreSDK {
|
|
8
|
+
/**
|
|
9
|
+
* Encodes and signs a native "token.approve()" meta transaction that can be relayed.
|
|
10
|
+
* @param exchangeToken - The address of the token contract.
|
|
11
|
+
* @param value - The value to be approved.
|
|
12
|
+
* @param overrides - Optionally specify a spender address (default is the protocol contract address).
|
|
13
|
+
* @returns Signature.
|
|
14
|
+
*/
|
|
15
|
+
public async signNativeMetaTxApproveExchangeToken(
|
|
16
|
+
exchangeToken: string,
|
|
17
|
+
value: BigNumberish,
|
|
18
|
+
overrides: Partial<{
|
|
19
|
+
spender: string;
|
|
20
|
+
}> = {}
|
|
21
|
+
) {
|
|
22
|
+
const user = await this._web3Lib.getSignerAddress();
|
|
23
|
+
return handler.signNativeMetaTxApproveExchangeToken({
|
|
24
|
+
web3Lib: this._web3Lib,
|
|
25
|
+
chainId: this._chainId,
|
|
26
|
+
user,
|
|
27
|
+
exchangeToken,
|
|
28
|
+
spender: overrides.spender || this._protocolDiamond,
|
|
29
|
+
value
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Relay a native meta transaction,
|
|
35
|
+
* @param metaTxParams - Required params for meta transaction.
|
|
36
|
+
* @param overrides - Optional overrides.
|
|
37
|
+
* @returns Transaction response.
|
|
38
|
+
*/
|
|
39
|
+
public async relayNativeMetaTransaction(
|
|
40
|
+
contractAddress: string,
|
|
41
|
+
metaTxParams: {
|
|
42
|
+
functionSignature: BytesLike;
|
|
43
|
+
sigR: BytesLike;
|
|
44
|
+
sigS: BytesLike;
|
|
45
|
+
sigV: BigNumberish;
|
|
46
|
+
},
|
|
47
|
+
overrides: Partial<{
|
|
48
|
+
userAddress: string;
|
|
49
|
+
metaTxConfig: Partial<Omit<MetaTxConfig, "apiIds"> & { apiId: string }>;
|
|
50
|
+
metaTransactionMethod: string;
|
|
51
|
+
}> = {}
|
|
52
|
+
): Promise<TransactionResponse> {
|
|
53
|
+
const { metaTxApiId, metaTxApiKey, metaTxRelayerUrl } =
|
|
54
|
+
this.assertAndGetMetaTxConfig({ ...overrides, contractAddress });
|
|
55
|
+
|
|
56
|
+
return handler.relayNativeMetaTransaction({
|
|
57
|
+
web3LibAdapter: this._web3Lib,
|
|
58
|
+
contractAddress,
|
|
59
|
+
chainId: this._chainId,
|
|
60
|
+
metaTx: {
|
|
61
|
+
config: {
|
|
62
|
+
relayerUrl: metaTxRelayerUrl,
|
|
63
|
+
apiId: metaTxApiId,
|
|
64
|
+
apiKey: metaTxApiKey
|
|
65
|
+
},
|
|
66
|
+
params: {
|
|
67
|
+
userAddress:
|
|
68
|
+
overrides.userAddress || (await this._web3Lib.getSignerAddress()),
|
|
69
|
+
functionSignature: metaTxParams.functionSignature,
|
|
70
|
+
sigR: metaTxParams.sigR,
|
|
71
|
+
sigS: metaTxParams.sigS,
|
|
72
|
+
sigV: metaTxParams.sigV
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
|
|
2
|
+
import * as erc20 from "../erc20";
|
|
3
|
+
import * as erc721 from "../erc721";
|
|
4
|
+
import * as erc1155 from "../erc1155";
|
|
5
|
+
import * as subgraph from "../subgraph";
|
|
6
|
+
import * as offers from ".";
|
|
7
|
+
import * as accounts from "../accounts";
|
|
8
|
+
import * as orchestration from "../orchestration";
|
|
9
|
+
import * as groups from "../groups";
|
|
10
|
+
import {
|
|
11
|
+
TransactionResponse,
|
|
12
|
+
Log,
|
|
13
|
+
TokenType,
|
|
14
|
+
EvaluationMethod
|
|
15
|
+
} from "@bosonprotocol/common";
|
|
16
|
+
import { BigNumber, BigNumberish } from "@ethersproject/bignumber";
|
|
17
|
+
import { getValueFromLogs, getValuesFromLogs } from "../utils/logs";
|
|
18
|
+
import { ITokenInfo, TokenInfoManager } from "../utils/tokenInfoManager";
|
|
19
|
+
|
|
20
|
+
export class OfferMixin extends BaseCoreSDK {
|
|
21
|
+
/* -------------------------------------------------------------------------- */
|
|
22
|
+
/* Offer related methods */
|
|
23
|
+
/* -------------------------------------------------------------------------- */
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Creates offer by calling the `OfferHandlerFacet` contract.
|
|
27
|
+
* This transaction only succeeds if there is an existing seller account for connected signer.
|
|
28
|
+
* @param offerToCreate - Offer arguments.
|
|
29
|
+
* @param overrides - Optional overrides.
|
|
30
|
+
* @returns Transaction response.
|
|
31
|
+
*/
|
|
32
|
+
public async createOffer(
|
|
33
|
+
offerToCreate: offers.CreateOfferArgs,
|
|
34
|
+
overrides: Partial<{
|
|
35
|
+
contractAddress: string;
|
|
36
|
+
}> = {}
|
|
37
|
+
): Promise<TransactionResponse> {
|
|
38
|
+
return offers.handler.createOffer({
|
|
39
|
+
offerToCreate,
|
|
40
|
+
web3Lib: this._web3Lib,
|
|
41
|
+
theGraphStorage: this._theGraphStorage,
|
|
42
|
+
metadataStorage: this._metadataStorage,
|
|
43
|
+
contractAddress: overrides.contractAddress || this._protocolDiamond
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Creates a batch of offers by calling the `OfferHandlerFacet` contract.
|
|
49
|
+
* This transaction only succeeds if there is an existing seller account for connected signer.
|
|
50
|
+
* @param offersToCreate - Offer arguments.
|
|
51
|
+
* @param overrides - Optional overrides.
|
|
52
|
+
* @returns Transaction response.
|
|
53
|
+
*/
|
|
54
|
+
public async createOfferBatch(
|
|
55
|
+
offersToCreate: offers.CreateOfferArgs[],
|
|
56
|
+
overrides: Partial<{
|
|
57
|
+
contractAddress: string;
|
|
58
|
+
}> = {}
|
|
59
|
+
): Promise<TransactionResponse> {
|
|
60
|
+
return offers.handler.createOfferBatch({
|
|
61
|
+
offersToCreate,
|
|
62
|
+
web3Lib: this._web3Lib,
|
|
63
|
+
theGraphStorage: this._theGraphStorage,
|
|
64
|
+
metadataStorage: this._metadataStorage,
|
|
65
|
+
contractAddress: overrides.contractAddress || this._protocolDiamond
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Utility method to retrieve the created `offerId` from logs after calling `createOffer`
|
|
71
|
+
* or `createOfferAndSeller`.
|
|
72
|
+
* @param logs - Logs to search in.
|
|
73
|
+
* @returns Created offer id.
|
|
74
|
+
*/
|
|
75
|
+
public getCreatedOfferIdFromLogs(logs: Log[]): string | null {
|
|
76
|
+
const offerId = getValueFromLogs({
|
|
77
|
+
iface: offers.iface.bosonOfferHandlerIface,
|
|
78
|
+
logs,
|
|
79
|
+
eventArgsKey: "offerId",
|
|
80
|
+
eventName: "OfferCreated"
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
offerId ||
|
|
85
|
+
getValueFromLogs({
|
|
86
|
+
iface: orchestration.iface.bosonOrchestrationHandlerIface,
|
|
87
|
+
logs,
|
|
88
|
+
eventArgsKey: "offerId",
|
|
89
|
+
eventName: "OfferCreated"
|
|
90
|
+
})
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Utility method to retrieve the created `offerIds` from logs after calling `createOfferBatch`
|
|
96
|
+
* @param logs - Logs to search in.
|
|
97
|
+
* @returns Array of created offerIds.
|
|
98
|
+
*/
|
|
99
|
+
public getCreatedOfferIdsFromLogs(logs: Log[]): string[] {
|
|
100
|
+
return getValuesFromLogs({
|
|
101
|
+
iface: offers.iface.bosonOfferHandlerIface,
|
|
102
|
+
logs,
|
|
103
|
+
eventArgsKey: "offerId",
|
|
104
|
+
eventName: "OfferCreated"
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Utility method to retrieve the created `groupIds` from logs after calling `createGroup`
|
|
110
|
+
* @param logs - Logs to search in.
|
|
111
|
+
* @returns Array of group Ids.
|
|
112
|
+
*/
|
|
113
|
+
public getCreatedGroupIdsFromLogs(logs: Log[]): string[] {
|
|
114
|
+
return getValuesFromLogs({
|
|
115
|
+
iface: groups.iface.bosonGroupHandlerIface,
|
|
116
|
+
logs,
|
|
117
|
+
eventArgsKey: "groupId",
|
|
118
|
+
eventName: "GroupCreated"
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Utility method to retrieve the created `sellerId` from logs after calling `createSeller`
|
|
124
|
+
* or `createOfferAndSeller`.
|
|
125
|
+
* @param logs - Logs to search in.
|
|
126
|
+
* @returns Created offer id.
|
|
127
|
+
*/
|
|
128
|
+
public getCreatedSellerIdFromLogs(logs: Log[]): string | null {
|
|
129
|
+
const sellerId = getValueFromLogs({
|
|
130
|
+
iface: accounts.iface.bosonAccountHandlerIface,
|
|
131
|
+
logs,
|
|
132
|
+
eventArgsKey: "sellerId",
|
|
133
|
+
eventName: "SellerCreated"
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
return (
|
|
137
|
+
sellerId ||
|
|
138
|
+
getValueFromLogs({
|
|
139
|
+
iface: orchestration.iface.bosonOrchestrationHandlerIface,
|
|
140
|
+
logs,
|
|
141
|
+
eventArgsKey: "sellerId",
|
|
142
|
+
eventName: "SellerCreated"
|
|
143
|
+
})
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Voids an existing offer by calling the `OfferHandlerFacet` contract.
|
|
149
|
+
* This transaction only succeeds if the connected signer is the `operator`.
|
|
150
|
+
* @param offerId - ID of offer to void.
|
|
151
|
+
* @param overrides - Optional overrides.
|
|
152
|
+
* @returns Transaction response.
|
|
153
|
+
*/
|
|
154
|
+
public async voidOffer(
|
|
155
|
+
offerId: BigNumberish,
|
|
156
|
+
overrides: Partial<{
|
|
157
|
+
contractAddress: string;
|
|
158
|
+
}> = {}
|
|
159
|
+
): Promise<TransactionResponse> {
|
|
160
|
+
return offers.handler.voidOffer({
|
|
161
|
+
offerId,
|
|
162
|
+
web3Lib: this._web3Lib,
|
|
163
|
+
subgraphUrl: this._subgraphUrl,
|
|
164
|
+
contractAddress: overrides.contractAddress || this._protocolDiamond
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Voids a batch of existing offers by calling the `OfferHandlerFacet` contract.
|
|
170
|
+
* This transaction only succeeds if the connected signer is the `operator` of all
|
|
171
|
+
* provided offers.
|
|
172
|
+
* @param offerIds - IDs of offers to void.
|
|
173
|
+
* @param overrides - Optional overrides.
|
|
174
|
+
* @returns Transaction response.
|
|
175
|
+
*/
|
|
176
|
+
public async voidOfferBatch(
|
|
177
|
+
offerIds: BigNumberish[],
|
|
178
|
+
overrides: Partial<{
|
|
179
|
+
contractAddress: string;
|
|
180
|
+
}> = {}
|
|
181
|
+
): Promise<TransactionResponse> {
|
|
182
|
+
return offers.handler.voidOfferBatch({
|
|
183
|
+
offerIds,
|
|
184
|
+
web3Lib: this._web3Lib,
|
|
185
|
+
subgraphUrl: this._subgraphUrl,
|
|
186
|
+
contractAddress: overrides.contractAddress || this._protocolDiamond
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Returns offer from subgraph.
|
|
192
|
+
* @param offerId - ID of offer.
|
|
193
|
+
* @param queryVars - Optional query variables to skip, order or filter.
|
|
194
|
+
* @returns Offer entity from subgraph.
|
|
195
|
+
*/
|
|
196
|
+
public async getOfferById(
|
|
197
|
+
offerId: BigNumberish,
|
|
198
|
+
queryVars?: offers.subgraph.SingleOfferQueryVariables
|
|
199
|
+
): Promise<subgraph.OfferFieldsFragment> {
|
|
200
|
+
return offers.subgraph.getOfferById(this._subgraphUrl, offerId, queryVars);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Returns offers from subgraph.
|
|
205
|
+
* @param queryVars - Optional query variables to skip, order or filter.
|
|
206
|
+
* @returns Offer entities from subgraph.
|
|
207
|
+
*/
|
|
208
|
+
public async getOffers(
|
|
209
|
+
queryVars?: subgraph.GetOffersQueryQueryVariables
|
|
210
|
+
): Promise<subgraph.OfferFieldsFragment[]> {
|
|
211
|
+
return offers.subgraph.getOffers(this._subgraphUrl, queryVars);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Renders contractual agreement for given offer.
|
|
216
|
+
* @param offerId - Id of offer to render agreement for.
|
|
217
|
+
* @returns Contractual agreement as string.
|
|
218
|
+
*/
|
|
219
|
+
public async renderContractualAgreementForOffer(
|
|
220
|
+
offerId: BigNumberish
|
|
221
|
+
): Promise<string> {
|
|
222
|
+
const offerData = await offers.subgraph.getOfferById(
|
|
223
|
+
this._subgraphUrl,
|
|
224
|
+
offerId
|
|
225
|
+
);
|
|
226
|
+
return offers.renderContractualAgreementForOffer(offerData);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Renders contractual agreement for given offer.
|
|
231
|
+
* @param template - Mustache syntax based template.
|
|
232
|
+
* @param offerData - Offer data.
|
|
233
|
+
* @returns Contractual agreement as string.
|
|
234
|
+
*/
|
|
235
|
+
public async renderContractualAgreement(
|
|
236
|
+
template: string,
|
|
237
|
+
offerData: offers.CreateOfferArgs,
|
|
238
|
+
offerMetadata: offers.AdditionalOfferMetadata
|
|
239
|
+
): Promise<string> {
|
|
240
|
+
const tokenInfo = await this.getExchangeTokenInfo(offerData.exchangeToken);
|
|
241
|
+
return offers.renderContractualAgreement(
|
|
242
|
+
template,
|
|
243
|
+
offerData,
|
|
244
|
+
offerMetadata,
|
|
245
|
+
tokenInfo
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* -------------------------------------------------------------------------- */
|
|
250
|
+
/* ERC20 / Exchange Token related methods */
|
|
251
|
+
/* -------------------------------------------------------------------------- */
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Returns the current allowance of the given token by calling the contract.
|
|
255
|
+
* @param exchangeToken - Address of exchange token.
|
|
256
|
+
* @param overrides - Optional overrides.
|
|
257
|
+
* @returns Allowance for given signer.
|
|
258
|
+
*/
|
|
259
|
+
public async getExchangeTokenAllowance(
|
|
260
|
+
exchangeToken: string,
|
|
261
|
+
overrides: Partial<{
|
|
262
|
+
spender: string;
|
|
263
|
+
owner: string;
|
|
264
|
+
}> = {}
|
|
265
|
+
): Promise<string> {
|
|
266
|
+
return erc20.handler.getAllowance({
|
|
267
|
+
web3Lib: this._web3Lib,
|
|
268
|
+
contractAddress: exchangeToken,
|
|
269
|
+
spender: overrides.spender || this._protocolDiamond,
|
|
270
|
+
owner: overrides.owner || (await this._web3Lib.getSignerAddress())
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Returns `name`, `decimals` and `symbol` of the given token by calling the contract.
|
|
276
|
+
* @param exchangeToken - Address exchange token.
|
|
277
|
+
* @returns Decimals, name and symbol.
|
|
278
|
+
*/
|
|
279
|
+
public async getExchangeTokenInfo(
|
|
280
|
+
exchangeToken: string
|
|
281
|
+
): Promise<ITokenInfo> {
|
|
282
|
+
if (this._tokenInfoManager === undefined) {
|
|
283
|
+
this._tokenInfoManager = new TokenInfoManager(
|
|
284
|
+
this._chainId,
|
|
285
|
+
this._web3Lib,
|
|
286
|
+
this._subgraphUrl
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return this._tokenInfoManager.getExchangeTokenInfo(exchangeToken);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Approves the given amount for the main protocol contract.
|
|
295
|
+
* @param exchangeToken - Address of token to approve.
|
|
296
|
+
* @param value - Amount of allowance.
|
|
297
|
+
* @param overrides - Optional overrides.
|
|
298
|
+
* @returns Transaction response.
|
|
299
|
+
*/
|
|
300
|
+
public async approveExchangeToken(
|
|
301
|
+
exchangeToken: string,
|
|
302
|
+
value: BigNumberish,
|
|
303
|
+
overrides: Partial<{
|
|
304
|
+
spender: string;
|
|
305
|
+
}> = {}
|
|
306
|
+
): Promise<TransactionResponse> {
|
|
307
|
+
return erc20.handler.approve({
|
|
308
|
+
contractAddress: exchangeToken,
|
|
309
|
+
spender: overrides.spender || this._protocolDiamond,
|
|
310
|
+
value,
|
|
311
|
+
web3Lib: this._web3Lib
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
public async getProtocolAllowance(
|
|
316
|
+
exchangeToken: string,
|
|
317
|
+
overrides: Partial<{
|
|
318
|
+
spender: string;
|
|
319
|
+
owner: string;
|
|
320
|
+
}> = {}
|
|
321
|
+
): Promise<string> {
|
|
322
|
+
return erc20.handler.getAllowance({
|
|
323
|
+
contractAddress: exchangeToken,
|
|
324
|
+
owner: overrides.owner || (await this._web3Lib.getSignerAddress()),
|
|
325
|
+
spender: overrides.spender || this._protocolDiamond,
|
|
326
|
+
web3Lib: this._web3Lib
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
public async checkTokenGatedCondition(
|
|
331
|
+
offerCondition: subgraph.OfferFieldsFragment["condition"],
|
|
332
|
+
buyerAddress: string
|
|
333
|
+
): Promise<boolean> {
|
|
334
|
+
const { tokenId, tokenType, threshold, method, tokenAddress } =
|
|
335
|
+
offerCondition;
|
|
336
|
+
if (tokenType === TokenType.FungibleToken) {
|
|
337
|
+
const balance: string = await erc20.handler.balanceOf({
|
|
338
|
+
contractAddress: tokenAddress,
|
|
339
|
+
owner: buyerAddress,
|
|
340
|
+
web3Lib: this._web3Lib
|
|
341
|
+
});
|
|
342
|
+
return BigNumber.from(balance).gte(threshold);
|
|
343
|
+
}
|
|
344
|
+
if (tokenType === TokenType.NonFungibleToken) {
|
|
345
|
+
if (method === EvaluationMethod.Threshold) {
|
|
346
|
+
const balance: string = await erc721.handler.balanceOf({
|
|
347
|
+
contractAddress: tokenAddress,
|
|
348
|
+
owner: buyerAddress,
|
|
349
|
+
web3Lib: this._web3Lib
|
|
350
|
+
});
|
|
351
|
+
return BigNumber.from(balance).gte(threshold);
|
|
352
|
+
}
|
|
353
|
+
if (method === EvaluationMethod.SpecificToken) {
|
|
354
|
+
const owner: string = await erc721.handler.ownerOf({
|
|
355
|
+
contractAddress: tokenAddress,
|
|
356
|
+
tokenId,
|
|
357
|
+
web3Lib: this._web3Lib
|
|
358
|
+
});
|
|
359
|
+
return owner === buyerAddress;
|
|
360
|
+
}
|
|
361
|
+
throw new Error(
|
|
362
|
+
`Unsupported method=${method} for this tokenType=${tokenType}`
|
|
363
|
+
);
|
|
364
|
+
}
|
|
365
|
+
if (tokenType === TokenType.MultiToken) {
|
|
366
|
+
const balance: string = await erc1155.handler.balanceOf({
|
|
367
|
+
contractAddress: tokenAddress,
|
|
368
|
+
tokenId,
|
|
369
|
+
owner: buyerAddress,
|
|
370
|
+
web3Lib: this._web3Lib
|
|
371
|
+
});
|
|
372
|
+
return BigNumber.from(balance).gte(threshold);
|
|
373
|
+
}
|
|
374
|
+
throw new Error(`Unsupported tokenType=${tokenType}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ConditionStruct, TransactionResponse } from "@bosonprotocol/common";
|
|
2
|
+
import { handler } from ".";
|
|
3
|
+
import { offers, accounts } from "..";
|
|
4
|
+
import { BaseCoreSDK } from "./../mixins/base-core-sdk";
|
|
5
|
+
|
|
6
|
+
export class OrchestrationMixin extends BaseCoreSDK {
|
|
7
|
+
/**
|
|
8
|
+
* Creates an offer with a specific conditions
|
|
9
|
+
* @param offerToCreate - Offer arguments.
|
|
10
|
+
* @param condition - contract condition applied to the offer
|
|
11
|
+
* @param overrides - Optional overrides.
|
|
12
|
+
* @returns Transaction response.
|
|
13
|
+
*/
|
|
14
|
+
public async createOfferWithCondition(
|
|
15
|
+
offerToCreate: offers.CreateOfferArgs,
|
|
16
|
+
condition: ConditionStruct,
|
|
17
|
+
overrides: Partial<{
|
|
18
|
+
contractAddress: string;
|
|
19
|
+
}> = {}
|
|
20
|
+
): Promise<TransactionResponse> {
|
|
21
|
+
return handler.createOfferWithCondition({
|
|
22
|
+
offerToCreate,
|
|
23
|
+
contractAddress: overrides.contractAddress || this._protocolDiamond,
|
|
24
|
+
web3Lib: this._web3Lib,
|
|
25
|
+
metadataStorage: this._metadataStorage,
|
|
26
|
+
theGraphStorage: this._theGraphStorage,
|
|
27
|
+
condition
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a seller account and offer with a specific conditions
|
|
32
|
+
* This transaction only succeeds if there is no existing seller account for the connected signer.
|
|
33
|
+
* @param sellerToCreate - Addresses to set in the seller account.
|
|
34
|
+
* @param offerToCreate - Offer arguments.
|
|
35
|
+
* @param condition - contract condition applied to the offer
|
|
36
|
+
* @param overrides - Optional overrides.
|
|
37
|
+
* @returns Transaction response.
|
|
38
|
+
*/
|
|
39
|
+
public async createSellerAndOfferWithCondition(
|
|
40
|
+
sellerToCreate: accounts.CreateSellerArgs,
|
|
41
|
+
offerToCreate: offers.CreateOfferArgs,
|
|
42
|
+
condition: ConditionStruct,
|
|
43
|
+
overrides: Partial<{
|
|
44
|
+
contractAddress: string;
|
|
45
|
+
}> = {}
|
|
46
|
+
): Promise<TransactionResponse> {
|
|
47
|
+
return handler.createSellerAndOfferWithCondition({
|
|
48
|
+
sellerToCreate,
|
|
49
|
+
offerToCreate,
|
|
50
|
+
contractAddress: overrides.contractAddress || this._protocolDiamond,
|
|
51
|
+
web3Lib: this._web3Lib,
|
|
52
|
+
metadataStorage: this._metadataStorage,
|
|
53
|
+
theGraphStorage: this._theGraphStorage,
|
|
54
|
+
condition
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|