@turtleclub/hooks 0.5.0-beta.1 → 0.5.0-beta.10

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 (41) hide show
  1. package/dist/index.cjs +438 -54
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +405 -51
  4. package/dist/index.js.map +1 -1
  5. package/package.json +2 -2
  6. package/src/v2/deposits/api.ts +44 -0
  7. package/src/v2/deposits/hooks.ts +17 -0
  8. package/src/v2/deposits/index.ts +17 -0
  9. package/src/v2/deposits/queries.ts +10 -0
  10. package/src/v2/deposits/schemas.ts +110 -0
  11. package/src/v2/distributors/api.ts +28 -0
  12. package/src/v2/distributors/hooks.ts +15 -0
  13. package/src/v2/distributors/index.ts +11 -0
  14. package/src/v2/distributors/schema.ts +21 -0
  15. package/src/v2/incentives/api.ts +151 -0
  16. package/src/v2/incentives/hooks.ts +77 -0
  17. package/src/v2/incentives/index.ts +28 -0
  18. package/src/v2/incentives/queries.ts +15 -0
  19. package/src/v2/incentives/schema.ts +67 -0
  20. package/src/v2/index.ts +9 -3
  21. package/src/v2/lib/api-client.ts +4 -11
  22. package/src/v2/lib/query-config.ts +13 -1
  23. package/src/v2/lib/turtle-provider.tsx +3 -3
  24. package/src/v2/liquidity-providers/api.ts +39 -0
  25. package/src/v2/liquidity-providers/hooks.ts +17 -0
  26. package/src/v2/liquidity-providers/index.ts +21 -0
  27. package/src/v2/liquidity-providers/queries.ts +14 -0
  28. package/src/v2/liquidity-providers/schema.ts +42 -0
  29. package/src/v2/organizations/index.ts +0 -0
  30. package/src/v2/products/api.ts +7 -13
  31. package/src/v2/schemas/shared.ts +16 -2
  32. package/src/v2/streams/api.ts +61 -0
  33. package/src/v2/streams/hooks.ts +46 -0
  34. package/src/v2/streams/index.ts +11 -0
  35. package/src/v2/streams/queries.ts +14 -0
  36. package/src/v2/streams/schemas.ts +132 -0
  37. package/src/v2/users/api.ts +48 -0
  38. package/src/v2/users/hooks.ts +32 -0
  39. package/src/v2/users/index.ts +13 -0
  40. package/src/v2/users/queries.ts +14 -0
  41. package/src/v2/users/schemas.ts +109 -0
package/dist/index.cjs CHANGED
@@ -22,7 +22,7 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  ApiError: () => ApiError,
24
24
  BalanceSourcePriority: () => BalanceSourcePriority,
25
- TurtleProvider: () => TurtleProvider,
25
+ TurtleHooksProvider: () => TurtleHooksProvider,
26
26
  apiClient: () => apiClient,
27
27
  approveStep: () => approveStep,
28
28
  asset: () => asset,
