@bosonprotocol/core-sdk 1.1.0 → 1.1.1-alpha.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 (109) hide show
  1. package/dist/cjs/core-sdk.d.ts +1 -0
  2. package/dist/cjs/core-sdk.d.ts.map +1 -0
  3. package/dist/cjs/core-sdk.js +1 -0
  4. package/dist/cjs/core-sdk.js.map +1 -0
  5. package/dist/cjs/erc20/handler.d.ts +1 -0
  6. package/dist/cjs/erc20/handler.d.ts.map +1 -0
  7. package/dist/cjs/erc20/handler.js +1 -0
  8. package/dist/cjs/erc20/handler.js.map +1 -0
  9. package/dist/cjs/erc20/index.d.ts +1 -0
  10. package/dist/cjs/erc20/index.d.ts.map +1 -0
  11. package/dist/cjs/erc20/index.js +1 -0
  12. package/dist/cjs/erc20/index.js.map +1 -0
  13. package/dist/cjs/erc20/interface.d.ts +1 -0
  14. package/dist/cjs/erc20/interface.d.ts.map +1 -0
  15. package/dist/cjs/erc20/interface.js +1 -0
  16. package/dist/cjs/erc20/interface.js.map +1 -0
  17. package/dist/cjs/index.d.ts +1 -0
  18. package/dist/cjs/index.d.ts.map +1 -0
  19. package/dist/cjs/index.js +1 -0
  20. package/dist/cjs/index.js.map +1 -0
  21. package/dist/cjs/offers/handler.d.ts +1 -0
  22. package/dist/cjs/offers/handler.d.ts.map +1 -0
  23. package/dist/cjs/offers/handler.js +1 -0
  24. package/dist/cjs/offers/handler.js.map +1 -0
  25. package/dist/cjs/offers/index.d.ts +53 -52
  26. package/dist/cjs/offers/index.d.ts.map +1 -0
  27. package/dist/cjs/offers/index.js +1 -0
  28. package/dist/cjs/offers/index.js.map +1 -0
  29. package/dist/cjs/offers/interface.d.ts +2 -1
  30. package/dist/cjs/offers/interface.d.ts.map +1 -0
  31. package/dist/cjs/offers/interface.js +1 -0
  32. package/dist/cjs/offers/interface.js.map +1 -0
  33. package/dist/cjs/offers/subgraph.d.ts +1 -0
  34. package/dist/cjs/offers/subgraph.d.ts.map +1 -0
  35. package/dist/cjs/offers/subgraph.js +1 -0
  36. package/dist/cjs/offers/subgraph.js.map +1 -0
  37. package/dist/cjs/offers/types.d.ts +1 -0
  38. package/dist/cjs/offers/types.d.ts.map +1 -0
  39. package/dist/cjs/offers/types.js +1 -0
  40. package/dist/cjs/offers/types.js.map +1 -0
  41. package/dist/cjs/utils/errors.d.ts +1 -0
  42. package/dist/cjs/utils/errors.d.ts.map +1 -0
  43. package/dist/cjs/utils/errors.js +1 -0
  44. package/dist/cjs/utils/errors.js.map +1 -0
  45. package/dist/cjs/utils/subgraph.d.ts +1 -0
  46. package/dist/cjs/utils/subgraph.d.ts.map +1 -0
  47. package/dist/cjs/utils/subgraph.js +1 -0
  48. package/dist/cjs/utils/subgraph.js.map +1 -0
  49. package/dist/esm/core-sdk.d.ts +1 -0
  50. package/dist/esm/core-sdk.d.ts.map +1 -0
  51. package/dist/esm/core-sdk.js +1 -0
  52. package/dist/esm/core-sdk.js.map +1 -0
  53. package/dist/esm/erc20/handler.d.ts +1 -0
  54. package/dist/esm/erc20/handler.d.ts.map +1 -0
  55. package/dist/esm/erc20/handler.js +1 -0
  56. package/dist/esm/erc20/handler.js.map +1 -0
  57. package/dist/esm/erc20/index.d.ts +1 -0
  58. package/dist/esm/erc20/index.d.ts.map +1 -0
  59. package/dist/esm/erc20/index.js +1 -0
  60. package/dist/esm/erc20/index.js.map +1 -0
  61. package/dist/esm/erc20/interface.d.ts +1 -0
  62. package/dist/esm/erc20/interface.d.ts.map +1 -0
  63. package/dist/esm/erc20/interface.js +1 -0
  64. package/dist/esm/erc20/interface.js.map +1 -0
  65. package/dist/esm/index.d.ts +1 -0
  66. package/dist/esm/index.d.ts.map +1 -0
  67. package/dist/esm/index.js +1 -0
  68. package/dist/esm/index.js.map +1 -0
  69. package/dist/esm/offers/handler.d.ts +1 -0
  70. package/dist/esm/offers/handler.d.ts.map +1 -0
  71. package/dist/esm/offers/handler.js +1 -0
  72. package/dist/esm/offers/handler.js.map +1 -0
  73. package/dist/esm/offers/index.d.ts +53 -52
  74. package/dist/esm/offers/index.d.ts.map +1 -0
  75. package/dist/esm/offers/index.js +1 -0
  76. package/dist/esm/offers/index.js.map +1 -0
  77. package/dist/esm/offers/interface.d.ts +2 -1
  78. package/dist/esm/offers/interface.d.ts.map +1 -0
  79. package/dist/esm/offers/interface.js +1 -0
  80. package/dist/esm/offers/interface.js.map +1 -0
  81. package/dist/esm/offers/subgraph.d.ts +1 -0
  82. package/dist/esm/offers/subgraph.d.ts.map +1 -0
  83. package/dist/esm/offers/subgraph.js +1 -0
  84. package/dist/esm/offers/subgraph.js.map +1 -0
  85. package/dist/esm/offers/types.d.ts +1 -0
  86. package/dist/esm/offers/types.d.ts.map +1 -0
  87. package/dist/esm/offers/types.js +1 -0
  88. package/dist/esm/offers/types.js.map +1 -0
  89. package/dist/esm/utils/errors.d.ts +1 -0
  90. package/dist/esm/utils/errors.d.ts.map +1 -0
  91. package/dist/esm/utils/errors.js +1 -0
  92. package/dist/esm/utils/errors.js.map +1 -0
  93. package/dist/esm/utils/subgraph.d.ts +1 -0
  94. package/dist/esm/utils/subgraph.d.ts.map +1 -0
  95. package/dist/esm/utils/subgraph.js +1 -0
  96. package/dist/esm/utils/subgraph.js.map +1 -0
  97. package/package.json +5 -4
  98. package/src/core-sdk.ts +170 -0
  99. package/src/erc20/handler.ts +69 -0
  100. package/src/erc20/index.ts +2 -0
  101. package/src/erc20/interface.ts +4 -0
  102. package/src/index.ts +11 -0
  103. package/src/offers/handler.ts +80 -0
  104. package/src/offers/index.ts +12 -0
  105. package/src/offers/interface.ts +59 -0
  106. package/src/offers/subgraph.ts +105 -0
  107. package/src/offers/types.ts +34 -0
  108. package/src/utils/errors.ts +14 -0
  109. package/src/utils/subgraph.ts +43 -0
