shogun-core 6.9.7 → 6.9.8

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.
Files changed (2) hide show
  1. package/README.md +66 -65
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -89,92 +89,93 @@ const shogun = new ShogunCore({
89
89
  // All other APIs work the same way!
90
90
  ```
91
91
 
92
- ## Basic Database Operations
92
+ ## Database API Reference
93
+
94
+ The `shogun.db` instance provides a high-level API for interacting with the decentralized database. Shogun Core automatically handles the differences between **Gun** and **Holster** backends.
95
+
96
+ ### 1. Connection & Session Management
97
+ These methods work with both backends.
98
+
99
+ - `db.isLoggedIn(): boolean`: Returns `true` if a user is currently authenticated.
100
+ - `db.getCurrentUser(): { pub: string; user?: any } | null`: Returns the current user's public key and instance.
101
+ - `db.getUserPub(): string | null`: Returns the current user's public key.
102
+ - `db.onAuth(callback: (user: any) => void): () => void`: Listens for authentication changes. Returns an unsubscribe function.
103
+ - `db.restoreSession(): Promise<RestoreResult>`: Attempts to restore a previous session from `sessionStorage`.
104
+
105
+ ### 2. Promise-based Advanced Utilities (Firegun API)
106
+ *Note: These methods currently provide full Promise support and auto-retries primarily when using the **Gun** backend.*
93
107
 
94
108
  ```typescript
95
109
  const db = shogun.db;
96
110
 
97
- // Store data using Gun chaining (Traditional Method)
98
- await db.get('users').get('alice').get('profile').put({
99
- name: 'Alice Smith',
100
- email: 'alice@example.com',
101
- });
111
+ // Fetch data with auto-retry and 5s timeout
112
+ const data = await db.Get('public/posts/123');
102
113
 
103
- // Read data
104
- const profile = await db.get('users').get('alice').get('profile').once().then();
114
+ // Save data (supports deep object merging)
115
+ await db.Put('public/settings', { theme: 'dark' });
105
116
 
106
- // Update specific fields
107
- await db
108
- .get('users')
109
- .get('alice')
110
- .get('profile')
111
- .get('name')
112
- .put('Alice Johnson');
117
+ // Insert into a collection with a random key
118
+ await db.Set('public/logs', { event: 'login', time: Date.now() });
113
119
 
114
- // Iterate over collections with .map()
115
- db.get('users').map((user, userId) => {
116
- console.log(`User ${userId}:`, user);
117
- });
118
- ```
120
+ // Recursive load of nested nodes
121
+ const fullData = await db.Load('public/complex-node');
119
122
 
120
- ### Promise-based Advanced Utilities (Firegun API)
123
+ // "Delete" a node (Tombstoning)
124
+ await db.Del('public/temp-data');
121
125
 
122
- Shogun Core includes built-in Promise wrappers, timeouts, and user-space utilities directly in the `DataBase` class:
126
+ // Deeply nullify all keys in a node
127
+ await db.purge('public/old-config');
128
+ ```
123
129
 
130
+ ### 3. Real-time Subscriptions
124
131
  ```typescript
125
- const db = shogun.db;
126
-
127
- // Promise-based Root GET with auto-retry
128
- const data = await db.Get('public/posts/123');
132
+ // Listen to changes with an identifier for easy unsubscription
133
+ db.On('public/feed', (data) => console.log('Update:', data), 'myListener');
129
134
 
130
- // Promise-based Root PUT (supports deep object merging)
131
- await db.Put('public/settings', { theme: 'dark' }, true);
132
-
133
- // Listen to node changes with easy unsubscribe
134
- await db.On(
135
- 'public/feed',
136
- (data) => console.log('Feed updated:', data),
137
- 'myFeedListener',
138
- );
139
- await db.Off('myFeedListener'); // Cleanly remove the listener
140
-
141
- // Content Addressed Storage (CAS)
142
- // Hashes the data automatically using SHA-256 and saves it immutably
143
- const ack = await db.addContentAdressing('#immutable-posts', {
144
- text: 'Hello Web3!',
145
- });
135
+ // Stop listening
136
+ db.Off('myListener');
146
137
 
147
- // --- User Space Operations ---
148
- // These automatically prefix the path with `~pubkey/` of the logged-in user
138
+ // One-time fetch of initial state + future changes
139
+ db.Listen('public/status', (status) => console.log('Status:', status));
140
+ ```
149
141
 
150
- // Read from current user's graph
151
- const userSettings = await db.userGet('settings');
142
+ ### 4. User-Space Operations (Gun Only)
143
+ These methods automatically prefix the path with `~pubkey/` of the logged-in user.
152
144
 
153
- // Write to current user's graph
154
- await db.userPut('profile', { name: 'Alice' });
145
+ - `db.userGet(path: string)`: Read from current user's graph.
146
+ - `db.userPut(path: string, data: any)`: Write to current user's graph.
147
+ - `db.userDel(path: string)`: Delete node from user's graph.
148
+ - `db.userLoad(path: string)`: Recursively load user-space data.
155
149
 
156
- // Delete user node (Tombstoning)
157
- await db.userDel('old-post');
150
+ ### 5. Advanced Features
151
+ - **Reactive Streams**: `db.rx()` returns an RxJS helper for observable-based data handling.
152
+ - **Content Addressing**: `db.addContentAdressing('#key', data)` hashes data using SHA-256 for immutable storage.
153
+ - **Security**: `db.generatePublicCert()` creates a public certificate for P2P interactions.
154
+ - **Cleanup**: `db.aggressiveAuthCleanup()` forcefully clears all local auth state.
158
155
 
159
- // Purge (nullify all keys in a node)
160
- await db.purge('~pubkey/public/posts/123');
161
- ```
156
+ ## Authentication API
162
157
 
163
- ## Authentication Methods
158
+ Shogun Core provides a unified authentication interface. Plugins (Web3, WebAuthn, etc.) extend this system.
164
159
 
165
- ### 1. Traditional Authentication
160
+ ### Core Methods
166
161
 
167
162
  ```typescript
168
- // Sign up
169
- const signUpResult = await shogun.signUp('username', 'password');
170
- if (signUpResult.success) {
171
- console.log('User created:', signUpResult.username);
172
- }
173
-
174
- // Login
175
- const loginResult = await shogun.login('username', 'password');
176
- if (loginResult.success) {
177
- console.log('Logged in as:', loginResult.username);
163
+ // 1. Traditional Signup/Login
164
+ await shogun.signUp('alice', 'Password123!');
165
+ await shogun.login('alice', 'Password123!');
166
+
167
+ // 2. Pair-based Authentication (Gun Only)
168
+ const pair = await shogun.db.crypto.createPair();
169
+ await shogun.loginWithPair('alice', pair);
170
+
171
+ // 3. Mnemonic Seed Authentication
172
+ const mnemonic = 'word1 word2 ...';
173
+ await shogun.loginWithSeed('alice', mnemonic);
174
+
175
+ // 4. Session Check & Logout
176
+ if (shogun.isLoggedIn()) {
177
+ console.log('User Pub:', shogun.db.getUserPub());
178
+ shogun.logout();
178
179
  }
179
180
  ```
180
181
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shogun-core",
3
- "version": "6.9.7",
3
+ "version": "6.9.8",
4
4
  "type": "module",
5
5
  "description": "SHOGUN CORE - Core library for Shogun Ecosystem",
6
6
  "main": "./dist/src/index.js",