@hyr0-xyz/react 0.0.2 → 0.0.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.
package/dist/index.js CHANGED
@@ -1,12 +1,51 @@
1
+ // src/components/deposit-widget.tsx
2
+ import { jsx } from "react/jsx-runtime";
3
+ var DepositWidget = () => {
4
+ return /* @__PURE__ */ jsx("div", { children: "DepositWidget" });
5
+ };
6
+
7
+ // src/lib/use-use-case-mutation.ts
8
+ import { useMutation } from "@tanstack/react-query";
9
+ function useUseCaseMutation(useCase) {
10
+ const { key, execute, onError, ...restOptions } = useCase || {};
11
+ const { mutateAsync, ...mutation } = useMutation({
12
+ mutationKey: [key],
13
+ mutationFn: async (args) => {
14
+ console.log(useCase.key, args);
15
+ return execute(args);
16
+ },
17
+ onError: async (error, variables, mutationResult, context) => {
18
+ console.error(useCase.key, error);
19
+ onError && onError(error, variables, mutationResult, context);
20
+ },
21
+ ...restOptions
22
+ });
23
+ return [mutateAsync, mutation];
24
+ }
25
+
26
+ // src/hooks/use-vault.ts
27
+ import { hyroProtocol } from "@hyr0-xyz/client-js";
28
+ import { Policy, Vault } from "@hyr0-xyz/program";
29
+ import { useQuery } from "@tanstack/react-query";
30
+ import { useMemo as useMemo2 } from "react";
31
+
1
32
  // src/provider.tsx
33
+ import { createClient } from "@supabase/supabase-js";
2
34
  import { createContext, useContext, useMemo } from "react";
3
- import { jsx } from "react/jsx-runtime";
35
+ import { QueryClientProvider } from "@tanstack/react-query";
36
+ import { jsx as jsx2 } from "react/jsx-runtime";
4
37
  var HyroContext = createContext(null);
5
38
  var HyroProvider = ({ children, config }) => {
39
+ const supabaseClient = useMemo(() => {
40
+ return createClient(config.supabase.url, config.supabase.key);
41
+ }, [config.supabase.url, config.supabase.key]);
6
42
  const contextValue = useMemo(() => {
7
- return config;
8
- }, [config]);
9
- return /* @__PURE__ */ jsx(HyroContext.Provider, { value: contextValue, children });
43
+ return {
44
+ ...config,
45
+ supabase: supabaseClient
46
+ };
47
+ }, [supabaseClient, config]);
48
+ return /* @__PURE__ */ jsx2(QueryClientProvider, { client: config.queryClient, children: /* @__PURE__ */ jsx2(HyroContext.Provider, { value: contextValue, children }) });
10
49
  };
11
50
  var useHyro = () => {
12
51
  const context = useContext(HyroContext);
@@ -15,9 +54,338 @@ var useHyro = () => {
15
54
  }
16
55
  return context;
17
56
  };