@@ -0,0 +1,12 @@
1
+ import { utils } from "@bosonprotocol/common";
2
+
3
+ export * as handler from "./handler";
4
+ export * as subgraph from "./subgraph";
5
+ export * as iface from "./interface";
6
+ export * from "./types";
7
+
8
+ export const validation = {
9
+ createOfferArgsSchema: utils.validation.createOfferArgsSchema,
10
+ baseMetadataSchema: utils.validation.baseMetadataSchema,
11
+ productV1MetadataSchema: utils.validation.productV1MetadataSchema
12
+ };
@@ -0,0 +1,59 @@
1
+ import { OfferStruct, utils, abis, Log } from "@bosonprotocol/common";
2
+ import { Interface } from "@ethersproject/abi";
3
+ import { getAddress } from "@ethersproject/address";
4
+ import { CreateOfferArgs } from "./types";
5
+
6
+ export const bosonOfferHandlerIface = new Interface(abis.IBosonOfferHandlerABI);
7
+
8
+ export function getCreatedOfferIdFromLogs(logs: Log[]) {
9
+ const parsedLogs = logs.map((log) => parseLog(log.data, log.topics));
10
+
11
+ const [offerCreatedLog] = parsedLogs.filter(
12
+ (log) => log.name === "OfferCreated"
13
+ );
14
+
15
+ if (!offerCreatedLog) {
16
+ return null;
17
+ }
18
+
19
+ return String(offerCreatedLog.args.offerId);
20
+ }
21
+
22
+ export function parseLog(data: string, topics: string[]) {
23
+ return bosonOfferHandlerIface.parseLog({ data, topics });
24
+ }
25
+
26
+ export function encodeCreateOffer(args: CreateOfferArgs) {
27
+ return bosonOfferHandlerIface.encodeFunctionData("createOffer", [
28
+ createOfferArgsToStruct(args)
29
+ ]);
30
+ }
31
+
32
+ export function createOfferArgsToStruct(
33
+ args: CreateOfferArgs
34
+ ): Partial<OfferStruct> {
35
+ const {
36
+ exchangeToken,
37
+ seller,
38
+ validFromDateInMS,
39
+ validUntilDateInMS,
40
+ redeemableDateInMS,
41
+ fulfillmentPeriodDurationInMS,
42
+ voucherValidDurationInMS,
43
+ ...restArgs
44
+ } = args;
45
+
46
+ return {
47
+ id: "0",
48
+ ...restArgs,
49
+ exchangeToken: getAddress(exchangeToken),
50
+ seller: getAddress(seller),
51
+ validFromDate: utils.timestamp.msToSec(validFromDateInMS),
52
+ validUntilDate: utils.timestamp.msToSec(validUntilDateInMS),
53
+ redeemableDate: utils.timestamp.msToSec(redeemableDateInMS),
54
+ fulfillmentPeriodDuration: utils.timestamp.msToSec(
55
+ fulfillmentPeriodDurationInMS
56
+ ),
57
+ voucherValidDuration: utils.timestamp.msToSec(voucherValidDurationInMS)
58
+ };
59
+ }
@@ -0,0 +1,105 @@
1
+ import { BigNumberish } from "@ethersproject/bignumber";
2
+ import { fetchSubgraph, MultiQueryOpts } from "../utils/subgraph";
3
+ import { RawOfferFromSubgraph } from "./types";
4
+
5
+ export const offerFieldsFragment = `
6
+ fragment offerFields on Offer {
7
+ id
8
+ createdAt
9
+ price
10
+ deposit
11
+ penalty
12
+ quantity
13
+ validFromDate
14
+ validUntilDate
15
+ redeemableDate
16
+ fulfillmentPeriodDuration
17
+ voucherValidDuration
18
+ metadataUri
19
+ metadataHash
20
+ voidedAt
21
+ seller {
22
+ address
23
+ }
24
+ exchangeToken {
25
+ address
26
+ decimals
27
+ name
28
+ symbol
29
+ }
30
+ metadata {
31
+ name
32
+ description
33
+ externalUrl
34
+ schemaUrl
35
+ type
36
+ }
37
+ }
38
+ `;
39
+
40
+ export const getOfferByIdQuery = `
41
+ query GetOfferById($offerId: ID!) {
42
+ offer(id: $offerId) {
43
+ ...offerFields
44
+ }
45
+ }
46
+ ${offerFieldsFragment}
47
+ `;
48
+
49
+ export async function getOfferById(
50
+ subgraphUrl: string,
51
+ offerId: BigNumberish
52
+ ): Promise<RawOfferFromSubgraph> {
53
+ const { offer } = await fetchSubgraph<{ offer: RawOfferFromSubgraph }>(
54
+ subgraphUrl,
55
+ getOfferByIdQuery,
56
+ { offerId: offerId.toString() }
57
+ );
58
+
59
+ return offer;
60
+ }
61
+
62
+ export const getAllOffersOfSellerQuery = `
63
+ query GetAllOffersOfSellerQuery(
64
+ $seller: ID!,
65
+ $first: Int,
66
+ $skip: Int,
67
+ $orderBy: String,
68
+ $orderDirection: String
69
+ ) {
70
+ seller(id: $seller) {
71
+ offers(
72
+ first: $first
73
+ skip: $skip
74
+ orderBy: $orderBy
75
+ orderDirection: $orderDirection
76
+ ) {
77
+ ...offerFields
78
+ }
79
+ }
80
+ }
81
+ ${offerFieldsFragment}
82
+ `;
83
+
84
+ export async function getAllOffersOfSeller(
85
+ subgraphUrl: string,
86
+ sellerAddress: string,
87
+ opts: MultiQueryOpts = {}
88
+ ): Promise<RawOfferFromSubgraph[]> {
89
+ const { seller } = await fetchSubgraph<{
90
+ seller: { offers: RawOfferFromSubgraph[] };
91
+ }>(subgraphUrl, getAllOffersOfSellerQuery, {
92
+ seller: sellerAddress.toLowerCase(),
93
+ first: 100,
94
+ skip: 0,
95
+ orderBy: "createdAt",
96
+ orderDirection: "desc",
97
+ ...opts
98
+ });
99
+
100
+ if (!seller) {
101
+ return [];
102
+ }
103
+
104
+ return seller.offers;
105
+ }
@@ -0,0 +1,34 @@
1
+ export { CreateOfferArgs } from "@bosonprotocol/common";
2
+
3
+ export type RawOfferFromSubgraph = {
4
+ id: string;
5
+ createdAt: string;
6
+ price: string;
7
+ deposit: string;
8
+ penalty: string;
9
+ quantity: string;
10
+ validFromDate: string;
11
+ validUntilDate: string;
12
+ redeemableDate: string;
13
+ fulfillmentPeriodDuration: string;
14
+ voucherValidDuration: string;
15
+ metadataUri: string;
16
+ metadataHash: string;
17
+ voidedAt: null | string;
18
+ seller: {
19
+ address: string;
20
+ };
21
+ exchangeToken: {
22
+ address: string;
23
+ decimals: string;
24
+ name: string;
25
+ symbol: string;
26
+ };
27
+ metadata: null | {
28
+ name: string;
29
+ description: string;
30
+ externalUrl: string;
31
+ schemaUrl: string;
32
+ type: string;
33
+ };
34
+ };
@@ -0,0 +1,14 @@
1
+ export class FetchError extends Error {
2
+ statusCode?: number;
3
+ statusText?: string;
4
+
5
+ constructor(args: {
6
+ message?: string;
7
+ statusCode?: number;
8
+ statusText?: string;
9
+ }) {
10
+ super(args.message);
11
+ this.statusCode = args.statusCode;
12
+ this.statusText = args.statusText;
13
+ }
14
+ }
@@ -0,0 +1,43 @@
1
+ import fetch from "cross-fetch";
2
+ import { FetchError } from "./errors";
3
+
4
+ export type MultiQueryOpts = Partial<{
5
+ first: number;
6
+ skip: number;
7
+ orderBy: string;
8
+ orderDirection: "asc" | "desc";
9
+ }>;
10
+
11
+ export async function fetchSubgraph<T>(
12
+ subgraphUrl: string,
13
+ query: string,
14
+ variables?: Record<string, unknown>
15
+ ): Promise<T> {
16
+ const response = await fetch(subgraphUrl, {
17
+ method: "POST",
18
+ headers: {
19
+ "Content-Type": "application/json"
20
+ },
21
+ body: JSON.stringify({
22
+ query,
23
+ variables
24
+ })
25
+ });
26
+
27
+ if (!response.ok) {
28
+ throw new FetchError({
29
+ message: `Failed to fetch: ${response.status} ${response.statusText}`,
30
+ statusCode: response.status,
31
+ statusText: response.statusText
32
+ });
33
+ }
34
+
35
+ const body = await response.json();
36
+ const { data = {}, errors = [] } = body || {};
37
+
38
+ if (errors.length > 0) {
39
+ throw new Error(`GraphQL errors: ${JSON.stringify(errors)}`);
40
+ }
41
+
42
+ return data as T;
43
+ }