nothumanallowed 13.5.66 → 13.5.68

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nothumanallowed",
3
- "version": "13.5.66",
3
+ "version": "13.5.68",
4
4
  "description": "NotHumanAllowed — 38 AI agents, 80 tools, Studio (visual agentic workflows). Email, calendar, browser automation, screen capture, canvas, cron/heartbeat, Alexandria E2E messaging, GitHub, Notion, Slack, voice chat, free AI (Liara), 28 languages. Zero-dependency CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -4313,6 +4313,13 @@ module.exports = { get, set, del, exists };
4313
4313
  [/require\(['"]\.\.\/\.\.\/config['"]\)/g, "{env:process.env}"],
4314
4314
  [/require\(['"]\.\.\/config['"]\)/g, "{env:process.env}"],
4315
4315
  [/require\(['"]\.\/config['"]\)/g, "{env:process.env}"],
4316
+ // rateLimiter: LLM sometimes creates a separate file instead of importing from security.js
4317
+ [/require\(['"]\.\.\/middleware\/rateLimiter['"]\)/g, "require('../middleware/security')"],
4318
+ [/require\(['"]\.\/middleware\/rateLimiter['"]\)/g, "require('./middleware/security')"],
4319
+ [/require\(['"]\.\.\/middleware\/rateLimit['"]\)/g, "require('../middleware/security')"],
4320
+ [/require\(['"]\.\/middleware\/rateLimit['"]\)/g, "require('./middleware/security')"],
4321
+ [/require\(['"]\.\.\/middleware\/limiter['"]\)/g, "require('../middleware/security')"],
4322
+ [/require\(['"]\.\/middleware\/limiter['"]\)/g, "require('./middleware/security')"],
4316
4323
  ];
4317
4324
  function patchJsFiles(dir) {
4318
4325
  if (!fs.existsSync(dir)) return;
@@ -7118,7 +7118,6 @@ function wcChatKeydown(e) {
7118
7118
  }
7119
7119
 
7120
7120
  function wcStopAll() {
7121
- // Abort ongoing generation
7122
7121
  if (_wcGenAbortCtrl) { _wcGenAbortCtrl.abort(); _wcGenAbortCtrl = null; }
7123
7122
  wcState.running = false;
7124
7123
  wcChatRunning = false;
@@ -7128,6 +7127,21 @@ function wcStopAll() {
7128
7127
  renderWebCraft(document.getElementById('content'));
7129
7128
  }
7130
7129
 
7130
+ function wcOverlayMinimize() {
7131
+ _wcOverlayMinimized = true;
7132
+ renderWebCraft(document.getElementById('content'));
7133
+ if (_wcOverlayTimer) clearTimeout(_wcOverlayTimer);
7134
+ _wcOverlayTimer = setTimeout(function() {
7135
+ if (wcState.running) { _wcOverlayMinimized = false; renderWebCraft(document.getElementById('content')); }
7136
+ }, 10000);
7137
+ }
7138
+
7139
+ function wcOverlayRestore() {
7140
+ if (_wcOverlayTimer) { clearTimeout(_wcOverlayTimer); _wcOverlayTimer = null; }
7141
+ _wcOverlayMinimized = false;
7142
+ renderWebCraft(document.getElementById('content'));
7143
+ }
7144
+
7131
7145
  function wcRemoveAttachment(ai) {
7132
7146
  wcChatAttachments.splice(ai, 1);
7133
7147
  renderWebCraft(document.getElementById('content'));
@@ -7732,7 +7746,7 @@ async function wcGenerate() {
7732
7746
  { name: 'server/middleware/security.js', lang: 'javascript', prompt: 'Generate server/middleware/security.js: detect sandbox via isSandbox = !process.env.NODE_ENV || process.env.NODE_ENV === "development". Use helmet CSP: defaultSrc self, scriptSrc self unsafe-inline, styleSrc self unsafe-inline, imgSrc self data:, connectSrc self, objectSrc none. frameAncestors: if isSandbox use ["self", "http://127.0.0.1:*", "http://localhost:*"] else ["none"]. NO X-Frame-Options DENY (conflicts with frameAncestors). NO HSTS in sandbox (HTTP only). Referrer-Policy strict-origin-when-cross-origin. Add express-rate-limit for general routes (100/15min) and strict limiter for auth (5/15min). Export { applySecurityMiddleware, authLimiter }.' },
7733
7747
  { name: 'server/middleware/validate.js', lang: 'javascript', prompt: 'Generate server/middleware/validate.js using express-validator. Export handleValidationErrors middleware. Export auth field validators: registerValidator (fields: '+authFieldsDef+'), loginValidator (email + password).' },
7734
7748
  { name: 'server/services/email.js', lang: 'javascript', prompt: 'Generate server/services/email.js: Nodemailer transporter using SMTP from env. Function sendVerificationEmail(to, token, baseUrl): sends HTML email with verification link. Function sendPasswordResetEmail(to, token, baseUrl). Add SendGrid fallback (commented out, predisposed with transporter swap). Never expose credentials.' },
7735
- { name: 'server/routes/auth.js', lang: 'javascript', prompt: 'Generate server/routes/auth.js: POST /register (validate fields: '+authFieldsDef+', check duplicate email, bcrypt hash password cost 12, insert user, send verification email, return 201), POST /login (validate, check email verified, compare bcrypt, issue JWT access 15min + refresh 7d httpOnly cookie), POST /logout (clear refresh cookie), POST /refresh-token (validate refresh from httpOnly cookie, rotate token), GET /verify-email/:token (mark email verified). Use parameterized queries only. Apply authLimiter to register and login.' },
7749
+ { name: 'server/routes/auth.js', lang: 'javascript', prompt: 'Generate server/routes/auth.js: POST /register (validate fields: '+authFieldsDef+', check duplicate email, bcrypt hash password cost 12, insert user, send verification email, return 201), POST /login (validate, check email verified, compare bcrypt, issue JWT access 15min + refresh 7d httpOnly cookie), POST /logout (clear refresh cookie), POST /refresh-token (validate refresh from httpOnly cookie, rotate token), GET /verify-email/:token (mark email verified). Use parameterized queries only. Import authLimiter EXACTLY like this: const { authLimiter } = require("../middleware/security"); — do NOT create or import from ../middleware/rateLimiter (that file does not exist). Apply authLimiter to register and login.' },
7736
7750
  { name: 'server/routes/api.js', lang: 'javascript', prompt: 'Generate server/routes/api.js: Express router with a verifyToken middleware (validates JWT Bearer). GET /api/me returns authenticated user profile (no password hash). GET /api/health returns {status: ok, timestamp}. Structure ready for adding more routes.' },
7737
7751
  { name: 'server/index.js', lang: 'javascript', prompt: 'Generate server/index.js: Express app entry point. Apply applySecurityMiddleware first. Then apply sentinelMiddleware (import from ./middleware/sentinel.js). Use CORS with env CORS_ORIGIN. Parse JSON body (limit 10kb). Mount /api/auth → auth.js, /api → api.js. Serve public/ as static. 404 handler and global error handler (never leak stack traces in production). Start on PORT from env.' },
7738
7752
  { name: 'db/migrations/001_init.sql', lang: 'sql', prompt: 'Generate PostgreSQL migration 001_init.sql: CREATE TABLE users with id UUID default gen_random_uuid(), fields for '+authFieldsDef+', email_verified BOOLEAN default false, verification_token VARCHAR, reset_token VARCHAR, reset_token_expires TIMESTAMPTZ, refresh_token_hash VARCHAR, created_at TIMESTAMPTZ default now(), updated_at TIMESTAMPTZ default now(). CREATE INDEX on email. CREATE TABLE refresh_tokens (id, user_id FK, token_hash, expires_at, created_at). Add updated_at trigger function.' },
@@ -7781,22 +7795,6 @@ async function wcGenerate() {
7781
7795
  '<div style="display:flex;gap:4px;margin-top:10px">'+[0,1,2,3,4].map(function(_,idx){ return '<div style="width:6px;height:6px;border-radius:50%;background:var(--green);animation:wcDot 1.1s ease-in-out infinite '+(idx*0.14)+'s"></div>'; }).join('')+'</div>';
7782
7796
  }
7783
7797
 
7784
- function wcOverlayMinimize() {
7785
- _wcOverlayMinimized = true;
7786
- renderWebCraft(document.getElementById('content'));
7787
- // Restore after 10s of inactivity
7788
- if (_wcOverlayTimer) clearTimeout(_wcOverlayTimer);
7789
- _wcOverlayTimer = setTimeout(function() {
7790
- if (wcState.running) { _wcOverlayMinimized = false; renderWebCraft(document.getElementById('content')); }
7791
- }, 10000);
7792
- }
7793
-
7794
- function wcOverlayRestore() {
7795
- if (_wcOverlayTimer) { clearTimeout(_wcOverlayTimer); _wcOverlayTimer = null; }
7796
- _wcOverlayMinimized = false;
7797
- renderWebCraft(document.getElementById('content'));
7798
- }
7799
-
7800
7798
  for (var fi = 0; fi < filePlan.length; fi++) {
7801
7799
  var fp = filePlan[fi];
7802
7800
  wcUpdateGenOverlay(fi, filePlan.length, fp.name);