57
+
58
+ // src/hooks/use-vault.ts
59
+ var useVault = (seed, options) => {
60
+ const { signer, connection } = useHyro();
61
+ const vault = useMemo2(() => {
62
+ if (!signer) return null;
63
+ return new Vault(seed, signer, Policy.AllowAny);
64
+ }, [seed, signer]);
65
+ const {
66
+ data: vaultAccount,
67
+ isLoading,
68
+ error
69
+ } = useQuery({
70
+ queryKey: ["vault", seed],
71
+ queryFn: async () => {
72
+ if (!vault) return null;
73
+ const address2 = await vault.getAddress();
74
+ const fetchingResult = await hyroProtocol.fetchVault(connection, address2);
75
+ return fetchingResult.data;
76
+ }
77
+ });
78
+ return {
79
+ account: vaultAccount,
80
+ helpers: vault,
81
+ isLoading,
82
+ error
83
+ };
84
+ };
85
+
86
+ // src/hooks/use-deposit-funds-mutation.ts
87
+ var useDepositFundsMutation = () => {
88
+ return useUseCaseMutation({
89
+ key: "depositFunds",
90
+ execute: async ({ amount, seed }) => {
91
+ const vault = useVault(seed);
92
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
93
+ return { success: true };
94
+ }
95
+ });
96
+ };
97
+
98
+ // src/hooks/use-deposit-funds.ts
99
+ import {
100
+ hyroProtocol as hyroProtocol2
101
+ } from "@hyr0-xyz/client-js";
102
+ import {
103
+ findAssociatedTokenPda,
104
+ TOKEN_PROGRAM_ADDRESS
105
+ } from "@solana-program/token";
106
+
107
+ // src/lib/transaction.ts
108
+ import {
109
+ getSetComputeUnitLimitInstruction,
110
+ getSetComputeUnitPriceInstruction
111
+ } from "@solana-program/compute-budget";
112
+ import {
113
+ address,
114
+ appendTransactionMessageInstructions,
115
+ signature as asSignature,
116
+ compileTransaction,
117
+ createTransactionMessage,
118
+ fetchJsonParsedAccount,
119
+ getBase58Decoder,
120
+ getBase64EncodedWireTransaction,
121
+ pipe,
122
+ sendAndConfirmTransactionFactory,
123
+ setTransactionMessageFeePayerSigner,
124
+ setTransactionMessageLifetimeUsingBlockhash,
125
+ signTransactionMessageWithSigners
126
+ } from "@solana/kit";
127
+ var MAX_CU_LIMIT = 14e5;
128
+ var MIN_COMPUTE_UNIT_PRICE = 3e4;
129
+ var Transaction = class {
130
+ static async fetchAddressLookupTable(rpc, addressLookupTable) {
131
+ const account = await fetchJsonParsedAccount(
132
+ rpc,
133
+ addressLookupTable
134
+ );
135
+ if (!account.exists) throw new Error("No address lookup table");
136
+ return account.data;
137
+ }
138
+ static async calculateComputeUnitPrice(instructions, computeUnitLimit) {
139
+ console.log("@@@@@ instructions", instructions);
140
+ console.log("@@@@@ computeUnitLimit", computeUnitLimit);
141
+ return MIN_COMPUTE_UNIT_PRICE;
142
+ }
143
+ static async prepare(args) {
144
+ console.log("@@@@@ prepare", args);
145
+ const { rpc, signer, instructions, simulation } = args;
146
+ const computeUnitLimit = simulation ? simulation.computeUnitLimit : MAX_CU_LIMIT;
147
+ const computeUnitPrice = await this.calculateComputeUnitPrice(
148
+ instructions,
149
+ computeUnitLimit
150
+ );
151
+ const { value: latestBlockhash } = await rpc.getLatestBlockhash({ commitment: "confirmed" }).send();
152
+ return pipe(
153
+ createTransactionMessage({ version: 0 }),
154
+ (txm) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, txm),
155
+ (txm) => setTransactionMessageFeePayerSigner(signer, txm),
156
+ (txm) => {
157
+ const setComputeUnitLimitInstruction = getSetComputeUnitLimitInstruction({ units: computeUnitLimit });
158
+ const setComputeUnitPriceInstruction = getSetComputeUnitPriceInstruction({
159
+ microLamports: computeUnitPrice
160
+ });
161
+ const ixs = [
162
+ setComputeUnitLimitInstruction,
163
+ setComputeUnitPriceInstruction,
164
+ ...instructions
165
+ ];
166
+ return appendTransactionMessageInstructions(ixs, txm);
167
+ },
168
+ async (txm) => {
169
+ return txm;
170
+ }
171
+ );
172
+ }
173
+ static async simulate(rpc, txm, failedAttempts = 0) {
174
+ const transaction = compileTransaction(txm);
175
+ const base64EncodedTransaction = getBase64EncodedWireTransaction(transaction);
176
+ const simulation = await rpc.simulateTransaction(base64EncodedTransaction, { encoding: "base64" }).send();
177
+ const {
178
+ value: { unitsConsumed }
179
+ } = simulation;
180
+ if (!unitsConsumed) {
181
+ if (failedAttempts === 3) {
182
+ throw new Error("Simulation failed");
183
+ }
184
+ console.error("No simulation units consumed. Retrying...");
185
+ const nextFailedAttempts = failedAttempts + 1;
186
+ return this.simulate(rpc, txm, nextFailedAttempts);
187
+ }
188
+ const computeUnitLimitWithReserve = Math.min(
189
+ Number(unitsConsumed * 115n / 100n),
190
+ MAX_CU_LIMIT
191
+ );
192
+ return {
193
+ computeUnitLimit: computeUnitLimitWithReserve
194
+ };
195
+ }
196
+ /**
197
+ * Recursively collect all Instructions from an InstructionPlan.
198
+ *
199
+ * @param plan InstructionPlan or array of plans (to help generic use)
200
+ * @returns Instruction[]
201
+ */
202
+ static collectInstructions(plan) {
203
+ if (Array.isArray(plan)) {
204
+ return plan.flatMap((p) => this.collectInstructions(p));
205
+ }
206
+ switch (plan.kind) {
207
+ case "single":
208
+ return [plan.instruction];
209
+ case "sequential":
210
+ case "parallel":
211
+ return plan.plans.flatMap((subplan) => this.collectInstructions(subplan));
212
+ default:
213
+ return [];
214
+ }
215
+ }
216
+ static async sendInstructionPlan(args) {
217
+ return this.send({
218
+ ...args,
219
+ instructions: this.collectInstructions(args.plan)
220
+ });
221
+ }
222
+ static async send(args) {
223
+ const txm = await this.prepare(args);
224
+ console.log("@@@@@ txm -> signing", txm);
225
+ const signedTransaction = await signTransactionMessageWithSigners(txm);
226
+ const transaction = {
227
+ ...signedTransaction,
228
+ lifetimeConstraint: txm.lifetimeConstraint
229
+ };
230
+ const signatureBytes = transaction.signatures[address(args.signer.address)];
231
+ const signature = asSignature(getBase58Decoder().decode(signatureBytes));
232
+ console.log("@@@@@ signature -> send and wait", signature);
233
+ const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
234
+ rpc: args.rpc,
235
+ rpcSubscriptions: args.subscription
236
+ });
237
+ await sendAndConfirmTransaction(
238
+ transaction,
239
+ {
240
+ skipPreflight: true,
241
+ commitment: "confirmed",
242
+ maxRetries: 0n
243
+ }
244
+ ).catch((e) => {
245
+ throw { ...e, signature };
246
+ });
247
+ if (!signatureBytes) {
248
+ throw new Error("No signature");
249
+ }
250
+ const {
251
+ value: [status]
252
+ } = await args.rpc.getSignatureStatuses([signature], {
253
+ searchTransactionHistory: true
254
+ }).send();
255
+ return {
256
+ signature,
257
+ status
258
+ };
259
+ }
260
+ };
261
+
262
+ // src/hooks/use-deposit-funds.ts
263
+ var useDepositFunds = (seed) => {
264
+ const vault = useVault(seed);
265
+ const { signer, connection, subscription } = useHyro();
266
+ return useUseCaseMutation({
267
+ key: "depositFunds",
268
+ execute: async ({ amount }) => {
269
+ if (!vault) throw new Error("Vault not found");
270
+ if (!vault.helpers) throw new Error("Vault helpers not found");
271
+ if (!vault.account) throw new Error("Vault account not found");
272
+ if (vault.isLoading) throw new Error("Vault is loading");
273
+ if (typeof vault.account === "undefined")
274
+ throw new Error("Vault not found");
275
+ if (!signer) throw new Error("Signer not found");
276
+ const { underlyingMint, shareMint } = vault.account;
277
+ const instruction = hyroProtocol2.getDepositAssetsInstruction({
278
+ vaultTokenAccount: await vault.helpers.getVaultTokenAccountPda(underlyingMint).then(([first]) => first),
279
+ senderTokenAccount: await findAssociatedTokenPda({
280
+ owner: signer.address,
281
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
282
+ mint: underlyingMint
283
+ }).then(([first]) => first),
284
+ senderShareAccount: await findAssociatedTokenPda({
285
+ owner: signer.address,
286
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
287
+ mint: shareMint
288
+ }).then(([first]) => first),
289
+ shareSignerPda: await vault.helpers.getShareSignerPda().then(([first]) => first),
290
+ shareMint,
291
+ underlyingMint,
292
+ vault: await vault.helpers.getAddress(),
293
+ feeCollectionProgram: vault.account.feeCollectionProgram,
294
+ signer,
295
+ assets: amount
296
+ });
297
+ const signature = await Transaction.send({
298
+ rpc: connection,
299
+ subscription,
300
+ signer,
301
+ instructions: [instruction]
302
+ });
303
+ return { signature };
304
+ }
305
+ });
306
+ };
307
+
308
+ // src/hooks/use-explore-vaults.ts
309
+ import { useQuery as useQuery2 } from "@tanstack/react-query";
310
+
311
+ // src/lib/transformers.ts
312
+ import { getAddressDecoder } from "@solana/addresses";
313
+ var hexToAddress = (hex) => {
314
+ try {
315
+ hex = hex.startsWith("\\x") ? hex.substring(2) : hex;
316
+ return getAddressDecoder().decode(Buffer.from(hex.substring(2), "hex"));
317
+ } catch (error) {
318
+ console.error("Error decoding address", error, hex);
319
+ return hex;
320
+ }
321
+ };
322
+
323
+ // src/hooks/use-explore-vaults.ts
324
+ var useExploreVaults = (filter) => {
325
+ const { supabase } = useHyro();
326
+ return useQuery2({
327
+ queryKey: ["vaults", filter],
328
+ queryFn: async () => {
329
+ const response = await supabase.from("vault_account").select(`*`);
330
+ if (response.error) {
331
+ throw new Error(response.error.message);
332
+ }
333
+ const sanitized = response.data.map((vault) => ({
334
+ ...vault,
335
+ policy_program: void 0,
336
+ fee_collection_program: void 0,
337
+ share_mint: void 0,
338
+ underlying_mint: void 0,
339
+ parent_vault: void 0,
340
+ __pubkey: void 0,
341
+ authority: hexToAddress(vault.authority),
342
+ feeCollectionProgram: hexToAddress(vault.fee_collection_program),
343
+ policyProgram: hexToAddress(vault.policy_program),
344
+ shareMint: hexToAddress(vault.share_mint),
345
+ underlyingMint: hexToAddress(vault.underlying_mint),
346
+ manager: vault.manager ? hexToAddress(vault.manager) : null,
347
+ parentVault: vault.parent_vault ? hexToAddress(vault.parent_vault) : null,
348
+ pubkey: hexToAddress(vault.__pubkey)
349
+ }));
350
+ return sanitized;
351
+ }
352
+ });
353
+ };
354
+
355
+ // src/errors.ts
356
+ var SdkError = class extends Error {
357
+ constructor(message) {
358
+ super(message);
359
+ this.name = "SdkError";
360
+ }
361
+ };
362
+ var SdkBadRequestError = class extends SdkError {
363
+ constructor(message) {
364
+ super(message);
365
+ this.name = "SdkBadRequestError";
366
+ }
367
+ };
368
+ var SdkUnauthorizedError = class extends SdkError {
369
+ constructor(message) {
370
+ super(message);
371
+ this.name = "SdkUnauthorizedError";
372
+ }
373
+ };
18
374
  export {
375
+ DepositWidget,
19
376
  HyroContext,
20
377
  HyroProvider,
21
- useHyro
378
+ MAX_CU_LIMIT,
379
+ MIN_COMPUTE_UNIT_PRICE,
380
+ SdkBadRequestError,
381
+ SdkError,
382
+ SdkUnauthorizedError,
383
+ Transaction,
384
+ useDepositFunds,
385
+ useDepositFundsMutation,
386
+ useExploreVaults,
387
+ useHyro,
388
+ useUseCaseMutation,
389
+ useVault
22
390
  };
