@bosonprotocol/react-kit 0.41.0-alpha.2 → 0.41.0-alpha.4

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 (107) hide show
  1. package/dist/cjs/components/widgets/roblox/components/ConnectRoblox.js +3 -3
  2. package/dist/cjs/components/widgets/roblox/components/ConnectRoblox.js.map +1 -1
  3. package/dist/cjs/components/widgets/roblox/components/RobloxExchangesGrid.d.ts +1 -1
  4. package/dist/cjs/components/widgets/roblox/components/RobloxExchangesGrid.d.ts.map +1 -1
  5. package/dist/cjs/components/widgets/roblox/components/RobloxExchangesGrid.js.map +1 -1
  6. package/dist/cjs/components/widgets/roblox/components/RobloxProductsGrid.d.ts +1 -1
  7. package/dist/cjs/components/widgets/roblox/components/RobloxProductsGrid.d.ts.map +1 -1
  8. package/dist/cjs/components/widgets/roblox/components/RobloxProductsGrid.js +1 -1
  9. package/dist/cjs/components/widgets/roblox/components/RobloxProductsGrid.js.map +1 -1
  10. package/dist/cjs/hooks/roblox/context/RobloxProvider.js +2 -2
  11. package/dist/cjs/hooks/roblox/context/RobloxProvider.js.map +1 -1
  12. package/dist/cjs/hooks/roblox/useGetRobloxWalletAuth.d.ts +1 -1
  13. package/dist/cjs/hooks/roblox/useGetRobloxWalletAuth.d.ts.map +1 -1
  14. package/dist/cjs/hooks/roblox/useIsRobloxLoggedIn.d.ts +1 -1
  15. package/dist/cjs/hooks/roblox/useIsRobloxLoggedIn.d.ts.map +1 -1
  16. package/dist/cjs/hooks/roblox/useRobloxBackendLogin.d.ts +1 -1
  17. package/dist/cjs/hooks/roblox/useRobloxBackendLogin.d.ts.map +1 -1
  18. package/dist/cjs/hooks/roblox/useRobloxExchanges.d.ts +1 -1
  19. package/dist/cjs/hooks/roblox/useRobloxExchanges.d.ts.map +1 -1
  20. package/dist/cjs/hooks/roblox/useRobloxLocalStorage.d.ts +1 -1
  21. package/dist/cjs/hooks/roblox/useRobloxLocalStorage.d.ts.map +1 -1
  22. package/dist/cjs/hooks/roblox/useRobloxProducts.d.ts +1 -1
  23. package/dist/cjs/hooks/roblox/useRobloxProducts.d.ts.map +1 -1
  24. package/dist/cjs/hooks/useExchanges.d.ts.map +1 -1
  25. package/dist/cjs/hooks/useRenderTemplate.js +4 -6
  26. package/dist/cjs/hooks/useRenderTemplate.js.map +1 -1
  27. package/dist/cjs/lib/roblox/config.d.ts +11 -0
  28. package/dist/cjs/lib/roblox/config.d.ts.map +1 -0
  29. package/dist/cjs/lib/roblox/config.js +56 -0
  30. package/dist/cjs/lib/roblox/config.js.map +1 -0
  31. package/dist/cjs/lib/roblox/constants.d.ts +13 -0
  32. package/dist/cjs/lib/roblox/constants.d.ts.map +1 -0
  33. package/dist/cjs/lib/roblox/constants.js +16 -0
  34. package/dist/cjs/lib/roblox/constants.js.map +1 -0
  35. package/dist/cjs/lib/roblox/getIsOfferRobloxGated.js +2 -2
  36. package/dist/cjs/lib/roblox/getIsOfferRobloxGated.js.map +1 -1
  37. package/dist/cjs/lib/roblox/types.d.ts +86 -0
  38. package/dist/cjs/lib/roblox/types.d.ts.map +1 -0
  39. package/dist/cjs/lib/roblox/types.js +3 -0
  40. package/dist/cjs/lib/roblox/types.js.map +1 -0
  41. package/dist/cjs/lib/roblox/utils.d.ts +15 -0
  42. package/dist/cjs/lib/roblox/utils.d.ts.map +1 -0
  43. package/dist/cjs/lib/roblox/utils.js +40 -0
  44. package/dist/cjs/lib/roblox/utils.js.map +1 -0
  45. package/dist/esm/components/widgets/roblox/components/ConnectRoblox.js +1 -1
  46. package/dist/esm/components/widgets/roblox/components/ConnectRoblox.js.map +1 -1
  47. package/dist/esm/components/widgets/roblox/components/RobloxExchangesGrid.d.ts +1 -1
  48. package/dist/esm/components/widgets/roblox/components/RobloxExchangesGrid.d.ts.map +1 -1
  49. package/dist/esm/components/widgets/roblox/components/RobloxExchangesGrid.js.map +1 -1
  50. package/dist/esm/components/widgets/roblox/components/RobloxProductsGrid.d.ts +1 -1
  51. package/dist/esm/components/widgets/roblox/components/RobloxProductsGrid.d.ts.map +1 -1
  52. package/dist/esm/components/widgets/roblox/components/RobloxProductsGrid.js +1 -1
  53. package/dist/esm/components/widgets/roblox/components/RobloxProductsGrid.js.map +1 -1
  54. package/dist/esm/hooks/roblox/context/RobloxProvider.js +1 -1
  55. package/dist/esm/hooks/roblox/context/RobloxProvider.js.map +1 -1
  56. package/dist/esm/hooks/roblox/useGetRobloxWalletAuth.d.ts +1 -1
  57. package/dist/esm/hooks/roblox/useGetRobloxWalletAuth.d.ts.map +1 -1
  58. package/dist/esm/hooks/roblox/useIsRobloxLoggedIn.d.ts +1 -1
  59. package/dist/esm/hooks/roblox/useIsRobloxLoggedIn.d.ts.map +1 -1
  60. package/dist/esm/hooks/roblox/useRobloxBackendLogin.d.ts +1 -1
  61. package/dist/esm/hooks/roblox/useRobloxBackendLogin.d.ts.map +1 -1
  62. package/dist/esm/hooks/roblox/useRobloxExchanges.d.ts +1 -1
  63. package/dist/esm/hooks/roblox/useRobloxExchanges.d.ts.map +1 -1
  64. package/dist/esm/hooks/roblox/useRobloxLocalStorage.d.ts +1 -1
  65. package/dist/esm/hooks/roblox/useRobloxLocalStorage.d.ts.map +1 -1
  66. package/dist/esm/hooks/roblox/useRobloxProducts.d.ts +1 -1
  67. package/dist/esm/hooks/roblox/useRobloxProducts.d.ts.map +1 -1
  68. package/dist/esm/hooks/useExchanges.d.ts.map +1 -1
  69. package/dist/esm/hooks/useRenderTemplate.js +4 -6
  70. package/dist/esm/hooks/useRenderTemplate.js.map +1 -1
  71. package/dist/esm/lib/roblox/config.d.ts +11 -0
  72. package/dist/esm/lib/roblox/config.d.ts.map +1 -0
  73. package/dist/esm/lib/roblox/config.js +53 -0
  74. package/dist/esm/lib/roblox/config.js.map +1 -0
  75. package/dist/esm/lib/roblox/constants.d.ts +13 -0
  76. package/dist/esm/lib/roblox/constants.d.ts.map +1 -0
  77. package/dist/esm/lib/roblox/constants.js +13 -0
  78. package/dist/esm/lib/roblox/constants.js.map +1 -0
  79. package/dist/esm/lib/roblox/getIsOfferRobloxGated.js +1 -1
  80. package/dist/esm/lib/roblox/getIsOfferRobloxGated.js.map +1 -1
  81. package/dist/esm/lib/roblox/types.d.ts +86 -0
  82. package/dist/esm/lib/roblox/types.d.ts.map +1 -0
  83. package/dist/esm/lib/roblox/types.js +2 -0
  84. package/dist/esm/lib/roblox/types.js.map +1 -0
  85. package/dist/esm/lib/roblox/utils.d.ts +15 -0
  86. package/dist/esm/lib/roblox/utils.d.ts.map +1 -0
  87. package/dist/esm/lib/roblox/utils.js +36 -0
  88. package/dist/esm/lib/roblox/utils.js.map +1 -0
  89. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  90. package/package.json +5 -5
  91. package/src/components/widgets/roblox/components/ConnectRoblox.tsx +1 -1
  92. package/src/components/widgets/roblox/components/ProductsRoblox.tsx +1 -1
  93. package/src/components/widgets/roblox/components/RobloxExchangesGrid.tsx +2 -2
  94. package/src/components/widgets/roblox/components/RobloxProductsGrid.tsx +3 -3
  95. package/src/hooks/roblox/context/RobloxProvider.tsx +1 -1
  96. package/src/hooks/roblox/useGetRobloxWalletAuth.ts +1 -1
  97. package/src/hooks/roblox/useIsRobloxLoggedIn.ts +1 -1
  98. package/src/hooks/roblox/useRobloxBackendLogin.ts +1 -1
  99. package/src/hooks/roblox/useRobloxExchanges.ts +1 -1
  100. package/src/hooks/roblox/useRobloxLocalStorage.ts +1 -1
  101. package/src/hooks/roblox/useRobloxProducts.ts +1 -1
  102. package/src/hooks/useRenderTemplate.ts +4 -6
  103. package/src/lib/roblox/config.ts +70 -0
  104. package/src/lib/roblox/constants.ts +15 -0
  105. package/src/lib/roblox/getIsOfferRobloxGated.ts +1 -1
  106. package/src/lib/roblox/types.ts +94 -0
  107. package/src/lib/roblox/utils.ts +57 -0
