@vela-ventures/aosync-sdk-react 1.0.0 → 1.0.1

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,100 @@
1
+ # Wallet SDK for Arweave
2
+
3
+ A lightweight React hook and context provider for integrating the Beacon Wallet into your React applications.
4
+
5
+ ## Features
6
+
7
+ - Easily manage wallet connections.
8
+ - Send AR transactions.
9
+ - Sign messages and transactions.
10
+ - Retrieve wallet addresses.
11
+
12
+ ## Installation
13
+
14
+ Install the package via npm:
15
+
16
+ ```bash
17
+ npm install @vela-ventures/ao-sync-sdk
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ### 1: Wrap Your App with WalletProvider
23
+ To enable wallet functionality across your app, wrap your application with the WalletProvider:
24
+ ```javascript
25
+ import React from "react";
26
+ import { WalletProvider } from "@vela-ventures/ao-sync-sdk";
27
+
28
+ const App = () => {
29
+ return (
30
+ <WalletProvider>
31
+ <YourApp />
32
+ </WalletProvider>
33
+ );
34
+ };
35
+ ```
36
+ ### 2. Use the useWallet Hook
37
+ Access wallet functionality in any component with the useWallet hook:
38
+ ```javascript
39
+ import React from "react";
40
+ import { useWallet } from "@vela-ventures/ao-sync-sdk";
41
+
42
+ const WalletComponent = () => {
43
+ const {
44
+ isConnected,
45
+ connect,
46
+ disconnect,
47
+ getAddress,
48
+ sendAR,
49
+ } = useWallet();
50
+
51
+ const handleConnect = async () => {
52
+ await connect();
53
+ const address = await getAddress();
54
+ console.log("Connected wallet address:", address);
55
+ };
56
+
57
+ const handleSendAR = async () => {
58
+ try {
59
+ await sendAR("recipient-address", "1000000"); // 1 AR (in winstons)
60
+ console.log("AR sent successfully!");
61
+ } catch (error) {
62
+ console.error("Error sending AR:", error);
63
+ }
64
+ };
65
+
66
+ return (
67
+ <div>
68
+ <h1>Wallet Status: {isConnected ? "Connected" : "Disconnected"}</h1>
69
+ {!isConnected ? (
70
+ <button onClick={handleConnect}>Connect Wallet</button>
71
+ ) : (
72
+ <button onClick={disconnect}>Disconnect Wallet</button>
73
+ )}
74
+ {isConnected && <button onClick={handleSendAR}>Send AR</button>}
75
+ </div>
76
+ );
77
+ };
78
+
79
+ export default WalletComponent;
80
+ ```
81
+ ## API
82
+
83
+ ### `useWallet`
84
+
85
+ The `useWallet` hook provides the following methods and properties:
86
+
87
+ | Method/Property | Description |
88
+ |--------------------------|-----------------------------------------------------------------------------|
89
+ | `isConnected` | Boolean indicating if the wallet is connected. |
90
+ | `connect()` | Connects to the wallet. |
91
+ | `disconnect()` | Disconnects from the wallet. |
92
+ | `getAddress()` | Returns the currently active wallet address. |
93
+ | `getAllAddresses()` | Returns all wallet addresses. |
94
+ | `sendAR(recipient, quantity)` | Sends AR to the specified address. |
95
+ | `sign(transaction)` | Signs a transaction using the wallet. |
96
+ | `signAOMessage(target, recipient, quantity)` | Signs a custom AO message. |
97
+
98
+ ## License
99
+
100
+ MIT License © 2025 Vela Ventures
package/dist/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { useWallet } from "./useWallet";
1
+ export { WalletProvider, useWallet } from "./walletProvider";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export { useWallet } from "./useWallet";
1
+ export { WalletProvider, useWallet } from "./walletProvider";
@@ -1,13 +0,0 @@
1
- import Transaction from "arweave/web/lib/transaction";
2
- interface UseAOWalletReturn {
3
- isConnected: boolean;
4
- connect: () => Promise<void>;
5
- disconnect: () => Promise<void>;
6
- getAllAddresses: () => Promise<string[]>;
7
- getAddress: () => Promise<string | undefined>;
8
- sendAR: (recipient: string, quantity: string) => Promise<any>;
9
- signAOMessage: (target: string, recipient: string, quantity: string) => Promise<any>;
10
- sign: (transaction: Transaction) => Promise<Transaction>;
11
- }
12
- export declare const useWallet: () => UseAOWalletReturn;
13
- export {};
package/dist/useWallet.js CHANGED
@@ -1,136 +1 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { useEffect, useRef, useState } from "react";
11
- import WalletClient from "@vela-ventures/ao-sync-sdk";
12
- import Arweave from "arweave";
13
- export const useWallet = () => {
14
- const [isConnected, setIsConnected] = useState(false);
15
- const walletRef = useRef(new WalletClient());
16
- useEffect(() => {
17
- const wallet = walletRef.current;
18
- wallet.reconnect();
19
- const handleDisconnect = () => setIsConnected(false);
20
- const handleConnect = () => setIsConnected(true);
21
- wallet.on("disconnected", handleDisconnect);
22
- wallet.on("connected", handleConnect);
23
- return () => {
24
- wallet.off("disconnected", handleDisconnect);
25
- wallet.off("connected", handleConnect);
26
- };
27
- }, []);
28
- const connect = () => __awaiter(void 0, void 0, void 0, function* () {
29
- try {
30
- yield walletRef.current.connect({});
31
- }
32
- catch (error) {
33
- console.error("Error connecting wallet:", error);
34
- throw error;
35
- }
36
- });
37
- const disconnect = () => __awaiter(void 0, void 0, void 0, function* () {
38
- try {
39
- yield walletRef.current.disconnect();
40
- setIsConnected(false);
41
- }
42
- catch (error) {
43
- console.error("Error disconnecting wallet:", error);
44
- throw error;
45
- }
46
- });
47
- const getAddress = () => __awaiter(void 0, void 0, void 0, function* () {
48
- try {
49
- return yield walletRef.current.getActiveAddress();
50
- }
51
- catch (error) {
52
- console.error("Error getting address:", error);
53
- throw error;
54
- }
55
- });
56
- const getAllAddresses = () => __awaiter(void 0, void 0, void 0, function* () {
57
- try {
58
- return yield walletRef.current.getAllAddresses();
59
- }
60
- catch (error) {
61
- console.error("Error getting address:", error);
62
- throw error;
63
- }
64
- });
65
- const sendAR = (recipient, quantity) => __awaiter(void 0, void 0, void 0, function* () {
66
- try {
67
- const arweave = Arweave.init({
68
- host: "arweave.net",
69
- port: 443,
70
- protocol: "https",
71
- });
72
- const tx = yield arweave.createTransaction({
73
- target: recipient,
74
- quantity: quantity,
75
- });
76
- const signedTx = yield walletRef.current.sign(tx);
77
- return yield arweave.transactions.post(signedTx);
78
- }
79
- catch (error) {
80
- console.error("Error sending AR:", error);
81
- throw error;
82
- }
83
- });
84
- const signAOMessage = (target, recipient, quantity) => __awaiter(void 0, void 0, void 0, function* () {
85
- try {
86
- const dataItem = {
87
- data: "",
88
- target,
89
- tags: [
90
- { name: "Action", value: "Transfer" },
91
- { name: "Recipient", value: recipient },
92
- { name: "Quantity", value: quantity },
93
- { name: "SDK", value: "Beacon Wallet" },
94
- { name: "Data-Protocol", value: "ao" },
95
- { name: "Variant", value: "ao.TN.1" },
96
- { name: "Type", value: "Message" },
97
- ],
98
- };
99
- const signedDataItem = yield walletRef.current.signDataItem(dataItem);
100
- const response = yield fetch("https://mu.ao-testnet.xyz", {
101
- method: "POST",
102
- headers: {
103
- "Content-Type": "application/octet-stream",
104
- },
105
- body: signedDataItem,
106
- });
107
- if (!response.ok) {
108
- throw new Error("Network response was not ok");
109
- }
110
- return signedDataItem;
111
- }
112
- catch (error) {
113
- console.error("Error signing AO message:", error);
114
- throw error;
115
- }
116
- });
117
- const sign = (transaction) => __awaiter(void 0, void 0, void 0, function* () {
118
- try {
119
- return yield walletRef.current.sign(transaction);
120
- }
121
- catch (error) {
122
- console.error("Error signing wallet:", error);
123
- throw error;
124
- }
125
- });
126
- return {
127
- isConnected,
128
- connect,
129
- disconnect,
130
- getAddress,
131
- getAllAddresses,
132
- sendAR,
133
- signAOMessage,
134
- sign,
135
- };
136
- };
1
+ "use strict";
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import Transaction from "arweave/web/lib/transaction";
3
+ interface WalletContextValue {
4
+ isConnected: boolean;
5
+ connect: () => Promise<void>;
6
+ disconnect: () => Promise<void>;
7
+ getAllAddresses: () => Promise<string[]>;
8
+ getAddress: () => Promise<string | undefined>;
9
+ sendAR: (recipient: string, quantity: string) => Promise<any>;
10
+ signAOMessage: (target: string, recipient: string, quantity: string) => Promise<any>;
11
+ sign: (transaction: Transaction) => Promise<Transaction>;
12
+ }
13
+ export declare const WalletProvider: ({ children, }: {
14
+ children: any;
15
+ }) => React.JSX.Element;
16
+ export declare const useWallet: () => WalletContextValue;
17
+ export {};
@@ -0,0 +1,144 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import React, { createContext, useContext, useEffect, useRef, useState } from "react";
11
+ import WalletClient from "@vela-ventures/ao-sync-sdk";
12
+ import Arweave from "arweave";
13
+ const WalletContext = createContext(null);
14
+ export const WalletProvider = ({ children, }) => {
15
+ const [isConnected, setIsConnected] = useState(false);
16
+ const walletRef = useRef(new WalletClient());
17
+ useEffect(() => {
18
+ const wallet = walletRef.current;
19
+ wallet.reconnect();
20
+ const handleDisconnect = () => setIsConnected(false);
21
+ const handleConnect = () => setIsConnected(true);
22
+ wallet.on("disconnected", handleDisconnect);
23
+ wallet.on("connected", handleConnect);
24
+ return () => {
25
+ wallet.off("disconnected", handleDisconnect);
26
+ wallet.off("connected", handleConnect);
27
+ };
28
+ }, []);
29
+ const connect = () => __awaiter(void 0, void 0, void 0, function* () {
30
+ try {
31
+ yield walletRef.current.connect({});
32
+ }
33
+ catch (error) {
34
+ console.error("Error connecting wallet:", error);
35
+ throw error;
36
+ }
37
+ });
38
+ const disconnect = () => __awaiter(void 0, void 0, void 0, function* () {
39
+ try {
40
+ yield walletRef.current.disconnect();
41
+ setIsConnected(false);
42
+ }
43
+ catch (error) {
44
+ console.error("Error disconnecting wallet:", error);
45
+ throw error;
46
+ }
47
+ });
48
+ const getAddress = () => __awaiter(void 0, void 0, void 0, function* () {
49
+ try {
50
+ return yield walletRef.current.getActiveAddress();
51
+ }
52
+ catch (error) {
53
+ console.error("Error getting address:", error);
54
+ throw error;
55
+ }
56
+ });
57
+ const getAllAddresses = () => __awaiter(void 0, void 0, void 0, function* () {
58
+ try {
59
+ return yield walletRef.current.getAllAddresses();
60
+ }
61
+ catch (error) {
62
+ console.error("Error getting addresses:", error);
63
+ throw error;
64
+ }
65
+ });
66
+ const sendAR = (recipient, quantity) => __awaiter(void 0, void 0, void 0, function* () {
67
+ try {
68
+ const arweave = Arweave.init({
69
+ host: "arweave.net",
70
+ port: 443,
71
+ protocol: "https",
72
+ });
73
+ const tx = yield arweave.createTransaction({
74
+ target: recipient,
75
+ quantity: quantity,
76
+ });
77
+ const signedTx = yield walletRef.current.sign(tx);
78
+ return yield arweave.transactions.post(signedTx);
79
+ }
80
+ catch (error) {
81
+ console.error("Error sending AR:", error);
82
+ throw error;
83
+ }
84
+ });
85
+ const signAOMessage = (target, recipient, quantity) => __awaiter(void 0, void 0, void 0, function* () {
86
+ try {
87
+ const dataItem = {
88
+ data: "",
89
+ target,
90
+ tags: [
91
+ { name: "Action", value: "Transfer" },
92
+ { name: "Recipient", value: recipient },
93
+ { name: "Quantity", value: quantity },
94
+ { name: "SDK", value: "Beacon Wallet" },
95
+ { name: "Data-Protocol", value: "ao" },
96
+ { name: "Variant", value: "ao.TN.1" },
97
+ { name: "Type", value: "Message" },
98
+ ],
99
+ };
100
+ const signedDataItem = yield walletRef.current.signDataItem(dataItem);
101
+ const response = yield fetch("https://mu.ao-testnet.xyz", {
102
+ method: "POST",
103
+ headers: {
104
+ "Content-Type": "application/octet-stream",
105
+ },
106
+ body: signedDataItem,
107
+ });
108
+ if (!response.ok) {
109
+ throw new Error("Network response was not ok");
110
+ }
111
+ return signedDataItem;
112
+ }
113
+ catch (error) {
114
+ console.error("Error signing AO message:", error);
115
+ throw error;
116
+ }
117
+ });
118
+ const sign = (transaction) => __awaiter(void 0, void 0, void 0, function* () {
119
+ try {
120
+ return yield walletRef.current.sign(transaction);
121
+ }
122
+ catch (error) {
123
+ console.error("Error signing wallet:", error);
124
+ throw error;
125
+ }
126
+ });
127
+ return (React.createElement(WalletContext.Provider, { value: {
128
+ isConnected,
129
+ connect,
130
+ disconnect,
131
+ getAllAddresses,
132
+ getAddress,
133
+ sendAR,
134
+ signAOMessage,
135
+ sign,
136
+ } }, children));
137
+ };
138
+ export const useWallet = () => {
139
+ const context = useContext(WalletContext);
140
+ if (!context) {
141
+ throw new Error("useWallet must be used within a WalletProvider");
142
+ }
143
+ return context;
144
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vela-ventures/aosync-sdk-react",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist"
@@ -27,7 +27,6 @@
27
27
  "@babel/preset-react": "^7.26.3",
28
28
  "@types/react": "^19.0.7",
29
29
  "@types/react-dom": "^19.0.3",
30
- "@vela-ventures/ao-sync-sdk": "^1.1.9",
31
30
  "arconnect": "^1.0.4",
32
31
  "arweave": "^1.15.5",
33
32
  "react": "^19.0.0",
@@ -40,5 +39,8 @@
40
39
  ],
41
40
  "peerDependencies": {
42
41
  "react": "^18.2.0"
42
+ },
43
+ "dependencies": {
44
+ "@vela-ventures/ao-sync-sdk": "^1.1.9"
43
45
  }
44
46
  }