@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 +11 -5
- package/dist/context.d.ts.map +1 -1
- package/dist/hooks.d.ts +104 -73
- package/dist/hooks.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +119 -100
- package/package.json +2 -2
package/dist/context.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ConnectResult, type
|
|
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
|
-
/**
|
|
25
|
-
|
|
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
|
|
44
|
+
* <OneSatProvider appName="My dApp">
|
|
39
45
|
* <MyApp />
|
|
40
46
|
* </OneSatProvider>
|
|
41
47
|
* )
|
|
42
48
|
* }
|
|
43
49
|
* ```
|
|
44
50
|
*/
|
|
45
|
-
export declare function OneSatProvider({
|
|
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
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,
|
|
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 {
|
|
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(
|
|
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(
|
|
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
|
|
58
|
+
* Hook to get payment UTXOs from the wallet
|
|
100
59
|
*
|
|
101
60
|
* @example
|
|
102
61
|
* ```tsx
|
|
103
|
-
* function
|
|
104
|
-
* const {
|
|
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: (
|
|
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
|
-
*
|
|
126
|
-
*
|
|
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: (
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
};
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,
|
|
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 {
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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({
|
|
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(
|
|
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
|
-
}, [
|
|
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
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
178
|
-
setOrdinals(
|
|
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,
|
|
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(
|
|
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
|
|
211
|
-
setTokens(
|
|
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,
|
|
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
|
|
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
|
|
237
|
-
if (!provider || !isConnected)
|
|
238
|
-
|
|
239
|
-
}
|
|
241
|
+
const refetch = useCallback2(async () => {
|
|
242
|
+
if (!provider || !isConnected)
|
|
243
|
+
return;
|
|
240
244
|
setIsLoading(true);
|
|
241
245
|
setError(null);
|
|
242
246
|
try {
|
|
243
|
-
|
|
244
|
-
return result;
|
|
247
|
+
setUtxos(await provider.getUtxos());
|
|
245
248
|
} catch (e) {
|
|
246
|
-
|
|
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
|
-
|
|
254
|
-
|
|
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 {
|
|
261
|
-
|
|
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 {
|
|
288
|
-
|
|
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
|
-
} =
|
|
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.
|
|
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.
|
|
22
|
+
"@1sat/connect": "^0.0.4"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"react": "^18.0.0 || ^19.0.0"
|