shogun-core 6.2.3 → 6.3.0
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/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js +93 -341
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_ed448_js.shogun-core.js.map +1 -1
- package/dist/browser/shogun-core.js +138850 -146638
- package/dist/browser/shogun-core.js.map +1 -1
- package/dist/{core.js → src/core.js} +167 -107
- package/dist/src/crypto/asymmetric.js +168 -0
- package/dist/src/crypto/double-ratchet.js +908 -0
- package/dist/src/crypto/file-encryption.js +352 -0
- package/dist/src/crypto/hashing.js +160 -0
- package/dist/src/crypto/index.js +18 -0
- package/dist/{crypto → src/crypto}/mls-codec.js +24 -34
- package/dist/src/crypto/mls.js +734 -0
- package/dist/src/crypto/pgp.js +619 -0
- package/dist/{crypto → src/crypto}/random-generation.js +125 -103
- package/dist/src/crypto/sframe.js +466 -0
- package/dist/src/crypto/signal-protocol.js +943 -0
- package/dist/src/crypto/symmetric.js +165 -0
- package/dist/src/crypto/utils.js +220 -0
- package/dist/src/examples/auth-test.js +535 -0
- package/dist/src/examples/crypto-identity-example.js +294 -0
- package/dist/src/examples/crypto-working-test.js +149 -0
- package/dist/src/examples/double-ratchet-test.js +240 -0
- package/dist/src/examples/mls-3-member-test.js +183 -0
- package/dist/src/examples/mls-multi-member.js +439 -0
- package/dist/src/examples/mls-sframe-test.js +491 -0
- package/dist/src/examples/mls-simple-test.js +122 -0
- package/dist/src/examples/pgp-example.js +354 -0
- package/dist/src/examples/random-generation-test.js +191 -0
- package/dist/src/examples/shogun-core-example.js +204 -0
- package/dist/src/examples/signal-protocol-test.js +82 -0
- package/dist/src/examples/zkproof-credentials-example.js +357 -0
- package/dist/src/examples/zkproof-example.js +357 -0
- package/dist/src/gundb/crypto.js +420 -0
- package/dist/src/gundb/db.js +728 -0
- package/dist/src/gundb/derive.js +327 -0
- package/dist/src/gundb/errors.js +115 -0
- package/dist/src/gundb/gun-es.js +8 -0
- package/dist/src/gundb/index.js +5 -0
- package/dist/{gundb → src/gundb}/rxjs.js +147 -111
- package/dist/{gundb → src/gundb}/types.js +1 -2
- package/dist/src/index.js +19 -0
- package/dist/src/interfaces/events.js +57 -0
- package/dist/{interfaces → src/interfaces}/shogun.js +4 -7
- package/dist/src/managers/AuthManager.js +301 -0
- package/dist/src/managers/CoreInitializer.js +304 -0
- package/dist/src/managers/CryptoIdentityManager.js +230 -0
- package/dist/{managers → src/managers}/EventManager.js +19 -21
- package/dist/{managers → src/managers}/PluginManager.js +123 -89
- package/dist/src/plugins/base.js +90 -0
- package/dist/src/plugins/index.js +17 -0
- package/dist/src/plugins/nostr/index.js +4 -0
- package/dist/src/plugins/nostr/nostrConnector.js +539 -0
- package/dist/src/plugins/nostr/nostrConnectorPlugin.js +663 -0
- package/dist/src/plugins/nostr/nostrSigner.js +414 -0
- package/dist/src/plugins/smartwallet/index.js +2 -0
- package/dist/src/plugins/smartwallet/smartWalletPlugin.js +824 -0
- package/dist/src/plugins/web3/index.js +4 -0
- package/dist/src/plugins/web3/types.js +1 -0
- package/dist/src/plugins/web3/web3Connector.js +738 -0
- package/dist/src/plugins/web3/web3ConnectorPlugin.js +639 -0
- package/dist/src/plugins/web3/web3Signer.js +432 -0
- package/dist/src/plugins/webauthn/index.js +3 -0
- package/dist/{plugins → src/plugins}/webauthn/types.js +2 -5
- package/dist/src/plugins/webauthn/webauthn.js +647 -0
- package/dist/src/plugins/webauthn/webauthnPlugin.js +689 -0
- package/dist/src/plugins/webauthn/webauthnSigner.js +419 -0
- package/dist/{plugins → src/plugins}/zkproof/index.js +3 -10
- package/dist/src/plugins/zkproof/types.js +1 -0
- package/dist/src/plugins/zkproof/zkCredentials.js +287 -0
- package/dist/src/plugins/zkproof/zkProofConnector.js +267 -0
- package/dist/src/plugins/zkproof/zkProofPlugin.js +405 -0
- package/dist/src/storage/storage.js +189 -0
- package/dist/src/utils/errorHandler.js +339 -0
- package/dist/{utils → src/utils}/eventEmitter.js +26 -26
- package/dist/{utils → src/utils}/seedPhrase.js +23 -32
- package/dist/{utils → src/utils}/validation.js +14 -21
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/{crypto → src/crypto}/double-ratchet.d.ts +1 -1
- package/dist/types/{crypto → src/crypto}/signal-protocol.d.ts +25 -0
- package/dist/types/{crypto → src/crypto}/types.d.ts +3 -1
- package/dist/types/src/examples/crypto-working-test.d.ts +1 -0
- package/dist/types/src/examples/double-ratchet-test.d.ts +1 -0
- package/dist/types/src/examples/mls-sframe-test.d.ts +1 -0
- package/dist/types/src/examples/random-generation-test.d.ts +1 -0
- package/dist/types/src/examples/signal-protocol-test.d.ts +1 -0
- package/dist/types/{gundb → src/gundb}/db.d.ts +14 -1
- package/dist/types/src/gundb/gun-es.d.ts +8 -0
- package/dist/types/src/gundb/min.d.ts +3 -0
- package/dist/types/{index.d.ts → src/index.d.ts} +1 -0
- package/package.json +14 -11
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js +0 -1651
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_abstract_curve_js-node_modules_noble_curves_esm_-1ce4ed.shogun-core.js.map +0 -1
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js +0 -1608
- package/dist/browser/defaultVendors-node_modules_noble_curves_esm_nist_js.shogun-core.js.map +0 -1
- package/dist/crypto/asymmetric.js +0 -99
- package/dist/crypto/double-ratchet.js +0 -370
- package/dist/crypto/file-encryption.js +0 -213
- package/dist/crypto/hashing.js +0 -87
- package/dist/crypto/index.js +0 -34
- package/dist/crypto/mls.js +0 -569
- package/dist/crypto/pgp.js +0 -390
- package/dist/crypto/sframe.js +0 -352
- package/dist/crypto/signal-protocol.js +0 -456
- package/dist/crypto/symmetric.js +0 -91
- package/dist/crypto/types.js +0 -2
- package/dist/crypto/utils.js +0 -140
- package/dist/examples/auth-test.js +0 -453
- package/dist/examples/crypto-identity-example.js +0 -196
- package/dist/examples/crypto-working-test.js +0 -83
- package/dist/examples/double-ratchet-test.js +0 -155
- package/dist/examples/mls-3-member-test.js +0 -97
- package/dist/examples/mls-multi-member.js +0 -153
- package/dist/examples/mls-sframe-test.js +0 -307
- package/dist/examples/mls-simple-test.js +0 -58
- package/dist/examples/pgp-example.js +0 -200
- package/dist/examples/random-generation-test.js +0 -151
- package/dist/examples/shogun-core-example.js +0 -150
- package/dist/examples/signal-protocol-test.js +0 -38
- package/dist/examples/zkproof-credentials-example.js +0 -217
- package/dist/examples/zkproof-example.js +0 -242
- package/dist/gundb/crypto.js +0 -306
- package/dist/gundb/db.js +0 -485
- package/dist/gundb/derive.js +0 -232
- package/dist/gundb/errors.js +0 -76
- package/dist/gundb/gun-es.js +0 -12
- package/dist/gundb/index.js +0 -21
- package/dist/gundb/min.js +0 -10
- package/dist/index.esm.js +0 -22
- package/dist/index.js +0 -47
- package/dist/interfaces/common.js +0 -2
- package/dist/interfaces/events.js +0 -40
- package/dist/interfaces/plugin.js +0 -2
- package/dist/managers/AuthManager.js +0 -226
- package/dist/managers/CoreInitializer.js +0 -250
- package/dist/managers/CryptoIdentityManager.js +0 -138
- package/dist/plugins/base.js +0 -50
- package/dist/plugins/index.js +0 -32
- package/dist/plugins/nostr/index.js +0 -20
- package/dist/plugins/nostr/nostrConnector.js +0 -419
- package/dist/plugins/nostr/nostrConnectorPlugin.js +0 -453
- package/dist/plugins/nostr/nostrSigner.js +0 -319
- package/dist/plugins/nostr/types.js +0 -2
- package/dist/plugins/smartwallet/index.js +0 -18
- package/dist/plugins/smartwallet/smartWalletPlugin.js +0 -511
- package/dist/plugins/smartwallet/types.js +0 -2
- package/dist/plugins/web3/index.js +0 -20
- package/dist/plugins/web3/types.js +0 -2
- package/dist/plugins/web3/web3Connector.js +0 -533
- package/dist/plugins/web3/web3ConnectorPlugin.js +0 -455
- package/dist/plugins/web3/web3Signer.js +0 -314
- package/dist/plugins/webauthn/index.js +0 -19
- package/dist/plugins/webauthn/webauthn.js +0 -496
- package/dist/plugins/webauthn/webauthnPlugin.js +0 -490
- package/dist/plugins/webauthn/webauthnSigner.js +0 -310
- package/dist/plugins/zkproof/types.js +0 -2
- package/dist/plugins/zkproof/zkCredentials.js +0 -216
- package/dist/plugins/zkproof/zkProofConnector.js +0 -198
- package/dist/plugins/zkproof/zkProofPlugin.js +0 -272
- package/dist/storage/storage.js +0 -145
- package/dist/types/gundb/gun-es.d.ts +0 -8
- package/dist/utils/errorHandler.js +0 -246
- /package/dist/{types/examples/crypto-working-test.d.ts → src/crypto/types.js} +0 -0
- /package/dist/{types/gundb/min.d.ts → src/gundb/min.js} +0 -0
- /package/dist/{types/examples/double-ratchet-test.d.ts → src/interfaces/common.js} +0 -0
- /package/dist/{types/examples/mls-sframe-test.d.ts → src/interfaces/plugin.js} +0 -0
- /package/dist/{types/examples/random-generation-test.d.ts → src/plugins/nostr/types.js} +0 -0
- /package/dist/{types/examples/signal-protocol-test.d.ts → src/plugins/smartwallet/types.js} +0 -0
- /package/dist/types/{core.d.ts → src/core.d.ts} +0 -0
- /package/dist/types/{crypto → src/crypto}/asymmetric.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/file-encryption.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/hashing.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/index.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/mls-codec.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/mls.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/pgp.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/random-generation.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/sframe.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/symmetric.d.ts +0 -0
- /package/dist/types/{crypto → src/crypto}/utils.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/auth-test.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/crypto-identity-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/mls-3-member-test.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/mls-multi-member.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/mls-simple-test.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/pgp-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/shogun-core-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/zkproof-credentials-example.d.ts +0 -0
- /package/dist/types/{examples → src/examples}/zkproof-example.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/crypto.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/derive.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/errors.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/index.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/rxjs.d.ts +0 -0
- /package/dist/types/{gundb → src/gundb}/types.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/common.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/events.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/plugin.d.ts +0 -0
- /package/dist/types/{interfaces → src/interfaces}/shogun.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/AuthManager.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/CoreInitializer.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/CryptoIdentityManager.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/EventManager.d.ts +0 -0
- /package/dist/types/{managers → src/managers}/PluginManager.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/base.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/nostrConnector.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/nostrConnectorPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/nostrSigner.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/nostr/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/smartwallet/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/smartwallet/smartWalletPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/smartwallet/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/web3Connector.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/web3ConnectorPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/web3/web3Signer.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/webauthn.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/webauthnPlugin.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/webauthn/webauthnSigner.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/index.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/types.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/zkCredentials.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/zkProofConnector.d.ts +0 -0
- /package/dist/types/{plugins → src/plugins}/zkproof/zkProofPlugin.d.ts +0 -0
- /package/dist/types/{storage → src/storage}/storage.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/errorHandler.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/eventEmitter.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/seedPhrase.d.ts +0 -0
- /package/dist/types/{utils → src/utils}/validation.d.ts +0 -0
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Test Script
|
|
3
|
+
*
|
|
4
|
+
* Tests signup and login functionality with username and password
|
|
5
|
+
* Includes timeout handling and error recovery testing
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
17
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
18
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
19
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
20
|
+
function step(op) {
|
|
21
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
22
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
23
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
24
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
25
|
+
switch (op[0]) {
|
|
26
|
+
case 0: case 1: t = op; break;
|
|
27
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
28
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
29
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
30
|
+
default:
|
|
31
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
32
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
33
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
34
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
35
|
+
if (t[2]) _.ops.pop();
|
|
36
|
+
_.trys.pop(); continue;
|
|
37
|
+
}
|
|
38
|
+
op = body.call(thisArg, _);
|
|
39
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
40
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
import { Gun, SEA } from "../index.js";
|
|
44
|
+
import { ShogunCore } from "../core.js";
|
|
45
|
+
function authTest() {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
+
var globalTimeout, logMemoryUsage, cleanup, gunInstance, shogunCore, db, user, currentUserInfo, testUsername, testPassword, signupStartTime, preSignupCheck, signupResult, signupDuration, error_1, loginStartTime, loginResult, loginDuration, userInstance, currentUser, isLoggedIn, error_2, gunInstance_1, appNode_1, testData, retrievedData, profileData, userInstance, currentUser_1, profile, error_3, gunInstance_2, isStillLoggedIn, userAfterLogout, currentUserAfterLogout, error_4, gunInstance_3, user_1, isAuthenticated, currentUserInstance, currentUserInfo_1, error_5, invalidLoginResult, error_6, nonexistentLoginResult, error_7;
|
|
48
|
+
var _a, _b, _c;
|
|
49
|
+
return __generator(this, function (_d) {
|
|
50
|
+
switch (_d.label) {
|
|
51
|
+
case 0:
|
|
52
|
+
console.log("🔐 ShogunCore Authentication Test\n");
|
|
53
|
+
globalTimeout = setTimeout(function () {
|
|
54
|
+
console.log("⏰ Global timeout reached - test taking too long");
|
|
55
|
+
console.log("✅ Test completed (with timeout)");
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}, 120000);
|
|
58
|
+
logMemoryUsage = function (label) {
|
|
59
|
+
if (typeof process !== "undefined" && process.memoryUsage) {
|
|
60
|
+
var usage = process.memoryUsage();
|
|
61
|
+
console.log("\uD83D\uDCCA [".concat(label, "] Memory Usage:"), {
|
|
62
|
+
rss: "".concat(Math.round(usage.rss / 1024 / 1024), "MB"),
|
|
63
|
+
heapUsed: "".concat(Math.round(usage.heapUsed / 1024 / 1024), "MB"),
|
|
64
|
+
heapTotal: "".concat(Math.round(usage.heapTotal / 1024 / 1024), "MB"),
|
|
65
|
+
external: "".concat(Math.round(usage.external / 1024 / 1024), "MB"),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
cleanup = function () {
|
|
70
|
+
if (globalTimeout) {
|
|
71
|
+
clearTimeout(globalTimeout);
|
|
72
|
+
}
|
|
73
|
+
// Clear any other timeouts that might be running
|
|
74
|
+
// Note: process.emit('cleanup') is not a standard Node.js event
|
|
75
|
+
};
|
|
76
|
+
// Handle process cleanup
|
|
77
|
+
process.on("SIGINT", cleanup);
|
|
78
|
+
process.on("SIGTERM", cleanup);
|
|
79
|
+
process.on("exit", cleanup);
|
|
80
|
+
// === INITIALIZATION ===
|
|
81
|
+
console.log("📦 === INITIALIZATION ===\n");
|
|
82
|
+
// Set SEA on Gun globally BEFORE creating instance
|
|
83
|
+
Gun.SEA = SEA;
|
|
84
|
+
// Debug: Check if SEA is available
|
|
85
|
+
console.log("[DEBUG] SEA available:", !!SEA);
|
|
86
|
+
console.log("[DEBUG] Gun.SEA available:", !!Gun.SEA);
|
|
87
|
+
gunInstance = Gun({
|
|
88
|
+
peers: [
|
|
89
|
+
"https://g3ru5bwxmezpuu3ktnoclbpiw4.srv.us/gun",
|
|
90
|
+
"https://5eh4twk2f62autunsje4panime.srv.us/gun",
|
|
91
|
+
],
|
|
92
|
+
radisk: false,
|
|
93
|
+
localStorage: false, // Enable for testing - allows offline operations
|
|
94
|
+
// Reduce log noise from SEA verification errors (these are expected when checking invalid credentials)
|
|
95
|
+
log: function () { }, // Disable Gun.js console logging to reduce noise
|
|
96
|
+
});
|
|
97
|
+
// Attach SEA to Gun instance for Node.js environment
|
|
98
|
+
gunInstance.SEA = SEA;
|
|
99
|
+
// Also set SEA on global Gun for CryptoIdentityManager fallback
|
|
100
|
+
if (Gun && !Gun.SEA) {
|
|
101
|
+
Gun.SEA = SEA;
|
|
102
|
+
}
|
|
103
|
+
// Set on globalThis as well
|
|
104
|
+
if (globalThis.Gun) {
|
|
105
|
+
globalThis.Gun.SEA = SEA;
|
|
106
|
+
}
|
|
107
|
+
globalThis.SEA = SEA;
|
|
108
|
+
console.log("[DEBUG] gunInstance.SEA available:", !!gunInstance.SEA);
|
|
109
|
+
console.log("[DEBUG] Gun.SEA available:", !!Gun.SEA);
|
|
110
|
+
console.log("[DEBUG] globalThis.SEA available:", !!globalThis.SEA);
|
|
111
|
+
shogunCore = new ShogunCore({
|
|
112
|
+
gunInstance: gunInstance,
|
|
113
|
+
});
|
|
114
|
+
try {
|
|
115
|
+
console.log("✓ ShogunCore initialized successfully");
|
|
116
|
+
logMemoryUsage("After Init");
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error("❌ Failed to initialize ShogunCore:", error);
|
|
120
|
+
return [2 /*return*/];
|
|
121
|
+
}
|
|
122
|
+
db = shogunCore.db;
|
|
123
|
+
console.log("peers:", db.gun._.opt.peers);
|
|
124
|
+
console.log("- Database instance:", db ? "Available" : "Not available");
|
|
125
|
+
user = db.gun.user();
|
|
126
|
+
currentUserInfo = (user === null || user === void 0 ? void 0 : user.is)
|
|
127
|
+
? { alias: user.is.alias, pub: user.is.pub }
|
|
128
|
+
: null;
|
|
129
|
+
console.log("- Current user:", (currentUserInfo === null || currentUserInfo === void 0 ? void 0 : currentUserInfo.alias) || "None");
|
|
130
|
+
console.log("- Is logged in:", db.isLoggedIn());
|
|
131
|
+
console.log("");
|
|
132
|
+
logMemoryUsage("Before Tests");
|
|
133
|
+
// === TEST 1: BASIC SIGNUP AND LOGIN ===
|
|
134
|
+
console.log("🧪 === TEST 1: BASIC SIGNUP AND LOGIN ===\n");
|
|
135
|
+
testUsername = "scobru";
|
|
136
|
+
testPassword = "francos88";
|
|
137
|
+
// Clean up any existing session
|
|
138
|
+
console.log("🧹 Cleaning up any existing session...");
|
|
139
|
+
db.logout();
|
|
140
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
|
|
141
|
+
case 1:
|
|
142
|
+
_d.sent(); // Wait 1 second
|
|
143
|
+
if (!(testUsername === "scobru")) return [3 /*break*/, 3];
|
|
144
|
+
console.log("🔧 Performing aggressive cleanup for problematic user...");
|
|
145
|
+
db.aggressiveAuthCleanup();
|
|
146
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 3000); })];
|
|
147
|
+
case 2:
|
|
148
|
+
_d.sent(); // Wait 3 seconds
|
|
149
|
+
console.log("✓ Aggressive cleanup completed");
|
|
150
|
+
_d.label = 3;
|
|
151
|
+
case 3:
|
|
152
|
+
console.log("✓ Session cleanup completed\n");
|
|
153
|
+
console.log("Testing with username: ".concat(testUsername));
|
|
154
|
+
console.log("Password: ".concat(testPassword, "\n"));
|
|
155
|
+
// Test signup
|
|
156
|
+
console.log("🔄 Attempting signup...");
|
|
157
|
+
signupStartTime = Date.now();
|
|
158
|
+
// Check if user already exists before signup
|
|
159
|
+
console.log("\uD83D\uDD0D Pre-signup check for user: ".concat(testUsername));
|
|
160
|
+
return [4 /*yield*/, new Promise(function (resolve) {
|
|
161
|
+
var timeout = setTimeout(function () {
|
|
162
|
+
console.log("⏰ Pre-signup check timeout");
|
|
163
|
+
resolve(false);
|
|
164
|
+
}, 3000);
|
|
165
|
+
db.gun.get("~@".concat(testUsername)).once(function (data) {
|
|
166
|
+
clearTimeout(timeout);
|
|
167
|
+
console.log("📊 Pre-signup data:", data ? "User exists" : "User not found");
|
|
168
|
+
if (data) {
|
|
169
|
+
console.log("🔑 User pub:", data.pub ? "".concat(data.pub.substring(0, 20), "...") : "None");
|
|
170
|
+
console.log("📝 User keys:", Object.keys(data));
|
|
171
|
+
}
|
|
172
|
+
resolve(!!data && !!data.pub);
|
|
173
|
+
});
|
|
174
|
+
})];
|
|
175
|
+
case 4:
|
|
176
|
+
preSignupCheck = _d.sent();
|
|
177
|
+
if (!preSignupCheck) return [3 /*break*/, 5];
|
|
178
|
+
console.log("⚠️ User already exists, skipping signup and going directly to login");
|
|
179
|
+
return [3 /*break*/, 8];
|
|
180
|
+
case 5:
|
|
181
|
+
_d.trys.push([5, 7, , 8]);
|
|
182
|
+
return [4 /*yield*/, db.signUp(testUsername, testPassword)];
|
|
183
|
+
case 6:
|
|
184
|
+
signupResult = _d.sent();
|
|
185
|
+
signupDuration = Date.now() - signupStartTime;
|
|
186
|
+
console.log("\u2713 Signup completed in ".concat(signupDuration, "ms"));
|
|
187
|
+
console.log("Signup result:", {
|
|
188
|
+
success: signupResult.success,
|
|
189
|
+
userPub: signupResult.userPub
|
|
190
|
+
? "".concat(signupResult.userPub.substring(0, 20), "...")
|
|
191
|
+
: "None",
|
|
192
|
+
username: signupResult.username,
|
|
193
|
+
isNewUser: signupResult.isNewUser,
|
|
194
|
+
error: signupResult.error || "None",
|
|
195
|
+
});
|
|
196
|
+
if (!signupResult.success) {
|
|
197
|
+
console.log("ℹ️ Signup failed, user might already exist. Will try login...");
|
|
198
|
+
}
|
|
199
|
+
return [3 /*break*/, 8];
|
|
200
|
+
case 7:
|
|
201
|
+
error_1 = _d.sent();
|
|
202
|
+
console.log("ℹ️ Signup threw exception, user might already exist. Will try login...");
|
|
203
|
+
console.log("Exception details:", error_1);
|
|
204
|
+
return [3 /*break*/, 8];
|
|
205
|
+
case 8:
|
|
206
|
+
// Wait a moment before attempting login
|
|
207
|
+
console.log("⏳ Waiting 2 seconds before login attempt...");
|
|
208
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
|
|
209
|
+
case 9:
|
|
210
|
+
_d.sent();
|
|
211
|
+
console.log("");
|
|
212
|
+
// Test login
|
|
213
|
+
console.log("🔄 Attempting login...");
|
|
214
|
+
loginStartTime = Date.now();
|
|
215
|
+
_d.label = 10;
|
|
216
|
+
case 10:
|
|
217
|
+
_d.trys.push([10, 12, , 13]);
|
|
218
|
+
// Skip user existence check and try direct login
|
|
219
|
+
console.log("🔄 Attempting direct login (bypassing user existence check)...");
|
|
220
|
+
return [4 /*yield*/, db.login(testUsername, testPassword)];
|
|
221
|
+
case 11:
|
|
222
|
+
loginResult = _d.sent();
|
|
223
|
+
loginDuration = Date.now() - loginStartTime;
|
|
224
|
+
console.log("\u2713 Login completed in ".concat(loginDuration, "ms"));
|
|
225
|
+
console.log("Login result:", {
|
|
226
|
+
success: loginResult.success,
|
|
227
|
+
userPub: loginResult.userPub
|
|
228
|
+
? "".concat(loginResult.userPub.substring(0, 20), "...")
|
|
229
|
+
: "None",
|
|
230
|
+
username: loginResult.username,
|
|
231
|
+
error: loginResult.error || "None",
|
|
232
|
+
});
|
|
233
|
+
if (!loginResult.success) {
|
|
234
|
+
console.error("❌ Login failed:", loginResult.error);
|
|
235
|
+
console.log("ℹ️ If this is a new user, try running the test again after a few seconds");
|
|
236
|
+
return [2 /*return*/];
|
|
237
|
+
}
|
|
238
|
+
// Verify user state
|
|
239
|
+
console.log("\n🔍 Verifying user state...");
|
|
240
|
+
userInstance = db.gun.user();
|
|
241
|
+
currentUser = (userInstance === null || userInstance === void 0 ? void 0 : userInstance.is)
|
|
242
|
+
? {
|
|
243
|
+
alias: userInstance.is.alias,
|
|
244
|
+
pub: userInstance.is.pub,
|
|
245
|
+
epub: (_b = (_a = userInstance === null || userInstance === void 0 ? void 0 : userInstance._) === null || _a === void 0 ? void 0 : _a.sea) === null || _b === void 0 ? void 0 : _b.epub,
|
|
246
|
+
}
|
|
247
|
+
: null;
|
|
248
|
+
isLoggedIn = db.isLoggedIn();
|
|
249
|
+
console.log("Current user:", {
|
|
250
|
+
alias: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.alias) || "None",
|
|
251
|
+
pub: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.pub) ? "".concat(currentUser.pub.substring(0, 20), "...") : "None",
|
|
252
|
+
epub: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.epub)
|
|
253
|
+
? "".concat(currentUser.epub.substring(0, 20), "...")
|
|
254
|
+
: "None",
|
|
255
|
+
});
|
|
256
|
+
console.log("Is logged in:", isLoggedIn);
|
|
257
|
+
if (!isLoggedIn || !currentUser) {
|
|
258
|
+
console.error("❌ User state verification failed");
|
|
259
|
+
return [2 /*return*/];
|
|
260
|
+
}
|
|
261
|
+
console.log("✅ Login verification completed successfully!");
|
|
262
|
+
return [3 /*break*/, 13];
|
|
263
|
+
case 12:
|
|
264
|
+
error_2 = _d.sent();
|
|
265
|
+
console.error("❌ Login threw exception:", error_2);
|
|
266
|
+
return [2 /*return*/];
|
|
267
|
+
case 13:
|
|
268
|
+
console.log("🔄 Proceeding to next test...");
|
|
269
|
+
console.log("");
|
|
270
|
+
// === TEST 2: DATA OPERATIONS WHILE LOGGED IN ===
|
|
271
|
+
console.log("💾 === TEST 2: DATA OPERATIONS WHILE LOGGED IN ===\n");
|
|
272
|
+
_d.label = 14;
|
|
273
|
+
case 14:
|
|
274
|
+
_d.trys.push([14, 21, , 22]);
|
|
275
|
+
gunInstance_1 = db.gun;
|
|
276
|
+
appNode_1 = db.node;
|
|
277
|
+
testData = {
|
|
278
|
+
message: "Hello from auth test!",
|
|
279
|
+
timestamp: Date.now(),
|
|
280
|
+
secret: "This is encrypted data",
|
|
281
|
+
};
|
|
282
|
+
console.log("🔄 Storing data using GUN directly...");
|
|
283
|
+
// Store data using GUN directly without waiting for acknowledgment
|
|
284
|
+
appNode_1.get("test/encrypted-data").put(testData);
|
|
285
|
+
console.log("✓ Data stored successfully (no ack wait)");
|
|
286
|
+
// Wait a moment for data to be stored
|
|
287
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
|
|
288
|
+
case 15:
|
|
289
|
+
// Wait a moment for data to be stored
|
|
290
|
+
_d.sent();
|
|
291
|
+
console.log("🔄 Retrieving data using GUN directly...");
|
|
292
|
+
return [4 /*yield*/, new Promise(function (resolve) {
|
|
293
|
+
var timeout = setTimeout(function () {
|
|
294
|
+
console.log("⏰ Data retrieval timeout");
|
|
295
|
+
resolve(null);
|
|
296
|
+
}, 3000);
|
|
297
|
+
appNode_1.get("test/encrypted-data").once(function (data) {
|
|
298
|
+
clearTimeout(timeout);
|
|
299
|
+
resolve(data);
|
|
300
|
+
});
|
|
301
|
+
})];
|
|
302
|
+
case 16:
|
|
303
|
+
retrievedData = _d.sent();
|
|
304
|
+
if (retrievedData) {
|
|
305
|
+
console.log("✓ Data retrieved:", retrievedData);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
console.log("⚠️ Data retrieval timeout (but this is expected)");
|
|
309
|
+
}
|
|
310
|
+
// Test simple GUN operations
|
|
311
|
+
console.log("\n🔄 Testing simple GUN operations...");
|
|
312
|
+
profileData = {
|
|
313
|
+
name: "Auth Test User",
|
|
314
|
+
email: "authtest@example.com",
|
|
315
|
+
bio: "Testing authentication flow",
|
|
316
|
+
lastUpdated: Date.now(),
|
|
317
|
+
};
|
|
318
|
+
userInstance = db.gun.user();
|
|
319
|
+
currentUser_1 = (userInstance === null || userInstance === void 0 ? void 0 : userInstance.is) ? { pub: userInstance.is.pub } : null;
|
|
320
|
+
if (!(currentUser_1 === null || currentUser_1 === void 0 ? void 0 : currentUser_1.pub)) return [3 /*break*/, 19];
|
|
321
|
+
appNode_1.get("users").get(currentUser_1.pub).get("profile").put(profileData);
|
|
322
|
+
console.log("✓ Profile data stored");
|
|
323
|
+
// Wait a moment
|
|
324
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
|
|
325
|
+
case 17:
|
|
326
|
+
// Wait a moment
|
|
327
|
+
_d.sent();
|
|
328
|
+
return [4 /*yield*/, new Promise(function (resolve) {
|
|
329
|
+
var timeout = setTimeout(function () {
|
|
330
|
+
console.log("⏰ Profile retrieval timeout");
|
|
331
|
+
resolve(null);
|
|
332
|
+
}, 3000);
|
|
333
|
+
appNode_1
|
|
334
|
+
.get("users")
|
|
335
|
+
.get(currentUser_1.pub)
|
|
336
|
+
.get("profile")
|
|
337
|
+
.once(function (data) {
|
|
338
|
+
clearTimeout(timeout);
|
|
339
|
+
resolve(data);
|
|
340
|
+
});
|
|
341
|
+
})];
|
|
342
|
+
case 18:
|
|
343
|
+
profile = _d.sent();
|
|
344
|
+
if (profile) {
|
|
345
|
+
console.log("✓ Profile retrieved:", profile);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
console.log("⚠️ Profile retrieval timeout (but this is expected)");
|
|
349
|
+
}
|
|
350
|
+
return [3 /*break*/, 20];
|
|
351
|
+
case 19:
|
|
352
|
+
console.log("⚠️ No current user pub available for profile test");
|
|
353
|
+
_d.label = 20;
|
|
354
|
+
case 20: return [3 /*break*/, 22];
|
|
355
|
+
case 21:
|
|
356
|
+
error_3 = _d.sent();
|
|
357
|
+
console.error("❌ Data operations failed:", error_3);
|
|
358
|
+
return [3 /*break*/, 22];
|
|
359
|
+
case 22:
|
|
360
|
+
console.log("");
|
|
361
|
+
// === TEST 3: LOGOUT ===
|
|
362
|
+
console.log("🚪 === TEST 3: LOGOUT ===\n");
|
|
363
|
+
_d.label = 23;
|
|
364
|
+
case 23:
|
|
365
|
+
_d.trys.push([23, 25, , 26]);
|
|
366
|
+
console.log("🔄 Attempting logout...");
|
|
367
|
+
gunInstance_2 = db.gun;
|
|
368
|
+
gunInstance_2.user().leave();
|
|
369
|
+
console.log("✓ GUN logout completed");
|
|
370
|
+
// Wait a moment for logout to complete
|
|
371
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
|
|
372
|
+
case 24:
|
|
373
|
+
// Wait a moment for logout to complete
|
|
374
|
+
_d.sent();
|
|
375
|
+
isStillLoggedIn = db.isLoggedIn();
|
|
376
|
+
userAfterLogout = db.gun.user();
|
|
377
|
+
currentUserAfterLogout = (userAfterLogout === null || userAfterLogout === void 0 ? void 0 : userAfterLogout.is)
|
|
378
|
+
? { alias: userAfterLogout.is.alias }
|
|
379
|
+
: null;
|
|
380
|
+
console.log("✓ Logout completed");
|
|
381
|
+
console.log("Is logged in after logout:", isStillLoggedIn);
|
|
382
|
+
console.log("Current user after logout:", (currentUserAfterLogout === null || currentUserAfterLogout === void 0 ? void 0 : currentUserAfterLogout.alias) || "None");
|
|
383
|
+
if (isStillLoggedIn) {
|
|
384
|
+
console.warn("⚠️ User still appears to be logged in after logout");
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
console.log("✓ Logout successful - user is no longer logged in");
|
|
388
|
+
}
|
|
389
|
+
return [3 /*break*/, 26];
|
|
390
|
+
case 25:
|
|
391
|
+
error_4 = _d.sent();
|
|
392
|
+
console.error("❌ Logout failed:", error_4);
|
|
393
|
+
return [3 /*break*/, 26];
|
|
394
|
+
case 26:
|
|
395
|
+
console.log("");
|
|
396
|
+
// === TEST 4: RE-LOGIN ===
|
|
397
|
+
console.log("🔄 === TEST 4: RE-LOGIN ===\n");
|
|
398
|
+
_d.label = 27;
|
|
399
|
+
case 27:
|
|
400
|
+
_d.trys.push([27, 29, , 30]);
|
|
401
|
+
console.log("🔄 Attempting re-login with same credentials...");
|
|
402
|
+
gunInstance_3 = db.gun;
|
|
403
|
+
gunInstance_3.user().auth(testUsername, testPassword);
|
|
404
|
+
// Wait for authentication to complete
|
|
405
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 3000); })];
|
|
406
|
+
case 28:
|
|
407
|
+
// Wait for authentication to complete
|
|
408
|
+
_d.sent();
|
|
409
|
+
user_1 = gunInstance_3.user();
|
|
410
|
+
isAuthenticated = !!user_1.is;
|
|
411
|
+
if (isAuthenticated && user_1.is) {
|
|
412
|
+
console.log("✓ Re-login successful");
|
|
413
|
+
console.log("User pub:", ((_c = user_1.is.pub) === null || _c === void 0 ? void 0 : _c.substring(0, 20)) + "...");
|
|
414
|
+
console.log("User alias:", user_1.is.alias || testUsername);
|
|
415
|
+
currentUserInstance = db.gun.user();
|
|
416
|
+
currentUserInfo_1 = (currentUserInstance === null || currentUserInstance === void 0 ? void 0 : currentUserInstance.is)
|
|
417
|
+
? { alias: currentUserInstance.is.alias }
|
|
418
|
+
: null;
|
|
419
|
+
console.log("Current user:", (currentUserInfo_1 === null || currentUserInfo_1 === void 0 ? void 0 : currentUserInfo_1.alias) || "None");
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
console.error("❌ Re-login failed - authentication not successful");
|
|
423
|
+
}
|
|
424
|
+
return [3 /*break*/, 30];
|
|
425
|
+
case 29:
|
|
426
|
+
error_5 = _d.sent();
|
|
427
|
+
console.error("❌ Re-login threw exception:", error_5);
|
|
428
|
+
return [3 /*break*/, 30];
|
|
429
|
+
case 30:
|
|
430
|
+
console.log("");
|
|
431
|
+
// === TEST 5: ERROR HANDLING ===
|
|
432
|
+
console.log("⚠️ === TEST 5: ERROR HANDLING ===\n");
|
|
433
|
+
// Test invalid credentials
|
|
434
|
+
console.log("🔄 Testing invalid password...");
|
|
435
|
+
_d.label = 31;
|
|
436
|
+
case 31:
|
|
437
|
+
_d.trys.push([31, 33, , 34]);
|
|
438
|
+
return [4 /*yield*/, db.login(testUsername, "wrongpassword")];
|
|
439
|
+
case 32:
|
|
440
|
+
invalidLoginResult = _d.sent();
|
|
441
|
+
console.log("Invalid login result:", {
|
|
442
|
+
success: invalidLoginResult.success,
|
|
443
|
+
error: invalidLoginResult.error || "None",
|
|
444
|
+
});
|
|
445
|
+
if (!invalidLoginResult.success) {
|
|
446
|
+
console.log("✓ Invalid password correctly rejected");
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
console.warn("⚠️ Invalid password was accepted (unexpected)");
|
|
450
|
+
}
|
|
451
|
+
return [3 /*break*/, 34];
|
|
452
|
+
case 33:
|
|
453
|
+
error_6 = _d.sent();
|
|
454
|
+
console.log("✓ Invalid password threw exception (expected):", error_6 instanceof Error ? error_6.message : String(error_6));
|
|
455
|
+
return [3 /*break*/, 34];
|
|
456
|
+
case 34:
|
|
457
|
+
// Test non-existent user
|
|
458
|
+
console.log("\n🔄 Testing non-existent user...");
|
|
459
|
+
_d.label = 35;
|
|
460
|
+
case 35:
|
|
461
|
+
_d.trys.push([35, 37, , 38]);
|
|
462
|
+
return [4 /*yield*/, db.login("nonexistentuser123", "password")];
|
|
463
|
+
case 36:
|
|
464
|
+
nonexistentLoginResult = _d.sent();
|
|
465
|
+
console.log("Non-existent user login result:", {
|
|
466
|
+
success: nonexistentLoginResult.success,
|
|
467
|
+
error: nonexistentLoginResult.error || "None",
|
|
468
|
+
});
|
|
469
|
+
if (!nonexistentLoginResult.success) {
|
|
470
|
+
console.log("✓ Non-existent user correctly rejected");
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
console.warn("⚠️ Non-existent user was accepted (unexpected)");
|
|
474
|
+
}
|
|
475
|
+
return [3 /*break*/, 38];
|
|
476
|
+
case 37:
|
|
477
|
+
error_7 = _d.sent();
|
|
478
|
+
console.log("✓ Non-existent user threw exception (expected):", error_7 instanceof Error ? error_7.message : String(error_7));
|
|
479
|
+
return [3 /*break*/, 38];
|
|
480
|
+
case 38:
|
|
481
|
+
console.log("");
|
|
482
|
+
// === TEST 6: PASSWORD RECOVERY ===
|
|
483
|
+
// NOTE: Password recovery functions removed in simplified database
|
|
484
|
+
// Skipping password recovery test
|
|
485
|
+
console.log("🔐 === TEST 6: PASSWORD RECOVERY ===\n");
|
|
486
|
+
console.log("ℹ️ Password recovery test skipped (functions removed in simplified database)\n");
|
|
487
|
+
// === FINAL LOGOUT ===
|
|
488
|
+
console.log("🚪 === FINAL CLEANUP ===\n");
|
|
489
|
+
try {
|
|
490
|
+
db.logout();
|
|
491
|
+
console.log("✓ Final logout completed");
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
console.error("❌ Final logout failed:", error);
|
|
495
|
+
}
|
|
496
|
+
// Clear global timeout
|
|
497
|
+
clearTimeout(globalTimeout);
|
|
498
|
+
// Log memory usage before cleanup
|
|
499
|
+
logMemoryUsage("Before Cleanup");
|
|
500
|
+
// Destroy database instance to prevent memory leaks
|
|
501
|
+
try {
|
|
502
|
+
db.destroy();
|
|
503
|
+
console.log("✓ Database instance destroyed");
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
console.error("❌ Database destruction failed:", error);
|
|
507
|
+
}
|
|
508
|
+
// Force garbage collection if available
|
|
509
|
+
if (typeof global !== "undefined" && global.gc) {
|
|
510
|
+
global.gc();
|
|
511
|
+
logMemoryUsage("After GC");
|
|
512
|
+
}
|
|
513
|
+
// Additional cleanup
|
|
514
|
+
cleanup();
|
|
515
|
+
// Final memory check
|
|
516
|
+
logMemoryUsage("Final");
|
|
517
|
+
console.log("\n✅ Authentication test completed!");
|
|
518
|
+
console.log("\n📊 Test Summary:");
|
|
519
|
+
console.log("- ✓ Signup with username/password");
|
|
520
|
+
console.log("- ✓ Login with username/password");
|
|
521
|
+
console.log("- ✓ Data operations while logged in");
|
|
522
|
+
console.log("- ✓ Logout functionality");
|
|
523
|
+
console.log("- ✓ Re-login capability");
|
|
524
|
+
console.log("- ✓ Error handling for invalid credentials");
|
|
525
|
+
console.log("- ✓ Error handling for non-existent users");
|
|
526
|
+
return [2 /*return*/];
|
|
527
|
+
}
|
|
528
|
+
});
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
// Esegui il test
|
|
532
|
+
if (require.main === module) {
|
|
533
|
+
authTest().catch(console.error);
|
|
534
|
+
}
|
|
535
|
+
export { authTest };
|