@nio-cli/cli 0.3.7 → 0.4.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.
Files changed (83) hide show
  1. package/.env.example +68 -5
  2. package/Dockerfile.gateway +13 -5
  3. package/dist/adapters/lang/vendor.js +5 -10
  4. package/dist/adapters/lang/vendor.js.map +1 -1
  5. package/dist/adapters/pg/auth-event-repository.js +30 -0
  6. package/dist/adapters/pg/auth-event-repository.js.map +1 -0
  7. package/dist/adapters/pg/client.js +22 -4
  8. package/dist/adapters/pg/client.js.map +1 -1
  9. package/dist/adapters/pg/login-ip-repository.js +26 -0
  10. package/dist/adapters/pg/login-ip-repository.js.map +1 -0
  11. package/dist/adapters/pg/user-repository.js +47 -18
  12. package/dist/adapters/pg/user-repository.js.map +1 -1
  13. package/dist/adapters/sms/http-generic.js +21 -0
  14. package/dist/adapters/sms/http-generic.js.map +1 -1
  15. package/dist/brand.js +1 -1
  16. package/dist/brand.js.map +1 -1
  17. package/dist/cli/commands/auth.js +25 -18
  18. package/dist/cli/commands/auth.js.map +1 -1
  19. package/dist/cli/commands/docker.js +4 -4
  20. package/dist/cli/commands/docker.js.map +1 -1
  21. package/dist/cli/commands/security.js +76 -5
  22. package/dist/cli/commands/security.js.map +1 -1
  23. package/dist/cli/commands/sync.js +5 -1
  24. package/dist/cli/commands/sync.js.map +1 -1
  25. package/dist/gateway/config.js +23 -1
  26. package/dist/gateway/config.js.map +1 -1
  27. package/dist/gateway/edge-filter.js +20 -3
  28. package/dist/gateway/edge-filter.js.map +1 -1
  29. package/dist/gateway/index.js +145 -22
  30. package/dist/gateway/index.js.map +1 -1
  31. package/dist/gateway/middleware/auth.js +15 -3
  32. package/dist/gateway/middleware/auth.js.map +1 -1
  33. package/dist/gateway/services/login.js +47 -11
  34. package/dist/gateway/services/login.js.map +1 -1
  35. package/dist/gateway/services/register.js +20 -0
  36. package/dist/gateway/services/register.js.map +1 -0
  37. package/dist/gateway/services/security.js +64 -11
  38. package/dist/gateway/services/security.js.map +1 -1
  39. package/dist/gateway/throttle.js +57 -0
  40. package/dist/gateway/throttle.js.map +1 -0
  41. package/dist/lib/auth/backup-codes.js +4 -4
  42. package/dist/lib/auth/backup-codes.js.map +1 -1
  43. package/dist/lib/auth/breach-check.js +58 -0
  44. package/dist/lib/auth/breach-check.js.map +1 -0
  45. package/dist/lib/auth/gateway-client.js +17 -2
  46. package/dist/lib/auth/gateway-client.js.map +1 -1
  47. package/dist/lib/auth/gateway-process.js +17 -2
  48. package/dist/lib/auth/gateway-process.js.map +1 -1
  49. package/dist/lib/auth/gateway-token.js +2 -2
  50. package/dist/lib/auth/gateway-token.js.map +1 -1
  51. package/dist/lib/auth/nio-config.js +29 -7
  52. package/dist/lib/auth/nio-config.js.map +1 -1
  53. package/dist/lib/auth/otp.js +3 -3
  54. package/dist/lib/auth/otp.js.map +1 -1
  55. package/dist/lib/auth/password.js +33 -10
  56. package/dist/lib/auth/password.js.map +1 -1
  57. package/dist/lib/auth/secrets.js +96 -0
  58. package/dist/lib/auth/secrets.js.map +1 -0
  59. package/dist/lib/auth/session-store.js +2 -2
  60. package/dist/lib/auth/session-store.js.map +1 -1
  61. package/dist/lib/clients/client-install.js +22 -4
  62. package/dist/lib/clients/client-install.js.map +1 -1
  63. package/dist/lib/fetch-zipball.js +59 -0
  64. package/dist/lib/fetch-zipball.js.map +1 -0
  65. package/dist/lib/load-env.js +17 -5
  66. package/dist/lib/load-env.js.map +1 -1
  67. package/dist/lib/open-url.js +5 -2
  68. package/dist/lib/open-url.js.map +1 -1
  69. package/dist/lib/proc.js +27 -0
  70. package/dist/lib/proc.js.map +1 -1
  71. package/dist/lib/skills/skills-cache.js +25 -12
  72. package/dist/lib/skills/skills-cache.js.map +1 -1
  73. package/dist/lib/version-check.js +1 -11
  74. package/dist/lib/version-check.js.map +1 -1
  75. package/dist/mcp-server.js +5 -2
  76. package/dist/mcp-server.js.map +1 -1
  77. package/dist/tui/launch.js +6 -1
  78. package/dist/tui/launch.js.map +1 -1
  79. package/dist/version.js +17 -6
  80. package/dist/version.js.map +1 -1
  81. package/docker/docker-compose.yml +56 -26
  82. package/docker/kong.yml +10 -0
  83. package/package.json +20 -11
