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.
- package/README.md +27 -1
- package/dist/browser/shogun-core.js +103157 -84871
- package/dist/browser/shogun-core.js.map +1 -1
- package/dist/config/simplified-config.js +22 -16
- package/dist/core.js +18 -26
- package/dist/examples/api-test.js +273 -0
- package/dist/examples/simple-api-test.js +89 -0
- package/dist/gundb/api.js +126 -189
- package/dist/gundb/crypto.js +32 -17
- package/dist/gundb/db.js +89 -137
- package/dist/gundb/derive.js +20 -17
- package/dist/gundb/errors.js +17 -7
- package/dist/gundb/index.js +19 -3
- package/dist/gundb/rxjs.js +19 -17
- package/dist/gundb/types.js +2 -1
- package/dist/index.js +43 -12
- package/dist/interfaces/common.js +2 -1
- package/dist/interfaces/events.js +6 -2
- package/dist/interfaces/plugin.js +2 -1
- package/dist/interfaces/shogun.js +7 -4
- package/dist/managers/AuthManager.js +9 -7
- package/dist/managers/CoreInitializer.js +23 -20
- package/dist/managers/EventManager.js +7 -4
- package/dist/managers/PluginManager.js +6 -3
- package/dist/migration-test.js +13 -8
- package/dist/plugins/base.js +11 -8
- package/dist/plugins/index.js +36 -10
- package/dist/plugins/nostr/index.js +20 -4
- package/dist/plugins/nostr/nostrConnector.js +42 -36
- package/dist/plugins/nostr/nostrConnectorPlugin.js +36 -29
- package/dist/plugins/nostr/nostrSigner.js +17 -11
- package/dist/plugins/nostr/types.js +2 -1
- package/dist/plugins/oauth/index.js +7 -2
- package/dist/plugins/oauth/oauthConnector.js +75 -69
- package/dist/plugins/oauth/oauthPlugin.js +31 -27
- package/dist/plugins/oauth/types.js +2 -1
- package/dist/plugins/web3/index.js +20 -4
- package/dist/plugins/web3/types.js +2 -1
- package/dist/plugins/web3/web3Connector.js +38 -33
- package/dist/plugins/web3/web3ConnectorPlugin.js +29 -22
- package/dist/plugins/web3/web3Signer.js +24 -18
- package/dist/plugins/webauthn/index.js +19 -3
- package/dist/plugins/webauthn/types.js +5 -2
- package/dist/plugins/webauthn/webauthn.js +30 -25
- package/dist/plugins/webauthn/webauthnPlugin.js +21 -14
- package/dist/plugins/webauthn/webauthnSigner.js +20 -14
- package/dist/storage/storage.js +5 -4
- package/dist/types/events.js +8 -2
- package/dist/types/examples/api-test.d.ts +12 -0
- package/dist/types/examples/simple-api-test.d.ts +5 -0
- package/dist/types/gundb/api.d.ts +0 -26
- package/dist/types/gundb/db.d.ts +2 -35
- package/dist/types/shogun.js +7 -4
- package/dist/utils/errorHandler.js +13 -8
- package/dist/utils/eventEmitter.js +5 -2
- package/dist/utils/validation.js +14 -7
- 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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|