@chipi-stack/chipi-react 14.13.1 → 14.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks.d.mts +2 -1
- package/dist/hooks.d.ts +2 -1
- package/dist/hooks.js +76 -41
- package/dist/hooks.js.map +1 -1
- package/dist/hooks.mjs +76 -41
- package/dist/hooks.mjs.map +1 -1
- package/dist/{index-D9-uVlda.d.mts → index-B8OIdrOX.d.mts} +43 -11
- package/dist/{index-D9-uVlda.d.ts → index-B8OIdrOX.d.ts} +43 -11
- package/dist/index.d.mts +49 -4
- package/dist/index.d.ts +49 -4
- package/dist/index.js +111 -55
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +110 -56
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/hooks.d.mts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { g as ChipiWalletData,
|
|
1
|
+
export { g as ChipiWalletData, a2 as PrivacyConfig, a3 as PrivacyKeys, a6 as PrivacyLedgerEvent, a4 as PrivacyStep, a7 as PrivateBalanceInput, R as RegisterSessionConfig, S as SessionState, k as SessionWallet, a5 as ShieldHookInput, Y as ThresholdSignState, i as UseChipiSessionConfig, j as UseChipiSessionReturn, e as UseChipiWalletConfig, U as UseChipiWalletObjectConfig, f as UseChipiWalletReturn, T as UseGuardianRecoveryReturn, P as UseShhhSignerReturn, X as UseThresholdSignOptions, W as UseThresholdSignReturn, p as UseTransferConfig, M as UseX402PaymentConfig, N as UseX402PaymentReturn, a0 as derivePrivacyAccount, a1 as netPrivateBalance, H as useAddSessionKeyToContract, q as useApprove, A as useCallAnyContract, h as useChipiSession, d as useChipiWallet, D as useChipiWalletObject, G as useCreateSessionKey, u as useCreateWallet, K as useExecuteWithSession, J as useGetSessionData, z as useGetSku, y as useGetSkuList, x as useGetSkuPurchase, F as useGetTokenBalance, s as useGetTransaction, r as useGetTransactionList, t as useGetTransactionStatus, c as useGetWallet, Q as useGuardianRecovery, l as useMigrateWalletToPasskey, n as useMigrateWalletToShhh, $ as usePrivateBalance, w as usePurchaseSku, E as useRecordSendTransaction, I as useRevokeSessionKey, O as useShhhSigner, Z as useShield, B as useSignTypedData, v as useSyncOnChainTransfers, V as useThresholdSign, o as useTransfer, _ as useUnshield, m as useUpdateWalletEncryption, L as useX402Payment } from './index-B8OIdrOX.mjs';
|
|
2
2
|
import '@chipi-stack/types';
|
|
3
3
|
import '@tanstack/react-query';
|
|
4
|
+
import 'react';
|
|
4
5
|
import '@chipi-stack/backend';
|
|
5
6
|
import 'starknet';
|
|
6
7
|
import '@starknet-io/types-js';
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { g as ChipiWalletData,
|
|
1
|
+
export { g as ChipiWalletData, a2 as PrivacyConfig, a3 as PrivacyKeys, a6 as PrivacyLedgerEvent, a4 as PrivacyStep, a7 as PrivateBalanceInput, R as RegisterSessionConfig, S as SessionState, k as SessionWallet, a5 as ShieldHookInput, Y as ThresholdSignState, i as UseChipiSessionConfig, j as UseChipiSessionReturn, e as UseChipiWalletConfig, U as UseChipiWalletObjectConfig, f as UseChipiWalletReturn, T as UseGuardianRecoveryReturn, P as UseShhhSignerReturn, X as UseThresholdSignOptions, W as UseThresholdSignReturn, p as UseTransferConfig, M as UseX402PaymentConfig, N as UseX402PaymentReturn, a0 as derivePrivacyAccount, a1 as netPrivateBalance, H as useAddSessionKeyToContract, q as useApprove, A as useCallAnyContract, h as useChipiSession, d as useChipiWallet, D as useChipiWalletObject, G as useCreateSessionKey, u as useCreateWallet, K as useExecuteWithSession, J as useGetSessionData, z as useGetSku, y as useGetSkuList, x as useGetSkuPurchase, F as useGetTokenBalance, s as useGetTransaction, r as useGetTransactionList, t as useGetTransactionStatus, c as useGetWallet, Q as useGuardianRecovery, l as useMigrateWalletToPasskey, n as useMigrateWalletToShhh, $ as usePrivateBalance, w as usePurchaseSku, E as useRecordSendTransaction, I as useRevokeSessionKey, O as useShhhSigner, Z as useShield, B as useSignTypedData, v as useSyncOnChainTransfers, V as useThresholdSign, o as useTransfer, _ as useUnshield, m as useUpdateWalletEncryption, L as useX402Payment } from './index-B8OIdrOX.js';
|
|
2
2
|
import '@chipi-stack/types';
|
|
3
3
|
import '@tanstack/react-query';
|
|
4
|
+
import 'react';
|
|
4
5
|
import '@chipi-stack/backend';
|
|
5
6
|
import 'starknet';
|
|
6
7
|
import '@starknet-io/types-js';
|
package/dist/hooks.js
CHANGED
|
@@ -167,6 +167,17 @@ function useGetWallet(input) {
|
|
|
167
167
|
fetchWallet
|
|
168
168
|
};
|
|
169
169
|
}
|
|
170
|
+
|
|
171
|
+
// src/utils/wallet-capabilities.ts
|
|
172
|
+
var SHHH_SESSION_SIGNER_KINDS = /* @__PURE__ */ new Set(["STARK", "ED25519"]);
|
|
173
|
+
function walletSupportsSessions(wallet) {
|
|
174
|
+
if (!wallet) return false;
|
|
175
|
+
if (wallet.walletType === "CHIPI") return true;
|
|
176
|
+
if (wallet.walletType === "SHHH") {
|
|
177
|
+
return !wallet.signerKind || SHHH_SESSION_SIGNER_KINDS.has(wallet.signerKind);
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
170
181
|
function useChipiWallet(config3) {
|
|
171
182
|
const { chipiSDK } = useChipiContext();
|
|
172
183
|
const queryClient = reactQuery.useQueryClient();
|
|
@@ -247,7 +258,7 @@ function useChipiWallet(config3) {
|
|
|
247
258
|
const data = walletQuery.data;
|
|
248
259
|
return {
|
|
249
260
|
...data,
|
|
250
|
-
supportsSessionKeys: data
|
|
261
|
+
supportsSessionKeys: walletSupportsSessions(data),
|
|
251
262
|
shortAddress: formatAddress(data.publicKey)
|
|
252
263
|
};
|
|
253
264
|
}, [walletQuery.data, walletQuery.isLoading]);
|
|
@@ -304,6 +315,7 @@ function useChipiSession(config3) {
|
|
|
304
315
|
const {
|
|
305
316
|
wallet,
|
|
306
317
|
encryptKey,
|
|
318
|
+
getEncryptKey,
|
|
307
319
|
getBearerToken,
|
|
308
320
|
storedSession,
|
|
309
321
|
onSessionCreated,
|
|
@@ -317,10 +329,13 @@ function useChipiSession(config3) {
|
|
|
317
329
|
react.useEffect(() => {
|
|
318
330
|
setLocalSession(storedSession ?? null);
|
|
319
331
|
}, [storedSession]);
|
|
320
|
-
const supportsSession = react.useMemo(() =>
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
332
|
+
const supportsSession = react.useMemo(() => walletSupportsSessions(wallet), [wallet]);
|
|
333
|
+
const resolveEncryptKey = react.useCallback(async () => {
|
|
334
|
+
const key = encryptKey || (getEncryptKey ? await getEncryptKey() : void 0);
|
|
335
|
+
if (!key) throw new Error("Encryption key (PIN) is required");
|
|
336
|
+
return key;
|
|
337
|
+
}, [encryptKey, getEncryptKey]);
|
|
338
|
+
const [awaitingRegistrationUntil, setAwaitingRegistrationUntil] = react.useState(null);
|
|
324
339
|
const sessionStatusQuery = reactQuery.useQuery({
|
|
325
340
|
queryKey: ["chipi-session-status", wallet?.publicKey, localSession?.publicKey],
|
|
326
341
|
queryFn: async () => {
|
|
@@ -333,8 +348,12 @@ function useChipiSession(config3) {
|
|
|
333
348
|
enabled: Boolean(
|
|
334
349
|
autoCheckStatus && wallet?.publicKey && localSession?.publicKey && supportsSession
|
|
335
350
|
),
|
|
336
|
-
staleTime: 3e4
|
|
351
|
+
staleTime: 3e4,
|
|
337
352
|
// 30 seconds
|
|
353
|
+
// The registration hash comes back before the transaction is in a block, so
|
|
354
|
+
// right after registerSession the struct can still read as zero. Poll until
|
|
355
|
+
// it shows up (or for two minutes), then go back to on-demand reads.
|
|
356
|
+
refetchInterval: (query) => awaitingRegistrationUntil !== null && Date.now() < awaitingRegistrationUntil && (query.state.data?.validUntil ?? 0) === 0 ? 3e3 : false
|
|
338
357
|
});
|
|
339
358
|
const [revokedSessionKey, setRevokedSessionKey] = react.useState(null);
|
|
340
359
|
const sessionState = react.useMemo(() => {
|
|
@@ -357,13 +376,13 @@ function useChipiSession(config3) {
|
|
|
357
376
|
const createSessionMutation = reactQuery.useMutation(
|
|
358
377
|
{
|
|
359
378
|
mutationFn: async (params = {}) => {
|
|
360
|
-
if (!encryptKey) throw new Error("Encryption key (PIN) is required");
|
|
361
379
|
if (!supportsSession)
|
|
362
380
|
throw new Error(
|
|
363
|
-
"Wallet does not support sessions.
|
|
381
|
+
"Wallet does not support sessions. Session keys need a CHIPI wallet or a SHHH wallet with a STARK / ED25519 signer."
|
|
364
382
|
);
|
|
383
|
+
const key = await resolveEncryptKey();
|
|
365
384
|
const sessionData = chipiSDK.sessions.createSessionKey({
|
|
366
|
-
encryptKey,
|
|
385
|
+
encryptKey: key,
|
|
367
386
|
durationSeconds: params.durationSeconds ?? defaultDurationSeconds
|
|
368
387
|
});
|
|
369
388
|
return sessionData;
|
|
@@ -383,29 +402,38 @@ function useChipiSession(config3) {
|
|
|
383
402
|
const registerSessionMutation = reactQuery.useMutation({
|
|
384
403
|
mutationFn: async (sessionConfig = {}) => {
|
|
385
404
|
if (!wallet) throw new Error("Wallet is required");
|
|
386
|
-
|
|
387
|
-
|
|
405
|
+
const sessionPublicKey = sessionConfig.sessionPublicKey ?? localSession?.publicKey;
|
|
406
|
+
const validUntil = sessionConfig.validUntil ?? localSession?.validUntil;
|
|
407
|
+
if (!sessionPublicKey || validUntil === void 0)
|
|
408
|
+
throw new Error(
|
|
409
|
+
"No session to register. Call createSession first, or pass sessionPublicKey and validUntil."
|
|
410
|
+
);
|
|
388
411
|
if (!supportsSession) throw new Error("Wallet does not support sessions");
|
|
412
|
+
const key = await resolveEncryptKey();
|
|
389
413
|
const bearerToken = await getBearerToken();
|
|
390
414
|
if (!bearerToken) throw new Error("Bearer token is required");
|
|
391
|
-
const
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
415
|
+
const params = {
|
|
416
|
+
encryptKey: key,
|
|
417
|
+
wallet,
|
|
418
|
+
sessionConfig: {
|
|
419
|
+
sessionPublicKey,
|
|
420
|
+
validUntil,
|
|
421
|
+
maxCalls: sessionConfig.maxCalls ?? defaultMaxCalls,
|
|
422
|
+
allowedEntrypoints: sessionConfig.allowedEntrypoints ?? []
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
if (sessionConfig.spendingPolicies?.length) {
|
|
426
|
+
return chipiSDK.sessions.setupSession(
|
|
427
|
+
{ ...params, spendingPolicies: sessionConfig.spendingPolicies },
|
|
428
|
+
bearerToken
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
return chipiSDK.sessions.addSessionKeyToContract(params, bearerToken);
|
|
405
432
|
},
|
|
406
433
|
onSuccess: () => {
|
|
407
434
|
setError(null);
|
|
408
435
|
if (localSession && revokedSessionKey === localSession.publicKey) setRevokedSessionKey(null);
|
|
436
|
+
setAwaitingRegistrationUntil(Date.now() + 12e4);
|
|
409
437
|
queryClient.invalidateQueries({
|
|
410
438
|
queryKey: ["chipi-session-status", wallet?.publicKey, localSession?.publicKey]
|
|
411
439
|
});
|
|
@@ -415,26 +443,28 @@ function useChipiSession(config3) {
|
|
|
415
443
|
}
|
|
416
444
|
});
|
|
417
445
|
const revokeSessionMutation = reactQuery.useMutation({
|
|
418
|
-
mutationFn: async () => {
|
|
446
|
+
mutationFn: async (sessionPublicKey) => {
|
|
419
447
|
if (!wallet) throw new Error("Wallet is required");
|
|
420
|
-
|
|
421
|
-
if (!
|
|
448
|
+
const target = sessionPublicKey ?? localSession?.publicKey;
|
|
449
|
+
if (!target) throw new Error("No session to revoke");
|
|
422
450
|
if (!supportsSession) throw new Error("Wallet does not support sessions");
|
|
451
|
+
const key = await resolveEncryptKey();
|
|
423
452
|
const bearerToken = await getBearerToken();
|
|
424
453
|
if (!bearerToken) throw new Error("Bearer token is required");
|
|
425
454
|
const txHash = await chipiSDK.sessions.revokeSessionKey(
|
|
426
455
|
{
|
|
427
|
-
encryptKey,
|
|
456
|
+
encryptKey: key,
|
|
428
457
|
wallet,
|
|
429
|
-
sessionPublicKey:
|
|
458
|
+
sessionPublicKey: target
|
|
430
459
|
},
|
|
431
460
|
bearerToken
|
|
432
461
|
);
|
|
433
462
|
return txHash;
|
|
434
463
|
},
|
|
435
|
-
onSuccess: () => {
|
|
464
|
+
onSuccess: (_txHash, sessionPublicKey) => {
|
|
436
465
|
setError(null);
|
|
437
|
-
|
|
466
|
+
const target = sessionPublicKey ?? localSession?.publicKey;
|
|
467
|
+
if (target) setRevokedSessionKey(target);
|
|
438
468
|
queryClient.invalidateQueries({
|
|
439
469
|
queryKey: ["chipi-session-status", wallet?.publicKey, localSession?.publicKey]
|
|
440
470
|
});
|
|
@@ -447,13 +477,13 @@ function useChipiSession(config3) {
|
|
|
447
477
|
mutationFn: async (calls) => {
|
|
448
478
|
if (!wallet) throw new Error("Wallet is required");
|
|
449
479
|
if (!localSession) throw new Error("No active session");
|
|
450
|
-
if (!encryptKey) throw new Error("Encryption key (PIN) is required");
|
|
451
480
|
if (!hasActiveSession) throw new Error("Session is not active. Register the session first.");
|
|
481
|
+
const key = await resolveEncryptKey();
|
|
452
482
|
const bearerToken = await getBearerToken();
|
|
453
483
|
if (!bearerToken) throw new Error("Bearer token is required");
|
|
454
484
|
const txHash = await chipiSDK.executeTransactionWithSession({
|
|
455
485
|
params: {
|
|
456
|
-
encryptKey,
|
|
486
|
+
encryptKey: key,
|
|
457
487
|
wallet,
|
|
458
488
|
session: localSession,
|
|
459
489
|
calls
|
|
@@ -477,13 +507,13 @@ function useChipiSession(config3) {
|
|
|
477
507
|
if (!wallet) throw new Error("Wallet is required");
|
|
478
508
|
if (!localSession)
|
|
479
509
|
throw new Error("No session to set policy on. Create and register a session first.");
|
|
480
|
-
if (!encryptKey) throw new Error("Encryption key (PIN) is required");
|
|
481
510
|
if (!supportsSession) throw new Error("Wallet does not support sessions");
|
|
511
|
+
const key = await resolveEncryptKey();
|
|
482
512
|
const bearerToken = await getBearerToken();
|
|
483
513
|
if (!bearerToken) throw new Error("Bearer token is required");
|
|
484
514
|
const txHash = await chipiSDK.sessions.setSpendingPolicy(
|
|
485
515
|
{
|
|
486
|
-
encryptKey,
|
|
516
|
+
encryptKey: key,
|
|
487
517
|
wallet,
|
|
488
518
|
spendingPolicyConfig: {
|
|
489
519
|
sessionPublicKey: localSession.publicKey,
|
|
@@ -505,13 +535,13 @@ function useChipiSession(config3) {
|
|
|
505
535
|
mutationFn: async (token) => {
|
|
506
536
|
if (!wallet) throw new Error("Wallet is required");
|
|
507
537
|
if (!localSession) throw new Error("No session to remove policy from");
|
|
508
|
-
if (!encryptKey) throw new Error("Encryption key (PIN) is required");
|
|
509
538
|
if (!supportsSession) throw new Error("Wallet does not support sessions");
|
|
539
|
+
const key = await resolveEncryptKey();
|
|
510
540
|
const bearerToken = await getBearerToken();
|
|
511
541
|
if (!bearerToken) throw new Error("Bearer token is required");
|
|
512
542
|
const txHash = await chipiSDK.sessions.removeSpendingPolicy(
|
|
513
543
|
{
|
|
514
|
-
encryptKey,
|
|
544
|
+
encryptKey: key,
|
|
515
545
|
wallet,
|
|
516
546
|
sessionPublicKey: localSession.publicKey,
|
|
517
547
|
token
|
|
@@ -539,9 +569,14 @@ function useChipiSession(config3) {
|
|
|
539
569
|
},
|
|
540
570
|
[registerSessionMutation]
|
|
541
571
|
);
|
|
542
|
-
const revokeSession = react.useCallback(
|
|
543
|
-
|
|
544
|
-
|
|
572
|
+
const revokeSession = react.useCallback(
|
|
573
|
+
async (sessionPublicKey) => {
|
|
574
|
+
return revokeSessionMutation.mutateAsync(
|
|
575
|
+
typeof sessionPublicKey === "string" ? sessionPublicKey : void 0
|
|
576
|
+
);
|
|
577
|
+
},
|
|
578
|
+
[revokeSessionMutation]
|
|
579
|
+
);
|
|
545
580
|
const executeWithSession = react.useCallback(
|
|
546
581
|
async (calls) => {
|
|
547
582
|
return executeWithSessionMutation.mutateAsync(calls);
|