@@ -1,15 +1,47 @@
1
1
  import { createUserRepository } from '../../adapters/pg/user-repository.js';
2
2
  import { createLoginChallengeRepository } from '../../adapters/pg/login-challenge-repository.js';
3
- import { createHttpSmsSender } from '../../adapters/sms/http-generic.js';
3
+ import { createLoginIpRepository } from '../../adapters/pg/login-ip-repository.js';
4
+ import { createAuthEventRepository } from '../../adapters/pg/auth-event-repository.js';
5
+ import { createAuthSessionRepository } from '../../adapters/pg/auth-session-repository.js';
6
+ import { createHttpSmsSender, smsMode, smsProviderHost } from '../../adapters/sms/http-generic.js';
7
+ import { hashPassword, MIN_PASSWORD_LENGTH } from '../../lib/auth/password.js';
8
+ import { checkPasswordBreach } from '../../lib/auth/breach-check.js';
4
9
  import { generateOtp, hashOtp, verifyOtp } from '../../lib/auth/otp.js';
5
10
  import { generateBackupCodes, verifyBackupCode, markUsed, countRemaining, } from '../../lib/auth/backup-codes.js';
6
11
  import { challengeUsable, maskPhone, OTP_TTL_MS, OTP_MAX_ATTEMPTS } from './login.js';
12
+ import { smsAllowed } from '../throttle.js';
13
+ import { currentPepperId } from '../../lib/auth/secrets.js';
14
+ export async function changePassword(userId, currentPassword, newPassword, deps = {}) {
15
+ if (newPassword.length < MIN_PASSWORD_LENGTH) {
16
+ return { ok: false, error: `senha nova muito curta (mínimo ${MIN_PASSWORD_LENGTH} caracteres)` };
17
+ }
18
+ if (newPassword === currentPassword) {
19
+ return { ok: false, error: 'a senha nova é igual à atual' };
20
+ }
21
+ if ((await checkPasswordBreach(newPassword)).breached) {
22
+ return { ok: false, error: 'senha nova apareceu em vazamento de dados conhecido — escolha outra' };
23
+ }
24
+ const users = deps.users ?? createUserRepository();
25
+ const user = await users.findById(userId);
26
+ if (!user)
27
+ return { ok: false, error: 'usuário não encontrado' };
28
+ if (!(await users.verifyCredentials(user.name, currentPassword))) {
29
+ return { ok: false, error: 'senha atual incorreta' };
30
+ }
31
+ const { phc, pepperId } = await hashPassword(newPassword);
32
+ await users.updatePasswordHash(userId, phc, pepperId);
33
+ await (deps.authSessions ?? createAuthSessionRepository()).revokeAllByUser(userId);
34
+ return { ok: true };
35
+ }
7
36
  export function isE164(phone) {
8
37
  return /^\+\d{8,15}$/.test(phone.trim());
9
38
  }
