@xian-tech/web-kit 0.1.12-beta.2

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 ADDED
@@ -0,0 +1,24 @@
1
+ # @xian-tech/web-kit
2
+
3
+ This package owns the reusable browser-app glue shared by Xian web frontends:
4
+ wallet connection helpers, RPC client persistence, formatting, toasts, and
5
+ React integration.
6
+
7
+ It builds on `@xian-tech/client` and `@xian-tech/provider` so individual web
8
+ apps do not re-implement the same wallet/RPC plumbing.
9
+
10
+ ## Contents
11
+
12
+ - `src/wallet.ts`, `src/wallet-react.tsx`: injected-wallet connection helpers
13
+ plus the React wallet context and hooks (`WalletProvider`,
14
+ `useXianWallet`, `connectWallet`, `sendCall`).
15
+ - `src/rpc.ts`, `src/rpc-react.ts`: RPC client creation and persisted
16
+ RPC-endpoint stores (`createXianRpcStore`).
17
+ - `src/toast-react.tsx`: toast provider and helpers.
18
+ - `src/format.ts`: address, number, date, and clipboard utilities
19
+ (`shortAddress`, …).
20
+
21
+ ## Notes
22
+
23
+ - Keep this package app-agnostic: shared helpers only, no app-specific
24
+ business logic or styling systems.
@@ -0,0 +1,5 @@
1
+ export declare function toNumber(value: unknown): number;
2
+ export declare function shortAddress(value: string | null | undefined, head?: number, tail?: number): string;
3
+ export declare function copyToClipboard(text: string): Promise<boolean>;
4
+ export declare function maybeDate(value: unknown): Date | null;
5
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmB/C;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,IAAI,SAAI,EACR,IAAI,SAAI,GACP,MAAM,CAQR;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CA4BrD"}
package/dist/format.js ADDED
@@ -0,0 +1,61 @@
1
+ export function toNumber(value) {
2
+ if (value == null) {
3
+ return 0;
4
+ }
5
+ if (typeof value === "number") {
6
+ return Number.isFinite(value) ? value : 0;
7
+ }
8
+ if (typeof value === "bigint") {
9
+ return Number(value);
10
+ }
11
+ if (typeof value === "boolean") {
12
+ return value ? 1 : 0;
13
+ }
14
+ const text = String(value).trim();
15
+ if (!text || text === "null" || text === "undefined") {
16
+ return 0;
17
+ }
18
+ const parsed = Number(text);
19
+ return Number.isFinite(parsed) ? parsed : 0;
20
+ }
21
+ export function shortAddress(value, head = 6, tail = 4) {
22
+ if (!value) {
23
+ return "—";
24
+ }
25
+ if (value.length <= head + tail + 1) {
26
+ return value;
27
+ }
28
+ return `${value.slice(0, head)}…${value.slice(-tail)}`;
29
+ }
30
+ export async function copyToClipboard(text) {
31
+ if (typeof navigator === "undefined" || !navigator.clipboard) {
32
+ return false;
33
+ }
34
+ try {
35
+ await navigator.clipboard.writeText(text);
36
+ return true;
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ export function maybeDate(value) {
43
+ if (value == null) {
44
+ return null;
45
+ }
46
+ if (typeof value === "object" && "__time__" in value) {
47
+ const rawParts = value.__time__;
48
+ if (Array.isArray(rawParts) && rawParts.length >= 6) {
49
+ const parts = rawParts.map(toNumber);
50
+ return new Date(Date.UTC(parts[0] ?? 0, (parts[1] ?? 1) - 1, parts[2] ?? 1, parts[3] ?? 0, parts[4] ?? 0, parts[5] ?? 0, Math.floor((parts[6] ?? 0) / 1000)));
51
+ }
52
+ }
53
+ if (typeof value === "string" || typeof value === "number") {
54
+ const date = new Date(value);
55
+ if (!Number.isNaN(date.getTime())) {
56
+ return date;
57
+ }
58
+ }
59
+ return null;
60
+ }
61
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "./format.js";
2
+ export * from "./rpc.js";
3
+ export * from "./rpc-react.js";
4
+ export * from "./toast-react.js";
5
+ export * from "./wallet.js";
6
+ export * from "./wallet-react.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from "./format.js";
2
+ export * from "./rpc.js";
3
+ export * from "./rpc-react.js";
4
+ export * from "./toast-react.js";
5
+ export * from "./wallet.js";
6
+ export * from "./wallet-react.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RpcClientStore } from "./rpc.js";
2
+ export declare function createUseRpcEpoch<TClient>(store: Pick<RpcClientStore<TClient>, "getRpcEpoch" | "subscribeRpcEpoch">): () => number;
3
+ //# sourceMappingURL=rpc-react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-react.d.ts","sourceRoot":"","sources":["../src/rpc-react.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CACpD,cAAc,CAAC,OAAO,CAAC,EACvB,aAAa,GAAG,mBAAmB,CACpC,SACgC,MAAM,CAKtC"}
@@ -0,0 +1,9 @@
1
+ import { useEffect, useState } from "react";
2
+ export function createUseRpcEpoch(store) {
3
+ return function useRpcEpoch() {
4
+ const [epoch, setEpoch] = useState(store.getRpcEpoch);
5
+ useEffect(() => store.subscribeRpcEpoch(setEpoch), []);
6
+ return epoch;
7
+ };
8
+ }
9
+ //# sourceMappingURL=rpc-react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-react.js","sourceRoot":"","sources":["../src/rpc-react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAI5C,MAAM,UAAU,iBAAiB,CAAU,KAG1C;IACC,OAAO,SAAS,WAAW;QACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtD,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ export interface RpcStorage {
2
+ getItem(key: string): string | null;
3
+ setItem(key: string, value: string): void;
4
+ }
5
+ export interface RpcClientStoreOptions<TClient> {
6
+ defaultRpcUrl: string;
7
+ storageKey?: string;
8
+ storage?: RpcStorage;
9
+ createClient: (url: string) => TClient;
10
+ fetchFn?: typeof fetch;
11
+ }
12
+ export interface RpcClientStore<TClient> {
13
+ getRpcUrl(): string;
14
+ setRpcUrl(url: string): void;
15
+ getRpcEpoch(): number;
16
+ subscribeRpcEpoch(cb: (epoch: number) => void): () => void;
17
+ getClient(): TClient;
18
+ pingRpc(url: string, timeoutMs?: number): Promise<boolean>;
19
+ }
20
+ export declare function createXianRpcStore<TClient>(options: RpcClientStoreOptions<TClient>): RpcClientStore<TClient>;
21
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC,SAAS,IAAI,MAAM,CAAC;IACpB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,IAAI,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3D,SAAS,IAAI,OAAO,CAAC;IACrB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5D;AAaD,wBAAgB,kBAAkB,CAAC,OAAO,EACxC,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,GACtC,cAAc,CAAC,OAAO,CAAC,CAoEzB"}
package/dist/rpc.js ADDED
@@ -0,0 +1,72 @@
1
+ function defaultStorage() {
2
+ if (typeof localStorage === "undefined") {
3
+ return undefined;
4
+ }
5
+ return localStorage;
6
+ }
7
+ function cleanRpcUrl(url) {
8
+ return url.trim().replace(/\/+$/, "");
9
+ }
10
+ export function createXianRpcStore(options) {
11
+ const storage = options.storage ?? defaultStorage();
12
+ const createClient = options.createClient;
13
+ let cached = null;
14
+ let epoch = 0;
15
+ const subscribers = new Set();
16
+ function getRpcUrl() {
17
+ if (!options.storageKey) {
18
+ return options.defaultRpcUrl;
19
+ }
20
+ return storage?.getItem(options.storageKey) ?? options.defaultRpcUrl;
21
+ }
22
+ function setRpcUrl(url) {
23
+ const cleaned = cleanRpcUrl(url);
24
+ if (cleaned === getRpcUrl()) {
25
+ return;
26
+ }
27
+ if (options.storageKey) {
28
+ storage?.setItem(options.storageKey, cleaned);
29
+ }
30
+ cached = null;
31
+ epoch += 1;
32
+ for (const cb of subscribers) {
33
+ cb(epoch);
34
+ }
35
+ }
36
+ function getRpcEpoch() {
37
+ return epoch;
38
+ }
39
+ function subscribeRpcEpoch(cb) {
40
+ subscribers.add(cb);
41
+ return () => {
42
+ subscribers.delete(cb);
43
+ };
44
+ }
45
+ function getClient() {
46
+ const url = getRpcUrl();
47
+ if (!cached || cached.url !== url) {
48
+ cached = { url, client: createClient(url) };
49
+ }
50
+ return cached.client;
51
+ }
52
+ async function pingRpc(url, timeoutMs = 4000) {
53
+ try {
54
+ const response = await (options.fetchFn ?? fetch)(`${cleanRpcUrl(url)}/status`, {
55
+ signal: AbortSignal.timeout(timeoutMs)
56
+ });
57
+ return response.ok;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ return {
64
+ getRpcUrl,
65
+ setRpcUrl,
66
+ getRpcEpoch,
67
+ subscribeRpcEpoch,
68
+ getClient,
69
+ pingRpc
70
+ };
71
+ }
72
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAsBA,SAAS,cAAc;IACrB,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAuC;IAEvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAE1C,IAAI,MAAM,GAA4C,IAAI,CAAC;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEvD,SAAS,SAAS;QAChB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,aAAa,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC;IACvE,CAAC;IAED,SAAS,SAAS,CAAC,GAAW;QAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,SAAS,EAAE,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,GAAG,IAAI,CAAC;QACd,KAAK,IAAI,CAAC,CAAC;QACX,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,EAAE,CAAC,KAAK,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,SAAS,WAAW;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,iBAAiB,CAAC,EAA2B;QACpD,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,SAAS;QAChB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAClC,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;QAClD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC9E,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;aACvC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,SAAS;QACT,WAAW;QACX,iBAAiB;QACjB,SAAS;QACT,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type ReactNode } from "react";
2
+ export type ToastKind = "info" | "success" | "warning" | "error" | "pending";
3
+ export interface Toast {
4
+ id: number;
5
+ kind: ToastKind;
6
+ title: string;
7
+ message?: string;
8
+ txHash?: string;
9
+ autoDismissMs?: number;
10
+ }
11
+ export interface ToastContextValue {
12
+ toasts: Toast[];
13
+ push(toast: Omit<Toast, "id">): number;
14
+ dismiss(id: number): void;
15
+ update(id: number, patch: Partial<Toast>): void;
16
+ }
17
+ export declare function ToastProvider({ children }: {
18
+ children: ReactNode;
19
+ }): import("react/jsx-runtime").JSX.Element;
20
+ export declare function useToasts(): ToastContextValue;
21
+ //# sourceMappingURL=toast-react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-react.d.ts","sourceRoot":"","sources":["../src/toast-react.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7E,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;IACvC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;CACjD;AAqBD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CA0ClE;AAED,wBAAgB,SAAS,IAAI,iBAAiB,CAM7C"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useMemo, useState } from "react";
3
+ const ToastContext = createContext(null);
4
+ let nextToastId = 1;
5
+ function dismissDelayMs(toast) {
6
+ if (toast.kind === "pending") {
7
+ return null;
8
+ }
9
+ return toast.autoDismissMs ?? (toast.kind === "error" ? 8000 : 7000);
10
+ }
11
+ function scheduleDismiss(toast, dismiss) {
12
+ const delay = dismissDelayMs(toast);
13
+ if (delay == null) {
14
+ return;
15
+ }
16
+ setTimeout(() => dismiss(toast.id), delay);
17
+ }
18
+ export function ToastProvider({ children }) {
19
+ const [toasts, setToasts] = useState([]);
20
+ const dismiss = useCallback((id) => {
21
+ setToasts((current) => current.filter((toast) => toast.id !== id));
22
+ }, []);
23
+ const push = useCallback((toast) => {
24
+ const nextToast = { ...toast, id: nextToastId++ };
25
+ setToasts((current) => [...current, nextToast]);
26
+ scheduleDismiss(nextToast, dismiss);
27
+ return nextToast.id;
28
+ }, [dismiss]);
29
+ const update = useCallback((id, patch) => {
30
+ let updatedToast = null;
31
+ setToasts((current) => current.map((toast) => {
32
+ if (toast.id !== id) {
33
+ return toast;
34
+ }
35
+ updatedToast = { ...toast, ...patch };
36
+ return updatedToast;
37
+ }));
38
+ if (updatedToast && patch.kind && patch.kind !== "pending") {
39
+ scheduleDismiss(updatedToast, dismiss);
40
+ }
41
+ }, [dismiss]);
42
+ const value = useMemo(() => ({ toasts, push, dismiss, update }), [toasts, push, dismiss, update]);
43
+ return _jsx(ToastContext.Provider, { value: value, children: children });
44
+ }
45
+ export function useToasts() {
46
+ const value = useContext(ToastContext);
47
+ if (!value) {
48
+ throw new Error("useToasts must be used inside <ToastProvider>");
49
+ }
50
+ return value;
51
+ }
52
+ //# sourceMappingURL=toast-react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-react.js","sourceRoot":"","sources":["../src/toast-react.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type ReactNode } from "react";
2
+ import type { InjectedXianWallet, XianInjectionTarget } from "@xian-tech/provider";
3
+ import { type WalletInfo } from "./wallet.js";
4
+ export type WalletStatus = "idle" | "missing" | "connected" | "error";
5
+ export interface WalletState {
6
+ wallet: InjectedXianWallet | null;
7
+ available: boolean;
8
+ account: string | null;
9
+ chainId: string | null;
10
+ info: WalletInfo | null;
11
+ connecting: boolean;
12
+ error: string | null;
13
+ status: WalletStatus;
14
+ }
15
+ export interface WalletContextValue extends WalletState {
16
+ connect: () => Promise<string | null>;
17
+ refresh: () => Promise<void>;
18
+ }
19
+ export interface UseXianWalletOptions {
20
+ target?: XianInjectionTarget;
21
+ injectionTimeoutMs?: number;
22
+ }
23
+ export declare function useXianWallet(options?: UseXianWalletOptions): WalletContextValue;
24
+ export declare function WalletProvider({ children, target, injectionTimeoutMs }: {
25
+ children: ReactNode;
26
+ } & UseXianWalletOptions): import("react/jsx-runtime").JSX.Element;
27
+ export declare function useWallet(): WalletContextValue;
28
+ //# sourceMappingURL=wallet-react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-react.d.ts","sourceRoot":"","sources":["../src/wallet-react.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EASL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAeD,wBAAgB,aAAa,CAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,kBAAkB,CAqKpB;AAID,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,kBAAkB,EACnB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,oBAAoB,2CAGvB;AAED,wBAAgB,SAAS,IAAI,kBAAkB,CAM9C"}
@@ -0,0 +1,178 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
3
+ import { getAccounts, getInjectedWallet, getWalletInfo, isWalletAvailable, onAccountsChanged, onChainChanged, onInjectedWalletInitialized, waitForInjectedWallet } from "./wallet.js";
4
+ function initialWalletState(target) {
5
+ return {
6
+ wallet: getInjectedWallet({ target }) ?? null,
7
+ available: isWalletAvailable({ target }),
8
+ account: null,
9
+ chainId: null,
10
+ info: null,
11
+ connecting: false,
12
+ error: null,
13
+ status: "idle"
14
+ };
15
+ }
16
+ export function useXianWallet(options) {
17
+ const [state, setState] = useState(() => initialWalletState(options?.target));
18
+ const connectInFlight = useRef(null);
19
+ const refresh = useCallback(async () => {
20
+ const wallet = getInjectedWallet({ target: options?.target });
21
+ if (!wallet) {
22
+ setState((current) => ({
23
+ ...current,
24
+ wallet: null,
25
+ available: false,
26
+ account: null,
27
+ info: null,
28
+ connecting: false,
29
+ status: "missing"
30
+ }));
31
+ return;
32
+ }
33
+ try {
34
+ const info = await getWalletInfo({ target: options?.target });
35
+ const account = info.selectedAccount ?? info.accounts[0] ?? null;
36
+ setState((current) => ({
37
+ ...current,
38
+ wallet,
39
+ available: true,
40
+ connecting: false,
41
+ info,
42
+ account,
43
+ chainId: info.chainId ?? current.chainId,
44
+ error: null,
45
+ status: account ? "connected" : "idle"
46
+ }));
47
+ }
48
+ catch {
49
+ try {
50
+ const accounts = await getAccounts({ target: options?.target });
51
+ setState((current) => ({
52
+ ...current,
53
+ wallet,
54
+ available: true,
55
+ connecting: false,
56
+ account: accounts[0] ?? null,
57
+ error: null,
58
+ status: accounts[0] ? "connected" : "idle"
59
+ }));
60
+ }
61
+ catch {
62
+ setState((current) => ({
63
+ ...current,
64
+ wallet,
65
+ available: true,
66
+ connecting: false
67
+ }));
68
+ }
69
+ }
70
+ }, [options?.target]);
71
+ const connect = useCallback(async () => {
72
+ if (connectInFlight.current) {
73
+ return connectInFlight.current;
74
+ }
75
+ setState((current) => ({ ...current, connecting: true, error: null }));
76
+ const pending = (async () => {
77
+ try {
78
+ const wallet = await waitForInjectedWallet({
79
+ target: options?.target,
80
+ timeoutMs: options?.injectionTimeoutMs ?? 800
81
+ });
82
+ if (!wallet) {
83
+ setState((current) => ({
84
+ ...current,
85
+ wallet: null,
86
+ available: false,
87
+ connecting: false,
88
+ status: "missing",
89
+ error: "No injected Xian wallet found"
90
+ }));
91
+ return null;
92
+ }
93
+ const accounts = await wallet.connect();
94
+ const account = accounts[0] ?? null;
95
+ const chainId = await wallet.getChainId().catch(() => null);
96
+ setState((current) => ({
97
+ ...current,
98
+ wallet,
99
+ available: true,
100
+ connecting: false,
101
+ account,
102
+ chainId: chainId ?? current.chainId,
103
+ error: null,
104
+ status: account ? "connected" : "idle"
105
+ }));
106
+ void refresh();
107
+ return account;
108
+ }
109
+ catch (error) {
110
+ setState((current) => ({
111
+ ...current,
112
+ connecting: false,
113
+ status: "error",
114
+ error: error instanceof Error ? error.message : "Failed to connect"
115
+ }));
116
+ return null;
117
+ }
118
+ finally {
119
+ connectInFlight.current = null;
120
+ }
121
+ })();
122
+ connectInFlight.current = pending;
123
+ return pending;
124
+ }, [options?.injectionTimeoutMs, options?.target, refresh]);
125
+ useEffect(() => {
126
+ if (typeof window === "undefined") {
127
+ return;
128
+ }
129
+ const detect = () => {
130
+ if (isWalletAvailable({ target: options?.target })) {
131
+ setState((current) => ({ ...current, available: true }));
132
+ void refresh();
133
+ window.clearInterval(timer);
134
+ }
135
+ };
136
+ const timer = window.setInterval(detect, 600);
137
+ const stopInitialized = onInjectedWalletInitialized(detect, options?.target);
138
+ detect();
139
+ return () => {
140
+ window.clearInterval(timer);
141
+ stopInitialized();
142
+ };
143
+ }, [options?.target, refresh]);
144
+ useEffect(() => {
145
+ if (!state.wallet) {
146
+ return;
147
+ }
148
+ const stopAccounts = onAccountsChanged((accounts) => {
149
+ setState((current) => ({
150
+ ...current,
151
+ account: accounts[0] ?? null,
152
+ status: accounts[0] ? "connected" : "idle"
153
+ }));
154
+ void refresh();
155
+ }, { target: options?.target });
156
+ const stopChain = onChainChanged((chainId) => {
157
+ setState((current) => ({ ...current, chainId }));
158
+ }, { target: options?.target });
159
+ return () => {
160
+ stopAccounts();
161
+ stopChain();
162
+ };
163
+ }, [options?.target, refresh, state.wallet]);
164
+ return useMemo(() => ({ ...state, connect, refresh }), [state, connect, refresh]);
165
+ }
166
+ const WalletContext = createContext(null);
167
+ export function WalletProvider({ children, target, injectionTimeoutMs }) {
168
+ const value = useXianWallet({ target, injectionTimeoutMs });
169
+ return _jsx(WalletContext.Provider, { value: value, children: children });
170
+ }
171
+ export function useWallet() {
172
+ const value = useContext(WalletContext);
173
+ if (!value) {
174
+ throw new Error("useWallet must be used inside <WalletProvider>");
175
+ }
176
+ return value;
177
+ }
178
+ //# sourceMappingURL=wallet-react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-react.js","sourceRoot":"","sources":["../src/wallet-react.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { InjectedXianWallet, type BroadcastMode, type FindInjectedXianProviderOptions, type TransactionSubmission, type WaitForInjectedXianProviderOptions, type XianInjectionTarget, type XianTransactionIntent, type XianWalletInfo } from "@xian-tech/provider";
2
+ export type WalletInfo = XianWalletInfo;
3
+ export type CallIntent = XianTransactionIntent;
4
+ export interface SendCallResult extends Partial<TransactionSubmission> {
5
+ receipt?: {
6
+ success: boolean;
7
+ message?: unknown;
8
+ txHash?: string;
9
+ };
10
+ error?: unknown;
11
+ [key: string]: unknown;
12
+ }
13
+ export interface SendCallOptions {
14
+ mode?: BroadcastMode;
15
+ waitForTx?: boolean;
16
+ timeoutMs?: number;
17
+ pollIntervalMs?: number;
18
+ wallet?: InjectedXianWallet;
19
+ target?: XianInjectionTarget;
20
+ }
21
+ export declare function getInjectedWallet(options?: FindInjectedXianProviderOptions): InjectedXianWallet | undefined;
22
+ export declare function waitForInjectedWallet(options?: WaitForInjectedXianProviderOptions): Promise<InjectedXianWallet | undefined>;
23
+ export declare function isWalletAvailable(options?: FindInjectedXianProviderOptions): boolean;
24
+ export declare function connectWallet(options?: FindInjectedXianProviderOptions): Promise<string[]>;
25
+ export declare function disconnectWallet(options?: FindInjectedXianProviderOptions): Promise<unknown>;
26
+ export declare function getAccounts(options?: FindInjectedXianProviderOptions): Promise<string[]>;
27
+ export declare function getWalletInfo(options?: FindInjectedXianProviderOptions): Promise<WalletInfo>;
28
+ export declare function signMessage(message: string, options?: FindInjectedXianProviderOptions): Promise<string>;
29
+ export declare function sendCall(intent: CallIntent, options?: SendCallOptions): Promise<SendCallResult>;
30
+ export declare function sendCallFailureMessage(result: SendCallResult): string | null;
31
+ export declare function assertSendCallSucceeded(result: SendCallResult): void;
32
+ export declare function onAccountsChanged(cb: (accounts: string[]) => void, options?: FindInjectedXianProviderOptions): () => void;
33
+ export declare function onChainChanged(cb: (chainId: string) => void, options?: FindInjectedXianProviderOptions): () => void;
34
+ export declare function onInjectedWalletInitialized(cb: () => void, target?: XianInjectionTarget): () => void;
35
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAIlB,KAAK,aAAa,EAClB,KAAK,+BAA+B,EAEpC,KAAK,qBAAqB,EAC1B,KAAK,kCAAkC,EACvC,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AACxC,MAAM,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAE/C,MAAM,WAAW,cAAe,SAAQ,OAAO,CAAC,qBAAqB,CAAC;IACpE,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAkBD,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,+BAA+B,GACxC,kBAAkB,GAAG,SAAS,CAQhC;AAED,wBAAsB,qBAAqB,CACzC,OAAO,CAAC,EAAE,kCAAkC,GAC3C,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAgCzC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,+BAA+B,GAAG,OAAO,CAEpF;AAYD,wBAAsB,aAAa,CACjC,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,WAAW,CAC/B,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB;AAED,wBAAsB,aAAa,CACjC,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,CAQzB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAuB5E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKpE;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,EAChC,OAAO,CAAC,EAAE,+BAA+B,GACxC,MAAM,IAAI,CAQZ;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAC7B,OAAO,CAAC,EAAE,+BAA+B,GACxC,MAAM,IAAI,CAQZ;AAED,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,MAAM,IAAI,EACd,MAAM,CAAC,EAAE,mBAAmB,GAC3B,MAAM,IAAI,CAOZ"}
package/dist/wallet.js ADDED
@@ -0,0 +1,141 @@
1
+ import { InjectedXianWallet, XIAN_INITIALIZED_EVENT, getInjectedXianProvider, waitForInjectedXianProvider } from "@xian-tech/provider";
2
+ function resolveTarget(target) {
3
+ if (target) {
4
+ return target;
5
+ }
6
+ if (typeof window !== "undefined") {
7
+ return window;
8
+ }
9
+ return undefined;
10
+ }
11
+ function walletFromRecord(record) {
12
+ return record ? InjectedXianWallet.fromRecord(record) : undefined;
13
+ }
14
+ export function getInjectedWallet(options) {
15
+ const target = resolveTarget(options?.target);
16
+ if (!target) {
17
+ return undefined;
18
+ }
19
+ const record = getInjectedXianProvider({ ...options, target });
20
+ return walletFromRecord(record);
21
+ }
22
+ export async function waitForInjectedWallet(options) {
23
+ const target = resolveTarget(options?.target);
24
+ if (!target) {
25
+ return undefined;
26
+ }
27
+ const existing = getInjectedWallet({ ...options, target });
28
+ if (existing) {
29
+ return existing;
30
+ }
31
+ const providerRecord = await waitForInjectedXianProvider({ ...options, target });
32
+ const wallet = walletFromRecord(providerRecord);
33
+ if (wallet) {
34
+ return wallet;
35
+ }
36
+ const timeoutMs = options?.timeoutMs ?? 0;
37
+ if (timeoutMs <= 0) {
38
+ return getInjectedWallet({ ...options, target });
39
+ }
40
+ const started = Date.now();
41
+ return new Promise((resolve) => {
42
+ const interval = setInterval(() => {
43
+ const found = getInjectedWallet({ ...options, target });
44
+ if (found || Date.now() - started >= timeoutMs) {
45
+ clearInterval(interval);
46
+ resolve(found);
47
+ }
48
+ }, 50);
49
+ });
50
+ }
51
+ export function isWalletAvailable(options) {
52
+ return getInjectedWallet(options) != null;
53
+ }
54
+ async function requireWallet(options) {
55
+ const wallet = getInjectedWallet(options);
56
+ if (!wallet) {
57
+ throw new Error("Xian wallet not detected. Install the Xian browser wallet to continue.");
58
+ }
59
+ return wallet;
60
+ }
61
+ export async function connectWallet(options) {
62
+ return (await requireWallet(options)).connect();
63
+ }
64
+ export async function disconnectWallet(options) {
65
+ return (await requireWallet(options)).disconnect();
66
+ }
67
+ export async function getAccounts(options) {
68
+ return (await requireWallet(options)).getAccounts();
69
+ }
70
+ export async function getWalletInfo(options) {
71
+ return (await requireWallet(options)).getWalletInfo();
72
+ }
73
+ export async function signMessage(message, options) {
74
+ return (await requireWallet(options)).signMessage(message);
75
+ }
76
+ export async function sendCall(intent, options) {
77
+ const wallet = options?.wallet ?? (await requireWallet({ target: options?.target }));
78
+ return wallet.sendCall(intent, {
79
+ mode: options?.mode,
80
+ waitForTx: options?.waitForTx ?? true,
81
+ timeoutMs: options?.timeoutMs ?? 30_000,
82
+ pollIntervalMs: options?.pollIntervalMs
83
+ });
84
+ }
85
+ export function sendCallFailureMessage(result) {
86
+ if (result.receipt?.success === false) {
87
+ return String(result.receipt.message ?? result.message ?? "Transaction failed");
88
+ }
89
+ if (result.accepted === false) {
90
+ return typeof result.message === "string"
91
+ ? result.message
92
+ : "Transaction was rejected by the node";
93
+ }
94
+ if (result.submitted === false) {
95
+ return typeof result.message === "string"
96
+ ? result.message
97
+ : "Transaction was not submitted";
98
+ }
99
+ if (result.finalized === false) {
100
+ return typeof result.message === "string"
101
+ ? result.message
102
+ : "Transaction was not finalized before the timeout";
103
+ }
104
+ if (typeof result.error === "string" && result.error.trim()) {
105
+ return result.error;
106
+ }
107
+ return null;
108
+ }
109
+ export function assertSendCallSucceeded(result) {
110
+ const message = sendCallFailureMessage(result);
111
+ if (message) {
112
+ throw new Error(message);
113
+ }
114
+ }
115
+ export function onAccountsChanged(cb, options) {
116
+ const wallet = getInjectedWallet(options);
117
+ if (!wallet) {
118
+ return () => { };
119
+ }
120
+ const handler = (accounts) => cb(accounts);
121
+ wallet.on("accountsChanged", handler);
122
+ return () => wallet.removeListener("accountsChanged", handler);
123
+ }
124
+ export function onChainChanged(cb, options) {
125
+ const wallet = getInjectedWallet(options);
126
+ if (!wallet) {
127
+ return () => { };
128
+ }
129
+ const handler = (chainId) => cb(chainId);
130
+ wallet.on("chainChanged", handler);
131
+ return () => wallet.removeListener("chainChanged", handler);
132
+ }
133
+ export function onInjectedWalletInitialized(cb, target) {
134
+ const resolvedTarget = resolveTarget(target);
135
+ if (!resolvedTarget) {
136
+ return () => { };
137
+ }
138
+ resolvedTarget.addEventListener(XIAN_INITIALIZED_EVENT, cb);
139
+ return () => resolvedTarget.removeEventListener(XIAN_INITIALIZED_EVENT, cb);
140
+ }
141
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@xian-tech/web-kit",
3
+ "version": "0.1.12-beta.2",
4
+ "description": "Shared Xian web application wallet, RPC, toast, and formatting helpers",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/xian-technology/xian-js.git",
8
+ "directory": "packages/web-kit"
9
+ },
10
+ "type": "module",
11
+ "sideEffects": false,
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "default": "./dist/index.js"
17
+ }
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.json",
27
+ "typecheck": "tsc --noEmit -p tsconfig.json"
28
+ },
29
+ "dependencies": {
30
+ "@xian-tech/provider": "0.1.12-beta.2"
31
+ },
32
+ "peerDependencies": {
33
+ "react": "^18.0.0 || ^19.0.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/react": "^19.2.14",
37
+ "react": "^19.2.5"
38
+ }
39
+ }