@stwd/react 0.1.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/README.md +99 -0
- package/dist/components/ApprovalQueue.d.ts +6 -0
- package/dist/components/ApprovalQueue.d.ts.map +1 -0
- package/dist/components/ApprovalQueue.js +44 -0
- package/dist/components/ApprovalQueue.js.map +1 -0
- package/dist/components/PolicyControls.d.ts +6 -0
- package/dist/components/PolicyControls.d.ts.map +1 -0
- package/dist/components/PolicyControls.js +224 -0
- package/dist/components/PolicyControls.js.map +1 -0
- package/dist/components/SpendDashboard.d.ts +6 -0
- package/dist/components/SpendDashboard.d.ts.map +1 -0
- package/dist/components/SpendDashboard.js +52 -0
- package/dist/components/SpendDashboard.js.map +1 -0
- package/dist/components/TransactionHistory.d.ts +6 -0
- package/dist/components/TransactionHistory.d.ts.map +1 -0
- package/dist/components/TransactionHistory.js +34 -0
- package/dist/components/TransactionHistory.js.map +1 -0
- package/dist/components/WalletOverview.d.ts +6 -0
- package/dist/components/WalletOverview.d.ts.map +1 -0
- package/dist/components/WalletOverview.js +40 -0
- package/dist/components/WalletOverview.js.map +1 -0
- package/dist/hooks/useApprovals.d.ts +14 -0
- package/dist/hooks/useApprovals.d.ts.map +1 -0
- package/dist/hooks/useApprovals.js +75 -0
- package/dist/hooks/useApprovals.js.map +1 -0
- package/dist/hooks/usePolicies.d.ts +14 -0
- package/dist/hooks/usePolicies.d.ts.map +1 -0
- package/dist/hooks/usePolicies.js +75 -0
- package/dist/hooks/usePolicies.js.map +1 -0
- package/dist/hooks/useSpend.d.ts +11 -0
- package/dist/hooks/useSpend.d.ts.map +1 -0
- package/dist/hooks/useSpend.js +42 -0
- package/dist/hooks/useSpend.js.map +1 -0
- package/dist/hooks/useSteward.d.ts +6 -0
- package/dist/hooks/useSteward.d.ts.map +1 -0
- package/dist/hooks/useSteward.js +8 -0
- package/dist/hooks/useSteward.js.map +1 -0
- package/dist/hooks/useTransactions.d.ts +24 -0
- package/dist/hooks/useTransactions.d.ts.map +1 -0
- package/dist/hooks/useTransactions.js +78 -0
- package/dist/hooks/useTransactions.js.map +1 -0
- package/dist/hooks/useWallet.d.ts +16 -0
- package/dist/hooks/useWallet.d.ts.map +1 -0
- package/dist/hooks/useWallet.js +46 -0
- package/dist/hooks/useWallet.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/provider.d.ts +11 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +81 -0
- package/dist/provider.js.map +1 -0
- package/dist/styles.css +796 -0
- package/dist/types.d.ts +223 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/format.d.ts +41 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +138 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/theme.d.ts +5 -0
- package/dist/utils/theme.d.ts.map +1 -0
- package/dist/utils/theme.js +35 -0
- package/dist/utils/theme.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useWallet } from "../hooks/useWallet.js";
|
|
4
|
+
import { useStewardContext } from "../provider.js";
|
|
5
|
+
import { truncateAddress, formatBalance, copyToClipboard, getExplorerAddressUrl } from "../utils/format.js";
|
|
6
|
+
/**
|
|
7
|
+
* Displays agent wallet address, balances, chain info, and optional funding QR.
|
|
8
|
+
*/
|
|
9
|
+
export function WalletOverview({ chains, showQR, showCopy = true, className, onCopyAddress, }) {
|
|
10
|
+
const { features } = useStewardContext();
|
|
11
|
+
const { agent, balance, addresses, isLoading, error } = useWallet();
|
|
12
|
+
const [copied, setCopied] = useState(null);
|
|
13
|
+
const shouldShowQR = showQR ?? features.showFundingQR;
|
|
14
|
+
const handleCopy = async (address, chain) => {
|
|
15
|
+
const ok = await copyToClipboard(address);
|
|
16
|
+
if (ok) {
|
|
17
|
+
setCopied(address);
|
|
18
|
+
setTimeout(() => setCopied(null), 2000);
|
|
19
|
+
onCopyAddress?.(address, chain);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
if (isLoading) {
|
|
23
|
+
return (_jsx("div", { className: `stwd-card stwd-wallet-overview ${className || ""}`, children: _jsx("div", { className: "stwd-loading", children: "Loading wallet..." }) }));
|
|
24
|
+
}
|
|
25
|
+
if (error) {
|
|
26
|
+
return (_jsx("div", { className: `stwd-card stwd-wallet-overview ${className || ""}`, children: _jsxs("div", { className: "stwd-error-text", children: ["Failed to load wallet: ", error.message] }) }));
|
|
27
|
+
}
|
|
28
|
+
if (!agent)
|
|
29
|
+
return null;
|
|
30
|
+
// Filter addresses by requested chains
|
|
31
|
+
const displayAddresses = addresses.filter((a) => !chains || chains.includes(a.chainFamily));
|
|
32
|
+
// Fallback to agent.walletAddress if no addresses endpoint
|
|
33
|
+
if (displayAddresses.length === 0 && agent.walletAddress) {
|
|
34
|
+
displayAddresses.push({ chainFamily: "evm", address: agent.walletAddress });
|
|
35
|
+
}
|
|
36
|
+
return (_jsxs("div", { className: `stwd-card stwd-wallet-overview ${className || ""}`, children: [_jsxs("div", { className: "stwd-wallet-header", children: [_jsx("h3", { className: "stwd-heading", children: agent.name }), agent.platformId && (_jsx("span", { className: "stwd-badge stwd-badge-muted", children: agent.platformId }))] }), _jsx("div", { className: "stwd-wallet-addresses", children: displayAddresses.map((addr) => (_jsxs("div", { className: "stwd-address-row", children: [_jsx("span", { className: "stwd-chain-badge", children: addr.chainFamily.toUpperCase() }), _jsx("code", { className: "stwd-address", children: truncateAddress(addr.address) }), showCopy && (_jsx("button", { className: "stwd-btn stwd-btn-ghost stwd-btn-sm", onClick: () => handleCopy(addr.address, addr.chainFamily), title: "Copy address", children: copied === addr.address ? "✓" : "📋" })), _jsx("a", { className: "stwd-link stwd-btn-sm", href: getExplorerAddressUrl(addr.address, 8453), target: "_blank", rel: "noopener noreferrer", title: "View on explorer", children: "\u2197" })] }, addr.chainFamily))) }), balance && (_jsxs("div", { className: "stwd-wallet-balance", children: [_jsx("div", { className: "stwd-balance-label", children: "Balance" }), _jsx("div", { className: "stwd-balance-value", children: balance.balances.nativeFormatted
|
|
37
|
+
? `${balance.balances.nativeFormatted} ${balance.balances.symbol}`
|
|
38
|
+
: formatBalance(balance.balances.native, balance.balances.symbol) }), _jsxs("div", { className: "stwd-balance-chain", children: ["Chain ID: ", balance.balances.chainId] })] })), shouldShowQR && displayAddresses.length > 0 && (_jsx("div", { className: "stwd-wallet-qr", children: _jsxs("div", { className: "stwd-qr-placeholder", children: [_jsx("div", { className: "stwd-qr-label", children: "Fund this wallet" }), _jsx("code", { className: "stwd-address-full", children: displayAddresses[0].address }), _jsx("div", { className: "stwd-muted-text", children: "Send funds to the address above to fund this agent's wallet." })] }) }))] }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=WalletOverview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletOverview.js","sourceRoot":"","sources":["../../src/components/WalletOverview.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ApprovalQueueEntry } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Approval queue with approve/reject actions.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useApprovals(refreshInterval?: number): {
|
|
6
|
+
pending: ApprovalQueueEntry[];
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
error: Error | null;
|
|
9
|
+
approve: (txId: string) => Promise<void>;
|
|
10
|
+
reject: (txId: string, reason?: string) => Promise<void>;
|
|
11
|
+
isResolving: boolean;
|
|
12
|
+
refetch: () => Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=useApprovals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useApprovals.d.ts","sourceRoot":"","sources":["../../src/hooks/useApprovals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;GAEG;AACH,wBAAgB,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM;;;;oBAsCpC,MAAM;mBAiBN,MAAM,WAAW,MAAM;;;EA6BvC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { useStewardContext } from "../provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* Approval queue with approve/reject actions.
|
|
5
|
+
*/
|
|
6
|
+
export function useApprovals(refreshInterval) {
|
|
7
|
+
const { client, agentId, pollInterval } = useStewardContext();
|
|
8
|
+
const interval = refreshInterval || pollInterval;
|
|
9
|
+
const [pending, setPending] = useState([]);
|
|
10
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
11
|
+
const [isResolving, setIsResolving] = useState(false);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const baseUrl = client.baseUrl || "";
|
|
14
|
+
const fetchApprovals = useCallback(async () => {
|
|
15
|
+
try {
|
|
16
|
+
const res = await fetch(`${baseUrl}/agents/${encodeURIComponent(agentId)}/approvals?status=pending`, { headers: { Accept: "application/json" } });
|
|
17
|
+
if (res.ok) {
|
|
18
|
+
const json = await res.json();
|
|
19
|
+
if (json.ok && json.data) {
|
|
20
|
+
setPending(Array.isArray(json.data) ? json.data : []);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
setError(null);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
setIsLoading(false);
|
|
30
|
+
}
|
|
31
|
+
}, [baseUrl, agentId]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
fetchApprovals();
|
|
34
|
+
const timer = setInterval(fetchApprovals, interval);
|
|
35
|
+
return () => clearInterval(timer);
|
|
36
|
+
}, [fetchApprovals, interval]);
|
|
37
|
+
const approve = useCallback(async (txId) => {
|
|
38
|
+
setIsResolving(true);
|
|
39
|
+
try {
|
|
40
|
+
const res = await fetch(`${baseUrl}/agents/${encodeURIComponent(agentId)}/approvals/${encodeURIComponent(txId)}/approve`, { method: "POST", headers: { "Content-Type": "application/json" } });
|
|
41
|
+
if (!res.ok)
|
|
42
|
+
throw new Error(`Approve failed: ${res.status}`);
|
|
43
|
+
setPending((prev) => prev.filter((a) => a.txId !== txId));
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
setIsResolving(false);
|
|
47
|
+
}
|
|
48
|
+
}, [baseUrl, agentId]);
|
|
49
|
+
const reject = useCallback(async (txId, reason) => {
|
|
50
|
+
setIsResolving(true);
|
|
51
|
+
try {
|
|
52
|
+
const res = await fetch(`${baseUrl}/agents/${encodeURIComponent(agentId)}/approvals/${encodeURIComponent(txId)}/reject`, {
|
|
53
|
+
method: "POST",
|
|
54
|
+
headers: { "Content-Type": "application/json" },
|
|
55
|
+
body: JSON.stringify({ reason }),
|
|
56
|
+
});
|
|
57
|
+
if (!res.ok)
|
|
58
|
+
throw new Error(`Reject failed: ${res.status}`);
|
|
59
|
+
setPending((prev) => prev.filter((a) => a.txId !== txId));
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
setIsResolving(false);
|
|
63
|
+
}
|
|
64
|
+
}, [baseUrl, agentId]);
|
|
65
|
+
return {
|
|
66
|
+
pending,
|
|
67
|
+
isLoading,
|
|
68
|
+
error,
|
|
69
|
+
approve,
|
|
70
|
+
reject,
|
|
71
|
+
isResolving,
|
|
72
|
+
refetch: fetchApprovals,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=useApprovals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useApprovals.js","sourceRoot":"","sources":["../../src/hooks/useApprovals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PolicyRule } from "@stwd/sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Policy CRUD with save and template support.
|
|
4
|
+
*/
|
|
5
|
+
export declare function usePolicies(): {
|
|
6
|
+
policies: PolicyRule[];
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
error: Error | null;
|
|
9
|
+
setPolicies: (newPolicies: PolicyRule[]) => Promise<void>;
|
|
10
|
+
applyTemplate: (templateId: string, overrides?: Record<string, unknown>) => Promise<void>;
|
|
11
|
+
isSaving: boolean;
|
|
12
|
+
refetch: () => Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=usePolicies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePolicies.d.ts","sourceRoot":"","sources":["../../src/hooks/usePolicies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C;;GAEG;AACH,wBAAgB,WAAW;;;;+BAwBH,UAAU,EAAE;gCAiBb,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;EAqCjE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { useStewardContext } from "../provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* Policy CRUD with save and template support.
|
|
5
|
+
*/
|
|
6
|
+
export function usePolicies() {
|
|
7
|
+
const { client, agentId, tenantConfig } = useStewardContext();
|
|
8
|
+
const [policies, setPoliciesState] = useState([]);
|
|
9
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
10
|
+
const [isSaving, setIsSaving] = useState(false);
|
|
11
|
+
const [error, setError] = useState(null);
|
|
12
|
+
const fetchPolicies = useCallback(async () => {
|
|
13
|
+
try {
|
|
14
|
+
const data = await client.getPolicies(agentId);
|
|
15
|
+
setPoliciesState(data);
|
|
16
|
+
setError(null);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
setIsLoading(false);
|
|
23
|
+
}
|
|
24
|
+
}, [client, agentId]);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
fetchPolicies();
|
|
27
|
+
}, [fetchPolicies]);
|
|
28
|
+
const setPolicies = useCallback(async (newPolicies) => {
|
|
29
|
+
setIsSaving(true);
|
|
30
|
+
try {
|
|
31
|
+
await client.setPolicies(agentId, newPolicies);
|
|
32
|
+
setPoliciesState(newPolicies);
|
|
33
|
+
setError(null);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
setIsSaving(false);
|
|
41
|
+
}
|
|
42
|
+
}, [client, agentId]);
|
|
43
|
+
const applyTemplate = useCallback(async (templateId, overrides) => {
|
|
44
|
+
const template = tenantConfig?.policyTemplates.find((t) => t.id === templateId);
|
|
45
|
+
if (!template) {
|
|
46
|
+
throw new Error(`Template "${templateId}" not found`);
|
|
47
|
+
}
|
|
48
|
+
let policies = structuredClone(template.policies);
|
|
49
|
+
// Apply field overrides
|
|
50
|
+
if (overrides) {
|
|
51
|
+
for (const [path, value] of Object.entries(overrides)) {
|
|
52
|
+
const [policyType, ...fieldPath] = path.split(".");
|
|
53
|
+
const policy = policies.find((p) => p.type === policyType);
|
|
54
|
+
if (policy && fieldPath.length > 0) {
|
|
55
|
+
let target = policy.config;
|
|
56
|
+
for (let i = 0; i < fieldPath.length - 1; i++) {
|
|
57
|
+
target = target[fieldPath[i]];
|
|
58
|
+
}
|
|
59
|
+
target[fieldPath[fieldPath.length - 1]] = value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await setPolicies(policies);
|
|
64
|
+
}, [tenantConfig, setPolicies]);
|
|
65
|
+
return {
|
|
66
|
+
policies,
|
|
67
|
+
isLoading,
|
|
68
|
+
error,
|
|
69
|
+
setPolicies,
|
|
70
|
+
applyTemplate,
|
|
71
|
+
isSaving,
|
|
72
|
+
refetch: fetchPolicies,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=usePolicies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePolicies.js","sourceRoot":"","sources":["../../src/hooks/usePolicies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SpendStats } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Spend analytics for a given time range.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useSpend(range?: "24h" | "7d" | "30d" | "all"): {
|
|
6
|
+
stats: SpendStats | null;
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
error: Error | null;
|
|
9
|
+
refetch: () => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useSpend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSpend.d.ts","sourceRoot":"","sources":["../../src/hooks/useSpend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,GAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAY;;;;;EAwClE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { useStewardContext } from "../provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* Spend analytics for a given time range.
|
|
5
|
+
*/
|
|
6
|
+
export function useSpend(range = "7d") {
|
|
7
|
+
const { client, agentId, pollInterval } = useStewardContext();
|
|
8
|
+
const [stats, setStats] = useState(null);
|
|
9
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
10
|
+
const [error, setError] = useState(null);
|
|
11
|
+
const baseUrl = client.baseUrl || "";
|
|
12
|
+
const fetchStats = useCallback(async () => {
|
|
13
|
+
try {
|
|
14
|
+
const res = await fetch(`${baseUrl}/agents/${encodeURIComponent(agentId)}/spend-stats?range=${range}`, { headers: { Accept: "application/json" } });
|
|
15
|
+
if (res.ok) {
|
|
16
|
+
const json = await res.json();
|
|
17
|
+
if (json.ok && json.data) {
|
|
18
|
+
setStats(json.data);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
setError(null);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
setIsLoading(false);
|
|
28
|
+
}
|
|
29
|
+
}, [baseUrl, agentId, range]);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
fetchStats();
|
|
32
|
+
const interval = setInterval(fetchStats, pollInterval);
|
|
33
|
+
return () => clearInterval(interval);
|
|
34
|
+
}, [fetchStats, pollInterval]);
|
|
35
|
+
return {
|
|
36
|
+
stats,
|
|
37
|
+
isLoading,
|
|
38
|
+
error,
|
|
39
|
+
refetch: fetchStats,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=useSpend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSpend.js","sourceRoot":"","sources":["../../src/hooks/useSpend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAsC,IAAI;IACjE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAI,MAA4C,CAAC,OAAO,IAAI,EAAE,CAAC;IAE5E,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,OAAO,WAAW,kBAAkB,CAAC,OAAO,CAAC,sBAAsB,KAAK,EAAE,EAC7E,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAC5C,CAAC;YACF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAE/B,OAAO;QACL,KAAK;QACL,SAAS;QACT,KAAK;QACL,OAAO,EAAE,UAAU;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSteward.d.ts","sourceRoot":"","sources":["../../src/hooks/useSteward.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,wBAAgB,UAAU,IAAI,mBAAmB,CAEhD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSteward.js","sourceRoot":"","sources":["../../src/hooks/useSteward.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TxRecord, TxStatus } from "@stwd/sdk";
|
|
2
|
+
interface UseTransactionsOpts {
|
|
3
|
+
pageSize?: number;
|
|
4
|
+
status?: TxStatus[];
|
|
5
|
+
chainId?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Paginated transaction history.
|
|
9
|
+
* Falls back to client.getHistory() and does client-side pagination
|
|
10
|
+
* until the paginated API endpoint is available.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useTransactions(opts?: UseTransactionsOpts): {
|
|
13
|
+
transactions: TxRecord[];
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
error: Error | null;
|
|
16
|
+
page: number;
|
|
17
|
+
totalPages: number;
|
|
18
|
+
nextPage: () => void;
|
|
19
|
+
prevPage: () => void;
|
|
20
|
+
setPage: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
21
|
+
refetch: () => Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=useTransactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTransactions.d.ts","sourceRoot":"","sources":["../../src/hooks/useTransactions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGpD,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,mBAAwB;;;;;;;;;;EAyE7D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { useStewardContext } from "../provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* Paginated transaction history.
|
|
5
|
+
* Falls back to client.getHistory() and does client-side pagination
|
|
6
|
+
* until the paginated API endpoint is available.
|
|
7
|
+
*/
|
|
8
|
+
export function useTransactions(opts = {}) {
|
|
9
|
+
const { client, agentId, pollInterval } = useStewardContext();
|
|
10
|
+
const { pageSize = 20, status, chainId } = opts;
|
|
11
|
+
const [allTransactions, setAllTransactions] = useState([]);
|
|
12
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
13
|
+
const [error, setError] = useState(null);
|
|
14
|
+
const [page, setPage] = useState(1);
|
|
15
|
+
const fetchTransactions = useCallback(async () => {
|
|
16
|
+
try {
|
|
17
|
+
// Try paginated endpoint first
|
|
18
|
+
const baseUrl = client.baseUrl || "";
|
|
19
|
+
const params = new URLSearchParams();
|
|
20
|
+
params.set("page", String(page));
|
|
21
|
+
params.set("pageSize", String(pageSize));
|
|
22
|
+
if (status?.length)
|
|
23
|
+
params.set("status", status.join(","));
|
|
24
|
+
if (chainId)
|
|
25
|
+
params.set("chainId", String(chainId));
|
|
26
|
+
const res = await fetch(`${baseUrl}/agents/${encodeURIComponent(agentId)}/transactions?${params}`, {
|
|
27
|
+
headers: { Accept: "application/json" },
|
|
28
|
+
});
|
|
29
|
+
if (res.ok) {
|
|
30
|
+
const json = await res.json();
|
|
31
|
+
if (json.ok && json.data?.transactions) {
|
|
32
|
+
setAllTransactions(json.data.transactions);
|
|
33
|
+
setError(null);
|
|
34
|
+
setIsLoading(false);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Fallback: use getHistory and convert
|
|
39
|
+
const history = await client.getHistory(agentId);
|
|
40
|
+
const txRecords = history.map((entry, i) => ({
|
|
41
|
+
id: `tx-${i}`,
|
|
42
|
+
agentId,
|
|
43
|
+
status: "confirmed",
|
|
44
|
+
request: { agentId, tenantId: "", to: "", value: entry.value, chainId: chainId || 8453 },
|
|
45
|
+
policyResults: [],
|
|
46
|
+
createdAt: new Date(entry.timestamp * 1000),
|
|
47
|
+
}));
|
|
48
|
+
setAllTransactions(txRecords);
|
|
49
|
+
setError(null);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
setIsLoading(false);
|
|
56
|
+
}
|
|
57
|
+
}, [client, agentId, page, pageSize, status, chainId]);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
fetchTransactions();
|
|
60
|
+
const interval = setInterval(fetchTransactions, pollInterval);
|
|
61
|
+
return () => clearInterval(interval);
|
|
62
|
+
}, [fetchTransactions, pollInterval]);
|
|
63
|
+
// Client-side pagination for fallback
|
|
64
|
+
const totalPages = Math.max(1, Math.ceil(allTransactions.length / pageSize));
|
|
65
|
+
const paginatedTx = allTransactions.slice((page - 1) * pageSize, page * pageSize);
|
|
66
|
+
return {
|
|
67
|
+
transactions: paginatedTx,
|
|
68
|
+
isLoading,
|
|
69
|
+
error,
|
|
70
|
+
page,
|
|
71
|
+
totalPages,
|
|
72
|
+
nextPage: () => setPage((p) => Math.min(p + 1, totalPages)),
|
|
73
|
+
prevPage: () => setPage((p) => Math.max(p - 1, 1)),
|
|
74
|
+
setPage,
|
|
75
|
+
refetch: fetchTransactions,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=useTransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTransactions.js","sourceRoot":"","sources":["../../src/hooks/useTransactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AgentIdentity, AgentBalance } from "@stwd/sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Agent data with auto-refresh.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useWallet(): {
|
|
6
|
+
agent: AgentIdentity | null;
|
|
7
|
+
balance: AgentBalance | null;
|
|
8
|
+
addresses: {
|
|
9
|
+
chainFamily: string;
|
|
10
|
+
address: string;
|
|
11
|
+
}[];
|
|
12
|
+
isLoading: boolean;
|
|
13
|
+
error: Error | null;
|
|
14
|
+
refetch: () => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=useWallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWallet.d.ts","sourceRoot":"","sources":["../../src/hooks/useWallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG7D;;GAEG;AACH,wBAAgB,SAAS;;;;qBAIyC,MAAM;iBAAW,MAAM;;;;;EAoCxF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { useStewardContext } from "../provider.js";
|
|
3
|
+
/**
|
|
4
|
+
* Agent data with auto-refresh.
|
|
5
|
+
*/
|
|
6
|
+
export function useWallet() {
|
|
7
|
+
const { client, agentId, pollInterval } = useStewardContext();
|
|
8
|
+
const [agent, setAgent] = useState(null);
|
|
9
|
+
const [balance, setBalance] = useState(null);
|
|
10
|
+
const [addresses, setAddresses] = useState([]);
|
|
11
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const fetchData = useCallback(async () => {
|
|
14
|
+
try {
|
|
15
|
+
const [agentData, balanceData, addressData] = await Promise.all([
|
|
16
|
+
client.getAgent(agentId),
|
|
17
|
+
client.getBalance(agentId).catch(() => null),
|
|
18
|
+
client.getAddresses(agentId).catch(() => ({ addresses: [] })),
|
|
19
|
+
]);
|
|
20
|
+
setAgent(agentData);
|
|
21
|
+
setBalance(balanceData);
|
|
22
|
+
setAddresses(addressData.addresses || []);
|
|
23
|
+
setError(null);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
setIsLoading(false);
|
|
30
|
+
}
|
|
31
|
+
}, [client, agentId]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
fetchData();
|
|
34
|
+
const interval = setInterval(fetchData, pollInterval);
|
|
35
|
+
return () => clearInterval(interval);
|
|
36
|
+
}, [fetchData, pollInterval]);
|
|
37
|
+
return {
|
|
38
|
+
agent,
|
|
39
|
+
balance,
|
|
40
|
+
addresses,
|
|
41
|
+
isLoading,
|
|
42
|
+
error,
|
|
43
|
+
refetch: fetchData,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=useWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWallet.js","sourceRoot":"","sources":["../../src/hooks/useWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAkD,EAAE,CAAC,CAAC;IAChG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC9D,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACxB,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBAC5C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;aAC9D,CAAC,CAAC;YACH,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,UAAU,CAAC,WAAW,CAAC,CAAC;YACxB,YAAY,CAAC,WAAW,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACtD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE9B,OAAO;QACL,KAAK;QACL,OAAO;QACP,SAAS;QACT,SAAS;QACT,KAAK;QACL,OAAO,EAAE,SAAS;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { StewardProvider } from "./provider.js";
|
|
2
|
+
export { WalletOverview } from "./components/WalletOverview.js";
|
|
3
|
+
export { TransactionHistory } from "./components/TransactionHistory.js";
|
|
4
|
+
export { PolicyControls } from "./components/PolicyControls.js";
|
|
5
|
+
export { ApprovalQueue } from "./components/ApprovalQueue.js";
|
|
6
|
+
export { SpendDashboard } from "./components/SpendDashboard.js";
|
|
7
|
+
export { useSteward } from "./hooks/useSteward.js";
|
|
8
|
+
export { useWallet } from "./hooks/useWallet.js";
|
|
9
|
+
export { useTransactions } from "./hooks/useTransactions.js";
|
|
10
|
+
export { usePolicies } from "./hooks/usePolicies.js";
|
|
11
|
+
export { useApprovals } from "./hooks/useApprovals.js";
|
|
12
|
+
export { useSpend } from "./hooks/useSpend.js";
|
|
13
|
+
export { truncateAddress, formatWei, formatBalance, formatTimestamp, formatRelativeTime, copyToClipboard, getExplorerTxUrl, getExplorerAddressUrl, getStatusColor, calcPercent, } from "./utils/format.js";
|
|
14
|
+
export { themeToCSS, mergeTheme, DEFAULT_THEME } from "./utils/theme.js";
|
|
15
|
+
export type { TenantControlPlaneConfig, TenantFeatureFlags, TenantTheme, PolicyExposure, PolicyExposureConfig, PolicyTemplate, CustomizableField, EnforcedPolicyOverride, ApprovalConfig, ApproverConfig, SecretRoutePreset, AgentDashboardResponse, PaginatedTransactionsResponse, SpendStats, ApprovalQueueEntry, StewardProviderProps, StewardContextValue, WalletOverviewProps, TransactionHistoryProps, PolicyControlsProps, ApprovalQueueProps, SpendDashboardProps, StewardClient, PolicyRule, PolicyType, TxStatus, TxRecord, AgentIdentity, AgentBalance, ChainFamily, PolicyResult, } from "./types.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EACL,eAAe,EACf,SAAS,EACT,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGzE,YAAY,EAEV,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,iBAAiB,EAEjB,sBAAsB,EACtB,6BAA6B,EAC7B,UAAU,EACV,kBAAkB,EAElB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EAEnB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ─── Provider ───
|
|
2
|
+
export { StewardProvider } from "./provider.js";
|
|
3
|
+
// ─── Components ───
|
|
4
|
+
export { WalletOverview } from "./components/WalletOverview.js";
|
|
5
|
+
export { TransactionHistory } from "./components/TransactionHistory.js";
|
|
6
|
+
export { PolicyControls } from "./components/PolicyControls.js";
|
|
7
|
+
export { ApprovalQueue } from "./components/ApprovalQueue.js";
|
|
8
|
+
export { SpendDashboard } from "./components/SpendDashboard.js";
|
|
9
|
+
// ─── Hooks ───
|
|
10
|
+
export { useSteward } from "./hooks/useSteward.js";
|
|
11
|
+
export { useWallet } from "./hooks/useWallet.js";
|
|
12
|
+
export { useTransactions } from "./hooks/useTransactions.js";
|
|
13
|
+
export { usePolicies } from "./hooks/usePolicies.js";
|
|
14
|
+
export { useApprovals } from "./hooks/useApprovals.js";
|
|
15
|
+
export { useSpend } from "./hooks/useSpend.js";
|
|
16
|
+
// ─── Utilities ───
|
|
17
|
+
export { truncateAddress, formatWei, formatBalance, formatTimestamp, formatRelativeTime, copyToClipboard, getExplorerTxUrl, getExplorerAddressUrl, getStatusColor, calcPercent, } from "./utils/format.js";
|
|
18
|
+
export { themeToCSS, mergeTheme, DEFAULT_THEME } from "./utils/theme.js";
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,oBAAoB;AACpB,OAAO,EACL,eAAe,EACf,SAAS,EACT,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { StewardProviderProps, StewardContextValue } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Provider that wraps all Steward components.
|
|
4
|
+
* Creates internal context with client, agent ID, theme, and feature flags.
|
|
5
|
+
*/
|
|
6
|
+
export declare function StewardProvider({ client, agentId, features: featureOverrides, theme: themeOverrides, pollInterval, children, }: StewardProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
/**
|
|
8
|
+
* Access the Steward context. Must be used inside <StewardProvider>.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useStewardContext(): StewardContextValue;
|
|
11
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAIpB,MAAM,YAAY,CAAC;AAiBpB;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EACP,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,cAAc,EACrB,YAAoB,EACpB,QAAQ,GACT,EAAE,oBAAoB,2CAgEtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CAMvD"}
|