@@ -0,0 +1,94 @@
1
+ import { subgraph } from "@bosonprotocol/core-sdk";
2
+
3
+ export type RobloxClaims = {
4
+ sub: string;
5
+ name: string;
6
+ nickname?: string;
7
+ picture?: string;
8
+ preferred_username?: string;
9
+ email?: string;
10
+ profile?: string;
11
+ };
12
+
13
+ export type RobloxUser = Omit<RobloxClaims, "sub"> & { userId: string };
14
+
15
+ /**
16
+ * Product Metadata subgraph, with related Roblox assetId
17
+ */
18
+ export type BosonRobloxProduct =
19
+ subgraph.ProductV1MetadataEntityFieldsFragment & {
20
+ robloxAssetId: string;
21
+ };
22
+
23
+ export type BosonRobloxExchange = subgraph.ExchangeFieldsFragment & {
24
+ robloxAssetId: string;
25
+ };
26
+
27
+ export type RobloxInventoryItem = {
28
+ path: string;
29
+ assetDetails: {
30
+ assetId: string;
31
+ };
32
+ };
33
+
34
+ export type RobloxAsset = {
35
+ productType: string;
36
+ assetId: string;
37
+ productId: number;
38
+ name: string;
39
+ description: string;
40
+ iconImageAssetId: number;
41
+ assetTypeId: number;
42
+ isLimited: boolean;
43
+ isLimitedUnique: boolean;
44
+ };
45
+
46
+ export type GetInfoResponse = {
47
+ userId: string;
48
+ claims: RobloxClaims;
49
+ inventoryItems: RobloxInventoryItem[];
50
+ };
51
+
52
+ export type GetAssetDetailsResponse = RobloxAsset;
53
+
54
+ export type GetLoggedInResponse = {
55
+ isLoggedIn: boolean;
56
+ claims: RobloxClaims | null;
57
+ nonce: string | null;
58
+ };
59
+
60
+ export type GetWalletAuthResponse = {
61
+ walletAuth: boolean;
62
+ address: string | null;
63
+ sellerId: string | null;
64
+ };
65
+
66
+ export type PendingRequest = { txHash: string; txId: string };
67
+
68
+ /**
69
+ * A Product can be:
70
+ * - Unknown: the user is not authenticated on roblox
71
+ * - Not available: the roblox user is authenticated and it doesn't have the required Roblox asset
72
+ * - Potentially: the roblox user is authenticated and it has the required Roblox asset, the user wallet is not known yet
73
+ * - Pending: the roblox user is authenticated and it has the required Roblox asset and their wallet doesn't own the required NFT yet (minting is pending)
74
+ * - Available: the roblox user is authenticated and it has the required Roblox asset and their wallet owns the required NFT
75
+ * */
76
+ export type ProductAvailabilityStatus =
77
+ | { status: "UNKNOWN" | "POTENTIALLY" | "NOT_AVAILABLE" | "AVAILABLE" }
78
+ | { status: "PENDING"; pendingData: PendingRequest };
79
+
80
+ export type BosonRobloxProductWithAvailability = BosonRobloxProduct & {
81
+ availability: ProductAvailabilityStatus;
82
+ };
83
+
84
+ export type HasMore = true | false | "maybe";
85
+
86
+ export type GetProductsResponse = {
87
+ products: BosonRobloxProductWithAvailability[];
88
+ hasMore: HasMore;
89
+ };
90
+
91
+ export type GetExchangesResponse = {
92
+ exchanges: BosonRobloxExchange[];
93
+ hasMore: HasMore;
94
+ };
@@ -0,0 +1,57 @@
1
+ import { subgraph } from "@bosonprotocol/core-sdk";
2
+ import { ASSET_ID_ATTR_TRAIT_TYPE, ROBLOX_PRODUCT_TAG } from "./constants";
3
+ import { ConditionStruct, TokenType } from "@bosonprotocol/common";
4
+
5
+ /**
6
+ * Filter a Boson product, whether it's Roblox-related or not
7
+ * @param offerMetadata the Product Metadata object from Boson subgraph
8
+ * @param condition the ConditionStruct attached to the Boson offer
9
+ * @param nftContract address of the NFT contract used to token-gate the Roblox-Boson offer
10
+ * @param offerMetadata the Product Metadata object from Boson subgraph
11
+ * @returns false if not Roblox-related,
12
+ * otherwise returns the Roblox assetId the offer is related to
13
+ */
14
+ export function filterRobloxProduct(
15
+ offerMetadata: Pick<
16
+ subgraph.ProductV1MetadataEntityFieldsFragment,
17
+ "attributes"
18
+ > & { product: Pick<subgraph.ProductV1Product, "details_tags"> },
19
+ condition: ConditionStruct | undefined,
20
+ nftContract: string
21
+ ): string | false {
22
+ if (
23
+ offerMetadata.product &&
24
+ offerMetadata.product.details_tags &&
25
+ offerMetadata.product.details_tags
26
+ .map((t) => t.toLowerCase())
27
+ .includes(ROBLOX_PRODUCT_TAG.toLowerCase())
28
+ ) {
29
+ const robloxAssetId = offerMetadata.attributes?.find(
30
+ (attr) =>
31
+ attr.traitType.toLowerCase() === ASSET_ID_ATTR_TRAIT_TYPE.toLowerCase()
32
+ )?.value;
33
+ if (
34
+ condition &&
35
+ robloxAssetId &&
36
+ checkTokenGatingCondition(condition, {
37
+ tokenId: robloxAssetId,
38
+ nftContract
39
+ })
40
+ ) {
41
+ return robloxAssetId;
42
+ }
43
+ }
44
+ return false;
45
+ }
46
+
47
+ function checkTokenGatingCondition(
48
+ condition: ConditionStruct,
49
+ expected: { tokenId: string; nftContract: string }
50
+ ): boolean {
51
+ return (
52
+ condition.minTokenId.toString() === expected.tokenId &&
53
+ condition.maxTokenId.toString() === expected.tokenId &&
54
+ condition.tokenType === TokenType.MultiToken &&
55
+ condition.tokenAddress === expected.nftContract.toLowerCase()
56
+ );
57
+ }