10
39
  export async function startSecurityChallenge(userId, toPhone, deps = {}) {
11
40
  if (!isE164(toPhone))
12
41
  return { ok: false, error: 'número inválido (use E.164, ex.: +5511999998888)' };
42
+ if (!smsAllowed(userId, toPhone)) {
43
+ return { ok: false, error: 'muitos códigos solicitados — aguarde alguns minutos.' };
44
+ }
13
45
  const challenges = deps.challenges ?? createLoginChallengeRepository();
14
46
  const sms = deps.sms ?? createHttpSmsSender();
15
47
  const code = generateOtp();
@@ -29,7 +61,13 @@ export async function startSecurityChallenge(userId, toPhone, deps = {}) {
29
61
  await challenges.consume(challenge.id).catch(() => { });
30
62
  return { ok: false, error: `falha ao enviar o SMS: ${sent.error ?? ''}`.trim() };
31
63
  }
32
- return { ok: true, challengeId: challenge.id };
64
+ const mode = smsMode();
65
+ return {
66
+ ok: true,
67
+ challengeId: challenge.id,
68
+ smsMode: mode,
69
+ ...(mode === 'echo' ? { devCode: code } : {}),
70
+ };
33
71
  }
34
72
  async function consumeSecurityCode(userId, challengeId, code, type, deps) {
35
73
  const challenges = deps.challenges ?? createLoginChallengeRepository();
@@ -43,10 +81,10 @@ async function consumeSecurityCode(userId, challengeId, code, type, deps) {
43
81
  }
44
82
  if (type === 'backup') {
45
83
  const stored = await users.getBackupCodes(userId);
46
- const idx = await verifyBackupCode(code, stored);
84
+ const idx = await verifyBackupCode(code, stored.codes, stored.pepperId);
47
85
  if (idx < 0)
48
86
  return { ok: false, error: 'código de backup inválido' };
49
- await users.updateBackupCodes(userId, markUsed(stored, idx));
87
+ await users.updateBackupCodes(userId, markUsed(stored.codes, idx), stored.pepperId);
50
88
  }
51
89
  else {
52
90
  if (!verifyOtp(code, ch.codeHash)) {
@@ -65,8 +103,8 @@ export async function confirmEnable2fa(userId, challengeId, code, phone, deps =
65
103
  if (!res.ok)
66
104
  return res;
67
105
  const users = deps.users ?? createUserRepository();
68
- const { codes, hashes } = await generateBackupCodes();
69
- await users.enable2fa(userId, phone.trim(), hashes);
106
+ const { codes, hashes, pepperId } = await generateBackupCodes();
107
+ await users.enable2fa(userId, phone.trim(), hashes, pepperId);
70
108
  return { ok: true, backupCodes: codes };
71
109
  }
72
110
  export async function disable2fa(userId, challengeId, code, type, deps = {}) {
@@ -81,19 +119,34 @@ export async function regenerateBackupCodes(userId, challengeId, code, type, dep
81
119
  if (!res.ok)
82
120
  return res;
83
121
  const users = deps.users ?? createUserRepository();
84
- const { codes, hashes } = await generateBackupCodes();
85
- await users.updateBackupCodes(userId, hashes);
122
+ const { codes, hashes, pepperId } = await generateBackupCodes();
123
+ await users.updateBackupCodes(userId, hashes, pepperId);
86
124
  return { ok: true, backupCodes: codes };
87
125
  }
88
126
  export async function status(userId, deps = {}) {
89
127
  const users = deps.users ?? createUserRepository();
128
+ const loginIps = deps.loginIps ?? createLoginIpRepository();
129
+ const authEvents = deps.authEvents ?? createAuthEventRepository();
130
+ const recentIps = (await loginIps.recent(userId, 10).catch(() => [])).map((e) => ({
131
+ ip: e.ip,
132
+ lastSeen: e.lastSeen.toISOString(),
133
+ count: e.count,
134
+ }));
135
+ const recentFailedAttempts = (await authEvents.recentFailures({ userId, limit: 5 }).catch(() => [])).map((f) => ({ at: f.at.toISOString(), event: f.event, ip: f.ip }));
136
+ const sms = { mode: smsMode(), host: smsProviderHost() };
90
137
  const user = await users.findById(userId);
91
- if (!user || !user.auth2)
92
- return { enabled: false, phoneHint: null, backupCodesRemaining: 0 };
138
+ if (!user || !user.auth2) {
139
+ return { enabled: false, phoneHint: null, backupCodesRemaining: 0, recentIps, recentFailedAttempts, sms };
140
+ }
141
+ const stored = await users.getBackupCodes(userId);
93
142
  return {
94
143
  enabled: true,
95
144
  phoneHint: user.phone ? maskPhone(user.phone) : null,
96
- backupCodesRemaining: countRemaining(await users.getBackupCodes(userId)),
145
+ backupCodesRemaining: countRemaining(stored.codes),
146
+ regenerateBackupCodesRecommended: stored.codes != null && stored.pepperId !== currentPepperId() ? true : undefined,
147
+ recentIps,
148
+ recentFailedAttempts,
149
+ sms,
97
150
  };
98
151
  }
99
152
  //# sourceMappingURL=security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/gateway/services/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/gateway/services/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ const windows = new Map();
2
+ export function hit(key, limit, windowMs, now = Date.now()) {
3
+ const w = windows.get(key);
4
+ if (!w || now >= w.resetAt) {
5
+ windows.set(key, { count: 1, resetAt: now + windowMs });
6
+ return { ok: true, retryAfterMs: 0 };
7
+ }
8
+ w.count++;
9
+ if (w.count <= limit)
10
+ return { ok: true, retryAfterMs: 0 };
11
+ return { ok: false, retryAfterMs: w.resetAt - now };
12
+ }
13
+ export const SMS_PER_USER = 3;
14
+ export const SMS_USER_WINDOW_MS = 15 * 60 * 1000;
15
+ export const SMS_PHONE_WINDOW_MS = 60 * 1000;
16
+ export function smsAllowed(userId, phone, now = Date.now()) {
17
+ const perUser = hit(`sms:u:${userId}`, SMS_PER_USER, SMS_USER_WINDOW_MS, now);
18
+ const perPhone = hit(`sms:p:${phone}`, 1, SMS_PHONE_WINDOW_MS, now);
19
+ return perUser.ok && perPhone.ok;
20
+ }
21
+ const loginFails = new Map();
22
+ const LOGIN_FAIL_TTL_MS = 60 * 60 * 1000;
23
+ const LOGIN_MAX_DELAY_MS = 20_000;
24
+ const LOGIN_FREE_ATTEMPTS = 4;
25
+ export function loginDelayMs(key, now = Date.now()) {
26
+ const f = loginFails.get(key);
27
+ if (!f || now >= f.expiresAt || f.n <= LOGIN_FREE_ATTEMPTS)
28
+ return 0;
29
+ const step = f.n - LOGIN_FREE_ATTEMPTS;
30
+ return Math.min(2 ** (step - 1) * 500, LOGIN_MAX_DELAY_MS);
31
+ }
32
+ export function recordLoginFail(key, now = Date.now()) {
33
+ const f = loginFails.get(key);
34
+ if (f && now < f.expiresAt) {
35
+ f.n++;
36
+ f.expiresAt = now + LOGIN_FAIL_TTL_MS;
37
+ }
38
+ else {
39
+ loginFails.set(key, { n: 1, expiresAt: now + LOGIN_FAIL_TTL_MS });
40
+ }
41
+ }
42
+ export function recordLoginOk(key) {
43
+ loginFails.delete(key);
44
+ }
45
+ export function sweep(now = Date.now()) {
46
+ for (const [k, w] of windows)
47
+ if (now >= w.resetAt)
48
+ windows.delete(k);
49
+ for (const [k, f] of loginFails)
50
+ if (now >= f.expiresAt)
51
+ loginFails.delete(k);
52
+ }
53
+ export function __clear() {
54
+ windows.clear();
55
+ loginFails.clear();
56
+ }
57
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../src/gateway/throttle.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,10 @@ function randomCode() {
12
12
  }
13
13
  export async function generateBackupCodes() {
14
14
  const codes = Array.from({ length: COUNT }, randomCode);
15
- const hashes = await Promise.all(codes.map((c) => hashPassword(c)));
16
- return { codes, hashes: hashes.join('|') };
15
+ const hashed = await Promise.all(codes.map((c) => hashPassword(c)));
16
+ return { codes, hashes: hashed.map((h) => h.phc).join('|'), pepperId: hashed[0].pepperId };
17
17
  }
18
- export async function verifyBackupCode(input, joined) {
18
+ export async function verifyBackupCode(input, joined, pepperId) {
19
19
  if (!joined)
20
20
  return -1;
21
21
  const normalized = input.trim().toUpperCase();
@@ -24,7 +24,7 @@ export async function verifyBackupCode(input, joined) {
24
24
  const h = parts[i];
25
25
  if (!h || h === USED)
26
26
  continue;
27
- if (await verifyPassword(h, normalized))
27
+ if (await verifyPassword(h, normalized, pepperId))
28
28
  return i;
29
29
  }
30
30
  return -1;
@@ -1 +1 @@
1
- {"version":3,"file":"backup-codes.js","sourceRoot":"","sources":["../../../src/lib/auth/backup-codes.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,MAAM,GAAG,CAAC,CAAC;AAEjB,MAAM,QAAQ,GAAG,iCAAiC,CAAC;AACnD,MAAM,IAAI,GAAG,QAAQ,CAAC;AAEtB,SAAS,UAAU;IACjB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,OAAO,GAAG,CAAC;AACb,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7C,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAqB;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,CAAC;IACvB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC/B,IAAI,MAAM,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC;YAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAGD,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,GAAW;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAGD,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;AACjE,CAAC;AAGD,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"backup-codes.js","sourceRoot":"","sources":["../../../src/lib/auth/backup-codes.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,MAAM,GAAG,CAAC,CAAC;AAEjB,MAAM,QAAQ,GAAG,iCAAiC,CAAC;AACnD,MAAM,IAAI,GAAG,QAAQ,CAAC;AAEtB,SAAS,UAAU;IACjB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,OAAO,GAAG,CAAC;AACb,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAC;AAC9F,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,MAAqB,EACrB,QAAgB;IAEhB,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,CAAC;IACvB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC/B,IAAI,MAAM,cAAc,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAGD,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,GAAW;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAGD,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;AACjE,CAAC;AAGD,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { createHash } from 'node:crypto';
2
+ const COMMON = new Set([
3
+ '123456', '123456789', '12345678', '1234567', '12345', '1234567890', '123123', '111111',
4
+ '000000', '654321', '666666', '888888', '1234', '12345678910', '121212', '112233',
5
+ 'password', 'password1', 'password123', 'passw0rd', 'senha', 'senha123', 'minhasenha',
6
+ 'qwerty', 'qwerty123', 'qwertyuiop', 'asdfghjkl', 'zxcvbnm', '1q2w3e4r', '1q2w3e4r5t',
7
+ 'admin', 'admin123', 'administrator', 'root', 'toor', 'user', 'guest', 'test', 'test123',
8
+ 'welcome', 'welcome1', 'letmein', 'iloveyou', 'monkey', 'dragon', 'sunshine', 'princess',
9
+ 'football', 'baseball', 'superman', 'batman', 'trustno1', 'master', 'shadow', 'michael',
10
+ 'jennifer', 'jordan', 'harley', 'hunter', 'ranger', 'buster', 'thomas', 'robert', 'daniel',
11
+ 'ashley', 'nicole', 'chelsea', 'matthew', 'access', 'flower', 'hottie', 'loveme', 'zaq1zaq1',
12
+ 'abc123', 'abcd1234', 'abcdef', 'a1b2c3d4', 'qazwsx', 'qazwsxedc', 'asdf1234', 'p@ssw0rd',
13
+ 'changeme', 'secret', 'whatever', 'freedom', 'starwars', 'computer', 'internet', 'samsung',
14
+ 'google', 'facebook', 'linkedin', 'nintendo', 'pokemon', 'mustang', 'corvette', 'ferrari',
15
+ 'brasil', 'brazil', 'flamengo', 'corinthians', 'palmeiras', 'saopaulo', 'gremio',
16
+ 'deus', 'jesus', 'amor', 'familia', 'cachorro', 'gabriel', 'rafael', 'fernanda', 'juliana',
17
+ ]);
18
+ function hibpTimeoutMs() {
19
+ return Math.max(200, Number(process.env.NIO_HIBP_TIMEOUT_MS) || 1500);
20
+ }
21
+ function hibpDisabled() {
22
+ return /^(1|true|yes|on)$/i.test((process.env.NIO_HIBP_DISABLE ?? '').trim());
23
+ }
24
+ function sha1Upper(input) {
25
+ return createHash('sha1').update(input, 'utf8').digest('hex').toUpperCase();
26
+ }
27
+ export async function checkPasswordBreach(password) {
28
+ if (COMMON.has(password.toLowerCase()))
29
+ return { breached: true, source: 'common' };
30
+ if (hibpDisabled())
31
+ return { breached: false };
32
+ const hash = sha1Upper(password);
33
+ const prefix = hash.slice(0, 5);
34
+ const suffix = hash.slice(5);
35
+ const ac = new AbortController();
36
+ const timer = setTimeout(() => ac.abort(), hibpTimeoutMs());
37
+ try {
38
+ const res = await fetch(`https://api.pwnedpasswords.com/range/${prefix}`, {
39
+ signal: ac.signal,
40
+ headers: { 'Add-Padding': 'true' },
41
+ });
42
+ if (!res.ok)
43
+ return { breached: false };
44
+ for (const line of (await res.text()).split('\n')) {
45
+ const [lineSuffix, countStr] = line.trim().split(':');
46
+ if (lineSuffix === suffix && Number(countStr) > 0)
47
+ return { breached: true, source: 'pwned' };
48
+ }
49
+ return { breached: false };
50
+ }
51
+ catch {
52
+ return { breached: false };
53
+ }
54
+ finally {
55
+ clearTimeout(timer);
56
+ }
57
+ }
58
+ //# sourceMappingURL=breach-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breach-check.js","sourceRoot":"","sources":["../../../src/lib/auth/breach-check.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,15 @@ async function post(path, body, headers) {
33
33
  throw await errorFromResponse(res);
34
34
  return (await res.json());
35
35
  }
36
+ export async function gatewayRegister(name, password) {
37
+ const res = await gwFetch('POST', '/register', {
38
+ headers: await baseHeaders(),
39
+ body: JSON.stringify({ name, password }),
40
+ });
41
+ if (!res.ok)
42
+ throw await errorFromResponse(res);
43
+ return (await res.json());
44
+ }
36
45
  export async function gatewayLogin(name, password) {
37
46
  const res = await gwFetch('POST', '/login', {
38
47
  headers: await baseHeaders(),
@@ -62,14 +71,19 @@ export async function gatewayVerify2fa(challengeId, code, type) {
62
71
  throw new Error(body.error ?? `gateway respondeu ${res.status}`);
63
72
  return { ok: true, ...body, backupCodesRemaining: body.backupCodesRemaining };
64
73
  }
65
- export async function gatewayLogout(sessionId) {
74
+ export async function gatewayLogout(sessionId, token) {
66
75
  const res = await gwFetch('POST', '/logout', {
67
- headers: await baseHeaders(),
76
+ headers: await authedHeaders(token),
68
77
  body: JSON.stringify({ sessionId }),
69
78
  });
70
79
  if (!res.ok)
71
80
  throw await errorFromResponse(res);
72
81
  }
82
+ export async function gatewayLogoutAll(token) {
83
+ const res = await gwFetch('POST', '/logout-all', { headers: await authedHeaders(token) });
84
+ if (!res.ok)
85
+ throw await errorFromResponse(res);
86
+ }
73
87
  export const gatewaySecurity = {
74
88
  status: async (token) => {
75
89
  const res = await gwFetch('GET', '/security/status', { headers: await authedHeaders(token) });
@@ -82,5 +96,6 @@ export const gatewaySecurity = {
82
96
  challenge: async (token) => post('/security/challenge', {}, await authedHeaders(token)),
83
97
  disable: async (token, challengeId, code, type) => post('/security/disable-2fa', { challengeId, code, type }, await authedHeaders(token)),
84
98
  regenerateBackupCodes: async (token, challengeId, code, type) => post('/security/regenerate-backup-codes', { challengeId, code, type }, await authedHeaders(token)),
99
+ changePassword: async (token, currentPassword, newPassword) => post('/security/change-password', { currentPassword, newPassword }, await authedHeaders(token)),
85
100
  };
86
101
  //# sourceMappingURL=gateway-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../../src/lib/auth/gateway-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../../src/lib/auth/gateway-client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { spawn, spawnSync } from 'node:child_process';
2
- import { existsSync } from 'node:fs';
2
+ import { existsSync, openSync, mkdirSync } from 'node:fs';
3
3
  import { basename, dirname, join } from 'node:path';
4
4
  import { GATEWAY_URL } from '../../gateway/config.js';
5
+ import { homePath } from '../../brand.js';
5
6
  import { isBinaryInstalled } from '../clients/client-install.js';
6
7
  import { dockerAvailable, infraComposePath } from '../docker.js';
7
8
  import { c, sym } from '../colors.js';
@@ -61,7 +62,11 @@ export async function ensureGatewayRunning() {
61
62
  if (!command)
62
63
  return { ok: false, started: false };
63
64
  dlog(`subindo o gateway (host): ${command.cmd} ${command.args.join(' ')}`);
64
- const child = spawn(command.cmd, command.args, { detached: true, stdio: 'ignore' });
65
+ const logChild = openGatewayLog();
66
+ const child = spawn(command.cmd, command.args, {
67
+ detached: true,
68
+ stdio: logChild ? ['ignore', logChild, logChild] : 'ignore',
69
+ });
65
70
  child.unref();
66
71
  for (let i = 0; i < 40; i++) {
67
72
  await sleep(300);
@@ -74,4 +79,14 @@ export async function ensureGatewayRunning() {
74
79
  child.kill();
75
80
  return { ok: false, started: false };
76
81
  }
82
+ function openGatewayLog() {
83
+ try {
84
+ const file = homePath('gateway.log');
85
+ mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
86
+ return openSync(file, 'a', 0o600);
87
+ }
88
+ catch {
89
+ return null;
90
+ }
91
+ }
77
92
  //# sourceMappingURL=gateway-process.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-process.js","sourceRoot":"","sources":["../../../src/lib/auth/gateway-process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-process.js","sourceRoot":"","sources":["../../../src/lib/auth/gateway-process.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,8 @@ export async function getOrCreateGatewayToken(file = GATEWAY_TOKEN_FILE) {
14
14
  throw err;
15
15
  }
16
16
  const token = randomBytes(32).toString('hex');
17
- await mkdir(dirname(file), { recursive: true });
18
- await writeFile(file, token + '\n', 'utf8');
17
+ await mkdir(dirname(file), { recursive: true, mode: 0o700 });
18
+ await writeFile(file, token + '\n', { encoding: 'utf8', mode: 0o600 });
19
19
  try {
20
20
  await chmod(file, 0o600);
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-token.js","sourceRoot":"","sources":["../../../src/lib/auth/gateway-token.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe,kBAAkB;IAC7E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"gateway-token.js","sourceRoot":"","sources":["../../../src/lib/auth/gateway-token.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe,kBAAkB;IAC7E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE7D,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, writeFileSync, chmodSync, mkdirSync } from 'n
2
2
  import { dirname } from 'node:path';
3
3
  import { brand, homePath } from '../../brand.js';
4
4
  import { closePool, ping } from '../../adapters/pg/client.js';
5
+ import { generateJwtSecret, jwtSecretWeakness } from '../../gateway/config.js';
5
6
  import { input, password, confirm } from '../prompts.js';
6
7
  import { c, sym, box, cmd } from '../colors.js';
7
8
  import { dlog } from '../debug.js';
@@ -38,8 +39,8 @@ export function writeConfigFile(updates, path = CONFIG_FILE) {
38
39
  .map(([k, v]) => `${k}=${v}`)
39
40
  .join('\n') +
40
41
  '\n';
41
- mkdirSync(dirname(path), { recursive: true });
42
- writeFileSync(path, body, 'utf8');
42
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
43
+ writeFileSync(path, body, { encoding: 'utf8', mode: 0o600 });
43
44
  try {
44
45
  chmodSync(path, 0o600);
45
46
  }
@@ -56,8 +57,14 @@ export function validateConfigShape(env) {
56
57
  else if (!PG_URL.test(url)) {
57
58
  problems.push({ key: 'NIO_DATABASE_URL', issue: 'invalid', hint: 'precisa começar com postgres://' });
58
59
  }
59
- if (!jwt) {
60
- problems.push({ key: 'JWT_SECRET', issue: 'missing', hint: 'segredo compartilhado do time (assina o login)' });
60
+ const hasJwtSecrets = Boolean(env.JWT_SECRETS?.trim());
61
+ if (!jwt && !hasJwtSecrets) {
62
+ problems.push({ key: 'JWT_SECRET', issue: 'missing', hint: 'segredo compartilhado do time (assina o login) — ou use JWT_SECRETS' });
63
+ }
64
+ else if (jwt) {
65
+ const weak = jwtSecretWeakness(jwt);
66
+ if (weak)
67
+ problems.push({ key: 'JWT_SECRET', issue: 'invalid', hint: weak });
61
68
  }
62
69
  return problems;
63
70
  }
@@ -91,12 +98,27 @@ async function promptWizard() {
91
98
  validate: (v) => PG_URL.test(v.trim()) || 'precisa começar com postgres://',
92
99
  })).trim();
93
100
  const ssl = await confirm({ message: 'O banco exige TLS/SSL? (gerenciado/nuvem)', default: false });
94
- const jwt = (await password({
101
+ const jwt = await promptJwtSecret(file.JWT_SECRET ?? process.env.JWT_SECRET);
102
+ return { url, ssl, jwt };
103
+ }
104
+ async function promptJwtSecret(current) {
105
+ if (!current || jwtSecretWeakness(current)) {
106
+ const gen = await confirm({
107
+ message: 'Gerar um JWT_SECRET novo? (só se o time ainda não tem um — invalida sessões atuais)',
108
+ default: !current,
109
+ });
110
+ if (gen) {
111
+ const secret = generateJwtSecret();
112
+ console.log(box(`${c.bold('JWT_SECRET gerado')} — distribua ${c.bold('este mesmo valor')} pra toda\n` +
113
+ `máquina que roda o \`nio-gateway\` (ele assina/verifica o login):\n\n ${c.green(secret)}`, { borderColor: 'green', title: 'guarde agora' }));
114
+ return secret;
115
+ }
116
+ }
117
+ return (await password({
95
118
  message: 'JWT_SECRET (segredo compartilhado do time)',
96
119
  mask: '*',
97
- validate: (v) => v.trim().length >= 8 || 'muito curto — use o valor real do time',
120
+ validate: (v) => jwtSecretWeakness(v.trim()) ?? true,
98
121
  })).trim();
99
- return { url, ssl, jwt };
100
122
  }
101
123
  export async function runConfigWizard() {
102
124
  console.log(box(`${c.bold('Configuração da NIO-CLI')}\n` +
@@ -1 +1 @@
1
- {"version":3,"file":"nio-config.js","sourceRoot":"","sources":["../../../src/lib/auth/nio-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nio-config.js","sourceRoot":"","sources":["../../../src/lib/auth/nio-config.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { createHmac, randomInt, timingSafeEqual } from 'node:crypto';
2
- import { getJwtSecret } from '../../gateway/config.js';
2
+ import { otpHmacSecret } from './secrets.js';
3
3
  export function generateOtp() {
4
4
  return String(randomInt(0, 1_000_000)).padStart(6, '0');
5
5
  }
6
- export function hashOtp(code, secret = getJwtSecret()) {
6
+ export function hashOtp(code, secret = otpHmacSecret()) {
7
7
  return createHmac('sha256', secret).update(code).digest('hex');
8
8
  }
9
9
  export function verifyOtp(code, hash, secret) {
10
- const expected = Buffer.from(hashOtp(code, secret ?? getJwtSecret()), 'hex');
10
+ const expected = Buffer.from(hashOtp(code, secret ?? otpHmacSecret()), 'hex');
11
11
  let actual;
12
12
  try {
13
13
  actual = Buffer.from(hash, 'hex');
@@ -1 +1 @@
1
- {"version":3,"file":"otp.js","sourceRoot":"","sources":["../../../src/lib/auth/otp.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAGD,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,SAAiB,YAAY,EAAE;IACnE,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAGD,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,MAAe;IACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7E,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC;AAGD,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"otp.js","sourceRoot":"","sources":["../../../src/lib/auth/otp.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAGD,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,SAAiB,aAAa,EAAE;IACpE,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAGD,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,MAAe;IACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC;AAGD,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAClC,CAAC"}