@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.
Files changed (67) hide show
  1. package/README.md +99 -0
  2. package/dist/components/ApprovalQueue.d.ts +6 -0
  3. package/dist/components/ApprovalQueue.d.ts.map +1 -0
  4. package/dist/components/ApprovalQueue.js +44 -0
  5. package/dist/components/ApprovalQueue.js.map +1 -0
  6. package/dist/components/PolicyControls.d.ts +6 -0
  7. package/dist/components/PolicyControls.d.ts.map +1 -0
  8. package/dist/components/PolicyControls.js +224 -0
  9. package/dist/components/PolicyControls.js.map +1 -0
  10. package/dist/components/SpendDashboard.d.ts +6 -0
  11. package/dist/components/SpendDashboard.d.ts.map +1 -0
  12. package/dist/components/SpendDashboard.js +52 -0
  13. package/dist/components/SpendDashboard.js.map +1 -0
  14. package/dist/components/TransactionHistory.d.ts +6 -0
  15. package/dist/components/TransactionHistory.d.ts.map +1 -0
  16. package/dist/components/TransactionHistory.js +34 -0
  17. package/dist/components/TransactionHistory.js.map +1 -0
  18. package/dist/components/WalletOverview.d.ts +6 -0
  19. package/dist/components/WalletOverview.d.ts.map +1 -0
  20. package/dist/components/WalletOverview.js +40 -0
  21. package/dist/components/WalletOverview.js.map +1 -0
  22. package/dist/hooks/useApprovals.d.ts +14 -0
  23. package/dist/hooks/useApprovals.d.ts.map +1 -0
  24. package/dist/hooks/useApprovals.js +75 -0
  25. package/dist/hooks/useApprovals.js.map +1 -0
  26. package/dist/hooks/usePolicies.d.ts +14 -0
  27. package/dist/hooks/usePolicies.d.ts.map +1 -0
  28. package/dist/hooks/usePolicies.js +75 -0
  29. package/dist/hooks/usePolicies.js.map +1 -0
  30. package/dist/hooks/useSpend.d.ts +11 -0
  31. package/dist/hooks/useSpend.d.ts.map +1 -0
  32. package/dist/hooks/useSpend.js +42 -0
  33. package/dist/hooks/useSpend.js.map +1 -0
  34. package/dist/hooks/useSteward.d.ts +6 -0
  35. package/dist/hooks/useSteward.d.ts.map +1 -0
  36. package/dist/hooks/useSteward.js +8 -0
  37. package/dist/hooks/useSteward.js.map +1 -0
  38. package/dist/hooks/useTransactions.d.ts +24 -0
  39. package/dist/hooks/useTransactions.d.ts.map +1 -0
  40. package/dist/hooks/useTransactions.js +78 -0
  41. package/dist/hooks/useTransactions.js.map +1 -0
  42. package/dist/hooks/useWallet.d.ts +16 -0
  43. package/dist/hooks/useWallet.d.ts.map +1 -0
  44. package/dist/hooks/useWallet.js +46 -0
  45. package/dist/hooks/useWallet.js.map +1 -0
  46. package/dist/index.d.ts +16 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +19 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/provider.d.ts +11 -0
  51. package/dist/provider.d.ts.map +1 -0
  52. package/dist/provider.js +81 -0
  53. package/dist/provider.js.map +1 -0
  54. package/dist/styles.css +796 -0
  55. package/dist/types.d.ts +223 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/utils/format.d.ts +41 -0
  60. package/dist/utils/format.d.ts.map +1 -0
  61. package/dist/utils/format.js +138 -0
  62. package/dist/utils/format.js.map +1 -0
  63. package/dist/utils/theme.d.ts +5 -0
  64. package/dist/utils/theme.d.ts.map +1 -0
  65. package/dist/utils/theme.js +35 -0
  66. package/dist/utils/theme.js.map +1 -0
  67. 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,6 @@
1
+ import type { StewardContextValue } from "../types.js";
2
+ /**
3
+ * Core context hook — access client, agentId, features, theme.
4
+ */
5
+ export declare function useSteward(): StewardContextValue;
6
+ //# sourceMappingURL=useSteward.d.ts.map
@@ -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,8 @@
1
+ import { useStewardContext } from "../provider.js";
2
+ /**
3
+ * Core context hook — access client, agentId, features, theme.
4
+ */
5
+ export function useSteward() {
6
+ return useStewardContext();
7
+ }
8
+ //# sourceMappingURL=useSteward.js.map
@@ -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"}
@@ -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"}