@@ -64,28 +64,49 @@ __export(index_exports, {
64
64
  getPortfolioBalance: () => getPortfolioBalance,
65
65
  getProducts: () => getProducts,
66
66
  getSourcePriority: () => getSourcePriority,
67
+ getStreams: () => getStreams,
68
+ getStreamsOutputSchema: () => getStreamsOutputSchema,
69
+ getStreamsQuerySchema: () => getStreamsQuerySchema,
70
+ getStreamsSupportedChains: () => getStreamsSupportedChains,
71
+ getStreamsSupportedChainsOutputSchema: () => getStreamsSupportedChainsOutputSchema,
67
72
  getSupportedChains: () => getSupportedChains,
68
73
  getSupportedTokens: () => getSupportedTokens,
74
+ getUserById: () => getUserById,
75
+ getUserByIdInputSchema: () => getUserByIdInputSchema,
76
+ getUserByIdOutputSchema: () => getUserByIdOutputSchema,
77
+ getUserPortfolio: () => getUserPortfolio,
78
+ getUserTurtlePortfolioInputSchema: () => getUserTurtlePortfolioInputSchema,
79
+ getUserTurtlePortfolioOutputSchema: () => getUserTurtlePortfolioOutputSchema,
80
+ getUserTurtlePortfolioPathSchema: () => getUserTurtlePortfolioPathSchema,
69
81
  getWalletBalances: () => getWalletBalances,
70
82
  getWidgetOpportunities: () => getWidgetOpportunities,
83
+ holdingsDataSchema: () => holdingsDataSchema,
71
84
  incentiveSchema: () => incentiveSchema,
72
85
  lendingConfigSchema: () => lendingConfigSchema,
73
86
  mergeBalancesByPriority: () => mergeBalancesByPriority,
74
87
  opportunitiesQueries: () => opportunitiesQueries,
75
88
  opportunitySchema: () => opportunitySchema,
76
89
  organizationSchema: () => organizationSchema,
90
+ paginationMetadataSchema: () => paginationMetadataSchema,
77
91
  portfolioBalanceResponseSchema: () => portfolioBalanceResponseSchema,
78
92
  portfolioHoldingsSchema: () => portfolioHoldingsSchema,
93
+ portfolioSchema: () => portfolioSchema,
79
94
  portfolioTokenSchema: () => portfolioTokenSchema,
80
95
  portfolioWalletSchema: () => portfolioWalletSchema,
81
96
  processRouteDetails: () => processRouteDetails,
82
97
  productSchema: () => productSchema,
83
98
  productsQueries: () => productsQueries,
84
99
  queries: () => queries,
100
+ requestStreamSignature: () => requestStreamSignature,
85
101
  routeToken: () => routeToken,
86
102
  routerStep: () => routerStep,
87
103
  routerSubstep: () => routerSubstep,
104
+ snapshotSchema: () => snapshotSchema,
88
105
  stepTx: () => stepTx,
106
+ streamSchema: () => streamSchema,
107
+ streamSignatureRequestInputSchema: () => streamSignatureRequestInputSchema,
108
+ streamSignatureRequestOutputSchema: () => streamSignatureRequestOutputSchema,
109
+ streamsQueries: () => streamsQueries,
89
110
  supportedChainsQueries: () => supportedChainsQueries,
90
111
  supportedChainsResponseSchema: () => supportedChainsResponseSchema,
91
112
  supportedTokenSchema: () => supportedTokenSchema,
@@ -111,16 +132,25 @@ __export(index_exports, {
111
132
  usePortfolioBalance: () => usePortfolioBalance,
112
133
  useProduct: () => useProduct,
113
134
  useProducts: () => useProducts,
135
+ useRequestStreamSignature: () => useRequestStreamSignature,
136
+ useStreamSupportedChains: () => useStreamSupportedChains,
137
+ useStreams: () => useStreams,
114
138
  useSupportedChains: () => useSupportedChains,
115
139
  useSupportedTokens: () => useSupportedTokens,
116
140
  useSwapRoute: () => useSwapRoute,
117
141
  useTokenBalance: () => useTokenBalance,
118
142
  useUpdateProduct: () => useUpdateProduct,
119
143
  useUploadProductLogo: () => useUploadProductLogo,
144
+ useUserById: () => useUserById,
145
+ useUserPortfolio: () => useUserPortfolio,
120
146
  useWidgetOpportunities: () => useWidgetOpportunities,
147
+ userEarningsSchema: () => userEarningsSchema,
148
+ userWithDetailsSchema: () => userWithDetailsSchema,
149
+ usersQueries: () => usersQueries,
121
150
  vaultConfigSchema: () => vaultConfigSchema,
122
151
  walletBalanceSchema: () => walletBalanceSchema,
123
152
  walletBalancesResponseSchema: () => walletBalancesResponseSchema,
153
+ walletDataSchema: () => walletDataSchema,
124
154
  walletEcosystemEnum: () => walletEcosystemEnum,
125
155
  widgetOpportunitiesResponseSchema: () => widgetOpportunitiesResponseSchema,
126
156
  widgetQueries: () => widgetQueries
@@ -128,14 +158,14 @@ __export(index_exports, {
128
158
  module.exports = __toCommonJS(index_exports);
129
159
 
130
160
  // src/v2/index.ts
131
- var import_query_key_factory12 = require("@lukemorales/query-key-factory");
161
+ var import_query_key_factory14 = require("@lukemorales/query-key-factory");
132
162
 
133
163
  // src/v2/opportunities/queries.ts
134
164
  var import_query_key_factory = require("@lukemorales/query-key-factory");
135
165
 
136
166
  // src/v2/lib/api-client.ts
137
- var API_BASE_URL = "https://api.turtle.club";
138
- var EARN_BASE_URL = "https://earn.turtle.club";
167
+ var API_BASE_URL = "https://api.turtle.xyz";
168
+ var EARN_BASE_URL = "https://earn.turtle.xyz";
139
169
  var ApiError = class extends Error {
140
170
  constructor(message, status, response) {
141
171
  super(message);
@@ -216,11 +246,7 @@ var ApiClient = class _ApiClient {
216
246
  if (error instanceof ApiError) {
217
247
  throw error;
218
248
  }
219
- throw new ApiError(
220
- error instanceof Error ? error.message : "Unknown error",
221
- 0,
222
- error
223
- );
249
+ throw new ApiError(error instanceof Error ? error.message : "Unknown error", 0, error);
224
250
  }
225
251
  }
226
252
  };
@@ -247,7 +273,10 @@ var tokenSchema = import_zod.z.object({
247
273
  decimals: import_zod.z.number(),
248
274
  logoUrl: import_zod.z.string().optional(),
249
275
  isNative: import_zod.z.boolean(),
250
- priceUsd: import_zod.z.number().optional()
276
+ priceUsd: import_zod.z.number().optional(),
277
+ price: import_zod.z.string().optional(),
278
+ amount: import_zod.z.string().optional(),
279
+ rawAmount: import_zod.z.string().optional()
251
280
  });
252
281
  var organizationSchema = import_zod.z.object({
253
282
  id: import_zod.z.string(),
@@ -320,8 +349,8 @@ var incentiveSchema = import_zod.z.object({
320
349
  tokenSupplyAllocation: import_zod.z.number().nullable(),
321
350
  yield: import_zod.z.number().nullable()
322
351
  });
323
- var opportunityTypeEnum = import_zod.z.enum(["vault", "lending", "staking"]);
324
- var opportunityStatusEnum = import_zod.z.enum(["active", "paused", "deprecated"]);
352
+ var opportunityTypeEnum = import_zod.z.enum(["vault", "lending", "staking", "stablecoin", ""]);
353
+ var opportunityStatusEnum = import_zod.z.enum(["active", "paused", "deprecated", "draft", "ended"]);
325
354
  var opportunitySchema = import_zod.z.object({
326
355
  id: import_zod.z.string().uuid().optional(),
327
356
  name: import_zod.z.string(),
@@ -359,6 +388,14 @@ var opportunitySchema = import_zod.z.object({
359
388
  exposure: import_zod.z.array(import_zod.z.string()),
360
389
  explorerUrl: import_zod.z.string().nullable()
361
390
  });
391
+ var paginationMetadataSchema = import_zod.z.object({
392
+ page: import_zod.z.number().int().min(1).catch(1),
393
+ limit: import_zod.z.number().int().min(1).max(100),
394
+ total: import_zod.z.number().int().min(0),
395
+ total_pages: import_zod.z.number().int().min(1),
396
+ has_next: import_zod.z.boolean(),
397
+ has_previous: import_zod.z.boolean()
398
+ });
362
399
 
363
400
  // src/v2/opportunities/schema.ts
364
401
  var import_zod2 = require("zod");
@@ -805,7 +842,7 @@ async function getProducts(filters) {
805
842
  const params = new URLSearchParams();
806
843
  if (filters?.organizationId) params.append("organizationId", filters.organizationId);
807
844
  const queryString = params.toString();
808
- const endpoint = `/admin/products${queryString ? `?${queryString}` : ""}`;
845
+ const endpoint = `/turtle/products${queryString ? `?${queryString}` : ""}`;
809
846
  const data = await apiClient.fetch(endpoint, {
810
847
  method: "GET"
811
848
  });
@@ -817,7 +854,7 @@ async function getProducts(filters) {
817
854
  return result.data;
818
855
  }
819
856
  async function getProduct(id) {
820
- const endpoint = `/admin/products/${id}`;
857
+ const endpoint = `/turtle/products/${id}`;
821
858
  const data = await apiClient.fetch(endpoint, {
822
859
  method: "GET"
823
860
  });
@@ -984,13 +1021,180 @@ var widgetQueries = (0, import_query_key_factory8.createQueryKeys)("widget", {
984
1021
  })
985
1022
  });
986
1023
 
987
- // src/v2/supported-chains/queries.ts
1024
+ // src/v2/streams/queries.ts
988
1025
  var import_query_key_factory9 = require("@lukemorales/query-key-factory");
989
1026
 
990
- // src/v2/supported-chains/schema.ts
1027
+ // src/v2/streams/schemas.ts
991
1028
  var import_zod10 = require("zod");
992
- var supportedChainsResponseSchema = import_zod10.z.object({
993
- chains: import_zod10.z.array(chainSchema)
1029
+ var snapshotSchema = import_zod10.z.object({
1030
+ amountDistributed: import_zod10.z.string(),
1031
+ createdAt: import_zod10.z.string().datetime(),
1032
+ rootHash: import_zod10.z.string().nullable(),
1033
+ timestamp: import_zod10.z.string().datetime(),
1034
+ updatedAt: import_zod10.z.string().datetime(),
1035
+ userCount: import_zod10.z.number().optional()
1036
+ });
1037
+ var customArgsTokensPerUsdSchema = import_zod10.z.object({
1038
+ tokensPerUSD: import_zod10.z.string(),
1039
+ targetChainId: import_zod10.z.number(),
1040
+ targetTokenAddress: import_zod10.z.string()
1041
+ });
1042
+ var customArgsAprSchema = import_zod10.z.object({
1043
+ apr: import_zod10.z.string(),
1044
+ targetChainId: import_zod10.z.number(),
1045
+ targetTokenAddress: import_zod10.z.string()
1046
+ });
1047
+ var streamSchema = import_zod10.z.object({
1048
+ admin: import_zod10.z.string(),
1049
+ chainId: import_zod10.z.number(),
1050
+ chargedFee: import_zod10.z.string(),
1051
+ contractAddress: import_zod10.z.string(),
1052
+ createdAt: import_zod10.z.string().datetime(),
1053
+ customArgs: import_zod10.z.union([customArgsTokensPerUsdSchema, customArgsAprSchema]),
1054
+ deletedAt: import_zod10.z.string().datetime().nullable(),
1055
+ endTimestamp: import_zod10.z.string().datetime(),
1056
+ finalizationTimestamp: import_zod10.z.string().datetime(),
1057
+ id: import_zod10.z.string().uuid(),
1058
+ isPaused: import_zod10.z.boolean(),
1059
+ lastSnapshot: snapshotSchema.nullable(),
1060
+ orgId: import_zod10.z.string().uuid(),
1061
+ rewardToken: import_zod10.z.string(),
1062
+ snapshots: import_zod10.z.array(snapshotSchema).optional(),
1063
+ startTimestamp: import_zod10.z.string().datetime(),
1064
+ strategy: import_zod10.z.string(),
1065
+ totalAmount: import_zod10.z.string(),
1066
+ type: import_zod10.z.number(),
1067
+ updatedAt: import_zod10.z.string().datetime(),
1068
+ userId: import_zod10.z.string().uuid()
1069
+ });
1070
+ var getStreamsOutputSchema = import_zod10.z.object({
1071
+ streams: import_zod10.z.array(streamSchema)
1072
+ });
1073
+ var getStreamsSupportedChainsOutputSchema = import_zod10.z.object({
1074
+ success: import_zod10.z.boolean(),
1075
+ chains: import_zod10.z.array(
1076
+ import_zod10.z.object({
1077
+ id: import_zod10.z.string(),
1078
+ name: import_zod10.z.string(),
1079
+ slug: import_zod10.z.string(),
1080
+ chainId: import_zod10.z.number(),
1081
+ logoUrl: import_zod10.z.string(),
1082
+ ecosystem: import_zod10.z.string(),
1083
+ status: import_zod10.z.string(),
1084
+ explorerUrl: import_zod10.z.string(),
1085
+ campaignFactory: import_zod10.z.string()
1086
+ // Address as string
1087
+ })
1088
+ )
1089
+ });
1090
+ var streamSignatureRequestInputSchema = import_zod10.z.object({
1091
+ campaignType: import_zod10.z.number(),
1092
+ chainId: import_zod10.z.number(),
1093
+ customArgs: import_zod10.z.intersection(
1094
+ import_zod10.z.object({
1095
+ targetChainId: import_zod10.z.number(),
1096
+ targetTokenAddress: import_zod10.z.string()
1097
+ }),
1098
+ import_zod10.z.union([import_zod10.z.object({ tokensPerUsd: import_zod10.z.string() }), import_zod10.z.object({ apr: import_zod10.z.string() })])
1099
+ ),
1100
+ endTimestamp: import_zod10.z.string(),
1101
+ finalizationTimestamp: import_zod10.z.string(),
1102
+ rewardToken: import_zod10.z.string(),
1103
+ startTimestamp: import_zod10.z.string(),
1104
+ totalAmount: import_zod10.z.string(),
1105
+ walletAddress: import_zod10.z.string()
1106
+ });
1107
+ var streamSignatureRequestOutputSchema = import_zod10.z.object({
1108
+ success: import_zod10.z.boolean(),
1109
+ message: import_zod10.z.string(),
1110
+ txParams: import_zod10.z.object({
1111
+ chainId: import_zod10.z.number(),
1112
+ sender: import_zod10.z.string(),
1113
+ params: import_zod10.z.object({
1114
+ params: import_zod10.z.object({
1115
+ UserId: import_zod10.z.array(import_zod10.z.number()),
1116
+ OrgId: import_zod10.z.array(import_zod10.z.number()),
1117
+ CampaignType: import_zod10.z.number(),
1118
+ RewardToken: import_zod10.z.string(),
1119
+ TotalAmount: import_zod10.z.number(),
1120
+ FeeBps: import_zod10.z.number(),
1121
+ StartTimestamp: import_zod10.z.number(),
1122
+ EndTimestamp: import_zod10.z.number(),
1123
+ FinalizationTimestamp: import_zod10.z.number(),
1124
+ CampaignData: import_zod10.z.string()
1125
+ }),
1126
+ signature: import_zod10.z.string(),
1127
+ salt: import_zod10.z.string(),
1128
+ deadline: import_zod10.z.number()
1129
+ })
1130
+ })
1131
+ });
1132
+ var getStreamsQuerySchema = import_zod10.z.object({
1133
+ streamId: import_zod10.z.string().optional(),
1134
+ userId: import_zod10.z.string().optional(),
1135
+ organizationId: import_zod10.z.string().optional(),
1136
+ withSnapshots: import_zod10.z.boolean().optional(),
1137
+ usersCount: import_zod10.z.boolean().optional()
1138
+ });
1139
+
1140
+ // src/v2/streams/api.ts
1141
+ async function getStreams(query) {
1142
+ const params = new URLSearchParams();
1143
+ if (query?.streamId) params.set("id", query.streamId);
1144
+ if (query?.userId) params.set("userId", query.userId);
1145
+ if (query?.organizationId) params.set("organizationId", query.organizationId);
1146
+ if (query?.withSnapshots) params.append("withSnapshots", "true");
1147
+ if (query?.usersCount && query?.withSnapshots) params.append("usersCount", "true");
1148
+ const queryString = params.toString();
1149
+ const endpoint = `/streams${queryString ? `?${queryString}` : ""}`;
1150
+ const data = await apiClient.fetch(endpoint, { method: "GET" });
1151
+ const result = getStreamsOutputSchema.safeParse(data);
1152
+ if (!result.success) {
1153
+ throw new Error(`Failed to parse streams: ${result.error.message}`);
1154
+ }
1155
+ return result.data.streams;
1156
+ }
1157
+ async function getStreamsSupportedChains() {
1158
+ const endpoint = "/streams/supported_chains";
1159
+ const data = await apiClient.fetch(endpoint, { method: "GET" });
1160
+ const result = getStreamsSupportedChainsOutputSchema.safeParse(data);
1161
+ if (!result.success) {
1162
+ throw new Error(`Failed to parse supported chains: ${result.error.message}`);
1163
+ }
1164
+ return result.data.chains;
1165
+ }
1166
+ async function requestStreamSignature(organizationId, input) {
1167
+ const endpoint = `/streams/request_signature/${organizationId}`;
1168
+ const data = await apiClient.fetch(endpoint, {
1169
+ method: "POST",
1170
+ body: input
1171
+ });
1172
+ const result = streamSignatureRequestOutputSchema.safeParse(data);
1173
+ if (!result.success) {
1174
+ throw new Error(`Failed to parse signature response: ${result.error.message}`);
1175
+ }
1176
+ return result.data;
1177
+ }
1178
+
1179
+ // src/v2/streams/queries.ts
1180
+ var streamsQueries = (0, import_query_key_factory9.createQueryKeys)("streams", {
1181
+ list: (query) => ({
1182
+ queryKey: [query ?? "all"],
1183
+ queryFn: () => getStreams(query)
1184
+ }),
1185
+ supportedChains: {
1186
+ queryKey: null,
1187
+ queryFn: () => getStreamsSupportedChains()
1188
+ }
1189
+ });
1190
+
1191
+ // src/v2/supported-chains/queries.ts
1192
+ var import_query_key_factory10 = require("@lukemorales/query-key-factory");
1193
+
1194
+ // src/v2/supported-chains/schema.ts
1195
+ var import_zod11 = require("zod");
1196
+ var supportedChainsResponseSchema = import_zod11.z.object({
1197
+ chains: import_zod11.z.array(chainSchema)
994
1198
  });
995
1199
 
996
1200
  // src/v2/supported-chains/api.ts
@@ -1008,7 +1212,7 @@ async function getSupportedChains(options) {
1008
1212
  }
1009
1213
 
1010
1214
  // src/v2/supported-chains/queries.ts
1011
- var supportedChainsQueries = (0, import_query_key_factory9.createQueryKeys)("supportedChains", {
1215
+ var supportedChainsQueries = (0, import_query_key_factory10.createQueryKeys)("supportedChains", {
1012
1216
  all: {
1013
1217
  queryKey: null,
1014
1218
  queryFn: () => getSupportedChains()
@@ -1016,18 +1220,18 @@ var supportedChainsQueries = (0, import_query_key_factory9.createQueryKeys)("sup
1016
1220
  });
1017
1221
 
1018
1222
  // src/v2/supported-tokens/queries.ts
1019
- var import_query_key_factory10 = require("@lukemorales/query-key-factory");
1223
+ var import_query_key_factory11 = require("@lukemorales/query-key-factory");
1020
1224
 
1021
1225
  // src/v2/supported-tokens/schema.ts
1022
- var import_zod11 = require("zod");
1226
+ var import_zod12 = require("zod");
1023
1227
  var supportedTokenSchema = tokenSchema.extend({
1024
- active: import_zod11.z.boolean()
1228
+ active: import_zod12.z.boolean()
1025
1229
  });
1026
- var supportedTokensResponseSchema = import_zod11.z.object({
1027
- tokens: import_zod11.z.array(supportedTokenSchema),
1028
- total: import_zod11.z.number().optional(),
1029
- limit: import_zod11.z.number().optional(),
1030
- page: import_zod11.z.number().optional()
1230
+ var supportedTokensResponseSchema = import_zod12.z.object({
1231
+ tokens: import_zod12.z.array(supportedTokenSchema),
1232
+ total: import_zod12.z.number().optional(),
1233
+ limit: import_zod12.z.number().optional(),
1234
+ page: import_zod12.z.number().optional()
1031
1235
  });
1032
1236
 
1033
1237
  // src/v2/supported-tokens/api.ts
@@ -1051,13 +1255,121 @@ async function getSupportedTokens(filters, options) {
1051
1255
  }
1052
1256
 
1053
1257
  // src/v2/supported-tokens/queries.ts
1054
- var supportedTokensQueries = (0, import_query_key_factory10.createQueryKeys)("supportedTokens", {
1258
+ var supportedTokensQueries = (0, import_query_key_factory11.createQueryKeys)("supportedTokens", {
1055
1259
  list: (filters) => ({
1056
1260
  queryKey: [filters],
1057
1261
  queryFn: () => getSupportedTokens(filters)
1058
1262
  })
1059
1263
  });
1060
1264
 
1265
+ // src/v2/users/queries.ts
1266
+ var import_query_key_factory12 = require("@lukemorales/query-key-factory");
1267
+
1268
+ // src/v2/users/schemas.ts
1269
+ var import_zod13 = require("zod");
1270
+ var walletDataSchema = import_zod13.z.object({
1271
+ address: import_zod13.z.string(),
1272
+ totalAmountInUSD: import_zod13.z.string(),
1273
+ tokens: import_zod13.z.array(tokenSchema)
1274
+ });
1275
+ var holdingsDataSchema = import_zod13.z.object({
1276
+ totalAmountInUSD: import_zod13.z.string(),
1277
+ chains: import_zod13.z.array(chainSchema).nullish(),
1278
+ wallets: import_zod13.z.array(walletDataSchema).nullish()
1279
+ });
1280
+ var userEarningsSchema = import_zod13.z.object({
1281
+ productId: import_zod13.z.string().uuid(),
1282
+ value: import_zod13.z.number(),
1283
+ referralsEarnings: import_zod13.z.number().nullish(),
1284
+ rewardName: import_zod13.z.string().nullish(),
1285
+ rewardType: import_zod13.z.string().nullish()
1286
+ });
1287
+ var portfolioSchema = import_zod13.z.object({
1288
+ productsEarnings: import_zod13.z.array(userEarningsSchema),
1289
+ holdings: holdingsDataSchema.nullish()
1290
+ });
1291
+ var holdingInfoSchema = import_zod13.z.object({
1292
+ amount: import_zod13.z.number(),
1293
+ usdValue: import_zod13.z.number(),
1294
+ token: tokenSchema.nullish()
1295
+ });
1296
+ var walletInfoSchema = import_zod13.z.object({
1297
+ address: import_zod13.z.string().nullish(),
1298
+ ecosystem: import_zod13.z.string().nullish(),
1299
+ isMain: import_zod13.z.boolean().nullish(),
1300
+ holdings: import_zod13.z.array(holdingInfoSchema).nullish()
1301
+ });
1302
+ var userWithDetailsSchema = import_zod13.z.object({
1303
+ id: import_zod13.z.string(),
1304
+ email: import_zod13.z.string().nullable(),
1305
+ username: import_zod13.z.string().nullish(),
1306
+ firstName: import_zod13.z.string().nullish(),
1307
+ lastName: import_zod13.z.string().nullish(),
1308
+ avatarUrl: import_zod13.z.string().nullish(),
1309
+ telegramHandle: import_zod13.z.string().nullish(),
1310
+ xUsername: import_zod13.z.string().nullish(),
1311
+ role: import_zod13.z.string(),
1312
+ createdAt: import_zod13.z.string(),
1313
+ updatedAt: import_zod13.z.string(),
1314
+ tags: import_zod13.z.array(import_zod13.z.string()).nullish(),
1315
+ wallets: import_zod13.z.array(walletInfoSchema).nullish()
1316
+ });
1317
+ var getUserTurtlePortfolioInputSchema = import_zod13.z.object({
1318
+ userId: import_zod13.z.string().uuid()
1319
+ });
1320
+ var getUserTurtlePortfolioOutputSchema = import_zod13.z.object({
1321
+ portfolio: portfolioSchema
1322
+ });
1323
+ var getUserTurtlePortfolioPathSchema = import_zod13.z.object({
1324
+ userId: import_zod13.z.string().uuid()
1325
+ });
1326
+ var getUserByIdInputSchema = import_zod13.z.object({
1327
+ userId: import_zod13.z.string().uuid()
1328
+ });
1329
+ var getUserByIdOutputSchema = import_zod13.z.object({
1330
+ user: userWithDetailsSchema.nullable(),
1331
+ error: import_zod13.z.string().optional()
1332
+ });
1333
+
1334
+ // src/v2/users/api.ts
1335
+ async function getUserById(input) {
1336
+ console.log("input", input);
1337
+ const endpoint = `/admin/users/${input.userId}`;
1338
+ const data = await apiClient.fetch(endpoint, {
1339
+ method: "GET"
1340
+ });
1341
+ const result = getUserByIdOutputSchema.safeParse(data);
1342
+ if (result.success === false) {
1343
+ console.log("[ZOD ERROR]", result.error);
1344
+ throw new Error(`Failed to parse user: ${result.error.message}`);
1345
+ }
1346
+ return result.data;
1347
+ }
1348
+ async function getUserPortfolio(input) {
1349
+ const endpoint = `/admin/users/${input.userId}/portfolio`;
1350
+ const data = await apiClient.fetch(endpoint, {
1351
+ method: "GET"
1352
+ });
1353
+ const result = getUserTurtlePortfolioOutputSchema.safeParse(data);
1354
+ if (result.success === false) {
1355
+ console.log("[ZOD ERROR]", result.error);
1356
+ throw new Error(`Failed to parse user portfolio: ${result.error.message}`);
1357
+ }
1358
+ return result.data;
1359
+ }
1360
+
1361
+ // src/v2/users/queries.ts
1362
+ var usersQueries = (0, import_query_key_factory12.createQueryKeys)("users", {
1363
+ byId: (input) => ({
1364
+ queryKey: [input.userId],
1365
+ queryFn: () => getUserById(input)
1366
+ }),
1367
+ portfolio: (input) => ({
1368
+ queryKey: ["portfolio", input.userId],
1369
+ queryFn: () => getUserPortfolio(input)
1370
+ })
1371
+ });
1372
+
1061
1373
  // src/v2/earn-opportunities/hooks.ts
1062
1374
  var import_react_query = require("@tanstack/react-query");
1063
1375
 
@@ -1072,6 +1384,13 @@ var queryDefaults = {
1072
1384
  refetchOnWindowFocus: false
1073
1385
  // Don't refetch on tab focus
1074
1386
  };
1387
+ function createQueryOptions(queryConfig, options) {
1388
+ return {
1389
+ ...queryDefaults,
1390
+ ...queryConfig,
1391
+ ...options
1392
+ };
1393
+ }
1075
1394
 
1076
1395
  // src/v2/earn-opportunities/hooks.ts
1077
1396
  function useEarnOpportunities() {
@@ -1303,33 +1622,33 @@ var BalanceSourcePriority = /* @__PURE__ */ ((BalanceSourcePriority2) => {
1303
1622
  })(BalanceSourcePriority || {});
1304
1623
 
1305
1624
  // src/v2/balance/schema.ts
1306
- var import_zod12 = require("zod");
1307
- var portfolioTokenSchema = import_zod12.z.object({
1308
- id: import_zod12.z.string(),
1309
- address: import_zod12.z.string(),
1310
- name: import_zod12.z.string(),
1311
- symbol: import_zod12.z.string(),
1312
- decimals: import_zod12.z.number(),
1313
- isNative: import_zod12.z.boolean(),
1314
- logoUrl: import_zod12.z.string().nullable(),
1315
- amount: import_zod12.z.string(),
1625
+ var import_zod14 = require("zod");
1626
+ var portfolioTokenSchema = import_zod14.z.object({
1627
+ id: import_zod14.z.string(),
1628
+ address: import_zod14.z.string(),
1629
+ name: import_zod14.z.string(),
1630
+ symbol: import_zod14.z.string(),
1631
+ decimals: import_zod14.z.number(),
1632
+ isNative: import_zod14.z.boolean(),
1633
+ logoUrl: import_zod14.z.string().nullable(),
1634
+ amount: import_zod14.z.string(),
1316
1635
  // Portfolio-specific field (decimal format)
1317
- price: import_zod12.z.string().nullable().transform((val) => val ? parseFloat(val) : null),
1636
+ price: import_zod14.z.string().nullable().transform((val) => val ? parseFloat(val) : null),
1318
1637
  // Portfolio-specific field
1319
1638
  // Chain with optional fields to match Portfolio API response
1320
1639
  chain: chainSchema.partial().required({ chainId: true })
1321
1640
  });
1322
- var portfolioWalletSchema = import_zod12.z.object({
1323
- id: import_zod12.z.string().optional(),
1324
- address: import_zod12.z.string(),
1325
- blockchain: import_zod12.z.string().optional(),
1326
- tokens: import_zod12.z.array(portfolioTokenSchema)
1641
+ var portfolioWalletSchema = import_zod14.z.object({
1642
+ id: import_zod14.z.string().optional(),
1643
+ address: import_zod14.z.string(),
1644
+ blockchain: import_zod14.z.string().optional(),
1645
+ tokens: import_zod14.z.array(portfolioTokenSchema)
1327
1646
  });
1328
- var portfolioHoldingsSchema = import_zod12.z.object({
1329
- wallets: import_zod12.z.array(portfolioWalletSchema)
1647
+ var portfolioHoldingsSchema = import_zod14.z.object({
1648
+ wallets: import_zod14.z.array(portfolioWalletSchema)
1330
1649
  });
1331
- var portfolioBalanceResponseSchema = import_zod12.z.object({
1332
- portfolio: import_zod12.z.object({
1650
+ var portfolioBalanceResponseSchema = import_zod14.z.object({
1651
+ portfolio: import_zod14.z.object({
1333
1652
  holdings: portfolioHoldingsSchema
1334
1653
  })
1335
1654
  });
@@ -1350,8 +1669,8 @@ async function getPortfolioBalance(address, options) {
1350
1669
  }
1351
1670
 
1352
1671
  // src/v2/balance/queries.ts
1353
- var import_query_key_factory11 = require("@lukemorales/query-key-factory");
1354
- var balanceQueries = (0, import_query_key_factory11.createQueryKeys)("balance", {
1672
+ var import_query_key_factory13 = require("@lukemorales/query-key-factory");
1673
+ var balanceQueries = (0, import_query_key_factory13.createQueryKeys)("balance", {
1355
1674
  // Portfolio balance by address
1356
1675
  portfolio: (address) => ({
1357
1676
  queryKey: [address],
@@ -1799,6 +2118,21 @@ function useGeocheck(options = {}) {
1799
2118
  });
1800
2119
  }
1801
2120
 
2121
+ // src/v2/streams/hooks.ts
2122
+ var import_react_query13 = require("@tanstack/react-query");
2123
+ function useStreams({ query, ...options } = {}) {
2124
+ return (0, import_react_query13.useQuery)(createQueryOptions(streamsQueries.list(query), options));
2125
+ }
2126
+ function useStreamSupportedChains(options) {
2127
+ return (0, import_react_query13.useQuery)(createQueryOptions(streamsQueries.supportedChains, options));
2128
+ }
2129
+ function useRequestStreamSignature(options) {
2130
+ return (0, import_react_query13.useMutation)({
2131
+ mutationFn: ({ organizationId, data }) => requestStreamSignature(organizationId, data),
2132
+ ...options
2133
+ });
2134
+ }
2135
+
1802
2136
  // src/v2/swap/useSwapRoute.ts
1803
2137
  var import_react8 = require("react");
1804
2138
 
@@ -1897,10 +2231,28 @@ function useSwapRoute(isEnabled, userAddress, distributorId, options, referralCo
1897
2231
  };
1898
2232
  }
1899
2233
 
2234
+ // src/v2/users/hooks.ts
2235
+ var import_react_query14 = require("@tanstack/react-query");
2236
+ function useUserById({ userId, enabled = true }) {
2237
+ return (0, import_react_query14.useQuery)({
2238
+ ...usersQueries.byId({ userId }),
2239
+ ...queryDefaults,
2240
+ enabled
2241
+ });
2242
+ }
2243
+ function useUserPortfolio({ userId, enabled = true }) {
2244
+ const input = { userId };
2245
+ return (0, import_react_query14.useQuery)({
2246
+ ...usersQueries.portfolio(input),
2247
+ ...queryDefaults,
2248
+ enabled
2249
+ });
2250
+ }
2251
+
1900
2252
  // src/v2/lib/turtle-provider.tsx
1901
2253
  var import_react9 = require("react");
1902
2254
  var import_jsx_runtime = require("react/jsx-runtime");
1903
- function TurtleProvider({
2255
+ function TurtleHooksProvider({
1904
2256
  children,
1905
2257
  apiUrl,
1906
2258
  earnUrl,
@@ -1918,7 +2270,7 @@ function TurtleProvider({
1918
2270
  }
1919
2271
 
1920
2272
  // src/v2/index.ts
1921
- var queries = (0, import_query_key_factory12.mergeQueryKeys)(
2273
+ var queries = (0, import_query_key_factory14.mergeQueryKeys)(
1922
2274
  opportunitiesQueries,
1923
2275
  earnOpportunitiesQueries,
1924
2276
  earnRouteQueries,
@@ -1927,14 +2279,16 @@ var queries = (0, import_query_key_factory12.mergeQueryKeys)(
1927
2279
  productsQueries,
1928
2280
  ensoBalancesQueries,
1929
2281
  widgetQueries,
2282
+ streamsQueries,
1930
2283
  supportedChainsQueries,
1931
- supportedTokensQueries
2284
+ supportedTokensQueries,
2285
+ usersQueries
1932
2286
  );
1933
2287
  // Annotate the CommonJS export names for ESM import in node:
1934
2288
  0 && (module.exports = {
1935
2289
  ApiError,
1936
2290
  BalanceSourcePriority,
1937
- TurtleProvider,
2291
+ TurtleHooksProvider,
1938
2292
  apiClient,
1939
2293
  approveStep,
1940
2294
  asset,
@@ -1976,28 +2330,49 @@ var queries = (0, import_query_key_factory12.mergeQueryKeys)(
1976
2330
  getPortfolioBalance,
1977
2331
  getProducts,
1978
2332
  getSourcePriority,
2333
+ getStreams,
2334
+ getStreamsOutputSchema,
2335
+ getStreamsQuerySchema,
2336
+ getStreamsSupportedChains,
2337
+ getStreamsSupportedChainsOutputSchema,
1979
2338
  getSupportedChains,
1980
2339
  getSupportedTokens,
2340
+ getUserById,
2341
+ getUserByIdInputSchema,
2342
+ getUserByIdOutputSchema,
2343
+ getUserPortfolio,
2344
+ getUserTurtlePortfolioInputSchema,
2345
+ getUserTurtlePortfolioOutputSchema,
2346
+ getUserTurtlePortfolioPathSchema,
1981
2347
  getWalletBalances,
1982
2348
  getWidgetOpportunities,
2349
+ holdingsDataSchema,
1983
2350
  incentiveSchema,
1984
2351
  lendingConfigSchema,
1985
2352
  mergeBalancesByPriority,
1986
2353
  opportunitiesQueries,
1987
2354
  opportunitySchema,
1988
2355
  organizationSchema,
2356
+ paginationMetadataSchema,
1989
2357
  portfolioBalanceResponseSchema,
1990
2358
  portfolioHoldingsSchema,
2359
+ portfolioSchema,
1991
2360
  portfolioTokenSchema,
1992
2361
  portfolioWalletSchema,
1993
2362
  processRouteDetails,
1994
2363
  productSchema,
1995
2364
  productsQueries,
1996
2365
  queries,
2366
+ requestStreamSignature,
1997
2367
  routeToken,
1998
2368
  routerStep,
1999
2369
  routerSubstep,
2370
+ snapshotSchema,
2000
2371
  stepTx,
2372
+ streamSchema,
2373
+ streamSignatureRequestInputSchema,
2374
+ streamSignatureRequestOutputSchema,
2375
+ streamsQueries,
2001
2376
  supportedChainsQueries,
2002
2377
  supportedChainsResponseSchema,
2003
2378
  supportedTokenSchema,
@@ -2023,16 +2398,25 @@ var queries = (0, import_query_key_factory12.mergeQueryKeys)(
2023
2398
  usePortfolioBalance,
2024
2399
  useProduct,
2025
2400
  useProducts,
2401
+ useRequestStreamSignature,
2402
+ useStreamSupportedChains,
2403
+ useStreams,
2026
2404
  useSupportedChains,
2027
2405
  useSupportedTokens,
2028
2406
  useSwapRoute,
2029
2407
  useTokenBalance,
2030
2408
  useUpdateProduct,
2031
2409
  useUploadProductLogo,
2410
+ useUserById,
2411
+ useUserPortfolio,
2032
2412
  useWidgetOpportunities,
2413
+ userEarningsSchema,
2414
+ userWithDetailsSchema,
2415
+ usersQueries,
2033
2416
  vaultConfigSchema,
2034
2417
  walletBalanceSchema,
2035
2418
  walletBalancesResponseSchema,
2419
+ walletDataSchema,
2036
2420
  walletEcosystemEnum,
2037
2421
  widgetOpportunitiesResponseSchema,
2038
2422
  widgetQueries