shogun-core 3.0.13 โ†’ 3.0.15

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 (57) hide show
  1. package/README.md +27 -1
  2. package/dist/browser/shogun-core.js +103157 -84871
  3. package/dist/browser/shogun-core.js.map +1 -1
  4. package/dist/config/simplified-config.js +22 -16
  5. package/dist/core.js +18 -26
  6. package/dist/examples/api-test.js +273 -0
  7. package/dist/examples/simple-api-test.js +89 -0
  8. package/dist/gundb/api.js +126 -189
  9. package/dist/gundb/crypto.js +32 -17
  10. package/dist/gundb/db.js +89 -137
  11. package/dist/gundb/derive.js +20 -17
  12. package/dist/gundb/errors.js +17 -7
  13. package/dist/gundb/index.js +19 -3
  14. package/dist/gundb/rxjs.js +19 -17
  15. package/dist/gundb/types.js +2 -1
  16. package/dist/index.js +43 -12
  17. package/dist/interfaces/common.js +2 -1
  18. package/dist/interfaces/events.js +6 -2
  19. package/dist/interfaces/plugin.js +2 -1
  20. package/dist/interfaces/shogun.js +7 -4
  21. package/dist/managers/AuthManager.js +9 -7
  22. package/dist/managers/CoreInitializer.js +23 -20
  23. package/dist/managers/EventManager.js +7 -4
  24. package/dist/managers/PluginManager.js +6 -3
  25. package/dist/migration-test.js +13 -8
  26. package/dist/plugins/base.js +11 -8
  27. package/dist/plugins/index.js +36 -10
  28. package/dist/plugins/nostr/index.js +20 -4
  29. package/dist/plugins/nostr/nostrConnector.js +42 -36
  30. package/dist/plugins/nostr/nostrConnectorPlugin.js +36 -29
  31. package/dist/plugins/nostr/nostrSigner.js +17 -11
  32. package/dist/plugins/nostr/types.js +2 -1
  33. package/dist/plugins/oauth/index.js +7 -2
  34. package/dist/plugins/oauth/oauthConnector.js +75 -69
  35. package/dist/plugins/oauth/oauthPlugin.js +31 -27
  36. package/dist/plugins/oauth/types.js +2 -1
  37. package/dist/plugins/web3/index.js +20 -4
  38. package/dist/plugins/web3/types.js +2 -1
  39. package/dist/plugins/web3/web3Connector.js +38 -33
  40. package/dist/plugins/web3/web3ConnectorPlugin.js +29 -22
  41. package/dist/plugins/web3/web3Signer.js +24 -18
  42. package/dist/plugins/webauthn/index.js +19 -3
  43. package/dist/plugins/webauthn/types.js +5 -2
  44. package/dist/plugins/webauthn/webauthn.js +30 -25
  45. package/dist/plugins/webauthn/webauthnPlugin.js +21 -14
  46. package/dist/plugins/webauthn/webauthnSigner.js +20 -14
  47. package/dist/storage/storage.js +5 -4
  48. package/dist/types/events.js +8 -2
  49. package/dist/types/examples/api-test.d.ts +12 -0
  50. package/dist/types/examples/simple-api-test.d.ts +5 -0
  51. package/dist/types/gundb/api.d.ts +0 -26
  52. package/dist/types/gundb/db.d.ts +2 -35
  53. package/dist/types/shogun.js +7 -4
  54. package/dist/utils/errorHandler.js +13 -8
  55. package/dist/utils/eventEmitter.js +5 -2
  56. package/dist/utils/validation.js +14 -7
  57. package/package.json +2 -1
@@ -1,11 +1,14 @@
1
+ "use strict";
1
2
  /**
2
3
  * Simplified configuration options to reduce complexity
3
4
  * Provides sensible defaults and easy-to-use presets
4
5
  */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.QuickConfig = exports.ConfigHelpers = exports.ShogunConfigBuilder = exports.ShogunPresets = void 0;
5
8
  /**
6
9
  * Preset configurations for common use cases
7
10
  */
