@1sat/react 0.0.75 → 0.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export * from "@1sat/connect";
6
6
  // src/wallet-context.tsx
7
7
  import {
8
8
  connectWallet,
9
+ createWalletSession,
9
10
  getAvailableProviders,
10
11
  reconnectSigmaWallet
11
12
  } from "@1sat/connect";
@@ -53,6 +54,7 @@ var WalletContext = createContext(null);
53
54
  function WalletProvider({
54
55
  autoReconnect = false,
55
56
  autoDetect = true,
57
+ pollIntervalMs,
56
58
  providers,
57
59
  children
58
60
  }) {
@@ -60,28 +62,59 @@ function WalletProvider({
60
62
  const [status, setStatus] = useState("disconnected");
61
63
  const [identityKey, setIdentityKey] = useState(null);
62
64
  const [providerType, setProviderType] = useState(null);
65
+ const [disconnectReason, setDisconnectReason] = useState(null);
63
66
  const [error, setError] = useState(null);
64
- const disconnectRef = useRef(null);
67
+ const sessionRef = useRef(null);
65
68
  const availableProviders = useMemo(() => getAvailableProviders({ providers }), [providers]);
66
- const applyResult = useCallback((result) => {
67
- setWallet(result.wallet);
68
- setIdentityKey(result.identityKey);
69
- setProviderType(result.provider);
70
- setStatus("connected");
71
- setError(null);
72
- disconnectRef.current = result.disconnect;
73
- saveStored(result.provider);
74
- }, []);
75
- const disconnect = useCallback(() => {
76
- disconnectRef.current?.();
77
- disconnectRef.current = null;
69
+ const clearSessionState = useCallback((reason) => {
78
70
  setWallet(null);
79
71
  setIdentityKey(null);
80
72
  setProviderType(null);
81
73
  setStatus("disconnected");
74
+ setDisconnectReason(reason);
82
75
  setError(null);
83
76
  clearStored();
84
77
  }, []);
78
+ const bindSession = useCallback((result) => {
79
+ const previous = sessionRef.current;
80
+ sessionRef.current = null;
81
+ previous?.stop();
82
+ if (previous?.status === "connected") {
83
+ previous.disconnect("manual");
84
+ }
85
+ const session = createWalletSession(result, { pollIntervalMs });
86
+ sessionRef.current = session;
87
+ session.on("identityChange", ({ next }) => {
88
+ if (sessionRef.current !== session)
89
+ return;
90
+ setIdentityKey(next);
91
+ });
92
+ session.on("disconnected", ({ reason }) => {
93
+ if (sessionRef.current !== session)
94
+ return;
95
+ sessionRef.current = null;
96
+ clearSessionState(reason);
97
+ });
98
+ setWallet(result.wallet);
99
+ setIdentityKey(result.identityKey);
100
+ setProviderType(result.provider);
101
+ setStatus("connected");
102
+ setDisconnectReason(null);
103
+ setError(null);
104
+ saveStored(result.provider);
105
+ session.start();
106
+ }, [pollIntervalMs, clearSessionState]);
107
+ const applyResult = useCallback((result) => {
108
+ bindSession(result);
109
+ }, [bindSession]);
110
+ const disconnect = useCallback(() => {
111
+ const session = sessionRef.current;
112
+ sessionRef.current = null;
113
+ if (session && session.status === "connected") {
114
+ session.disconnect("manual");
115
+ }
116
+ clearSessionState("manual");
117
+ }, [clearSessionState]);
85
118
  const connect = useCallback(async (selectedType) => {
86
119
  setError(null);
87
120
  if (selectedType) {
@@ -171,12 +204,18 @@ function WalletProvider({
171
204
  setStatus("disconnected");
172
205
  });
173
206
  }, []);
207
+ useEffect(() => {
208
+ return () => {
209
+ sessionRef.current?.stop();
210
+ };
211
+ }, []);
174
212
  const value = useMemo(() => ({
175
213
  wallet,
176
214
  status,
177
215
  identityKey,
178
216
  providerType,
179
217
  availableProviders,
218
+ disconnectReason,
180
219
  connect,
181
220
  applyResult,
182
221
  disconnect,
@@ -187,6 +226,7 @@ function WalletProvider({
187
226
  identityKey,
188
227
  providerType,
189
228
  availableProviders,
229
+ disconnectReason,
190
230
  connect,
191
231
  applyResult,
192
232
  disconnect,
@@ -1,4 +1,4 @@
1
- import { type AvailableProvider, type ConnectWalletResult, type WalletProviderConfig } from '@1sat/connect';
1
+ import { type AvailableProvider, type ConnectWalletResult, type DisconnectReason, type WalletProviderConfig } from '@1sat/connect';
2
2
  import type { WalletInterface } from '@bsv/sdk';
3
3
  import { type ReactNode } from 'react';
4
4
  export type WalletStatus = 'disconnected' | 'detecting' | 'selecting' | 'connecting' | 'connected';
@@ -8,6 +8,8 @@ export interface WalletContextValue {
8
8
  identityKey: string | null;
9
9
  providerType: string | null;
10
10
  availableProviders: AvailableProvider[];
11
+ /** Why the last session ended, if any (null after a successful connect). */
12
+ disconnectReason: DisconnectReason | null;
11
13
  connect: (providerType?: string) => Promise<void>;
12
14
  applyResult: (result: ConnectWalletResult) => void;
13
15
  disconnect: () => void;
@@ -16,11 +18,13 @@ export interface WalletContextValue {
16
18
  export interface WalletProviderProps {
17
19
  autoReconnect?: boolean;
18
20
  autoDetect?: boolean;
21
+ /** Identity/auth poll interval in ms (default 4000). */
22
+ pollIntervalMs?: number;
19
23
  providers?: WalletProviderConfig[];
20
24
  children: ReactNode;
21
25
  }
22
26
  export declare function loadStoredProvider(): string | null;
23
27
  export declare function clearSigmaGuard(): void;
24
- export declare function WalletProvider({ autoReconnect, autoDetect, providers, children, }: WalletProviderProps): import("react").JSX.Element;
28
+ export declare function WalletProvider({ autoReconnect, autoDetect, pollIntervalMs, providers, children, }: WalletProviderProps): import("react").JSX.Element;
25
29
  export declare function useWallet(): WalletContextValue;
26
30
  //# sourceMappingURL=wallet-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-context.d.ts","sourceRoot":"","sources":["../src/wallet-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAIzB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EACN,KAAK,SAAS,EAQd,MAAM,OAAO,CAAA;AAEd,MAAM,MAAM,YAAY,GACrB,cAAc,GACd,WAAW,GACX,WAAW,GACX,YAAY,GACZ,WAAW,CAAA;AAEd,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;IAC9B,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAClD,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAA;IAClC,QAAQ,EAAE,SAAS,CAAA;CACnB;AAID,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAUlD;AAiBD,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAID,wBAAgB,cAAc,CAAC,EAC9B,aAAqB,EACrB,UAAiB,EACjB,SAAS,EACT,QAAQ,GACR,EAAE,mBAAmB,+BAmLrB;AAED,wBAAgB,SAAS,IAAI,kBAAkB,CAM9C"}
1
+ {"version":3,"file":"wallet-context.d.ts","sourceRoot":"","sources":["../src/wallet-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAMzB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EACN,KAAK,SAAS,EAQd,MAAM,OAAO,CAAA;AAEd,MAAM,MAAM,YAAY,GACrB,cAAc,GACd,WAAW,GACX,WAAW,GACX,YAAY,GACZ,WAAW,CAAA;AAEd,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;IAC9B,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,4EAA4E;IAC5E,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACzC,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAClD,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAA;IAClC,QAAQ,EAAE,SAAS,CAAA;CACnB;AAID,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAUlD;AAiBD,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAID,wBAAgB,cAAc,CAAC,EAC9B,aAAqB,EACrB,UAAiB,EACjB,cAAc,EACd,SAAS,EACT,QAAQ,GACR,EAAE,mBAAmB,+BAuOrB;AAED,wBAAgB,SAAS,IAAI,kBAAkB,CAM9C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1sat/react",
3
- "version": "0.0.75",
3
+ "version": "0.0.76",
4
4
  "description": "React hooks and components for 1Sat wallet integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,7 +29,7 @@
29
29
  ],
30
30
  "license": "MIT",
31
31
  "dependencies": {
32
- "@1sat/connect": "0.0.78"
32
+ "@1sat/connect": "0.0.79"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@bsv/sdk": "^2.1.6",