@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.d.ts +1680 -2
- package/dist/index.js +373 -5
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
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 {
|
|
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
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
}
|