23
391
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/provider.tsx"],"sourcesContent":["\nimport type {\n MessageModifyingSigner,\n Rpc,\n RpcSubscriptions,\n SolanaRpcApi,\n SolanaRpcApiMainnet,\n SolanaRpcSubscriptionsApi,\n TransactionModifyingSigner,\n TransactionSendingSigner,\n TransactionSigner,\n} from '@solana/kit';\nimport { createContext, useContext, useMemo } from \"react\";\n\nexport type HyroContextType = {\n signer?: TransactionSendingSigner &\n TransactionModifyingSigner &\n MessageModifyingSigner;\n connection: Rpc<SolanaRpcApiMainnet>;\n subscription: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n};\n\nexport const HyroContext = createContext<HyroContextType>(null!);\n\nexport type HyroProviderProps = {\n children: React.ReactNode;\n config: {\n signer?: TransactionSendingSigner & TransactionModifyingSigner & MessageModifyingSigner;\n connection: Rpc<SolanaRpcApiMainnet>;\n subscription: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n } // TODO: HyroSDK configuration\n}\n\nexport const HyroProvider = ({ children, config }: HyroProviderProps) => {\n const contextValue: HyroContextType = useMemo(() => {\n return config;\n }, [config])\n\n return (\n <HyroContext.Provider value={contextValue}>\n {children}\n </HyroContext.Provider>\n );\n};\n\nexport const useHyro = () => {\n const context = useContext(HyroContext);\n if (!context) {\n throw new Error(\"useHyro must be used within a HyroProvider\");\n }\n return context;\n}"],"mappings":";AAYA,SAAS,eAAe,YAAY,eAAe;AA2B3C;AAjBD,IAAM,cAAc,cAA+B,IAAK;AAWxD,IAAM,eAAe,CAAC,EAAE,UAAU,OAAO,MAAyB;AACrE,QAAM,eAAgC,QAAQ,MAAM;AAChD,WAAO;AAAA,EACX,GAAG,CAAC,MAAM,CAAC;AAEX,SACI,oBAAC,YAAY,UAAZ,EAAqB,OAAO,cACxB,UACL;AAER;AAEO,IAAM,UAAU,MAAM;AACzB,QAAM,UAAU,WAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAChE;AACA,SAAO;AACX;","names":[]}
1
+ {"version":3,"sources":["../src/components/deposit-widget.tsx","../src/lib/use-use-case-mutation.ts","../src/hooks/use-vault.ts","../src/provider.tsx","../src/hooks/use-deposit-funds-mutation.ts","../src/hooks/use-deposit-funds.ts","../src/lib/transaction.ts","../src/hooks/use-explore-vaults.ts","../src/lib/transformers.ts","../src/errors.ts"],"sourcesContent":["export const DepositWidget = () => {\n return <div>DepositWidget</div>\n}","import { MutationOptions, useMutation, UseMutationOptions } from \"@tanstack/react-query\";\n\nexport interface UseCase<TArgs = void, TData = unknown> {\n key: string;\n execute: (args: TArgs) => Promise<TData> | TData;\n}\n\nexport type UseCaseOptions<TData, TArgs> = Omit<UseMutationOptions<TData, Error, TArgs>, \"mutationKey\" | \"mutationFn\">;\nexport function useUseCaseMutation<TArgs extends Record<string, unknown> | void, TData>(\n useCase: UseCase<TArgs, TData> & Omit<MutationOptions<TData, Error, TArgs>, \"mutationKey\" | \"mutationFn\">,\n ) {\n const { key, execute, onError, ...restOptions } = useCase || {};\n const { mutateAsync, ...mutation } = useMutation<TData, Error, TArgs>({\n mutationKey: [key],\n mutationFn: async args => {\n console.log(useCase.key, args);\n return execute(args);\n },\n onError: async (error: Error, variables, mutationResult, context) => {\n console.error(useCase.key, error);\n onError && onError(error, variables, mutationResult, context);\n },\n ...restOptions,\n });\n \n return [mutateAsync, mutation] as const;\n }\n ","import { hyroProtocol } from \"@hyr0-xyz/client-js\";\nimport { Policy, Vault } from \"@hyr0-xyz/program\";\nimport { useQuery, UseQueryOptions } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { useHyro } from \"../provider\";\n\nexport const useVault = (seed: string, options?: UseQueryOptions): {\n account: hyroProtocol.Vault | null | undefined;\n helpers: Vault | null;\n isLoading: boolean;\n error: Error | null;\n} => {\n const { signer, connection } = useHyro();\n\n const vault = useMemo(() => {\n if (!signer) return null;\n return new Vault(seed, signer, Policy.AllowAny);\n }, [seed, signer]);\n\n const {\n data: vaultAccount,\n isLoading: isLoading,\n error: error,\n } = useQuery({\n queryKey: [\"vault\", seed],\n queryFn: async () => {\n if (!vault) return null;\n const address = await vault.getAddress();\n const fetchingResult = await hyroProtocol.fetchVault(connection, address);\n\n return fetchingResult.data;\n },\n });\n\n return {\n account: vaultAccount,\n helpers: vault,\n isLoading,\n error,\n };\n};\n","\nimport type {\n MessageModifyingSigner,\n Rpc,\n RpcSubscriptions,\n SolanaRpcApiMainnet,\n SolanaRpcSubscriptionsApi,\n TransactionModifyingSigner,\n TransactionSendingSigner\n} from '@solana/kit';\nimport { createClient, SupabaseClient } from '@supabase/supabase-js';\nimport { createContext, useContext, useMemo } from \"react\";\nimport { Database } from './lib/supabase';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n\nexport type HyroContextType = {\n supabase: SupabaseClient<Database, 'public'>;\n signer?: TransactionSendingSigner &\n TransactionModifyingSigner &\n MessageModifyingSigner;\n connection: Rpc<SolanaRpcApiMainnet>;\n subscription: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n graphqlUrl: string;\n};\n\nexport const HyroContext = createContext<HyroContextType>(null!);\n\nexport type HyroProviderProps = {\n children: React.ReactNode;\n config: {\n queryClient: QueryClient;\n supabase: {\n url: string;\n key: string;\n }\n signer?: TransactionSendingSigner & TransactionModifyingSigner & MessageModifyingSigner;\n connection: Rpc<SolanaRpcApiMainnet>;\n subscription: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n graphqlUrl: string;\n } // TODO: HyroSDK configuration\n}\n\nexport const HyroProvider = ({ children, config }: HyroProviderProps) => {\n const supabaseClient = useMemo(() => {\n return createClient(config.supabase.url, config.supabase.key);\n }, [config.supabase.url, config.supabase.key])\n\n const contextValue: HyroContextType = useMemo(() => {\n return {\n ...config,\n supabase: supabaseClient,\n };\n }, [supabaseClient, config])\n\n return (\n <QueryClientProvider client={config.queryClient}>\n <HyroContext.Provider value={contextValue}>\n {children}\n </HyroContext.Provider>\n </QueryClientProvider>\n );\n};\n\nexport const useHyro = () => {\n const context = useContext(HyroContext);\n if (!context) {\n throw new Error(\"useHyro must be used within a HyroProvider\");\n }\n return context;\n}","import { useUseCaseMutation } from \"../lib/use-use-case-mutation\";\nimport { useHyro } from \"../provider\";\nimport { useVault } from \"./use-vault\";\n\nexport type DepositFundsInput = {\n amount: number;\n seed: string;\n};\n\nexport type DepositFundsOutput = {\n success: boolean;\n};\n\nexport const useDepositFundsMutation = () => {\n return useUseCaseMutation<DepositFundsInput, DepositFundsOutput>({\n key: \"depositFunds\",\n execute: async ({ amount, seed }) => {\n const vault = useVault(seed);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n return { success: true };\n },\n });\n};\n","import { useUseCaseMutation } from \"../lib/use-use-case-mutation\";\nimport { useVault } from \"./use-vault\";\nimport {\n hyroProtocol\n} from \"@hyr0-xyz/client-js\";\nimport { useHyro } from \"src/provider\";\nimport {\n findAssociatedTokenPda,\n TOKEN_PROGRAM_ADDRESS,\n} from \"@solana-program/token\";\nimport { Transaction } from \"src/lib/transaction\";\n\nexport const useDepositFunds = (seed: string) => {\n const vault = useVault(seed);\n const { signer, connection, subscription } = useHyro();\n return useUseCaseMutation({\n key: \"depositFunds\",\n execute: async ({ amount }: { amount: number }) => {\n if (!vault) throw new Error(\"Vault not found\");\n if (!vault.helpers) throw new Error(\"Vault helpers not found\");\n if (!vault.account) throw new Error(\"Vault account not found\");\n if (vault.isLoading) throw new Error(\"Vault is loading\");\n if (typeof vault.account === \"undefined\")\n throw new Error(\"Vault not found\");\n if (!signer) throw new Error(\"Signer not found\");\n\n const { underlyingMint, shareMint } = vault.account;\n\n const instruction = hyroProtocol.getDepositAssetsInstruction({\n vaultTokenAccount: await vault.helpers\n .getVaultTokenAccountPda(underlyingMint)\n .then(([first]) => first),\n senderTokenAccount: await findAssociatedTokenPda({\n owner: signer.address,\n tokenProgram: TOKEN_PROGRAM_ADDRESS,\n mint: underlyingMint,\n }).then(([first]) => first),\n senderShareAccount: await findAssociatedTokenPda({\n owner: signer.address,\n tokenProgram: TOKEN_PROGRAM_ADDRESS,\n mint: shareMint,\n }).then(([first]) => first),\n shareSignerPda: await vault.helpers\n .getShareSignerPda()\n .then(([first]) => first),\n shareMint: shareMint,\n underlyingMint: underlyingMint,\n vault: await vault.helpers.getAddress(),\n feeCollectionProgram: vault.account.feeCollectionProgram,\n signer: signer,\n assets: amount,\n });\n\n const signature = await Transaction.send({\n rpc: connection,\n subscription,\n signer,\n instructions: [instruction],\n });\n\n return { signature };\n },\n });\n};\n","import {\n getSetComputeUnitLimitInstruction,\n getSetComputeUnitPriceInstruction,\n} from \"@solana-program/compute-budget\";\nimport {\n AccountMeta,\n Address,\n address,\n appendTransactionMessageInstructions,\n signature as asSignature,\n compileTransaction,\n createTransactionMessage,\n fetchJsonParsedAccount,\n getBase58Decoder,\n getBase64EncodedWireTransaction,\n Instruction,\n InstructionPlan,\n MessageModifyingSigner,\n pipe,\n Rpc,\n RpcSubscriptions,\n SendableTransaction,\n sendAndConfirmTransactionFactory,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n SignaturesMap,\n signTransactionMessageWithSigners,\n SolanaRpcApi,\n SolanaRpcApiMainnet,\n SolanaRpcSubscriptionsApi,\n TransactionMessage,\n TransactionMessageBytes,\n TransactionMessageWithFeePayer,\n TransactionModifyingSigner,\n TransactionSendingSigner\n} from \"@solana/kit\";\nimport { TransactionWithLastValidBlockHeight } from \"@solana/transaction-confirmation\";\n \n export const MAX_CU_LIMIT = 1_400_000;\n export const MIN_COMPUTE_UNIT_PRICE = 30000;\n \n export type SolanaTransactionSimulation = {\n computeUnitLimit: number;\n };\n \n export type SolanaAddressLookupTable = {\n addresses: Address[];\n };\n \n export class Transaction {\n static async fetchAddressLookupTable(\n rpc: Rpc<SolanaRpcApi>,\n addressLookupTable: Address\n ): Promise<SolanaAddressLookupTable> {\n const account = await fetchJsonParsedAccount<SolanaAddressLookupTable>(\n rpc,\n addressLookupTable\n );\n if (!account.exists) throw new Error(\"No address lookup table\");\n return account.data as SolanaAddressLookupTable;\n }\n \n private static async calculateComputeUnitPrice(\n instructions: Instruction[],\n computeUnitLimit: number\n ): Promise<number> {\n console.log(\"@@@@@ instructions\", instructions);\n console.log(\"@@@@@ computeUnitLimit\", computeUnitLimit);\n return MIN_COMPUTE_UNIT_PRICE;\n // TODO:\n // const addresses = _.uniqBy(\n // instructions.flatMap(ix => (ix.accounts || []).flatMap(account => account.address)).filter(Boolean),\n // address => address,\n // );\n // const recentPriorityFeeByLevel = await Solana.fetchRecentPriorityFeesByLevel(addresses);\n // const lowestPriorityFee = recentPriorityFeeByLevel[SolanaPriorityFeeLevel.Low];\n \n // const computeUnitPriceCap = calculateComputeUnitPriceFromSol(computeUnitLimit, this.computeUnitPriceCapInSol);\n // const lowestComputeUnitPrice = this.computeUnitPriceMultiplier * lowestPriorityFee;\n \n // return Math.max(Math.min(lowestComputeUnitPrice, computeUnitPriceCap), MIN_COMPUTE_UNIT_PRICE);\n }\n \n private static async prepare(args: {\n rpc: Rpc<SolanaRpcApiMainnet>;\n signer: TransactionSendingSigner &\n TransactionModifyingSigner &\n MessageModifyingSigner;\n instructions: Instruction[];\n simulation?: SolanaTransactionSimulation;\n remainingAccounts?: AccountMeta[];\n }) {\n console.log(\"@@@@@ prepare\", args);\n const { rpc, signer, instructions, simulation } = args;\n \n const computeUnitLimit = simulation\n ? simulation.computeUnitLimit\n : MAX_CU_LIMIT;\n const computeUnitPrice = await this.calculateComputeUnitPrice(\n instructions,\n computeUnitLimit\n );\n \n const { value: latestBlockhash } = await rpc\n .getLatestBlockhash({ commitment: \"confirmed\" })\n .send();\n \n return pipe(\n createTransactionMessage({ version: 0 }),\n (txm) =>\n setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, txm),\n (txm) => setTransactionMessageFeePayerSigner(signer, txm),\n (txm) => {\n const setComputeUnitLimitInstruction =\n getSetComputeUnitLimitInstruction({ units: computeUnitLimit });\n const setComputeUnitPriceInstruction =\n getSetComputeUnitPriceInstruction({\n microLamports: computeUnitPrice,\n });\n const ixs = [\n setComputeUnitLimitInstruction,\n setComputeUnitPriceInstruction,\n ...instructions,\n ];\n return appendTransactionMessageInstructions(ixs, txm);\n },\n async (txm) => {\n /*\n * Simulate transaction and call it again with proper settings\n * */\n // if (!simulation) {\n // const simulation = await this.simulate(rpc, txm);\n // return this.prepare({ ...args, simulation });\n // }\n \n return txm;\n }\n );\n }\n \n static async simulate(\n rpc: Rpc<SolanaRpcApi>,\n txm: TransactionMessage & TransactionMessageWithFeePayer,\n failedAttempts = 0\n ): Promise<SolanaTransactionSimulation> {\n const transaction = compileTransaction(txm);\n const base64EncodedTransaction =\n getBase64EncodedWireTransaction(transaction);\n const simulation = await rpc\n .simulateTransaction(base64EncodedTransaction, { encoding: \"base64\" })\n .send();\n const {\n value: { unitsConsumed },\n } = simulation;\n \n if (!unitsConsumed) {\n if (failedAttempts === 3) {\n throw new Error(\"Simulation failed\");\n }\n \n console.error(\"No simulation units consumed. Retrying...\");\n \n const nextFailedAttempts = failedAttempts + 1;\n return this.simulate(rpc, txm, nextFailedAttempts);\n }\n \n // Add 15% and clamp CU to MAX_CU_LIMIT\n const computeUnitLimitWithReserve = Math.min(\n Number((unitsConsumed * 115n) / 100n),\n MAX_CU_LIMIT\n );\n return {\n computeUnitLimit: computeUnitLimitWithReserve,\n };\n }\n \n /**\n * Recursively collect all Instructions from an InstructionPlan.\n * \n * @param plan InstructionPlan or array of plans (to help generic use)\n * @returns Instruction[]\n */\n static collectInstructions(plan: InstructionPlan | InstructionPlan[]): Instruction[] {\n // Allow passing an array of plans for convenience\n if (Array.isArray(plan)) {\n return plan.flatMap((p) => this.collectInstructions(p));\n }\n \n switch (plan.kind) {\n case 'single':\n return [plan.instruction];\n case 'sequential':\n case 'parallel':\n // These have a \"plans\" property (array of subplans)\n return plan.plans.flatMap((subplan) => this.collectInstructions(subplan));\n default:\n // Unknown plan kind\n return [];\n }\n }\n \n static async sendInstructionPlan(args: {\n rpc: Rpc<SolanaRpcApi>;\n subscription: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n signer: TransactionSendingSigner &\n TransactionModifyingSigner &\n MessageModifyingSigner;\n plan: InstructionPlan;\n alt?: Address;\n simulation?: SolanaTransactionSimulation;\n }) {\n return this.send({\n ...args,\n instructions: this.collectInstructions(args.plan),\n });\n }\n \n static async send(args: {\n rpc: Rpc<SolanaRpcApiMainnet>;\n subscription: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n signer: TransactionSendingSigner &\n TransactionModifyingSigner &\n MessageModifyingSigner;\n instructions: Instruction[];\n alt?: Address;\n simulation?: SolanaTransactionSimulation;\n }) {\n const txm = await this.prepare(args);\n \n // Please don't remove this code. It's helpful to debug the transaction size.\n // console.log(\"@@@@@ instructions\", instructions);\n // const encodedTransaction = this.encode(txm);\n // console.log(\"@@@@@ encodedTransaction\", encodedTransaction.length);\n \n console.log(\"@@@@@ txm -> signing\", txm);\n const signedTransaction = await signTransactionMessageWithSigners(txm);\n /*\n * Set lifetimeConstraint\n * */\n const transaction = {\n ...signedTransaction,\n lifetimeConstraint: txm.lifetimeConstraint,\n };\n \n const signatureBytes =\n transaction.signatures[address(args.signer.address)]!;\n const signature = asSignature(getBase58Decoder().decode(signatureBytes));\n \n console.log(\"@@@@@ signature -> send and wait\", signature);\n const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({\n rpc: args.rpc,\n rpcSubscriptions: args.subscription,\n });\n \n await sendAndConfirmTransaction(\n transaction as unknown as SendableTransaction &\n TransactionWithLastValidBlockHeight &\n Readonly<{\n messageBytes: TransactionMessageBytes;\n signatures: SignaturesMap;\n }>,\n {\n skipPreflight: true,\n commitment: \"confirmed\",\n maxRetries: 0n,\n }\n ).catch((e) => {\n throw { ...e, signature };\n });\n \n if (!signatureBytes) {\n throw new Error(\"No signature\");\n }\n \n const {\n value: [status],\n } = await args.rpc\n .getSignatureStatuses([signature], {\n searchTransactionHistory: true,\n })\n .send();\n \n return {\n signature,\n status,\n };\n }\n }\n ","import { findAllVaults } from \"@hyr0-xyz/program\";\nimport { address, getAddressDecoder, getAddressEncoder } from \"@solana/addresses\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { hexToAddress } from \"src/lib/transformers\";\nimport { useHyro } from \"src/provider\";\n\nexport type VaultFilters = Partial<{\n search: string;\n managerVerified: boolean | null;\n riskRating: string | null;\n sortBy: \"tvl\" | \"performance\" | \"age\" | \"name\";\n sortOrder: \"asc\" | \"desc\";\n timeframe: \"1d\" | \"1w\" | \"1m\" | \"3m\" | \"6m\" | \"1y\" | \"all\";\n}>;\n\nexport const useExploreVaults = (filter?: VaultFilters) => {\n // const { timeframe } = filter ?? {};\n // // Map timeframe strings to their durations in days\n // const timeframeDays: Record<\n // NonNullable<VaultFilters[\"timeframe\"]>,\n // number | undefined\n // > = {\n // \"1d\": 1,\n // \"1w\": 7,\n // \"1m\": 30,\n // \"3m\": 90,\n // \"6m\": 180,\n // \"1y\": 365,\n // all: undefined,\n // };\n // const days = timeframeDays[timeframe ?? \"all\"];\n\n // const createdAfter =\n // days === undefined\n // ? undefined\n // : new Date(Date.now() - days * 24 * 60 * 60 * 1000).getTime() / 1000;\n const { supabase } = useHyro();\n return useQuery({\n queryKey: [\"vaults\", filter],\n queryFn: async () => {\n const response = await supabase.from(\"vault_account\").select(`*`);\n if (response.error) {\n throw new Error(response.error.message);\n }\n\n const sanitized = response.data.map((vault) => ({\n ...vault,\n policy_program: undefined,\n fee_collection_program: undefined,\n share_mint: undefined,\n underlying_mint: undefined,\n parent_vault: undefined,\n __pubkey: undefined,\n authority: hexToAddress(vault.authority),\n feeCollectionProgram: hexToAddress(vault.fee_collection_program),\n policyProgram: hexToAddress(vault.policy_program),\n shareMint: hexToAddress(vault.share_mint),\n underlyingMint: hexToAddress(vault.underlying_mint),\n manager: vault.manager ? hexToAddress(vault.manager) : null,\n parentVault: vault.parent_vault ? hexToAddress(vault.parent_vault) : null,\n pubkey: hexToAddress(vault.__pubkey)\n }));\n\n return sanitized\n },\n });\n};\n","import { getAddressDecoder } from \"@solana/addresses\";\n\nexport const hexToAddress = (hex: string) => {\n try {\n hex = hex.startsWith(\"\\\\x\") ? hex.substring(2) : hex;\n return getAddressDecoder().decode(Buffer.from(hex.substring(2), \"hex\"));\n } catch (error) {\n console.error(\"Error decoding address\", error, hex);\n return hex;\n }\n};","export class SdkError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SdkError\";\n }\n}\n\nexport class SdkBadRequestError extends SdkError {\n constructor(message: string) {\n super(message);\n this.name = \"SdkBadRequestError\";\n }\n}\n\nexport class SdkUnauthorizedError extends SdkError {\n constructor(message: string) {\n super(message);\n this.name = \"SdkUnauthorizedError\";\n }\n}"],"mappings":"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","names":["useMemo","jsx","useMemo","address","hyroProtocol","hyroProtocol","useQuery","useQuery"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyr0-xyz/react",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -18,9 +18,7 @@
18
18
  ],
19
19
  "scripts": {
20
20
  "build": "tsup",
21
- "dev": "tsup --watch",
22
- "generate:client:dev": "anchor build && bun create-codama-client.ts",
23
- "generate:client": "anchor build -- --features mainnet && bun create-codama-client.ts"
21
+ "dev": "tsup --watch"
24
22
  },
25
23
  "peerDependencies": {
26
24
  "react": "^19.2.0"
@@ -37,11 +35,15 @@
37
35
  "typescript": "^5.3.0"
38
36
  },
39
37
  "dependencies": {
38
+ "@hyr0-xyz/client-js": "^0.0.1",
40
39
  "@hyr0-xyz/program": "^0.0.10",
41
40
  "@solana-program/compute-budget": "^0.13.0",
42
41
  "@solana-program/token": "^0.10.0",
42
+ "@solana/accounts": "^6.0.0",
43
+ "@solana/addresses": "^6.0.0",
43
44
  "@solana/kit": "^6.0.0",
44
45
  "@solana/transaction-confirmation": "^6.0.1",
46
+ "@supabase/supabase-js": "^2.95.3",
45
47
  "@tanstack/react-query": "^5.90.20"
46
48
  }
47
49
  }