8
- export const ShogunPresets = {
11
+ exports.ShogunPresets = {
9
12
  /**
10
13
  * Minimal configuration for simple apps
11
14
  */
@@ -88,8 +91,10 @@ export const ShogunPresets = {
88
91
  /**
89
92
  * Configuration builder for custom setups
90
93
  */
91
- export class ShogunConfigBuilder {
92
- config = {};
94
+ class ShogunConfigBuilder {
95
+ constructor() {
96
+ this.config = {};
97
+ }
93
98
  /**
94
99
  * Set Gun options
95
100
  */
@@ -146,36 +151,37 @@ export class ShogunConfigBuilder {
146
151
  return this.config;
147
152
  }
148
153
  }
154
+ exports.ShogunConfigBuilder = ShogunConfigBuilder;
149
155
  /**
150
156
  * Helper functions for common configuration patterns
151
157
  */
152
- export const ConfigHelpers = {
158
+ exports.ConfigHelpers = {
153
159
  /**
154
160
  * Create a configuration for a specific environment
155
161
  */
156
162
  forEnvironment(env) {
157
163
  switch (env) {
158
164
  case "development":
159
- return ShogunPresets.development();
165
+ return exports.ShogunPresets.development();
160
166
  case "production":
161
- return ShogunPresets.production();
167
+ return exports.ShogunPresets.production();
162
168
  case "test":
163
- return ShogunPresets.offline();
169
+ return exports.ShogunPresets.offline();
164
170
  default:
165
- return ShogunPresets.minimal();
171
+ return exports.ShogunPresets.minimal();
166
172
  }
167
173
  },
168
174
  /**
169
175
  * Create a configuration with custom peers
170
176
  */
171
177
  withPeers(peers) {
172
- return ShogunPresets.production(peers);
178
+ return exports.ShogunPresets.production(peers);
173
179
  },
174
180
  /**
175
181
  * Create a configuration for a specific use case
176
182
  */
177
183
  forUseCase(useCase) {
178
- const baseConfig = ShogunPresets.production();
184
+ const baseConfig = exports.ShogunPresets.production();
179
185
  switch (useCase) {
180
186
  case "chat":
181
187
  return {
@@ -206,25 +212,25 @@ export const ConfigHelpers = {
206
212
  /**
207
213
  * Quick configuration functions
208
214
  */
209
- export const QuickConfig = {
215
+ exports.QuickConfig = {
210
216
  /**
211
217
  * Minimal setup for quick testing
212
218
  */
213
- test: () => ShogunPresets.minimal(),
219
+ test: () => exports.ShogunPresets.minimal(),
214
220
  /**
215
221
  * Standard setup for most apps
216
222
  */
217
- standard: () => ShogunPresets.production(),
223
+ standard: () => exports.ShogunPresets.production(),
218
224
  /**
219
225
  * Setup with WebAuthn for secure apps
220
226
  */
221
- secure: () => ShogunPresets.webauthn(),
227
+ secure: () => exports.ShogunPresets.webauthn(),
222
228
  /**
223
229
  * Setup with Web3 for crypto apps
224
230
  */
225
- crypto: () => ShogunPresets.web3(),
231
+ crypto: () => exports.ShogunPresets.web3(),
226
232
  /**
227
233
  * Offline setup for local development
228
234
  */
229
- local: () => ShogunPresets.offline(),
235
+ local: () => exports.ShogunPresets.offline(),
230
236
  };
package/dist/core.js CHANGED
@@ -1,9 +1,12 @@
1
- import { ErrorHandler } from "./utils/errorHandler";
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShogunCore = void 0;
4
+ const errorHandler_1 = require("./utils/errorHandler");
2
5
  // Import managers
3
- import { PluginManager } from "./managers/PluginManager";
4
- import { AuthManager } from "./managers/AuthManager";
5
- import { EventManager } from "./managers/EventManager";
6
- import { CoreInitializer } from "./managers/CoreInitializer";
6
+ const PluginManager_1 = require("./managers/PluginManager");
7
+ const AuthManager_1 = require("./managers/AuthManager");
8
+ const EventManager_1 = require("./managers/EventManager");
9
+ const CoreInitializer_1 = require("./managers/CoreInitializer");
7
10
  /**
8
11
  * Main ShogunCore class - implements the IShogunCore interface
9
12
  *
@@ -15,21 +18,7 @@ import { CoreInitializer } from "./managers/CoreInitializer";
15
18
  *
16
19
  * @since 2.0.0
17
20
  */
18
- export class ShogunCore {
19
- static API_VERSION = "^3.0.11";
20
- db;
21
- storage;
22
- provider;
23
- config;
24
- rx;
25
- _gun;
26
- _user = null;
27
- wallets;
28
- // Managers
29
- pluginManager;
30
- authManager;
31
- eventManager;
32
- coreInitializer;
21
+ class ShogunCore {
33
22
  /**
34
23
  * Initialize the Shogun SDK
35
24
  * @param config - SDK Configuration object
@@ -38,12 +27,13 @@ export class ShogunCore {
38
27
  * and plugin system.
39
28
  */
40
29
  constructor(config) {
30
+ this._user = null;
41
31
  this.config = config;
42
32
  // Initialize managers
43
- this.eventManager = new EventManager();
44
- this.pluginManager = new PluginManager(this);
45
- this.authManager = new AuthManager(this);
46
- this.coreInitializer = new CoreInitializer(this);
33
+ this.eventManager = new EventManager_1.EventManager();
34
+ this.pluginManager = new PluginManager_1.PluginManager(this);
35
+ this.authManager = new AuthManager_1.AuthManager(this);
36
+ this.coreInitializer = new CoreInitializer_1.CoreInitializer(this);
47
37
  // Initialize async components
48
38
  this.coreInitializer.initialize(config).catch((error) => {
49
39
  if (typeof console !== "undefined" && console.warn) {
@@ -185,7 +175,7 @@ export class ShogunCore {
185
175
  * @returns List of most recent errors
186
176
  */
187
177
  getRecentErrors(count = 10) {
188
- return ErrorHandler.getRecentErrors(count);
178
+ return errorHandler_1.ErrorHandler.getRecentErrors(count);
189
179
  }
190
180
  // *********************************************************************************************************
191
181
  // ๐Ÿ” AUTHENTICATION
@@ -327,6 +317,8 @@ export class ShogunCore {
327
317
  return !!(this.user && this.user.is);
328
318
  }
329
319
  }
320
+ exports.ShogunCore = ShogunCore;
321
+ ShogunCore.API_VERSION = "^3.0.11";
330
322
  // Global declarations are handled in the original core.ts file
331
323
  // to avoid conflicts, we only set the window properties here
332
324
  if (typeof window !== "undefined") {
@@ -335,4 +327,4 @@ if (typeof window !== "undefined") {
335
327
  };
336
328
  window.SHOGUN_CORE_CLASS = ShogunCore;
337
329
  }
338
- export default ShogunCore;
330
+ exports.default = ShogunCore;
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ /**
3
+ * Esempio completo che mostra le differenze tra i vari metodi dell'API ShogunCore
4
+ *
5
+ * Questo esempio dimostra:
6
+ * - get() vs getData() vs getNode() vs node() vs chain()
7
+ * - put() vs set() vs putUserData() vs setUserData()
8
+ * - remove() vs removeUserData()
9
+ * - Operazioni globali vs operazioni utente
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.demonstrateAPIDifferences = demonstrateAPIDifferences;
13
+ exports.showAPIDifferences = showAPIDifferences;
14
+ const api_1 = require("../gundb/api");
15
+ async function demonstrateAPIDifferences() {
16
+ console.log("๐Ÿš€ Iniziamo il test delle differenze API...\n");
17
+ // 1. Setup iniziale
18
+ const quickStart = new api_1.AutoQuickStart({
19
+ peers: ["https://peer.wallie.io/gun"],
20
+ appScope: "test-api",
21
+ });
22
+ await quickStart.init();
23
+ const api = quickStart.api;
24
+ console.log("โœ… Setup completato\n");
25
+ // 2. Test operazioni GLOBALI (senza autenticazione)
26
+ console.log("๐Ÿ“Š === TEST OPERAZIONI GLOBALI ===\n");
27
+ // Test get() - restituisce dati direttamente o null
28
+ console.log("๐Ÿ” Test get():");
29
+ const globalData = await api.get("global/test");
30
+ console.log('get("global/test"):', globalData); // null se non esiste
31
+ // Test getNode() - restituisce nodo Gun per operazioni di chaining
32
+ console.log("\n๐Ÿ”— Test getNode():");
33
+ const globalNode = api.getNode("global/test");
34
+ console.log('getNode("global/test"):', typeof globalNode); // Gun node object
35
+ // Test node() - alias di getNode()
36
+ console.log("\n๐Ÿ”— Test node():");
37
+ const globalNode2 = api.node("global/test");
38
+ console.log('node("global/test"):', typeof globalNode2); // Gun node object
39
+ // Test chain() - wrapper con metodi di convenienza
40
+ console.log("\nโ›“๏ธ Test chain():");
41
+ const globalChain = api.chain("global/test");
42
+ console.log('chain("global/test"):', Object.keys(globalChain)); // ['get', 'put', 'set', 'once', 'then', 'map']
43
+ // Test put() vs set() - operazioni globali
44
+ console.log("\n๐Ÿ’พ Test put() vs set():");
45
+ const testData = { message: "Hello Global!", timestamp: Date.now() };
46
+ const putResult = await api.put("global/test", testData);
47
+ console.log("put() result:", putResult); // boolean
48
+ const setResult = await api.set("global/test2", {
49
+ ...testData,
50
+ method: "set",
51
+ });
52
+ console.log("set() result:", setResult); // boolean
53
+ // Verifica che i dati siano stati salvati
54
+ const retrievedData1 = await api.get("global/test");
55
+ const retrievedData2 = await api.get("global/test2");
56
+ console.log("Retrieved put data:", retrievedData1);
57
+ console.log("Retrieved set data:", retrievedData2);
58
+ // Test remove() - operazione globale
59
+ console.log("\n๐Ÿ—‘๏ธ Test remove():");
60
+ const removeResult = await api.remove("global/test2");
61
+ console.log("remove() result:", removeResult); // boolean
62
+ const removedData = await api.get("global/test2");
63
+ console.log("Data after remove:", removedData); // null
64
+ // 3. Test autenticazione
65
+ console.log("\n\n๐Ÿ” === TEST AUTENTICAZIONE ===\n");
66
+ const username = "testuser_" + Date.now();
67
+ const password = "testpass123";
68
+ // Test signup
69
+ console.log("๐Ÿ“ Test signup():");
70
+ const signupResult = await api.signup(username, password);
71
+ console.log("signup result:", signupResult);
72
+ if (signupResult) {
73
+ console.log("โœ… Utente creato:", signupResult.username);
74
+ // Test login
75
+ console.log("\n๐Ÿ”‘ Test login():");
76
+ const loginResult = await api.login(username, password);
77
+ console.log("login result:", loginResult);
78
+ if (loginResult) {
79
+ console.log("โœ… Login riuscito:", loginResult.username);
80
+ // 4. Test operazioni UTENTE (con autenticazione)
81
+ console.log("\n\n๐Ÿ‘ค === TEST OPERAZIONI UTENTE ===\n");
82
+ // Test getUserData() - restituisce dati utente direttamente
83
+ console.log("๐Ÿ” Test getUserData():");
84
+ const userData = await api.getUserData("profile");
85
+ console.log('getUserData("profile"):', userData); // null se non esiste
86
+ // Test putUserData() vs setUserData() - operazioni utente
87
+ console.log("\n๐Ÿ’พ Test putUserData() vs setUserData():");
88
+ const profileData = {
89
+ name: "Test User",
90
+ email: "test@example.com",
91
+ bio: "Test bio",
92
+ preferences: {
93
+ theme: "dark",
94
+ notifications: true,
95
+ },
96
+ };
97
+ const putUserResult = await api.putUserData("profile", profileData);
98
+ console.log("putUserData() result:", putUserResult); // boolean
99
+ const settingsData = {
100
+ language: "it",
101
+ timezone: "Europe/Rome",
102
+ privacy: "public",
103
+ };
104
+ const setUserResult = await api.setUserData("settings", settingsData);
105
+ console.log("setUserData() result:", setUserResult); // boolean
106
+ // Verifica che i dati utente siano stati salvati
107
+ const retrievedProfile = await api.getUserData("profile");
108
+ const retrievedSettings = await api.getUserData("settings");
109
+ console.log("Retrieved profile:", retrievedProfile);
110
+ console.log("Retrieved settings:", retrievedSettings);
111
+ // Test getUserNode() - nodo utente per operazioni avanzate
112
+ console.log("\n๐Ÿ”— Test getUserNode():");
113
+ try {
114
+ const userNode = api.getUserNode("profile");
115
+ console.log('getUserNode("profile"):', typeof userNode); // Gun node object
116
+ }
117
+ catch (error) {
118
+ console.log("getUserNode error:", error.message);
119
+ }
120
+ // Test removeUserData() - rimozione dati utente
121
+ console.log("\n๐Ÿ—‘๏ธ Test removeUserData():");
122
+ const removeUserResult = await api.removeUserData("settings");
123
+ console.log("removeUserData() result:", removeUserResult); // boolean
124
+ const removedUserData = await api.getUserData("settings");
125
+ console.log("User data after remove:", removedUserData); // null
126
+ // 5. Test metodi di convenienza
127
+ console.log("\n\n๐Ÿ› ๏ธ === TEST METODI DI CONVENIENZA ===\n");
128
+ // Test updateProfile()
129
+ console.log("๐Ÿ‘ค Test updateProfile():");
130
+ const profileUpdate = {
131
+ name: "Updated Test User",
132
+ bio: "Updated bio",
133
+ avatar: "https://example.com/avatar.jpg",
134
+ };
135
+ const profileResult = await api.updateProfile(profileUpdate);
136
+ console.log("updateProfile() result:", profileResult);
137
+ const updatedProfile = await api.getProfile();
138
+ console.log("Updated profile:", updatedProfile);
139
+ // Test saveSettings()
140
+ console.log("\nโš™๏ธ Test saveSettings():");
141
+ const settings = {
142
+ theme: "light",
143
+ language: "en",
144
+ notifications: false,
145
+ };
146
+ const settingsResult = await api.saveSettings(settings);
147
+ console.log("saveSettings() result:", settingsResult);
148
+ const savedSettings = await api.getSettings();
149
+ console.log("Saved settings:", savedSettings);
150
+ // Test createCollection()
151
+ console.log("\n๐Ÿ“š Test createCollection():");
152
+ const todos = {
153
+ "1": { id: "1", text: "Learn ShogunCore", completed: false },
154
+ "2": { id: "2", text: "Build awesome app", completed: false },
155
+ "3": { id: "3", text: "Deploy to production", completed: true },
156
+ };
157
+ const collectionResult = await api.createCollection("todos", todos);
158
+ console.log("createCollection() result:", collectionResult);
159
+ const todosCollection = await api.getCollection("todos");
160
+ console.log("Todos collection:", todosCollection);
161
+ // Test addToCollection()
162
+ console.log("\nโž• Test addToCollection():");
163
+ const newTodo = { id: "4", text: "Test API methods", completed: false };
164
+ const addResult = await api.addToCollection("todos", "4", newTodo);
165
+ console.log("addToCollection() result:", addResult);
166
+ const updatedCollection = await api.getCollection("todos");
167
+ console.log("Updated collection:", updatedCollection);
168
+ // Test removeFromCollection()
169
+ console.log("\nโž– Test removeFromCollection():");
170
+ const removeFromCollectionResult = await api.removeFromCollection("todos", "3");
171
+ console.log("removeFromCollection() result:", removeFromCollectionResult);
172
+ const finalCollection = await api.getCollection("todos");
173
+ console.log("Final collection:", finalCollection);
174
+ // 6. Test utility methods
175
+ console.log("\n\n๐Ÿ”ง === TEST METODI UTILITY ===\n");
176
+ // Test getCurrentUser()
177
+ console.log("๐Ÿ‘ค Test getCurrentUser():");
178
+ const currentUser = api.getCurrentUser();
179
+ console.log("Current user:", currentUser);
180
+ // Test isLoggedIn()
181
+ console.log("\n๐Ÿ” Test isLoggedIn():");
182
+ const isLoggedIn = api.isLoggedIn();
183
+ console.log("Is logged in:", isLoggedIn);
184
+ // Test userExists()
185
+ console.log("\n๐Ÿ” Test userExists():");
186
+ const userExists = await api.userExists(username);
187
+ console.log(`User ${username} exists:`, userExists);
188
+ // Test getUser()
189
+ console.log("\n๐Ÿ‘ฅ Test getUser():");
190
+ const userInfo = await api.getUser(username);
191
+ console.log("User info:", userInfo);
192
+ // Test logout
193
+ console.log("\n๐Ÿšช Test logout():");
194
+ api.logout();
195
+ const isLoggedInAfter = api.isLoggedIn();
196
+ console.log("Is logged in after logout:", isLoggedInAfter);
197
+ }
198
+ else {
199
+ console.log("โŒ Login fallito");
200
+ }
201
+ }
202
+ else {
203
+ console.log("โŒ Signup fallito");
204
+ }
205
+ // 7. Test array utilities
206
+ console.log("\n\n๐Ÿ“Š === TEST ARRAY UTILITIES ===\n");
207
+ const testArray = [
208
+ { id: "1", name: "Item 1", value: 100 },
209
+ { id: "2", name: "Item 2", value: 200 },
210
+ { id: "3", name: "Item 3", value: 300 },
211
+ ];
212
+ console.log("Original array:", testArray);
213
+ // Test arrayToIndexedObject()
214
+ const indexedObject = api.arrayToIndexedObject(testArray);
215
+ console.log("Array to indexed object:", indexedObject);
216
+ // Test indexedObjectToArray()
217
+ const backToArray = api.indexedObjectToArray(indexedObject);
218
+ console.log("Indexed object back to array:", backToArray);
219
+ console.log("\nโœ… Test completato!");
220
+ }
221
+ // Funzione per mostrare le differenze principali
222
+ function showAPIDifferences() {
223
+ console.log(`
224
+ ๐Ÿ“‹ === RIEPILOGO DIFFERENZE API ===
225
+
226
+ ๐Ÿ” METODI GET:
227
+ โ€ข get(path) โ†’ Restituisce dati direttamente o null
228
+ โ€ข getNode(path) โ†’ Restituisce nodo Gun per chaining (.map(), .on(), etc.)
229
+ โ€ข node(path) โ†’ Alias di getNode()
230
+ โ€ข chain(path) โ†’ Wrapper con metodi di convenienza (get, put, set, once, then, map)
231
+ โ€ข getUserData(path) โ†’ Come get() ma per dati utente (richiede login)
232
+
233
+ ๐Ÿ’พ METODI PUT/SET:
234
+ โ€ข put(path, data) โ†’ Salva dati globali, restituisce boolean
235
+ โ€ข set(path, data) โ†’ Come put() ma con semantica diversa
236
+ โ€ข putUserData(path, data) โ†’ Salva dati utente, restituisce boolean
237
+ โ€ข setUserData(path, data) โ†’ Come putUserData() ma con semantica diversa
238
+
239
+ ๐Ÿ—‘๏ธ METODI REMOVE:
240
+ โ€ข remove(path) โ†’ Rimuove dati globali, restituisce boolean
241
+ โ€ข removeUserData(path) โ†’ Rimuove dati utente, restituisce boolean
242
+
243
+ ๐Ÿ” AUTENTICAZIONE:
244
+ โ€ข signup(username, password) โ†’ Crea nuovo utente
245
+ โ€ข login(username, password) โ†’ Autentica utente esistente
246
+ โ€ข logout() โ†’ Disconnette utente
247
+ โ€ข isLoggedIn() โ†’ Controlla se utente รจ autenticato
248
+
249
+ ๐Ÿ‘ค UTILITY UTENTE:
250
+ โ€ข getCurrentUser() โ†’ Info utente corrente
251
+ โ€ข getUser(alias) โ†’ Info utente per alias
252
+ โ€ข userExists(alias) โ†’ Controlla se utente esiste
253
+
254
+ ๐Ÿ› ๏ธ METODI DI CONVENIENZA:
255
+ โ€ข updateProfile(data) โ†’ Aggiorna profilo utente
256
+ โ€ข getProfile() โ†’ Ottiene profilo utente
257
+ โ€ข saveSettings(data) โ†’ Salva impostazioni utente
258
+ โ€ข getSettings() โ†’ Ottiene impostazioni utente
259
+ โ€ข createCollection(name, items) โ†’ Crea collezione
260
+ โ€ข addToCollection(name, id, item) โ†’ Aggiunge item a collezione
261
+ โ€ข getCollection(name) โ†’ Ottiene collezione
262
+ โ€ข removeFromCollection(name, id) โ†’ Rimuove item da collezione
263
+
264
+ ๐Ÿ“Š ARRAY UTILITIES:
265
+ โ€ข arrayToIndexedObject(arr) โ†’ Converte array in oggetto indicizzato per GunDB
266
+ โ€ข indexedObjectToArray(obj) โ†’ Converte oggetto indicizzato in array
267
+ `);
268
+ }
269
+ // Esegui il test
270
+ if (require.main === module) {
271
+ showAPIDifferences();
272
+ demonstrateAPIDifferences().catch(console.error);
273
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * Esempio semplice che mostra le differenze principali tra i metodi API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.simpleAPITest = simpleAPITest;
7
+ const api_1 = require("../gundb/api");
8
+ async function simpleAPITest() {
9
+ console.log("๐Ÿš€ Test semplice API ShogunCore\n");
10
+ // Setup
11
+ const quickStart = new api_1.AutoQuickStart({
12
+ peers: ["https://peer.wallie.io/gun"],
13
+ appScope: "simple-test",
14
+ });
15
+ await quickStart.init();
16
+ const api = quickStart.api;
17
+ // === DIFFERENZE PRINCIPALI ===
18
+ console.log("๐Ÿ“Š === DIFFERENZE GET ===\n");
19
+ // 1. get() - restituisce dati direttamente
20
+ const data1 = await api.get("test/path");
21
+ console.log('get("test/path"):', data1); // null o dati
22
+ // 2. getNode() - restituisce nodo Gun per chaining
23
+ const node1 = api.getNode("test/path");
24
+ console.log('getNode("test/path"):', typeof node1); // "object" (Gun node)
25
+ // 3. node() - alias di getNode()
26
+ const node2 = api.node("test/path");
27
+ console.log('node("test/path"):', typeof node2); // "object" (Gun node)
28
+ // 4. chain() - wrapper con metodi di convenienza
29
+ const chain1 = api.chain("test/path");
30
+ console.log('chain("test/path"):', Object.keys(chain1)); // ['get', 'put', 'set', 'once', 'then', 'map']
31
+ console.log("\n๐Ÿ’พ === DIFFERENZE PUT/SET ===\n");
32
+ const testData = { message: "Hello World", timestamp: Date.now() };
33
+ // 1. put() - salva dati globali
34
+ const putResult = await api.put("global/data", testData);
35
+ console.log("put() result:", putResult); // true/false
36
+ // 2. set() - come put() ma semantica diversa
37
+ const setResult = await api.set("global/data2", {
38
+ ...testData,
39
+ method: "set",
40
+ });
41
+ console.log("set() result:", setResult); // true/false
42
+ // Verifica
43
+ const retrieved1 = await api.get("global/data");
44
+ const retrieved2 = await api.get("global/data2");
45
+ console.log("Retrieved put data:", retrieved1);
46
+ console.log("Retrieved set data:", retrieved2);
47
+ console.log("\n๐Ÿ—‘๏ธ === DIFFERENZE REMOVE ===\n");
48
+ // remove() - rimuove dati globali
49
+ const removeResult = await api.remove("global/data2");
50
+ console.log("remove() result:", removeResult); // true/false
51
+ const afterRemove = await api.get("global/data2");
52
+ console.log("Data after remove:", afterRemove); // null
53
+ console.log("\n๐Ÿ” === TEST AUTENTICAZIONE ===\n");
54
+ // Signup e login
55
+ const username = "testuser_" + Date.now();
56
+ const password = "testpass123";
57
+ const signupResult = await api.signup(username, password);
58
+ console.log("Signup result:", signupResult);
59
+ if (signupResult) {
60
+ const loginResult = await api.login(username, password);
61
+ console.log("Login result:", loginResult);
62
+ if (loginResult) {
63
+ console.log("\n๐Ÿ‘ค === OPERAZIONI UTENTE ===\n");
64
+ // getUserData() - per dati utente
65
+ const userData = await api.getUserData("profile");
66
+ console.log('getUserData("profile"):', userData); // null o dati utente
67
+ // putUserData() - salva dati utente
68
+ const profileData = { name: "Test User", email: "test@example.com" };
69
+ const putUserResult = await api.putUserData("profile", profileData);
70
+ console.log("putUserData() result:", putUserResult); // true/false
71
+ // Verifica dati utente
72
+ const retrievedProfile = await api.getUserData("profile");
73
+ console.log("Retrieved profile:", retrievedProfile);
74
+ // removeUserData() - rimuove dati utente
75
+ const removeUserResult = await api.removeUserData("profile");
76
+ console.log("removeUserData() result:", removeUserResult); // true/false
77
+ const afterRemoveUser = await api.getUserData("profile");
78
+ console.log("User data after remove:", afterRemoveUser); // null
79
+ // Logout
80
+ api.logout();
81
+ console.log("Logged out");
82
+ }
83
+ }
84
+ console.log("\nโœ… Test completato!");
85
+ }
86
+ // Esegui il test
87
+ if (require.main === module) {
88
+ simpleAPITest().catch(console.error);
89
+ }