@1sat/react 0.0.2 → 0.0.3

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/context.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type ConnectResult, type OneSatConfig, type OneSatProvider as OneSatProviderInterface } from '@1sat/connect';
1
+ import { type ConnectResult, type OneSatProvider as OneSatProviderInterface } from '@1sat/connect';
2
2
  import { type ReactNode } from 'react';
3
3
  export interface OneSatContextValue {
4
4
  /** The underlying provider instance */
@@ -21,8 +21,14 @@ export interface OneSatContextValue {
21
21
  error: Error | null;
22
22
  }
23
23
  export interface OneSatProviderProps {
24
- /** Configuration for the provider */
25
- config?: OneSatConfig;
24
+ /** Name of the dApp (shown in approval popup) */
25
+ appName?: string;
26
+ /** Base URL for the wallet popup (default: https://1sat.market) */
27
+ popupUrl?: string;
28
+ /** Request timeout in milliseconds (default: 300000 = 5 minutes) */
29
+ timeout?: number;
30
+ /** Network to use (default: main) */
31
+ network?: 'main' | 'test';
26
32
  /** Children to render */
27
33
  children: ReactNode;
28
34
  }
@@ -35,14 +41,14 @@ export interface OneSatProviderProps {
35
41
  *
36
42
  * function App() {
37
43
  * return (
38
- * <OneSatProvider config={{ appName: 'My dApp' }}>
44
+ * <OneSatProvider appName="My dApp">
39
45
  * <MyApp />
40
46
  * </OneSatProvider>
41
47
  * )
42
48
  * }
43
49
  * ```
44
50
  */
45
- export declare function OneSatProvider({ config, children }: OneSatProviderProps): import("react/jsx-runtime").JSX.Element;
51
+ export declare function OneSatProvider({ appName, popupUrl, timeout, network, children, }: OneSatProviderProps): import("react/jsx-runtime").JSX.Element;
46
52
  /**
47
53
  * Hook to access the 1Sat context
48
54
  * @throws Error if used outside of OneSatProvider
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,IAAI,uBAAuB,EAE9C,MAAM,eAAe,CAAA;AACtB,OAAO,EACN,KAAK,SAAS,EAOd,MAAM,OAAO,CAAA;AAEd,MAAM,WAAW,kBAAkB;IAClC,uCAAuC;IACvC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACxC,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAA;IACrB,yCAAyC;IACzC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,yCAAyC;IACzC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,6CAA6C;IAC7C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;IACrC,iCAAiC;IACjC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACnB;AAID,MAAM,WAAW,mBAAmB;IACnC,qCAAqC;IACrC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,yBAAyB;IACzB,QAAQ,EAAE,SAAS,CAAA;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAwGvE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAMrD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,cAAc,IAAI,uBAAuB,EAE9C,MAAM,eAAe,CAAA;AACtB,OAAO,EACN,KAAK,SAAS,EAOd,MAAM,OAAO,CAAA;AAEd,MAAM,WAAW,kBAAkB;IAClC,uCAAuC;IACvC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACxC,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAA;IACrB,yCAAyC;IACzC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,yCAAyC;IACzC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,6CAA6C;IAC7C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;IACrC,iCAAiC;IACjC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACnB;AAID,MAAM,WAAW,mBAAmB;IACnC,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,yBAAyB;IACzB,QAAQ,EAAE,SAAS,CAAA;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,GACR,EAAE,mBAAmB,2CAqGrB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAMrD"}
package/dist/hooks.d.ts CHANGED
@@ -1,31 +1,4 @@
1
- import type { ListOptions, OrdinalOutput, TokenOutput } from '@1sat/connect';
2
- /**
3
- * Main hook for 1Sat wallet interaction
4
- *
5
- * @example
6
- * ```tsx
7
- * function MyComponent() {
8
- * const { isConnected, connect, paymentAddress } = useOneSat()
9
- *
10
- * if (!isConnected) {
11
- * return <button onClick={connect}>Connect Wallet</button>
12
- * }
13
- *
14
- * return <p>Connected: {paymentAddress}</p>
15
- * }
16
- * ```
17
- */
18
- export declare function useOneSat(): {
19
- provider: import("@1sat/connect").OneSatProvider | null;
20
- isConnected: boolean;
21
- isConnecting: boolean;
22
- paymentAddress: string | null;
23
- ordinalAddress: string | null;
24
- identityPubKey: string | null;
25
- connect: () => Promise<import("@1sat/connect").ConnectResult>;
26
- disconnect: () => Promise<void>;
27
- error: Error | null;
28
- };
1
+ import type { CancelListingRequest, CreateListingRequest, InscribeRequest, OrdinalOutput, PurchaseListingRequest, SendOrdinalsRequest, SignTransactionRequest, TokenOutput, TransferTokenRequest, Utxo } from '@1sat/connect';
29
2
  /**
30
3
  * Hook to get the wallet balance
31
4
  *
@@ -53,17 +26,11 @@ export declare function useBalance(): {
53
26
  * function Gallery() {
54
27
  * const { ordinals, isLoading } = useOrdinals()
55
28
  * if (isLoading) return <span>Loading...</span>
56
- * return (
57
- * <div>
58
- * {ordinals.map(ord => (
59
- * <div key={ord.outpoint}>{ord.origin}</div>
60
- * ))}
61
- * </div>
62
- * )
29
+ * return ordinals.map(ord => <div key={ord.outpoint}>{ord.origin}</div>)
63
30
  * }
64
31
  * ```
65
32
  */
66
- export declare function useOrdinals(options?: ListOptions): {
33
+ export declare function useOrdinals(limit?: number, offset?: number): {
67
34
  ordinals: OrdinalOutput[];
68
35
  isLoading: boolean;
69
36
  error: Error | null;
@@ -77,43 +44,44 @@ export declare function useOrdinals(options?: ListOptions): {
77
44
  * function Tokens() {
78
45
  * const { tokens, isLoading } = useTokens()
79
46
  * if (isLoading) return <span>Loading...</span>
80
- * return (
81
- * <div>
82
- * {tokens.map(token => (
83
- * <div key={token.outpoint}>
84
- * {token.symbol}: {token.amount}
85
- * </div>
86
- * ))}
87
- * </div>
88
- * )
47
+ * return tokens.map(t => <div key={t.outpoint}>{t.symbol}: {t.amount}</div>)
89
48
  * }
90
49
  * ```
91
50
  */
92
- export declare function useTokens(options?: ListOptions): {
51
+ export declare function useTokens(limit?: number, offset?: number): {
93
52
  tokens: TokenOutput[];
94
53
  isLoading: boolean;
95
54
  error: Error | null;
96
55
  refetch: () => Promise<void>;
97
56
  };
98
57
  /**
99
- * Hook for signing transactions
58
+ * Hook to get payment UTXOs from the wallet
100
59
  *
101
60
  * @example
102
61
  * ```tsx
103
- * function SignTx() {
104
- * const { signTransaction, isLoading } = useSignTransaction()
105
- *
106
- * const handleSign = async () => {
107
- * const result = await signTransaction(rawTx)
108
- * console.log('Signed:', result.txid)
109
- * }
110
- *
111
- * return <button onClick={handleSign} disabled={isLoading}>Sign</button>
62
+ * function Utxos() {
63
+ * const { utxos, refetch } = useUtxos()
64
+ * return <span>{utxos.length} UTXOs available</span>
112
65
  * }
113
66
  * ```
114
67
  */
68
+ export declare function useUtxos(): {
69
+ utxos: Utxo[];
70
+ isLoading: boolean;
71
+ error: Error | null;
72
+ refetch: () => Promise<void>;
73
+ };
74
+ /**
75
+ * Hook for signing transactions
76
+ *
77
+ * @example
78
+ * ```tsx
79
+ * const { signTransaction, isLoading } = useSignTransaction()
80
+ * const result = await signTransaction({ rawtx, description: 'Send payment' })
81
+ * ```
82
+ */
115
83
  export declare function useSignTransaction(): {
116
- signTransaction: (rawtx: string, description?: string) => Promise<import("@1sat/connect").SignTransactionResult>;
84
+ signTransaction: (request: SignTransactionRequest) => Promise<import("@1sat/connect").SignTransactionResult>;
117
85
  isLoading: boolean;
118
86
  error: Error | null;
119
87
  };
@@ -122,16 +90,8 @@ export declare function useSignTransaction(): {
122
90
  *
123
91
  * @example
124
92
  * ```tsx
125
- * function SignMessage() {
126
- * const { signMessage, isLoading } = useSignMessage()
127
- *
128
- * const handleSign = async () => {
129
- * const result = await signMessage('Hello, World!')
130
- * console.log('Signature:', result.signature)
131
- * }
132
- *
133
- * return <button onClick={handleSign} disabled={isLoading}>Sign Message</button>
134
- * }
93
+ * const { signMessage, isLoading } = useSignMessage()
94
+ * const result = await signMessage('Hello, World!')
135
95
  * ```
136
96
  */
137
97
  export declare function useSignMessage(): {
@@ -141,14 +101,85 @@ export declare function useSignMessage(): {
141
101
  };
142
102
  /**
143
103
  * Hook for inscribing ordinals
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * const { inscribe, isLoading } = useInscribe()
108
+ * const result = await inscribe({ dataB64, contentType: 'text/plain' })
109
+ * ```
144
110
  */
145
111
  export declare function useInscribe(): {
146
- inscribe: (params: {
147
- dataB64: string;
148
- contentType: string;
149
- destinationAddress?: string;
150
- metaData?: Record<string, string>;
151
- }) => Promise<import("@1sat/connect").InscribeResult>;
112
+ inscribe: (request: InscribeRequest) => Promise<import("@1sat/connect").InscribeResult>;
113
+ isLoading: boolean;
114
+ error: Error | null;
115
+ };
116
+ /**
117
+ * Hook for sending ordinals
118
+ *
119
+ * @example
120
+ * ```tsx
121
+ * const { sendOrdinals, isLoading } = useSendOrdinals()
122
+ * await sendOrdinals({ outpoints: ['txid_0'], destinationAddress: 'addr' })
123
+ * ```
124
+ */
125
+ export declare function useSendOrdinals(): {
126
+ sendOrdinals: (request: SendOrdinalsRequest) => Promise<import("@1sat/connect").SendResult>;
127
+ isLoading: boolean;
128
+ error: Error | null;
129
+ };
130
+ /**
131
+ * Hook for transferring tokens (BSV20/21)
132
+ *
133
+ * @example
134
+ * ```tsx
135
+ * const { transferToken, isLoading } = useTransferToken()
136
+ * await transferToken({ tokenId: 'origin_0', amount: '100', destinationAddress: 'addr' })
137
+ * ```
138
+ */
139
+ export declare function useTransferToken(): {
140
+ transferToken: (request: TransferTokenRequest) => Promise<import("@1sat/connect").SendResult>;
141
+ isLoading: boolean;
142
+ error: Error | null;
143
+ };
144
+ /**
145
+ * Hook for creating marketplace listings
146
+ *
147
+ * @example
148
+ * ```tsx
149
+ * const { createListing, isLoading } = useCreateListing()
150
+ * await createListing({ outpoints: ['txid_0'], priceSatoshis: 100000 })
151
+ * ```
152
+ */
153
+ export declare function useCreateListing(): {
154
+ createListing: (request: CreateListingRequest) => Promise<import("@1sat/connect").ListingResult>;
155
+ isLoading: boolean;
156
+ error: Error | null;
157
+ };
158
+ /**
159
+ * Hook for purchasing a listed ordinal
160
+ *
161
+ * @example
162
+ * ```tsx
163
+ * const { purchaseListing, isLoading } = usePurchaseListing()
164
+ * await purchaseListing({ listingOutpoint: 'txid_0' })
165
+ * ```
166
+ */
167
+ export declare function usePurchaseListing(): {
168
+ purchaseListing: (request: PurchaseListingRequest) => Promise<import("@1sat/connect").SendResult>;
169
+ isLoading: boolean;
170
+ error: Error | null;
171
+ };
172
+ /**
173
+ * Hook for cancelling marketplace listings
174
+ *
175
+ * @example
176
+ * ```tsx
177
+ * const { cancelListing, isLoading } = useCancelListing()
178
+ * await cancelListing({ listingOutpoints: ['txid_0'] })
179
+ * ```
180
+ */
181
+ export declare function useCancelListing(): {
182
+ cancelListing: (request: CancelListingRequest) => Promise<import("@1sat/connect").SendResult>;
152
183
  isLoading: boolean;
153
184
  error: Error | null;
154
185
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,WAAW,EACX,aAAa,EACb,WAAW,EACX,MAAM,eAAe,CAAA;AAItB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS;;;;;;;;;;EAcxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU;;;;;;EAqCzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW;;;;;EAoChD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,WAAW;;;;;EAoC9C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB;6BAMlB,MAAM,gBAAgB,MAAM;;;EA2B3C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc;2BAMZ,MAAM;;;EA2BvB;AAED;;GAEG;AACH,wBAAgB,WAAW;uBAMV;QACd,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACjC;;;EA2BF"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EAEf,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,IAAI,EACJ,MAAM,eAAe,CAAA;AA6CtB;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU;;;;;;EAkCzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;EAgC1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;EAgCxD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ;;;;;EA4BvB;AAID;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB;;;;EASjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc;;;;EAO7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW;;;;EAO1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe;;;;EAS9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB;;;;EAS/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB;;;;EAS/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB;;;;EASjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB;;;;EAS/B"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from '@1sat/connect';
2
2
  export { OneSatProvider, useOneSatContext, type OneSatContextValue, type OneSatProviderProps, } from './context';
3
- export { useOneSat, useBalance, useOrdinals, useTokens, useSignTransaction, useSignMessage, useInscribe, } from './hooks';
3
+ export { useBalance, useOrdinals, useTokens, useUtxos, useSignTransaction, useSignMessage, useInscribe, useSendOrdinals, useTransferToken, useCreateListing, usePurchaseListing, useCancelListing, } from './hooks';
4
4
  export { ConnectButton, type ConnectButtonProps } from './ConnectButton';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAA;AAG7B,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACxB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACN,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,WAAW,GACX,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAA;AAG7B,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACxB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACN,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/index.js CHANGED
@@ -16,7 +16,13 @@ import {
16
16
  import { jsxDEV } from "react/jsx-dev-runtime";
17
17
  "use client";
18
18
  var OneSatContext = createContext(null);
19
- function OneSatProvider({ config, children }) {
19
+ function OneSatProvider({
20
+ appName,
21
+ popupUrl,
22
+ timeout,
23
+ network,
24
+ children
25
+ }) {
20
26
  const [provider, setProvider] = useState(null);
21
27
  const [isConnected, setIsConnected] = useState(false);
22
28
  const [isConnecting, setIsConnecting] = useState(false);
@@ -27,7 +33,7 @@ function OneSatProvider({ config, children }) {
27
33
  useEffect(() => {
28
34
  if (typeof window === "undefined")
29
35
  return;
30
- const p = createOneSat(config);
36
+ const p = createOneSat({ appName, popupUrl, timeout, network });
31
37
  setProvider(p);
32
38
  if (p.isConnected()) {
33
39
  const addresses = p.getAddresses();
@@ -56,7 +62,7 @@ function OneSatProvider({ config, children }) {
56
62
  p.off("connect", handleConnect);
57
63
  p.off("disconnect", handleDisconnect);
58
64
  };
59
- }, [config]);
65
+ }, [appName, popupUrl, timeout, network]);
60
66
  const connect = useCallback(async () => {
61
67
  if (!provider) {
62
68
  throw new Error("Provider not initialized");
@@ -113,21 +119,30 @@ function useOneSatContext() {
113
119
  return context;
114
120
  }
115
121
  // src/hooks.ts
116
- import { useCallback as useCallback2, useEffect as useEffect2, useState as useState2 } from "react";
122
+ import { useCallback as useCallback2, useEffect as useEffect2, useRef, useState as useState2 } from "react";
117
123
  "use client";
118
- function useOneSat() {
119
- const context = useOneSatContext();
120
- return {
121
- provider: context.provider,
122
- isConnected: context.isConnected,
123
- isConnecting: context.isConnecting,
124
- paymentAddress: context.paymentAddress,
125
- ordinalAddress: context.ordinalAddress,
126
- identityPubKey: context.identityPubKey,
127
- connect: context.connect,
128
- disconnect: context.disconnect,
129
- error: context.error
130
- };
124
+ function useProviderAction(actionFn) {
125
+ const { provider, isConnected } = useOneSatContext();
126
+ const [isLoading, setIsLoading] = useState2(false);
127
+ const [error, setError] = useState2(null);
128
+ const actionRef = useRef(actionFn);
129
+ actionRef.current = actionFn;
130
+ const mutate = useCallback2(async (...args) => {
131
+ if (!provider || !isConnected)
132
+ throw new Error("Wallet not connected");
133
+ setIsLoading(true);
134
+ setError(null);
135
+ try {
136
+ return await actionRef.current(provider, ...args);
137
+ } catch (e) {
138
+ const err = e instanceof Error ? e : new Error(String(e));
139
+ setError(err);
140
+ throw err;
141
+ } finally {
142
+ setIsLoading(false);
143
+ }
144
+ }, [provider, isConnected]);
145
+ return { mutate, isLoading, error };
131
146
  }
132
147
  function useBalance() {
133
148
  const { provider, isConnected } = useOneSatContext();
@@ -140,8 +155,7 @@ function useBalance() {
140
155
  setIsLoading(true);
141
156
  setError(null);
142
157
  try {
143
- const result = await provider.getBalance();
144
- setBalance(result);
158
+ setBalance(await provider.getBalance());
145
159
  } catch (e) {
146
160
  setError(e instanceof Error ? e : new Error(String(e)));
147
161
  } finally {
@@ -163,7 +177,7 @@ function useBalance() {
163
177
  refetch
164
178
  };
165
179
  }
166
- function useOrdinals(options) {
180
+ function useOrdinals(limit, offset) {
167
181
  const { provider, isConnected } = useOneSatContext();
168
182
  const [ordinals, setOrdinals] = useState2([]);
169
183
  const [isLoading, setIsLoading] = useState2(false);
@@ -174,14 +188,14 @@ function useOrdinals(options) {
174
188
  setIsLoading(true);
175
189
  setError(null);
176
190
  try {
177
- const result = await provider.getOrdinals(options);
178
- setOrdinals(result);
191
+ const opts = limit !== undefined || offset !== undefined ? { limit, offset } : undefined;
192
+ setOrdinals(await provider.getOrdinals(opts));
179
193
  } catch (e) {
180
194
  setError(e instanceof Error ? e : new Error(String(e)));
181
195
  } finally {
182
196
  setIsLoading(false);
183
197
  }
184
- }, [provider, isConnected, options]);
198
+ }, [provider, isConnected, limit, offset]);
185
199
  useEffect2(() => {
186
200
  if (isConnected) {
187
201
  refetch();
@@ -189,14 +203,9 @@ function useOrdinals(options) {
189
203
  setOrdinals([]);
190
204
  }
191
205
  }, [isConnected, refetch]);
192
- return {
193
- ordinals,
194
- isLoading,
195
- error,
196
- refetch
197
- };
206
+ return { ordinals, isLoading, error, refetch };
198
207
  }
199
- function useTokens(options) {
208
+ function useTokens(limit, offset) {
200
209
  const { provider, isConnected } = useOneSatContext();
201
210
  const [tokens, setTokens] = useState2([]);
202
211
  const [isLoading, setIsLoading] = useState2(false);
@@ -207,14 +216,14 @@ function useTokens(options) {
207
216
  setIsLoading(true);
208
217
  setError(null);
209
218
  try {
210
- const result = await provider.getTokens(options);
211
- setTokens(result);
219
+ const opts = limit !== undefined || offset !== undefined ? { limit, offset } : undefined;
220
+ setTokens(await provider.getTokens(opts));
212
221
  } catch (e) {
213
222
  setError(e instanceof Error ? e : new Error(String(e)));
214
223
  } finally {
215
224
  setIsLoading(false);
216
225
  }
217
- }, [provider, isConnected, options]);
226
+ }, [provider, isConnected, limit, offset]);
218
227
  useEffect2(() => {
219
228
  if (isConnected) {
220
229
  refetch();
@@ -222,93 +231,98 @@ function useTokens(options) {
222
231
  setTokens([]);
223
232
  }
224
233
  }, [isConnected, refetch]);
225
- return {
226
- tokens,
227
- isLoading,
228
- error,
229
- refetch
230
- };
234
+ return { tokens, isLoading, error, refetch };
231
235
  }
232
- function useSignTransaction() {
236
+ function useUtxos() {
233
237
  const { provider, isConnected } = useOneSatContext();
238
+ const [utxos, setUtxos] = useState2([]);
234
239
  const [isLoading, setIsLoading] = useState2(false);
235
240
  const [error, setError] = useState2(null);
236
- const signTransaction = useCallback2(async (rawtx, description) => {
237
- if (!provider || !isConnected) {
238
- throw new Error("Wallet not connected");
239
- }
241
+ const refetch = useCallback2(async () => {
242
+ if (!provider || !isConnected)
243
+ return;
240
244
  setIsLoading(true);
241
245
  setError(null);
242
246
  try {
243
- const result = await provider.signTransaction({ rawtx, description });
244
- return result;
247
+ setUtxos(await provider.getUtxos());
245
248
  } catch (e) {
246
- const err = e instanceof Error ? e : new Error(String(e));
247
- setError(err);
248
- throw err;
249
+ setError(e instanceof Error ? e : new Error(String(e)));
249
250
  } finally {
250
251
  setIsLoading(false);
251
252
  }
252
253
  }, [provider, isConnected]);
253
- return {
254
- signTransaction,
254
+ useEffect2(() => {
255
+ if (isConnected) {
256
+ refetch();
257
+ } else {
258
+ setUtxos([]);
259
+ }
260
+ }, [isConnected, refetch]);
261
+ return { utxos, isLoading, error, refetch };
262
+ }
263
+ function useSignTransaction() {
264
+ const {
265
+ mutate: signTransaction,
255
266
  isLoading,
256
267
  error
257
- };
268
+ } = useProviderAction((p, request) => p.signTransaction(request));
269
+ return { signTransaction, isLoading, error };
258
270
  }
259
271
  function useSignMessage() {
260
- const { provider, isConnected } = useOneSatContext();
261
- const [isLoading, setIsLoading] = useState2(false);
262
- const [error, setError] = useState2(null);
263
- const signMessage = useCallback2(async (message) => {
264
- if (!provider || !isConnected) {
265
- throw new Error("Wallet not connected");
266
- }
267
- setIsLoading(true);
268
- setError(null);
269
- try {
270
- const result = await provider.signMessage(message);
271
- return result;
272
- } catch (e) {
273
- const err = e instanceof Error ? e : new Error(String(e));
274
- setError(err);
275
- throw err;
276
- } finally {
277
- setIsLoading(false);
278
- }
279
- }, [provider, isConnected]);
280
- return {
281
- signMessage,
272
+ const {
273
+ mutate: signMessage,
282
274
  isLoading,
283
275
  error
284
- };
276
+ } = useProviderAction((p, message) => p.signMessage(message));
277
+ return { signMessage, isLoading, error };
285
278
  }
286
279
  function useInscribe() {
287
- const { provider, isConnected } = useOneSatContext();
288
- const [isLoading, setIsLoading] = useState2(false);
289
- const [error, setError] = useState2(null);
290
- const inscribe = useCallback2(async (params) => {
291
- if (!provider || !isConnected) {
292
- throw new Error("Wallet not connected");
293
- }
294
- setIsLoading(true);
295
- setError(null);
296
- try {
297
- const result = await provider.inscribe(params);
298
- return result;
299
- } catch (e) {
300
- const err = e instanceof Error ? e : new Error(String(e));
301
- setError(err);
302
- throw err;
303
- } finally {
304
- setIsLoading(false);
305
- }
306
- }, [provider, isConnected]);
307
- return {
308
- inscribe,
280
+ const {
281
+ mutate: inscribe,
309
282
  isLoading,
310
283
  error
311
- };
284
+ } = useProviderAction((p, request) => p.inscribe(request));
285
+ return { inscribe, isLoading, error };
286
+ }
287
+ function useSendOrdinals() {
288
+ const {
289
+ mutate: sendOrdinals,
290
+ isLoading,
291
+ error
292
+ } = useProviderAction((p, request) => p.sendOrdinals(request));
293
+ return { sendOrdinals, isLoading, error };
294
+ }
295
+ function useTransferToken() {
296
+ const {
297
+ mutate: transferToken,
298
+ isLoading,
299
+ error
300
+ } = useProviderAction((p, request) => p.transferToken(request));
301
+ return { transferToken, isLoading, error };
302
+ }
303
+ function useCreateListing() {
304
+ const {
305
+ mutate: createListing,
306
+ isLoading,
307
+ error
308
+ } = useProviderAction((p, request) => p.createListing(request));
309
+ return { createListing, isLoading, error };
310
+ }
311
+ function usePurchaseListing() {
312
+ const {
313
+ mutate: purchaseListing,
314
+ isLoading,
315
+ error
316
+ } = useProviderAction((p, request) => p.purchaseListing(request));
317
+ return { purchaseListing, isLoading, error };
318
+ }
319
+ function useCancelListing() {
320
+ const {
321
+ mutate: cancelListing,
322
+ isLoading,
323
+ error
324
+ } = useProviderAction((p, request) => p.cancelListing(request));
325
+ return { cancelListing, isLoading, error };
312
326
  }
313
327
  // src/ConnectButton.tsx
314
328
  import { jsxDEV as jsxDEV2, Fragment } from "react/jsx-dev-runtime";
@@ -336,7 +350,7 @@ function ConnectButton({
336
350
  paymentAddress,
337
351
  connect: providerConnect,
338
352
  disconnect: providerDisconnect
339
- } = useOneSat();
353
+ } = useOneSatContext();
340
354
  const connect = async () => {
341
355
  try {
342
356
  await providerConnect();
@@ -392,13 +406,18 @@ function ConnectButton({
392
406
  }, undefined, false, undefined, this);
393
407
  }
394
408
  export {
409
+ useUtxos,
410
+ useTransferToken,
395
411
  useTokens,
396
412
  useSignTransaction,
397
413
  useSignMessage,
414
+ useSendOrdinals,
415
+ usePurchaseListing,
398
416
  useOrdinals,
399
417
  useOneSatContext,
400
- useOneSat,
401
418
  useInscribe,
419
+ useCreateListing,
420
+ useCancelListing,
402
421
  useBalance,
403
422
  OneSatProvider,
404
423
  ConnectButton
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1sat/react",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "React hooks and components for 1Sat wallet integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,7 +19,7 @@
19
19
  "keywords": ["1sat", "bsv", "ordinals", "wallet", "sdk", "react", "hooks"],
20
20
  "license": "MIT",
21
21
  "dependencies": {
22
- "@1sat/connect": "^0.0.2"
22
+ "@1sat/connect": "^0.0.4"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "react": "^18.0.0 || ^19.0.0"