@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.
Files changed (203) hide show
  1. package/dist/cjs/accounts/mixin.d.ts +194 -0
  2. package/dist/cjs/accounts/mixin.d.ts.map +1 -0
  3. package/dist/cjs/accounts/mixin.js +426 -0
  4. package/dist/cjs/accounts/mixin.js.map +1 -0
  5. package/dist/cjs/core-sdk.d.ts +16 -818
  6. package/dist/cjs/core-sdk.d.ts.map +1 -1
  7. package/dist/cjs/core-sdk.js +26 -1579
  8. package/dist/cjs/core-sdk.js.map +1 -1
  9. package/dist/cjs/disputes/mixin.d.ts +113 -0
  10. package/dist/cjs/disputes/mixin.d.ts.map +1 -0
  11. package/dist/cjs/disputes/mixin.js +203 -0
  12. package/dist/cjs/disputes/mixin.js.map +1 -0
  13. package/dist/cjs/erc1155/handler.d.ts +9 -0
  14. package/dist/cjs/erc1155/handler.d.ts.map +1 -0
  15. package/dist/cjs/erc1155/handler.js +28 -0
  16. package/dist/cjs/erc1155/handler.js.map +1 -0
  17. package/dist/cjs/erc1155/index.d.ts +3 -0
  18. package/dist/cjs/erc1155/index.d.ts.map +1 -0
  19. package/dist/cjs/erc1155/index.js +29 -0
  20. package/dist/cjs/erc1155/index.js.map +1 -0
  21. package/dist/cjs/erc1155/interface.d.ts +3 -0
  22. package/dist/cjs/erc1155/interface.d.ts.map +1 -0
  23. package/dist/cjs/erc1155/interface.js +7 -0
  24. package/dist/cjs/erc1155/interface.js.map +1 -0
  25. package/dist/cjs/erc20/handler.d.ts +5 -0
  26. package/dist/cjs/erc20/handler.d.ts.map +1 -1
  27. package/dist/cjs/erc20/handler.js +12 -1
  28. package/dist/cjs/erc20/handler.js.map +1 -1
  29. package/dist/cjs/erc721/handler.d.ts +5 -0
  30. package/dist/cjs/erc721/handler.d.ts.map +1 -1
  31. package/dist/cjs/erc721/handler.js +12 -1
  32. package/dist/cjs/erc721/handler.js.map +1 -1
  33. package/dist/cjs/event-logs/mixin.d.ts +11 -0
  34. package/dist/cjs/event-logs/mixin.d.ts.map +1 -0
  35. package/dist/cjs/event-logs/mixin.js +28 -0
  36. package/dist/cjs/event-logs/mixin.js.map +1 -0
  37. package/dist/cjs/exchanges/mixin.d.ts +77 -0
  38. package/dist/cjs/exchanges/mixin.d.ts.map +1 -0
  39. package/dist/cjs/exchanges/mixin.js +172 -0
  40. package/dist/cjs/exchanges/mixin.js.map +1 -0
  41. package/dist/cjs/funds/mixin.d.ts +42 -0
  42. package/dist/cjs/funds/mixin.d.ts.map +1 -0
  43. package/dist/cjs/funds/mixin.js +95 -0
  44. package/dist/cjs/funds/mixin.js.map +1 -0
  45. package/dist/cjs/groups/mixin.d.ts +14 -0
  46. package/dist/cjs/groups/mixin.d.ts.map +1 -0
  47. package/dist/cjs/groups/mixin.js +33 -0
  48. package/dist/cjs/groups/mixin.js.map +1 -0
  49. package/dist/cjs/meta-tx/mixin.d.ts +176 -0
  50. package/dist/cjs/meta-tx/mixin.d.ts.map +1 -0
  51. package/dist/cjs/meta-tx/mixin.js +296 -0
  52. package/dist/cjs/meta-tx/mixin.js.map +1 -0
  53. package/dist/cjs/metadata/mixin.d.ts +42 -0
  54. package/dist/cjs/metadata/mixin.d.ts.map +1 -0
  55. package/dist/cjs/metadata/mixin.js +89 -0
  56. package/dist/cjs/metadata/mixin.js.map +1 -0
  57. package/dist/cjs/metadata/subgraph.d.ts +3 -1
  58. package/dist/cjs/metadata/subgraph.d.ts.map +1 -1
  59. package/dist/cjs/metadata/subgraph.js +17 -1
  60. package/dist/cjs/metadata/subgraph.js.map +1 -1
  61. package/dist/cjs/mixins/base-core-sdk.d.ts +41 -0
  62. package/dist/cjs/mixins/base-core-sdk.d.ts.map +1 -0
  63. package/dist/cjs/mixins/base-core-sdk.js +51 -0
  64. package/dist/cjs/mixins/base-core-sdk.js.map +1 -0
  65. package/dist/cjs/native-meta-tx/mixin.d.ts +35 -0
  66. package/dist/cjs/native-meta-tx/mixin.d.ts.map +1 -0
  67. package/dist/cjs/native-meta-tx/mixin.js +68 -0
  68. package/dist/cjs/native-meta-tx/mixin.js.map +1 -0
  69. package/dist/cjs/offers/mixin.d.ts +133 -0
  70. package/dist/cjs/offers/mixin.d.ts.map +1 -0
  71. package/dist/cjs/offers/mixin.js +338 -0
  72. package/dist/cjs/offers/mixin.js.map +1 -0
  73. package/dist/cjs/orchestration/mixin.d.ts +28 -0
  74. package/dist/cjs/orchestration/mixin.d.ts.map +1 -0
  75. package/dist/cjs/orchestration/mixin.js +59 -0
  76. package/dist/cjs/orchestration/mixin.js.map +1 -0
  77. package/dist/cjs/subgraph.d.ts +3707 -1509
  78. package/dist/cjs/subgraph.d.ts.map +1 -1
  79. package/dist/cjs/subgraph.js +113 -4
  80. package/dist/cjs/subgraph.js.map +1 -1
  81. package/dist/cjs/utils/graphql.d.ts +14 -0
  82. package/dist/cjs/utils/graphql.d.ts.map +1 -1
  83. package/dist/cjs/utils/signature.d.ts.map +1 -1
  84. package/dist/cjs/utils/signature.js +5 -1
  85. package/dist/cjs/utils/signature.js.map +1 -1
  86. package/dist/cjs/utils/tokenInfoManager.d.ts +6 -2
  87. package/dist/cjs/utils/tokenInfoManager.d.ts.map +1 -1
  88. package/dist/cjs/utils/tokenInfoManager.js +39 -6
  89. package/dist/cjs/utils/tokenInfoManager.js.map +1 -1
  90. package/dist/esm/accounts/mixin.d.ts +194 -0
  91. package/dist/esm/accounts/mixin.d.ts.map +1 -0
  92. package/dist/esm/accounts/mixin.js +342 -0
  93. package/dist/esm/accounts/mixin.js.map +1 -0
  94. package/dist/esm/core-sdk.d.ts +16 -818
  95. package/dist/esm/core-sdk.d.ts.map +1 -1
  96. package/dist/esm/core-sdk.js +27 -1483
  97. package/dist/esm/core-sdk.js.map +1 -1
  98. package/dist/esm/disputes/mixin.d.ts +113 -0
  99. package/dist/esm/disputes/mixin.d.ts.map +1 -0
  100. package/dist/esm/disputes/mixin.js +173 -0
  101. package/dist/esm/disputes/mixin.js.map +1 -0
  102. package/dist/esm/erc1155/handler.d.ts +9 -0
  103. package/dist/esm/erc1155/handler.d.ts.map +1 -0
  104. package/dist/esm/erc1155/handler.js +13 -0
  105. package/dist/esm/erc1155/handler.js.map +1 -0
  106. package/dist/esm/erc1155/index.d.ts +3 -0
  107. package/dist/esm/erc1155/index.d.ts.map +1 -0
  108. package/dist/esm/erc1155/index.js +3 -0
  109. package/dist/esm/erc1155/index.js.map +1 -0
  110. package/dist/esm/erc1155/interface.d.ts +3 -0
  111. package/dist/esm/erc1155/interface.d.ts.map +1 -0
  112. package/dist/esm/erc1155/interface.js +4 -0
  113. package/dist/esm/erc1155/interface.js.map +1 -0
  114. package/dist/esm/erc20/handler.d.ts +5 -0
  115. package/dist/esm/erc20/handler.d.ts.map +1 -1
  116. package/dist/esm/erc20/handler.js +8 -0
  117. package/dist/esm/erc20/handler.js.map +1 -1
  118. package/dist/esm/erc721/handler.d.ts +5 -0
  119. package/dist/esm/erc721/handler.d.ts.map +1 -1
  120. package/dist/esm/erc721/handler.js +8 -0
  121. package/dist/esm/erc721/handler.js.map +1 -1
  122. package/dist/esm/event-logs/mixin.d.ts +11 -0
  123. package/dist/esm/event-logs/mixin.d.ts.map +1 -0
  124. package/dist/esm/event-logs/mixin.js +13 -0
  125. package/dist/esm/event-logs/mixin.js.map +1 -0
  126. package/dist/esm/exchanges/mixin.d.ts +77 -0
  127. package/dist/esm/exchanges/mixin.d.ts.map +1 -0
  128. package/dist/esm/exchanges/mixin.js +141 -0
  129. package/dist/esm/exchanges/mixin.js.map +1 -0
  130. package/dist/esm/funds/mixin.d.ts +42 -0
  131. package/dist/esm/funds/mixin.d.ts.map +1 -0
  132. package/dist/esm/funds/mixin.js +72 -0
  133. package/dist/esm/funds/mixin.js.map +1 -0
  134. package/dist/esm/groups/mixin.d.ts +14 -0
  135. package/dist/esm/groups/mixin.d.ts.map +1 -0
  136. package/dist/esm/groups/mixin.js +18 -0
  137. package/dist/esm/groups/mixin.js.map +1 -0
  138. package/dist/esm/meta-tx/mixin.d.ts +176 -0
  139. package/dist/esm/meta-tx/mixin.d.ts.map +1 -0
  140. package/dist/esm/meta-tx/mixin.js +351 -0
  141. package/dist/esm/meta-tx/mixin.js.map +1 -0
  142. package/dist/esm/metadata/mixin.d.ts +42 -0
  143. package/dist/esm/metadata/mixin.d.ts.map +1 -0
  144. package/dist/esm/metadata/mixin.js +60 -0
  145. package/dist/esm/metadata/mixin.js.map +1 -0
  146. package/dist/esm/metadata/subgraph.d.ts +3 -1
  147. package/dist/esm/metadata/subgraph.d.ts.map +1 -1
  148. package/dist/esm/metadata/subgraph.js +14 -0
  149. package/dist/esm/metadata/subgraph.js.map +1 -1
  150. package/dist/esm/mixins/base-core-sdk.d.ts +41 -0
  151. package/dist/esm/mixins/base-core-sdk.d.ts.map +1 -0
  152. package/dist/esm/mixins/base-core-sdk.js +54 -0
  153. package/dist/esm/mixins/base-core-sdk.js.map +1 -0
  154. package/dist/esm/native-meta-tx/mixin.d.ts +35 -0
  155. package/dist/esm/native-meta-tx/mixin.d.ts.map +1 -0
  156. package/dist/esm/native-meta-tx/mixin.js +51 -0
  157. package/dist/esm/native-meta-tx/mixin.js.map +1 -0
  158. package/dist/esm/offers/mixin.d.ts +133 -0
  159. package/dist/esm/offers/mixin.d.ts.map +1 -0
  160. package/dist/esm/offers/mixin.js +276 -0
  161. package/dist/esm/offers/mixin.js.map +1 -0
  162. package/dist/esm/orchestration/mixin.d.ts +28 -0
  163. package/dist/esm/orchestration/mixin.d.ts.map +1 -0
  164. package/dist/esm/orchestration/mixin.js +42 -0
  165. package/dist/esm/orchestration/mixin.js.map +1 -0
  166. package/dist/esm/subgraph.d.ts +3707 -1509
  167. package/dist/esm/subgraph.d.ts.map +1 -1
  168. package/dist/esm/subgraph.js +110 -1
  169. package/dist/esm/subgraph.js.map +1 -1
  170. package/dist/esm/utils/graphql.d.ts +14 -0
  171. package/dist/esm/utils/graphql.d.ts.map +1 -1
  172. package/dist/esm/utils/signature.d.ts.map +1 -1
  173. package/dist/esm/utils/signature.js +5 -1
  174. package/dist/esm/utils/signature.js.map +1 -1
  175. package/dist/esm/utils/tokenInfoManager.d.ts +6 -2
  176. package/dist/esm/utils/tokenInfoManager.d.ts.map +1 -1
  177. package/dist/esm/utils/tokenInfoManager.js +39 -6
  178. package/dist/esm/utils/tokenInfoManager.js.map +1 -1
  179. package/package.json +3 -3
  180. package/src/accounts/mixin.ts +484 -0
  181. package/src/core-sdk.ts +42 -2102
  182. package/src/disputes/mixin.ts +240 -0
  183. package/src/erc1155/handler.ts +21 -0
  184. package/src/erc1155/index.ts +2 -0
  185. package/src/erc1155/interface.ts +4 -0
  186. package/src/erc20/handler.ts +14 -0
  187. package/src/erc721/handler.ts +14 -0
  188. package/src/event-logs/mixin.ts +16 -0
  189. package/src/exchanges/mixin.ts +184 -0
  190. package/src/funds/mixin.ts +99 -0
  191. package/src/groups/mixin.ts +24 -0
  192. package/src/meta-tx/mixin.ts +515 -0
  193. package/src/metadata/mixin.ts +97 -0
  194. package/src/metadata/product-v1.graphql +77 -1
  195. package/src/metadata/subgraph.ts +31 -1
  196. package/src/mixins/base-core-sdk.ts +96 -0
  197. package/src/native-meta-tx/mixin.ts +77 -0
  198. package/src/offers/mixin.ts +376 -0
  199. package/src/offers/queries.graphql +1 -1
  200. package/src/orchestration/mixin.ts +57 -0
  201. package/src/subgraph.ts +3620 -1296
  202. package/src/utils/signature.ts +6 -1
  203. package/src/utils/tokenInfoManager.ts +44 -6
@@ -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
+ }
@@ -98,8 +98,8 @@ fragment BaseOfferFields on Offer {
98
98
  condition
99
99
  schemaUrl
100
100
  type
101
+ image
101
102
  ... on ProductV1MetadataEntity {
102
- image
103
103
  attributes {
104
104
  traitType
105
105
  value
@@ -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
+ }