asaihost-nodejs 0.0.1 → 0.0.3

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 (79) hide show
  1. package/README.md +76 -25
  2. package/dist/InterventionLog-CRP6YJVM.cjs +30 -0
  3. package/dist/{InterventionLog-25EHE4QR.cjs.map → InterventionLog-CRP6YJVM.cjs.map} +1 -1
  4. package/dist/{InterventionLog-R6CCPU2B.es.js → InterventionLog-PZT2CCN3.es.js} +5 -5
  5. package/dist/LogStore-7MTUQA4G.cjs +54 -0
  6. package/dist/{LogStore-M2AUBNGO.cjs.map → LogStore-7MTUQA4G.cjs.map} +1 -1
  7. package/dist/{LogStore-ECXX34WC.es.js → LogStore-Q35YFNAY.es.js} +3 -3
  8. package/dist/asaihost-nodejs.cjs +1304 -1447
  9. package/dist/asaihost-nodejs.cjs.map +1 -1
  10. package/dist/asaihost-nodejs.d.cts +154 -17
  11. package/dist/asaihost-nodejs.d.ts +154 -17
  12. package/dist/asaihost-nodejs.es.js +921 -1064
  13. package/dist/asaihost-nodejs.es.js.map +1 -1
  14. package/dist/{chunk-HHPGUJ75.cjs → chunk-2BCIIKRG.cjs} +13 -6
  15. package/dist/chunk-2BCIIKRG.cjs.map +1 -0
  16. package/dist/{chunk-G4WVDUBH.cjs → chunk-4E7Z5K5U.cjs} +7 -7
  17. package/dist/{chunk-G4WVDUBH.cjs.map → chunk-4E7Z5K5U.cjs.map} +1 -1
  18. package/dist/{chunk-DROOHKB3.es.js → chunk-57UQJKSL.es.js} +2 -2
  19. package/dist/{chunk-EOGZPRML.es.js → chunk-A5CDJGJI.es.js} +224 -39
  20. package/dist/chunk-A5CDJGJI.es.js.map +1 -0
  21. package/dist/{chunk-E7V3EBDB.es.js → chunk-A6VJPLDD.es.js} +5 -3
  22. package/dist/chunk-A6VJPLDD.es.js.map +1 -0
  23. package/dist/{chunk-X7VHW2TD.cjs → chunk-H3K33HBA.cjs} +249 -64
  24. package/dist/chunk-H3K33HBA.cjs.map +1 -0
  25. package/dist/{chunk-KOFCBB3N.cjs → chunk-K2QPSQEV.cjs} +9 -9
  26. package/dist/{chunk-KOFCBB3N.cjs.map → chunk-K2QPSQEV.cjs.map} +1 -1
  27. package/dist/{chunk-LOMSUPPU.es.js → chunk-LTEP4XB2.es.js} +6 -6
  28. package/dist/{chunk-QWVR2HNT.cjs → chunk-LXJMGLKW.cjs} +21 -19
  29. package/dist/chunk-LXJMGLKW.cjs.map +1 -0
  30. package/dist/{chunk-4WJDC4M4.es.js → chunk-NLZNIGNF.es.js} +2 -2
  31. package/dist/chunk-NLZNIGNF.es.js.map +1 -0
  32. package/dist/{chunk-W7DVKGX5.cjs → chunk-OCEBEEP5.cjs} +2 -2
  33. package/dist/{chunk-W7DVKGX5.cjs.map → chunk-OCEBEEP5.cjs.map} +1 -1
  34. package/dist/{chunk-NLBFIRDB.cjs → chunk-RIRKIYET.cjs} +12 -12
  35. package/dist/{chunk-NLBFIRDB.cjs.map → chunk-RIRKIYET.cjs.map} +1 -1
  36. package/dist/{chunk-XBIN4C2V.es.js → chunk-SB23ESX2.es.js} +2 -2
  37. package/dist/{chunk-VLMM735Q.cjs → chunk-TKJAHTPO.cjs} +26 -26
  38. package/dist/{chunk-VLMM735Q.cjs.map → chunk-TKJAHTPO.cjs.map} +1 -1
  39. package/dist/{chunk-MCMADJQR.es.js → chunk-VUZO7DCA.es.js} +4 -4
  40. package/dist/chunk-VUZO7DCA.es.js.map +1 -0
  41. package/dist/{chunk-KUZQ36IJ.es.js → chunk-ZQBHJRAO.es.js} +10 -3
  42. package/dist/chunk-ZQBHJRAO.es.js.map +1 -0
  43. package/dist/intervention-hooks-KF3SNB5Q.cjs +21 -0
  44. package/dist/{intervention-hooks-LE6X4C6N.cjs.map → intervention-hooks-KF3SNB5Q.cjs.map} +1 -1
  45. package/dist/{intervention-hooks-FI4EHOL5.es.js → intervention-hooks-TCGIC4IV.es.js} +6 -6
  46. package/dist/log-formats-TUXGMCCU.cjs +31 -0
  47. package/dist/{log-formats-FKFMQKNO.cjs.map → log-formats-TUXGMCCU.cjs.map} +1 -1
  48. package/dist/{log-formats-I5E32H5F.es.js → log-formats-WW3TDUAK.es.js} +2 -2
  49. package/dist/{password-63OY27RX.es.js → password-4BABWAG4.es.js} +4 -4
  50. package/dist/password-PJHJRGPE.cjs +20 -0
  51. package/dist/{password-NZ5EGDWG.cjs.map → password-PJHJRGPE.cjs.map} +1 -1
  52. package/dist/user-store-6J2PSEIN.cjs +12 -0
  53. package/dist/{user-store-SX4N6PQ4.cjs.map → user-store-6J2PSEIN.cjs.map} +1 -1
  54. package/dist/user-store-UC5URX3C.es.js +12 -0
  55. package/package.json +2 -13
  56. package/dist/InterventionLog-25EHE4QR.cjs +0 -30
  57. package/dist/LogStore-M2AUBNGO.cjs +0 -54
  58. package/dist/chunk-4WJDC4M4.es.js.map +0 -1
  59. package/dist/chunk-E7V3EBDB.es.js.map +0 -1
  60. package/dist/chunk-EOGZPRML.es.js.map +0 -1
  61. package/dist/chunk-HHPGUJ75.cjs.map +0 -1
  62. package/dist/chunk-KUZQ36IJ.es.js.map +0 -1
  63. package/dist/chunk-MCMADJQR.es.js.map +0 -1
  64. package/dist/chunk-QWVR2HNT.cjs.map +0 -1
  65. package/dist/chunk-X7VHW2TD.cjs.map +0 -1
  66. package/dist/intervention-hooks-LE6X4C6N.cjs +0 -21
  67. package/dist/log-formats-FKFMQKNO.cjs +0 -31
  68. package/dist/password-NZ5EGDWG.cjs +0 -20
  69. package/dist/user-store-J7LWEXSW.es.js +0 -12
  70. package/dist/user-store-SX4N6PQ4.cjs +0 -12
  71. /package/dist/{InterventionLog-R6CCPU2B.es.js.map → InterventionLog-PZT2CCN3.es.js.map} +0 -0
  72. /package/dist/{LogStore-ECXX34WC.es.js.map → LogStore-Q35YFNAY.es.js.map} +0 -0
  73. /package/dist/{chunk-DROOHKB3.es.js.map → chunk-57UQJKSL.es.js.map} +0 -0
  74. /package/dist/{chunk-LOMSUPPU.es.js.map → chunk-LTEP4XB2.es.js.map} +0 -0
  75. /package/dist/{chunk-XBIN4C2V.es.js.map → chunk-SB23ESX2.es.js.map} +0 -0
  76. /package/dist/{intervention-hooks-FI4EHOL5.es.js.map → intervention-hooks-TCGIC4IV.es.js.map} +0 -0
  77. /package/dist/{log-formats-I5E32H5F.es.js.map → log-formats-WW3TDUAK.es.js.map} +0 -0
  78. /package/dist/{password-63OY27RX.es.js.map → password-4BABWAG4.es.js.map} +0 -0
  79. /package/dist/{user-store-J7LWEXSW.es.js.map → user-store-UC5URX3C.es.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sysserver/api/login/store/user-store.ts","../src/config/secrets.ts","../src/sysserver/api/login/service/user-levels.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\r\nimport type { IUserStore, SessionRecord, UserRecord } from './types';\r\nimport { isDevDefaultPassword } from '../../../../config/secrets';\r\nimport { resolveRoleForLevel } from '../../../../infra/security-policy';\r\nimport { USER_LV } from '../service/user-levels';\r\nimport {\r\n\tdbAddSession,\r\n\tdbCreateUser,\r\n\tdbFindUser,\r\n\tdbDeleteUser,\r\n\tdbListSessions,\r\n\tdbListUsers,\r\n\tdbRemoveSession,\r\n\tdbRemoveSessionsByUser,\r\n\tdbUpdateUser,\r\n\tdbWriteSessions,\r\n} from './user-db';\r\n\r\nfunction toUserRecord(row: Record<string, unknown>): UserRecord {\r\n\treturn {\r\n\t\tid: String(row.id),\r\n\t\tus: String(row.us),\r\n\t\temail: row.email ? String(row.email) : undefined,\r\n\t\tpassHash: String(row.passHash),\r\n\t\tpassSalt: String(row.passSalt),\r\n\t\tlv: Number(row.lv ?? 0),\r\n\t\trole: row.role ? String(row.role) : undefined,\r\n\t\tstatus: (row.status as UserRecord['status']) || 'active',\r\n\t\tfailCount: Number(row.failCount ?? 0),\r\n\t\tlockedUntil: row.lockedUntil != null ? Number(row.lockedUntil) : undefined,\r\n\t\tmustChangePassword: row.mustChangePassword != null ? Number(row.mustChangePassword) : undefined,\r\n\t\tpasswordChangedAt: row.passwordChangedAt != null ? Number(row.passwordChangedAt) : undefined,\r\n\t\tpassHistory: row.passHistory ? String(row.passHistory) : undefined,\r\n\t\tcreatedAt: Number(row.createdAt),\r\n\t\tupdatedAt: Number(row.updatedAt),\r\n\t};\r\n}\r\n\r\nfunction toSessionRecord(row: Record<string, unknown>): SessionRecord {\r\n\treturn {\r\n\t\tid: String(row.id),\r\n\t\tus: String(row.us),\r\n\t\tip: String(row.ip),\r\n\t\tcreatedAt: Number(row.createdAt),\r\n\t\texpiresAt: Number(row.expiresAt),\r\n\t\tlastActivityAt: row.lastActivityAt != null ? Number(row.lastActivityAt) : undefined,\r\n\t\tpri: String(row.pri),\r\n\t\tpub: String(row.pub),\r\n\t};\r\n}\r\n\r\nexport async function ensureBootstrapAdmin($asai: any): Promise<void> {\r\n\tconst users = await dbListUsers($asai);\r\n\tif (users.length > 0) return;\r\n\tconst { hashPassword } = await import('../service/password');\r\n\tconst pwd = $asai?.hostconfig?.password;\r\n\tif (!pwd) throw new Error('[user-store] ASAI_HOST_PASSWORD 未配置,无法创建 bootstrap admin');\r\n\tconst { passHash, passSalt } = hashPassword(pwd);\r\n\tconst now = Date.now();\r\n\tconst role = resolveRoleForLevel($asai, USER_LV.SUPER).name;\r\n\tawait dbCreateUser($asai, {\r\n\t\tid: randomUUID(),\r\n\t\tus: 'admin',\r\n\t\temail: '',\r\n\t\tpassHash,\r\n\t\tpassSalt,\r\n\t\tlv: USER_LV.SUPER,\r\n\t\trole,\r\n\t\tstatus: 'active',\r\n\t\tfailCount: 0,\r\n\t\tlockedUntil: '',\r\n\t\tmustChangePassword: isDevDefaultPassword(pwd) ? 1 : 0,\r\n\t\tpasswordChangedAt: now,\r\n\t\tpassHistory: '[]',\r\n\t\tcreatedAt: now,\r\n\t\tupdatedAt: now,\r\n\t});\r\n}\r\n\r\nexport function createUserStore($asai: any): IUserStore {\r\n\treturn {\r\n\t\tasync findByUsername(us) {\r\n\t\t\tconst row = await dbFindUser($asai, 'us', us);\r\n\t\t\treturn row ? toUserRecord(row) : null;\r\n\t\t},\r\n\t\tasync findById(id) {\r\n\t\t\tconst row = await dbFindUser($asai, 'id', id);\r\n\t\t\treturn row ? toUserRecord(row) : null;\r\n\t\t},\r\n\t\tasync listUsers() {\r\n\t\t\tconst rows = await dbListUsers($asai);\r\n\t\t\treturn rows.map(toUserRecord);\r\n\t\t},\r\n\t\tasync createUser(data) {\r\n\t\t\tconst existing = await dbFindUser($asai, 'us', data.us);\r\n\t\t\tif (existing) throw new Error('Username already exists');\r\n\t\t\tconst now = Date.now();\r\n\t\t\tconst user: UserRecord = {\r\n\t\t\t\tid: randomUUID(),\r\n\t\t\t\tus: data.us,\r\n\t\t\t\temail: data.email,\r\n\t\t\t\tpassHash: data.passHash,\r\n\t\t\t\tpassSalt: data.passSalt,\r\n\t\t\t\tlv: data.lv ?? 0,\r\n\t\t\t\trole: data.role || resolveRoleForLevel($asai, data.lv ?? 0).name,\r\n\t\t\t\tstatus: data.status ?? 'active',\r\n\t\t\t\tfailCount: 0,\r\n\t\t\t\tmustChangePassword: data.mustChangePassword,\r\n\t\t\t\tpasswordChangedAt: data.passwordChangedAt ?? Date.now(),\r\n\t\t\t\tpassHistory: data.passHistory || '[]',\r\n\t\t\t\tcreatedAt: now,\r\n\t\t\t\tupdatedAt: now,\r\n\t\t\t};\r\n\t\t\tawait dbCreateUser($asai, {\r\n\t\t\t\t...user,\r\n\t\t\t\temail: user.email || '',\r\n\t\t\t\tlockedUntil: user.lockedUntil ?? '',\r\n\t\t\t\tmustChangePassword: user.mustChangePassword ?? 0,\r\n\t\t\t\tpasswordChangedAt: user.passwordChangedAt ?? now,\r\n\t\t\t\tpassHistory: user.passHistory || '[]',\r\n\t\t\t\trole: user.role || '',\r\n\t\t\t});\r\n\t\t\treturn user;\r\n\t\t},\r\n\t\tasync updateUser(us, patch) {\r\n\t\t\tconst dbPatch: Record<string, unknown> = { ...patch };\r\n\t\t\tif (patch.lockedUntil === undefined && 'lockedUntil' in patch) {\r\n\t\t\t\tdbPatch.lockedUntil = '';\r\n\t\t\t}\r\n\t\t\tconst row = await dbUpdateUser($asai, us, dbPatch);\r\n\t\t\treturn row ? toUserRecord(row) : null;\r\n\t\t},\r\n\t\tasync getSessions() {\r\n\t\t\tconst sessions = (await dbListSessions($asai)).map(toSessionRecord);\r\n\t\t\tconst now = Date.now();\r\n\t\t\tconst valid = sessions.filter((s) => s.expiresAt > now);\r\n\t\t\tif (valid.length !== sessions.length) {\r\n\t\t\t\tawait dbWriteSessions(\r\n\t\t\t\t\t$asai,\r\n\t\t\t\t\tvalid.map((s) => ({ ...s })),\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\treturn valid;\r\n\t\t},\r\n\t\tasync addSession(session) {\r\n\t\t\tawait dbAddSession($asai, { ...session });\r\n\t\t},\r\n\t\tasync removeSession(sessionId) {\r\n\t\t\tawait dbRemoveSession($asai, sessionId);\r\n\t\t},\r\n\t\tasync removeSessionsByUser(us) {\r\n\t\t\tawait dbRemoveSessionsByUser($asai, us);\r\n\t\t},\r\n\t\tasync countSessions() {\r\n\t\t\treturn (await this.getSessions()).length;\r\n\t\t},\r\n\t\tasync countSessionsByUser(us) {\r\n\t\t\treturn (await this.getSessions()).filter((s) => s.us === us).length;\r\n\t\t},\r\n\t\tasync deleteUser(us) {\r\n\t\t\treturn dbDeleteUser($asai, us);\r\n\t\t},\r\n\t};\r\n}\r\n","/**\r\n * IEC 62443-4-2 CR 4.1 / CR 1.7 — 密钥与凭据不得写入版本库内的 asaihost.json。\r\n * 加载顺序:process.env > webserver/.env > asaihost.secrets.local.json\r\n */\r\nimport fs from 'node:fs/promises';\r\nimport path from 'node:path';\r\n\r\n/** 禁止出现在 asaihost.json 中的敏感字段(检测到则剥离并审计) */\r\nexport const FORBIDDEN_HOSTCONFIG_KEYS = [\r\n\t'password',\r\n\t'asaisn',\r\n] as const;\r\n\r\nexport interface AsaiSecrets {\r\n\tpassword: string;\r\n\tasaisn: string;\r\n\taesKeyBase64: string;\r\n\tsessionSecret: string;\r\n\thttpsKey?: string;\r\n\thttpsCert?: string;\r\n\twssecToken?: string;\r\n\tsiemToken?: string;\r\n}\r\n\r\nexport interface SecretsLoadResult {\r\n\tsecrets: AsaiSecrets;\r\n\tstrippedFromJson: string[];\r\n\tsources: string[];\r\n}\r\n\r\nconst ENV_MAP = {\r\n\tpassword: 'ASAI_HOST_PASSWORD',\r\n\tasaisn: 'ASAI_ASAISN',\r\n\taesKeyBase64: 'ASAI_AES_KEYBASE64',\r\n\tsessionSecret: 'ASAI_SESSION_SECRET',\r\n\thttpsKey: 'ASAI_HTTPS_KEY',\r\n\thttpsCert: 'ASAI_HTTPS_CERT',\r\n\thttpsKeyPath: 'ASAI_HTTPS_KEY_PATH',\r\n\thttpsCertPath: 'ASAI_HTTPS_CERT_PATH',\r\n\twssecToken: 'ASAI_WSSEC_TOKEN',\r\n\tsiemToken: 'ASAI_SIEM_TOKEN',\r\n} as const;\r\n\r\nfunction isNonEmptyString(v: unknown): v is string {\r\n\treturn typeof v === 'string' && v.trim().length > 0;\r\n}\r\n\r\n/** 轻量 .env 解析(不引入 dotenv 依赖) */\r\nexport async function loadDotEnvFile(envPath: string): Promise<Record<string, string>> {\r\n\tconst out: Record<string, string> = {};\r\n\ttry {\r\n\t\tconst raw = await fs.readFile(envPath, 'utf8');\r\n\t\tfor (const line of raw.split(/\\r?\\n/)) {\r\n\t\t\tconst trimmed = line.trim();\r\n\t\t\tif (!trimmed || trimmed.startsWith('#')) continue;\r\n\t\t\tconst eq = trimmed.indexOf('=');\r\n\t\t\tif (eq <= 0) continue;\r\n\t\t\tconst key = trimmed.slice(0, eq).trim();\r\n\t\t\tlet val = trimmed.slice(eq + 1).trim();\r\n\t\t\tif ((val.startsWith('\"') && val.endsWith('\"')) || (val.startsWith(\"'\") && val.endsWith(\"'\"))) {\r\n\t\t\t\tval = val.slice(1, -1);\r\n\t\t\t}\r\n\t\t\tif (key) out[key] = val;\r\n\t\t}\r\n\t} catch {\r\n\t\t/* optional file */\r\n\t}\r\n\treturn out;\r\n}\r\n\r\nfunction envGet(name: string, dotenv: Record<string, string>): string | undefined {\r\n\tconst fromProcess = process.env[name];\r\n\tif (isNonEmptyString(fromProcess)) return fromProcess.trim();\r\n\tconst fromFile = dotenv[name];\r\n\tif (isNonEmptyString(fromFile)) return fromFile.trim();\r\n\treturn undefined;\r\n}\r\n\r\nasync function readJsonFile(filePath: string): Promise<Record<string, unknown> | null> {\r\n\ttry {\r\n\t\tconst raw = await fs.readFile(filePath, 'utf8');\r\n\t\tconst data = JSON.parse(raw);\r\n\t\treturn data && typeof data === 'object' && !Array.isArray(data) ? (data as Record<string, unknown>) : null;\r\n\t} catch {\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\nasync function readPemFile(serverRoot: string, filePath: string): Promise<string | undefined> {\r\n\tconst abs = path.isAbsolute(filePath) ? filePath : path.join(serverRoot, filePath);\r\n\ttry {\r\n\t\treturn (await fs.readFile(abs, 'utf8')).trim();\r\n\t} catch {\r\n\t\treturn undefined;\r\n\t}\r\n}\r\n\r\n/**\r\n * 从 asaihost.json 剥离敏感字段(禁止落盘/进仓库)。\r\n * 返回被剥离的字段路径列表,供安全审计。\r\n */\r\nexport function stripForbiddenSecretsFromHostConfig(cfg: Record<string, any>): string[] {\r\n\tconst stripped: string[] = [];\r\n\r\n\tif (isNonEmptyString(cfg.password)) {\r\n\t\tstripped.push('password');\r\n\t\tdelete cfg.password;\r\n\t}\r\n\tif (isNonEmptyString(cfg.asaisn)) {\r\n\t\tstripped.push('asaisn');\r\n\t\tdelete cfg.asaisn;\r\n\t}\r\n\tif (cfg.aes && typeof cfg.aes === 'object' && isNonEmptyString(cfg.aes.keybase64)) {\r\n\t\tstripped.push('aes.keybase64');\r\n\t\tdelete cfg.aes.keybase64;\r\n\t}\r\n\tif (cfg.security && typeof cfg.security === 'object' && isNonEmptyString(cfg.security.sessionSecret)) {\r\n\t\tstripped.push('security.sessionSecret');\r\n\t\tdelete cfg.security.sessionSecret;\r\n\t}\r\n\tif (cfg.httpscert && typeof cfg.httpscert === 'object') {\r\n\t\tif (isNonEmptyString(cfg.httpscert.key)) {\r\n\t\t\tstripped.push('httpscert.key');\r\n\t\t\tdelete cfg.httpscert.key;\r\n\t\t}\r\n\t\tif (isNonEmptyString(cfg.httpscert.cert)) {\r\n\t\t\tstripped.push('httpscert.cert');\r\n\t\t\tdelete cfg.httpscert.cert;\r\n\t\t}\r\n\t}\r\n\tif (Array.isArray(cfg.wssec) && isNonEmptyString(cfg.wssec[0])) {\r\n\t\tstripped.push('wssec[0]');\r\n\t\tcfg.wssec = [cfg.wssec[0] ? '' : cfg.wssec[0], cfg.wssec[1] ?? '', cfg.wssec[2] ?? '-'];\r\n\t\tcfg.wssec[0] = '';\r\n\t}\r\n\r\n\treturn stripped;\r\n}\r\n\r\nfunction pickFromLocalJson(local: Record<string, unknown> | null): Partial<AsaiSecrets> {\r\n\tif (!local) return {};\r\n\treturn {\r\n\t\tpassword: isNonEmptyString(local.password) ? local.password : undefined,\r\n\t\tasaisn: isNonEmptyString(local.asaisn) ? local.asaisn : undefined,\r\n\t\taesKeyBase64: isNonEmptyString(local.aesKeyBase64)\r\n\t\t\t? local.aesKeyBase64\r\n\t\t\t: isNonEmptyString((local.aes as any)?.keybase64)\r\n\t\t\t\t? (local.aes as any).keybase64\r\n\t\t\t\t: undefined,\r\n\t\tsessionSecret: isNonEmptyString(local.sessionSecret) ? local.sessionSecret : undefined,\r\n\t\thttpsKey: isNonEmptyString(local.httpsKey) ? local.httpsKey : undefined,\r\n\t\thttpsCert: isNonEmptyString(local.httpsCert) ? local.httpsCert : undefined,\r\n\t\twssecToken: isNonEmptyString(local.wssecToken) ? local.wssecToken : undefined,\r\n\t};\r\n}\r\n\r\nexport async function loadAsaiSecrets(serverRoot: string): Promise<SecretsLoadResult> {\r\n\tconst sources: string[] = [];\r\n\tconst dotenv = await loadDotEnvFile(path.join(serverRoot, '.env'));\r\n\tif (Object.keys(dotenv).length) sources.push('webserver/.env');\r\n\r\n\tconst localPath = path.join(serverRoot, 'websys/sys/asaihost.secrets.local.json');\r\n\tconst localJson = await readJsonFile(localPath);\r\n\tif (localJson) sources.push('websys/sys/asaihost.secrets.local.json');\r\n\r\n\tconst fromLocal = pickFromLocalJson(localJson);\r\n\r\n\tconst password =\r\n\t\tenvGet(ENV_MAP.password, dotenv) ?? fromLocal.password;\r\n\tconst asaisn =\r\n\t\tenvGet(ENV_MAP.asaisn, dotenv) ?? fromLocal.asaisn;\r\n\tconst aesKeyBase64 =\r\n\t\tenvGet(ENV_MAP.aesKeyBase64, dotenv) ?? fromLocal.aesKeyBase64;\r\n\tlet sessionSecret =\r\n\t\tenvGet(ENV_MAP.sessionSecret, dotenv) ?? fromLocal.sessionSecret;\r\n\tlet httpsKey =\r\n\t\tenvGet(ENV_MAP.httpsKey, dotenv) ?? fromLocal.httpsKey;\r\n\tlet httpsCert =\r\n\t\tenvGet(ENV_MAP.httpsCert, dotenv) ?? fromLocal.httpsCert;\r\n\tconst wssecToken =\r\n\t\tenvGet(ENV_MAP.wssecToken, dotenv) ?? fromLocal.wssecToken;\r\n\tconst siemToken =\r\n\t\tenvGet(ENV_MAP.siemToken, dotenv) ?? (fromLocal as any).siemToken;\r\n\r\n\tif (envGet(ENV_MAP.password, dotenv)) sources.push('env:ASAI_HOST_PASSWORD');\r\n\tif (envGet(ENV_MAP.asaisn, dotenv)) sources.push('env:ASAI_ASAISN');\r\n\tif (envGet(ENV_MAP.aesKeyBase64, dotenv)) sources.push('env:ASAI_AES_KEYBASE64');\r\n\tif (envGet(ENV_MAP.sessionSecret, dotenv)) sources.push('env:ASAI_SESSION_SECRET');\r\n\r\n\tconst keyPath = envGet(ENV_MAP.httpsKeyPath, dotenv);\r\n\tconst certPath = envGet(ENV_MAP.httpsCertPath, dotenv);\r\n\tif (!httpsKey && keyPath) {\r\n\t\thttpsKey = await readPemFile(serverRoot, keyPath);\r\n\t\tif (httpsKey) sources.push('env:ASAI_HTTPS_KEY_PATH');\r\n\t}\r\n\tif (!httpsCert && certPath) {\r\n\t\thttpsCert = await readPemFile(serverRoot, certPath);\r\n\t\tif (httpsCert) sources.push('env:ASAI_HTTPS_CERT_PATH');\r\n\t}\r\n\r\n\tif (!sessionSecret && asaisn) {\r\n\t\tsessionSecret = asaisn;\r\n\t\tsources.push('derived:sessionSecret<=asaisn');\r\n\t}\r\n\r\n\treturn {\r\n\t\tsecrets: {\r\n\t\t\tpassword: password ?? '',\r\n\t\t\tasaisn: asaisn ?? '',\r\n\t\t\taesKeyBase64: aesKeyBase64 ?? '',\r\n\t\t\tsessionSecret: sessionSecret ?? '',\r\n\t\t\thttpsKey,\r\n\t\t\thttpsCert,\r\n\t\t\twssecToken,\r\n\t\t\tsiemToken,\r\n\t\t},\r\n\t\tstrippedFromJson: [],\r\n\t\tsources: [...new Set(sources)],\r\n\t};\r\n}\r\n\r\n/** 将已加载的密钥合并进运行时 hostconfig(仅内存,不写回 JSON) */\r\nexport function applySecretsToHostConfig(cfg: Record<string, any>, secrets: AsaiSecrets): void {\r\n\tif (secrets.password) cfg.password = secrets.password;\r\n\tif (secrets.asaisn) cfg.asaisn = secrets.asaisn;\r\n\tif (secrets.aesKeyBase64) {\r\n\t\tif (!cfg.aes || typeof cfg.aes !== 'object') cfg.aes = {};\r\n\t\tcfg.aes.keybase64 = secrets.aesKeyBase64;\r\n\t}\r\n\tif (secrets.sessionSecret) {\r\n\t\tif (!cfg.security || typeof cfg.security !== 'object') cfg.security = {};\r\n\t\tcfg.security.sessionSecret = secrets.sessionSecret;\r\n\t}\r\n\tif (secrets.httpsKey && secrets.httpsCert) {\r\n\t\tif (!cfg.httpscert || typeof cfg.httpscert !== 'object') cfg.httpscert = {};\r\n\t\tcfg.httpscert.key = secrets.httpsKey;\r\n\t\tcfg.httpscert.cert = secrets.httpsCert;\r\n\t} else if (cfg.httpscert && typeof cfg.httpscert === 'object') {\r\n\t\tconst hc = cfg.httpscert;\r\n\t\tif (!secrets.httpsKey && isNonEmptyString(hc.keyPath)) {\r\n\t\t\t/* keyPath resolved at apply time by caller if needed */\r\n\t\t}\r\n\t}\r\n\tif (secrets.wssecToken) {\r\n\t\tcfg.wssec = [secrets.wssecToken, '', '-'];\r\n\t}\r\n\tif (secrets.siemToken) {\r\n\t\tif (!cfg.logger || typeof cfg.logger !== 'object') cfg.logger = {};\r\n\t\tif (!cfg.logger.siem || typeof cfg.logger.siem !== 'object') cfg.logger.siem = {};\r\n\t\tcfg.logger.siem.token = secrets.siemToken;\r\n\t\tcfg.logger.siem.enabled = 1;\r\n\t}\r\n}\r\n\r\nexport async function resolveHttpsCertFromPaths(serverRoot: string, cfg: Record<string, any>): Promise<void> {\r\n\tconst hc = cfg?.httpscert;\r\n\tif (!hc || typeof hc !== 'object') return;\r\n\tif (hc.key && hc.cert) return;\r\n\tconst keyPath = hc.keyPath;\r\n\tconst certPath = hc.certPath;\r\n\tif (!isNonEmptyString(keyPath) || !isNonEmptyString(certPath)) return;\r\n\tconst key = await readPemFile(serverRoot, keyPath);\r\n\tconst cert = await readPemFile(serverRoot, certPath);\r\n\tif (key && cert) {\r\n\t\thc.key = key;\r\n\t\thc.cert = cert;\r\n\t}\r\n}\r\n\r\nexport function validateAsaiSecrets(secrets: AsaiSecrets, opts?: { isProduction?: boolean }): string[] {\r\n\tconst errors: string[] = [];\r\n\tconst prod = opts?.isProduction ?? process.env.NODE_ENV === 'production';\r\n\r\n\tif (!isNonEmptyString(secrets.password)) {\r\n\t\terrors.push('缺少 ASAI_HOST_PASSWORD(或 websys/sys/asaihost.secrets.local.json 中的 password)');\r\n\t}\r\n\tif (!isNonEmptyString(secrets.asaisn)) {\r\n\t\terrors.push('缺少 ASAI_ASAISN(Userinfo 编解码盐,禁止写入 asaihost.json)');\r\n\t}\r\n\tif (!isNonEmptyString(secrets.aesKeyBase64)) {\r\n\t\terrors.push('缺少 ASAI_AES_KEYBASE64(AES 密钥,禁止写入 asaihost.json)');\r\n\t}\r\n\tif (!isNonEmptyString(secrets.sessionSecret)) {\r\n\t\terrors.push('缺少 ASAI_SESSION_SECRET(或 ASAI_ASAISN 作为派生源)');\r\n\t}\r\n\r\n\tif (prod) {\r\n\t\tconst weak = ['asai', 'password', '123456', 'admin', 'changeme'];\r\n\t\tif (weak.includes(secrets.password.toLowerCase())) {\r\n\t\t\terrors.push('生产环境禁止使用弱默认密码(IEC 62443-4-2 CR 1.7)');\r\n\t\t}\r\n\t\tif (secrets.password.length < 12) {\r\n\t\t\terrors.push('生产环境 ASAI_HOST_PASSWORD 长度应 ≥ 12');\r\n\t\t}\r\n\t}\r\n\r\n\treturn errors;\r\n}\r\n\r\nexport function isDevDefaultPassword(password: string): boolean {\r\n\treturn password === 'asai' || password === 'AsaiDevOnly1';\r\n}\r\n","/** 内置等级常量(默认阈值;运行时应优先读 user-level-config) */\r\nexport const USER_LV = {\r\n\tOPERATOR: 3,\r\n\tENGINEER: 5,\r\n\tADMIN: 7,\r\n\tDEVELOPER: 9,\r\n\tSUPER: 99,\r\n} as const;\r\n\r\nexport { getPermissionThreshold, getLvSteps, getLevelLabel, isValidUserLv } from './user-level-config';\r\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sysserver/api/login/store/user-db.ts","../src/infra/security-policy.ts","../src/sysserver/api/login/service/user-level-config.ts","../src/sysserver/api/login/service/route-defaults.ts"],"sourcesContent":["import type Idb from '../../../db/src/type';\r\nimport type { DbType } from '../../../db/db';\r\nimport {\r\n\tasRows,\r\n\tgetDataServer,\r\n\tqNum,\r\n\tqStr,\r\n\treadJsonBlob,\r\n\tresolveStoreConfig,\r\n\twriteJsonBlob,\r\n} from '../../../db/data-store';\r\n\r\nexport const USER_FIELDS = [\r\n\t'id',\r\n\t'us',\r\n\t'email',\r\n\t'passHash',\r\n\t'passSalt',\r\n\t'lv',\r\n\t'role',\r\n\t'status',\r\n\t'failCount',\r\n\t'lockedUntil',\r\n\t'mustChangePassword',\r\n\t'passwordChangedAt',\r\n\t'passHistory',\r\n\t'createdAt',\r\n\t'updatedAt',\r\n] as const;\r\n\r\nexport const SESSION_FIELDS = ['id', 'us', 'ip', 'createdAt', 'expiresAt', 'lastActivityAt', 'pri', 'pub'] as const;\r\n\r\nconst FILE_USERS = 'users.json';\r\nconst FILE_SESSIONS = 'sessions.json';\r\nconst TABLE_USERS = 'auth_users';\r\nconst TABLE_SESSIONS = 'auth_sessions';\r\n\r\nexport interface UserStoreDbConfig {\r\n\ttype: DbType;\r\n\topt: Record<string, unknown>;\r\n}\r\n\r\nexport function getUserStoreConfig($asai: any): UserStoreDbConfig {\r\n\tconst resolved = resolveStoreConfig($asai, 'user');\r\n\treturn { type: resolved.type, opt: resolved.opt };\r\n}\r\n\r\nexport function getUserDataServer($asai: any): { sqlDb(sql: Idb): Promise<unknown> } {\r\n\treturn getDataServer($asai, 'user');\r\n}\r\n\r\nexport function isFileStore($asai: any): boolean {\r\n\treturn getUserStoreConfig($asai).type === 'file';\r\n}\r\n\r\nfunction rowToRecord<T extends Record<string, unknown>>(row: Record<string, unknown>, numericKeys: string[]): T {\r\n\tconst out: Record<string, unknown> = { ...row };\r\n\tfor (const key of numericKeys) {\r\n\t\tif (out[key] != null && out[key] !== '') out[key] = Number(out[key]);\r\n\t}\r\n\tif (out.lockedUntil === '' || out.lockedUntil == null) delete out.lockedUntil;\r\n\tif (out.email === '') delete out.email;\r\n\treturn out as T;\r\n}\r\n\r\nasync function readJsonArray(db: { sqlDb(sql: Idb): Promise<unknown> }, filename: string): Promise<Record<string, unknown>[]> {\r\n\treturn readJsonBlob(db, filename);\r\n}\r\n\r\nasync function writeJsonArray(\r\n\tdb: { sqlDb(sql: Idb): Promise<unknown> },\r\n\tfilename: string,\r\n\tdata: Record<string, unknown>[],\r\n): Promise<void> {\r\n\tawait writeJsonBlob(db, filename, data);\r\n}\r\n\r\nexport async function dbListUsers($asai: any): Promise<Record<string, unknown>[]> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\treturn readJsonArray(db, FILE_USERS);\r\n\t}\r\n\tconst res = await db.sqlDb({ type: 'select', table: TABLE_USERS, field: [...USER_FIELDS] });\r\n\treturn asRows(res).map((r) => rowToRecord(r, ['lv', 'failCount', 'lockedUntil', 'mustChangePassword', 'passwordChangedAt', 'createdAt', 'updatedAt']));\r\n}\r\n\r\nexport async function dbFindUser($asai: any, field: 'us' | 'id', value: string): Promise<Record<string, unknown> | null> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\tconst users = await readJsonArray(db, FILE_USERS);\r\n\t\treturn users.find((u) => u[field] === value) || null;\r\n\t}\r\n\tconst res = await db.sqlDb({\r\n\t\ttype: 'select',\r\n\t\ttable: TABLE_USERS,\r\n\t\tfield: [...USER_FIELDS],\r\n\t\twhere: [[field, '=', qStr(value, cfg.type)]],\r\n\t\tlimit: 1,\r\n\t});\r\n\tconst rows = asRows(res);\r\n\treturn rows.length ? rowToRecord(rows[0], ['lv', 'failCount', 'lockedUntil', 'mustChangePassword', 'passwordChangedAt', 'createdAt', 'updatedAt']) : null;\r\n}\r\n\r\nexport async function dbCreateUser($asai: any, user: Record<string, unknown>): Promise<Record<string, unknown>> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\tconst users = await readJsonArray(db, FILE_USERS);\r\n\t\tusers.push(user);\r\n\t\tawait writeJsonArray(db, FILE_USERS, users);\r\n\t\treturn user;\r\n\t}\r\n\tawait db.sqlDb({\r\n\t\ttype: 'insert',\r\n\t\ttable: TABLE_USERS,\r\n\t\tfield: [...USER_FIELDS],\r\n\t\tvalue: [\r\n\t\t\tUSER_FIELDS.map((f) => {\r\n\t\t\t\tconst v = user[f];\r\n\t\t\t\tif (typeof v === 'number') return qNum(v);\r\n\t\t\t\treturn qStr(v == null ? '' : String(v), cfg.type);\r\n\t\t\t}),\r\n\t\t],\r\n\t});\r\n\treturn user;\r\n}\r\n\r\nexport async function dbUpdateUser($asai: any, us: string, patch: Record<string, unknown>): Promise<Record<string, unknown> | null> {\r\n\tconst existing = await dbFindUser($asai, 'us', us);\r\n\tif (!existing) return null;\r\n\tconst merged = { ...existing, ...patch, updatedAt: Date.now() };\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\tconst users = await readJsonArray(db, FILE_USERS);\r\n\t\tconst idx = users.findIndex((u) => u.us === us);\r\n\t\tif (idx < 0) return null;\r\n\t\tusers[idx] = merged;\r\n\t\tawait writeJsonArray(db, FILE_USERS, users);\r\n\t\treturn merged;\r\n\t}\r\n\tconst sets: Idb['set'] = [];\r\n\tfor (const [key, val] of Object.entries(patch)) {\r\n\t\tif (val === undefined) continue;\r\n\t\tif (typeof val === 'number') sets!.push([key, val]);\r\n\t\telse sets!.push([key, val == null ? '' : String(val)]);\r\n\t}\r\n\tsets!.push(['updatedAt', merged.updatedAt as number]);\r\n\tawait db.sqlDb({\r\n\t\ttype: 'update',\r\n\t\ttable: TABLE_USERS,\r\n\t\tset: sets,\r\n\t\twhere: [['us', '=', qStr(us, cfg.type)]],\r\n\t});\r\n\treturn merged;\r\n}\r\n\r\nexport async function dbListSessions($asai: any): Promise<Record<string, unknown>[]> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\treturn readJsonArray(db, FILE_SESSIONS);\r\n\t}\r\n\tconst res = await db.sqlDb({ type: 'select', table: TABLE_SESSIONS, field: [...SESSION_FIELDS] });\r\n\treturn asRows(res).map((r) => rowToRecord(r, ['createdAt', 'expiresAt', 'lastActivityAt']));\r\n}\r\n\r\nexport async function dbWriteSessions($asai: any, sessions: Record<string, unknown>[]): Promise<void> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\tawait writeJsonArray(db, FILE_SESSIONS, sessions);\r\n\t\treturn;\r\n\t}\r\n\tconst existing = await dbListSessions($asai);\r\n\tfor (const s of existing) {\r\n\t\tawait db.sqlDb({\r\n\t\t\ttype: 'delete',\r\n\t\t\ttable: TABLE_SESSIONS,\r\n\t\t\twhere: [['id', '=', qStr(String(s.id), cfg.type)]],\r\n\t\t});\r\n\t}\r\n\tfor (const s of sessions) {\r\n\t\tawait db.sqlDb({\r\n\t\t\ttype: 'insert',\r\n\t\t\ttable: TABLE_SESSIONS,\r\n\t\t\tfield: [...SESSION_FIELDS],\r\n\t\t\tvalue: [\r\n\t\t\t\tSESSION_FIELDS.map((f) => {\r\n\t\t\t\t\tconst v = s[f];\r\n\t\t\t\t\tif (typeof v === 'number') return qNum(v);\r\n\t\t\t\t\treturn qStr(v == null ? '' : String(v), cfg.type);\r\n\t\t\t\t}),\r\n\t\t\t],\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport async function dbAddSession($asai: any, session: Record<string, unknown>): Promise<void> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\tconst sessions = await readJsonArray(db, FILE_SESSIONS);\r\n\t\tsessions.push(session);\r\n\t\tawait writeJsonArray(db, FILE_SESSIONS, sessions);\r\n\t\treturn;\r\n\t}\r\n\tawait db.sqlDb({\r\n\t\ttype: 'insert',\r\n\t\ttable: TABLE_SESSIONS,\r\n\t\tfield: [...SESSION_FIELDS],\r\n\t\tvalue: [\r\n\t\t\tSESSION_FIELDS.map((f) => {\r\n\t\t\t\tconst v = session[f];\r\n\t\t\t\tif (typeof v === 'number') return qNum(v);\r\n\t\t\t\treturn qStr(v == null ? '' : String(v), cfg.type);\r\n\t\t\t}),\r\n\t\t],\r\n\t});\r\n}\r\n\r\nexport async function dbRemoveSession($asai: any, sessionId: string): Promise<void> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\tconst sessions = await readJsonArray(db, FILE_SESSIONS);\r\n\t\tawait writeJsonArray(\r\n\t\t\tdb,\r\n\t\t\tFILE_SESSIONS,\r\n\t\t\tsessions.filter((s) => s.id !== sessionId),\r\n\t\t);\r\n\t\treturn;\r\n\t}\r\n\tawait db.sqlDb({\r\n\t\ttype: 'delete',\r\n\t\ttable: TABLE_SESSIONS,\r\n\t\twhere: [['id', '=', qStr(sessionId, cfg.type)]],\r\n\t});\r\n}\r\n\r\nexport async function dbRemoveSessionsByUser($asai: any, us: string): Promise<void> {\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tif (cfg.type === 'file') {\r\n\t\tconst sessions = await readJsonArray(db, FILE_SESSIONS);\r\n\t\tawait writeJsonArray(\r\n\t\t\tdb,\r\n\t\t\tFILE_SESSIONS,\r\n\t\t\tsessions.filter((s) => s.us !== us),\r\n\t\t);\r\n\t\treturn;\r\n\t}\r\n\tawait db.sqlDb({\r\n\t\ttype: 'delete',\r\n\t\ttable: TABLE_SESSIONS,\r\n\t\twhere: [['us', '=', qStr(us, cfg.type)]],\r\n\t});\r\n}\r\n\r\nexport async function dbDeleteUser($asai: any, us: string): Promise<boolean> {\r\n\tconst existing = await dbFindUser($asai, 'us', us);\r\n\tif (!existing) return false;\r\n\tconst db = getUserDataServer($asai);\r\n\tconst cfg = getUserStoreConfig($asai);\r\n\tawait dbRemoveSessionsByUser($asai, us);\r\n\tif (cfg.type === 'file') {\r\n\t\tconst users = await readJsonArray(db, FILE_USERS);\r\n\t\tconst next = users.filter((u) => u.us !== us);\r\n\t\tif (next.length === users.length) return false;\r\n\t\tawait writeJsonArray(db, FILE_USERS, next);\r\n\t\treturn true;\r\n\t}\r\n\tawait db.sqlDb({\r\n\t\ttype: 'delete',\r\n\t\ttable: TABLE_USERS,\r\n\t\twhere: [['us', '=', qStr(us, cfg.type)]],\r\n\t});\r\n\treturn true;\r\n}\r\n","/**\r\n * IEC 62443-4-2 — 可配置安全策略(CR 1.7 / 1.12 / 2.1 / 2.5)\r\n */\r\nimport { createHash } from 'node:crypto';\r\n\r\nexport interface PasswordPolicy {\r\n\tminLength: number;\r\n\trequireUpper: boolean;\r\n\trequireLower: boolean;\r\n\trequireDigit: boolean;\r\n\trequireSpecial: boolean;\r\n\tmaxAgeDays: number;\r\n\thistoryCount: number;\r\n}\r\n\r\nexport interface RoleDef {\r\n\tname: string;\r\n\tminLv: number;\r\n\tpermissions: string[];\r\n}\r\n\r\nconst DEFAULT_POLICY: PasswordPolicy = {\r\n\tminLength: 8,\r\n\trequireUpper: false,\r\n\trequireLower: true,\r\n\trequireDigit: true,\r\n\trequireSpecial: false,\r\n\tmaxAgeDays: 0,\r\n\thistoryCount: 0,\r\n};\r\n\r\nconst DEFAULT_ROLES: RoleDef[] = [\r\n\t{ name: 'viewer', minLv: 0, permissions: ['read'] },\r\n\t{ name: 'operator', minLv: 3, permissions: ['read', 'operate'] },\r\n\t{ name: 'engineer', minLv: 5, permissions: ['read', 'operate', 'audit'] },\r\n\t{ name: 'admin', minLv: 7, permissions: ['read', 'operate', 'audit', 'admin'] },\r\n\t{ name: 'developer', minLv: 9, permissions: ['read', 'operate', 'audit', 'admin', 'develop'] },\r\n\t{ name: 'superadmin', minLv: 99, permissions: ['read', 'operate', 'audit', 'admin', 'develop', 'super'] },\r\n];\r\n\r\nexport function getSecurityBlock($asai: any): Record<string, unknown> {\r\n\treturn ($asai?.hostconfig?.security as Record<string, unknown>) || {};\r\n}\r\n\r\nexport function getLoginBanner($asai: any): { enabled: boolean; text: string } {\r\n\tconst sec = getSecurityBlock($asai);\r\n\tconst banner = (sec.banner as Record<string, unknown>) || {};\r\n\treturn {\r\n\t\tenabled: banner.enabled === 1 || banner.enabled === true,\r\n\t\ttext: String(banner.text || ''),\r\n\t};\r\n}\r\n\r\nexport function getPasswordPolicy($asai: any): PasswordPolicy {\r\n\tconst sec = getSecurityBlock($asai);\r\n\tconst p = (sec.passwordPolicy as Record<string, unknown>) || {};\r\n\tconst minFromLegacy = Number(sec.passwordMinLength ?? DEFAULT_POLICY.minLength);\r\n\treturn {\r\n\t\tminLength: Number(p.minLength ?? minFromLegacy) || DEFAULT_POLICY.minLength,\r\n\t\trequireUpper: p.requireUpper === 1 || p.requireUpper === true,\r\n\t\trequireLower: p.requireLower !== 0 && p.requireLower !== false,\r\n\t\trequireDigit: p.requireDigit !== 0 && p.requireDigit !== false,\r\n\t\trequireSpecial: p.requireSpecial === 1 || p.requireSpecial === true,\r\n\t\tmaxAgeDays: Number(p.maxAgeDays ?? 0) || 0,\r\n\t\thistoryCount: Number(p.historyCount ?? 0) || 0,\r\n\t};\r\n}\r\n\r\nexport function getSessionIdleMinutes($asai: any): number {\r\n\tconst sec = getSecurityBlock($asai);\r\n\tconst v = sec.sessionIdleMinutes;\r\n\treturn v == null || v === 0 ? 0 : Number(v);\r\n}\r\n\r\nexport function getRoleDefinitions($asai: any): RoleDef[] {\r\n\tconst sec = getSecurityBlock($asai);\r\n\tconst raw = sec.roles;\r\n\tif (!Array.isArray(raw) || !raw.length) return DEFAULT_ROLES;\r\n\treturn raw.map((r: Record<string, unknown>) => ({\r\n\t\tname: String(r.name || 'role'),\r\n\t\tminLv: Number(r.minLv ?? 0),\r\n\t\tpermissions: Array.isArray(r.permissions) ? r.permissions.map(String) : [],\r\n\t}));\r\n}\r\n\r\nexport function resolveRoleForLevel($asai: any, lv: number): RoleDef {\r\n\tconst roles = getRoleDefinitions($asai);\r\n\tlet best = roles[0];\r\n\tfor (const r of roles) {\r\n\t\tif (lv >= r.minLv && r.minLv >= (best?.minLv ?? -1)) best = r;\r\n\t}\r\n\treturn best || DEFAULT_ROLES[0];\r\n}\r\n\r\nexport function hashPasswordForHistory(password: string): string {\r\n\treturn createHash('sha256').update(password).digest('hex');\r\n}\r\n\r\nexport function validatePasswordWithPolicy(password: string, policy: PasswordPolicy): string | null {\r\n\tif (!password || typeof password !== 'string') return 'PASSWORD_REQUIRED';\r\n\tif (password.length < policy.minLength) return 'PASSWORD_TOO_SHORT';\r\n\tif (policy.requireLower && !/[a-z]/.test(password)) return 'PASSWORD_WEAK';\r\n\tif (policy.requireUpper && !/[A-Z]/.test(password)) return 'PASSWORD_WEAK';\r\n\tif (policy.requireDigit && !/[0-9]/.test(password)) return 'PASSWORD_WEAK';\r\n\tif (policy.requireSpecial && !/[^a-zA-Z0-9]/.test(password)) return 'PASSWORD_WEAK';\r\n\treturn null;\r\n}\r\n\r\nexport function parsePassHistory(raw: unknown): string[] {\r\n\tif (!raw) return [];\r\n\tif (Array.isArray(raw)) return raw.map(String);\r\n\tif (typeof raw === 'string' && raw.startsWith('[')) {\r\n\t\ttry {\r\n\t\t\tconst arr = JSON.parse(raw);\r\n\t\t\treturn Array.isArray(arr) ? arr.map(String) : [];\r\n\t\t} catch {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t}\r\n\treturn [];\r\n}\r\n\r\nexport function isPasswordInHistory(password: string, history: string[]): boolean {\r\n\tconst h = hashPasswordForHistory(password);\r\n\treturn history.includes(h);\r\n}\r\n\r\nexport function isPasswordExpired(passwordChangedAt: number | undefined, maxAgeDays: number): boolean {\r\n\tif (!maxAgeDays || maxAgeDays <= 0) return false;\r\n\tif (!passwordChangedAt) return false;\r\n\treturn Date.now() - passwordChangedAt > maxAgeDays * 86400000;\r\n}\r\n\r\nimport { toPublicUserLevels } from '../sysserver/api/login/service/user-level-config';\r\n\r\nexport function getPublicSecurityConfig($asai: any, lang = 'zh-CN') {\r\n\tconst policy = getPasswordPolicy($asai);\r\n\tconst banner = getLoginBanner($asai);\r\n\treturn {\r\n\t\tbanner,\r\n\t\tpasswordPolicy: {\r\n\t\t\tminLength: policy.minLength,\r\n\t\t\trequireUpper: policy.requireUpper,\r\n\t\t\trequireLower: policy.requireLower,\r\n\t\t\trequireDigit: policy.requireDigit,\r\n\t\t\trequireSpecial: policy.requireSpecial,\r\n\t\t},\r\n\t\tsessionIdleMinutes: getSessionIdleMinutes($asai),\r\n\t\troles: getRoleDefinitions($asai).map((r) => ({ name: r.name, minLv: r.minLv })),\r\n\t\tuserLevels: toPublicUserLevels($asai, lang),\r\n\t\tallowRegister: getSecurityBlock($asai).allowRegister !== 0,\r\n\t};\r\n}\r\n","/**\r\n * 用户等级与名称 — 管理员可自定义(持久化至 user store _meta/user-levels.json)\r\n */\r\nimport fs from 'node:fs/promises';\r\nimport path from 'node:path';\r\nimport { getUserStoreConfig } from '../store/user-db';\r\nimport {\r\n\tDEFAULT_ROUTE_RIGHTS,\r\n\tmergeRouteRights,\r\n\tnormalizeRouteRight,\r\n\troutesFromLegacyRights,\r\n\ttype RouteRight,\r\n} from './route-defaults';\r\n\r\nexport type { RouteRight };\r\n\r\nexport interface UserLevelDef {\r\n\tlv: number;\r\n\tkey: string;\r\n\tname: string;\r\n\tnameEn?: string;\r\n}\r\n\r\nexport interface PermissionThresholds {\r\n\tlogRead: number;\r\n\tadminRead: number;\r\n\tadminWrite: number;\r\n}\r\n\r\nexport interface UserLevelConfig {\r\n\tlevels: UserLevelDef[];\r\n\tthresholds: PermissionThresholds;\r\n\trouteRights?: RouteRight[];\r\n\tupdatedAt?: number;\r\n\tupdatedBy?: string;\r\n}\r\n\r\nexport const DEFAULT_LEVELS: UserLevelDef[] = [\r\n\t{ lv: 0, key: 'guest', name: '普通用户', nameEn: 'Guest' },\r\n\t{ lv: 3, key: 'operator', name: '操作员', nameEn: 'Operator' },\r\n\t{ lv: 5, key: 'engineer', name: '工程师', nameEn: 'Engineer' },\r\n\t{ lv: 7, key: 'admin', name: '管理员', nameEn: 'Administrator' },\r\n\t{ lv: 9, key: 'developer', name: '开发者', nameEn: 'Developer' },\r\n\t{ lv: 99, key: 'superadmin', name: '超级管理员', nameEn: 'Super Administrator' },\r\n];\r\n\r\nexport const DEFAULT_THRESHOLDS: PermissionThresholds = {\r\n\tlogRead: 3,\r\n\tadminRead: 7,\r\n\tadminWrite: 9,\r\n};\r\n\r\nconst META_FILE = '_meta/user-levels.json';\r\n\r\nfunction configPath($asai: any): string {\r\n\tconst dir = String(getUserStoreConfig($asai).opt?.dir || 'webdata/webdb/users/');\r\n\treturn path.resolve(dir, META_FILE);\r\n}\r\n\r\nfunction fromHostLevels($asai: any): UserLevelDef[] | null {\r\n\tconst raw = $asai?.hostconfig?.security?.userLevels;\r\n\tif (!Array.isArray(raw) || !raw.length) return null;\r\n\tconst levels: UserLevelDef[] = [];\r\n\tfor (const item of raw) {\r\n\t\tif (!item || typeof item !== 'object') continue;\r\n\t\tconst lv = Number((item as any).lv);\r\n\t\tconst key = String((item as any).key || '').trim();\r\n\t\tconst name = String((item as any).name || (item as any).label || '').trim();\r\n\t\tif (!Number.isFinite(lv) || !key || !name) continue;\r\n\t\tlevels.push({\r\n\t\t\tlv,\r\n\t\t\tkey,\r\n\t\t\tname,\r\n\t\t\tnameEn: (item as any).nameEn ? String((item as any).nameEn) : undefined,\r\n\t\t});\r\n\t}\r\n\treturn levels.length ? levels.sort((a, b) => a.lv - b.lv) : null;\r\n}\r\n\r\nfunction fromHostThresholds($asai: any): PermissionThresholds {\r\n\tconst t = $asai?.hostconfig?.security?.permissionThresholds;\r\n\tif (!t || typeof t !== 'object') return { ...DEFAULT_THRESHOLDS };\r\n\treturn {\r\n\t\tlogRead: Number(t.logRead ?? DEFAULT_THRESHOLDS.logRead),\r\n\t\tadminRead: Number(t.adminRead ?? DEFAULT_THRESHOLDS.adminRead),\r\n\t\tadminWrite: Number(t.adminWrite ?? DEFAULT_THRESHOLDS.adminWrite),\r\n\t};\r\n}\r\n\r\nexport function getDefaultRouteRights($asai: any): RouteRight[] {\r\n\tconst fromHost = $asai?.hostconfig?.security?.routeRights;\r\n\tlet base = DEFAULT_ROUTE_RIGHTS.map((r) => ({ ...r }));\r\n\tif (Array.isArray(fromHost) && fromHost.length) {\r\n\t\tconst parsed: RouteRight[] = [];\r\n\t\tfor (const item of fromHost) {\r\n\t\t\tconst row = normalizeRouteRight(item);\r\n\t\t\tif (row) parsed.push(row);\r\n\t\t}\r\n\t\tif (parsed.length) base = mergeRouteRights(base, parsed);\r\n\t}\r\n\tconst legacy = $asai?.hostconfig?.security?.routerRights;\r\n\tif (legacy && typeof legacy === 'object') {\r\n\t\tbase = mergeRouteRights(base, routesFromLegacyRights(legacy));\r\n\t}\r\n\treturn base;\r\n}\r\n\r\nexport function getDefaultUserLevelConfig($asai: any): UserLevelConfig {\r\n\treturn {\r\n\t\tlevels: fromHostLevels($asai) || DEFAULT_LEVELS.map((l) => ({ ...l })),\r\n\t\tthresholds: fromHostThresholds($asai),\r\n\t\trouteRights: getDefaultRouteRights($asai),\r\n\t};\r\n}\r\n\r\nfunction normalizeLevel(item: unknown): UserLevelDef | null {\r\n\tif (!item || typeof item !== 'object') return null;\r\n\tconst lv = Number((item as any).lv);\r\n\tconst key = String((item as any).key || '').trim().slice(0, 32);\r\n\tconst name = String((item as any).name || '').trim().slice(0, 64);\r\n\tif (!Number.isFinite(lv) || lv < 0 || !key || !name) return null;\r\n\treturn {\r\n\t\tlv: Math.floor(lv),\r\n\t\tkey,\r\n\t\tname,\r\n\t\tnameEn: (item as any).nameEn ? String((item as any).nameEn).trim().slice(0, 64) : undefined,\r\n\t};\r\n}\r\n\r\nexport function normalizeUserLevelConfig(input: Partial<UserLevelConfig>, $asai: any): UserLevelConfig {\r\n\tconst base = getDefaultUserLevelConfig($asai);\r\n\tconst synced = getUserLevelConfigSync($asai);\r\n\tconst levelBase = synced.levels?.length ? synced : base;\r\n\tconst levels: UserLevelDef[] = [];\r\n\tconst seenLv = new Set<number>();\r\n\tconst seenKey = new Set<string>();\r\n\tif (Array.isArray(input.levels) && input.levels.length) {\r\n\t\tfor (const raw of input.levels) {\r\n\t\t\tconst row = normalizeLevel(raw);\r\n\t\t\tif (!row || seenLv.has(row.lv) || seenKey.has(row.key)) continue;\r\n\t\t\tseenLv.add(row.lv);\r\n\t\t\tseenKey.add(row.key);\r\n\t\t\tlevels.push(row);\r\n\t\t}\r\n\t} else {\r\n\t\tlevels.push(...levelBase.levels.map((l) => ({ ...l })));\r\n\t}\r\n\tif (!levels.some((l) => l.lv === 0)) {\r\n\t\tlevels.unshift({ lv: 0, key: 'guest', name: '普通用户', nameEn: 'Guest' });\r\n\t}\r\n\tlevels.sort((a, b) => a.lv - b.lv);\r\n\r\n\tconst th = input.thresholds || {};\r\n\tconst thresholds: PermissionThresholds = {\r\n\t\tlogRead: Number.isFinite(Number(th.logRead)) ? Number(th.logRead) : base.thresholds.logRead,\r\n\t\tadminRead: Number.isFinite(Number(th.adminRead)) ? Number(th.adminRead) : base.thresholds.adminRead,\r\n\t\tadminWrite: Number.isFinite(Number(th.adminWrite)) ? Number(th.adminWrite) : base.thresholds.adminWrite,\r\n\t};\r\n\r\n\treturn {\r\n\t\tlevels,\r\n\t\tthresholds,\r\n\t\trouteRights: normalizeRouteRightsList(input.routeRights, base.routeRights || getDefaultRouteRights($asai)),\r\n\t\tupdatedAt: input.updatedAt,\r\n\t\tupdatedBy: input.updatedBy,\r\n\t};\r\n}\r\n\r\nfunction normalizeRouteRightsList(raw: unknown, fallback: RouteRight[]): RouteRight[] {\r\n\tif (!Array.isArray(raw) || !raw.length) return fallback.map((r) => ({ ...r }));\r\n\tconst parsed: RouteRight[] = [];\r\n\tconst seen = new Set<string>();\r\n\tfor (const item of raw) {\r\n\t\tconst row = normalizeRouteRight(item);\r\n\t\tif (!row || seen.has(row.route)) continue;\r\n\t\tseen.add(row.route);\r\n\t\tparsed.push(row);\r\n\t}\r\n\treturn parsed.length ? parsed : fallback.map((r) => ({ ...r }));\r\n}\r\n\r\nexport function validateUserLevelConfig(cfg: UserLevelConfig): string | null {\r\n\tif (!cfg.levels.length) return 'LEVELS_EMPTY';\r\n\tconst keys = new Set<string>();\r\n\tconst lvs = new Set<number>();\r\n\tfor (const l of cfg.levels) {\r\n\t\tif (keys.has(l.key) || lvs.has(l.lv)) return 'LEVELS_DUPLICATE';\r\n\t\tkeys.add(l.key);\r\n\t\tlvs.add(l.lv);\r\n\t}\r\n\tif (!lvs.has(0)) return 'LEVELS_GUEST_REQUIRED';\r\n\tconst { thresholds } = cfg;\r\n\tif (thresholds.logRead > thresholds.adminRead) return 'THRESHOLD_ORDER';\r\n\tif (thresholds.adminRead > thresholds.adminWrite) return 'THRESHOLD_ORDER';\r\n\tfor (const r of cfg.routeRights || []) {\r\n\t\tif (!r.route) return 'ROUTE_INVALID';\r\n\t\tif (!Number.isFinite(r.minLv) || r.minLv < 0) return 'ROUTE_MINLV_INVALID';\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport function getUserLevelConfigSync($asai: any): UserLevelConfig {\r\n\treturn ($asai._userLevelConfig as UserLevelConfig) || getDefaultUserLevelConfig($asai);\r\n}\r\n\r\nexport async function loadUserLevelConfig($asai: any): Promise<UserLevelConfig> {\r\n\tconst file = configPath($asai);\r\n\ttry {\r\n\t\tconst text = await fs.readFile(file, 'utf8');\r\n\t\tconst parsed = JSON.parse(text) as Partial<UserLevelConfig>;\r\n\t\tconst cfg = normalizeUserLevelConfig(parsed, $asai);\r\n\t\tconst err = validateUserLevelConfig(cfg);\r\n\t\tif (err) {\r\n\t\t\t$asai._userLevelConfig = getDefaultUserLevelConfig($asai);\r\n\t\t} else {\r\n\t\t\t$asai._userLevelConfig = cfg;\r\n\t\t}\r\n\t} catch {\r\n\t\t$asai._userLevelConfig = getDefaultUserLevelConfig($asai);\r\n\t}\r\n\treturn $asai._userLevelConfig;\r\n}\r\n\r\nexport async function saveUserLevelConfig($asai: any, input: Partial<UserLevelConfig>, updatedBy?: string): Promise<UserLevelConfig> {\r\n\tconst cfg = normalizeUserLevelConfig(input, $asai);\r\n\tconst err = validateUserLevelConfig(cfg);\r\n\tif (err) throw new Error(err);\r\n\tcfg.updatedAt = Date.now();\r\n\tcfg.updatedBy = updatedBy;\r\n\tconst file = configPath($asai);\r\n\tawait fs.mkdir(path.dirname(file), { recursive: true });\r\n\tawait fs.writeFile(file, JSON.stringify(cfg, null, 2), 'utf8');\r\n\t$asai._userLevelConfig = cfg;\r\n\treturn cfg;\r\n}\r\n\r\nexport function getPermissionThreshold($asai: any, key: keyof PermissionThresholds): number {\r\n\treturn getUserLevelConfigSync($asai).thresholds[key];\r\n}\r\n\r\nexport function getLvSteps($asai: any): number[] {\r\n\treturn getUserLevelConfigSync($asai).levels.map((l) => l.lv);\r\n}\r\n\r\nexport function getLevelDef($asai: any, lv: number): UserLevelDef | undefined {\r\n\treturn getUserLevelConfigSync($asai).levels.find((l) => l.lv === lv);\r\n}\r\n\r\nexport function isValidUserLv($asai: any, lv: number): boolean {\r\n\treturn getUserLevelConfigSync($asai).levels.some((l) => l.lv === lv);\r\n}\r\n\r\nexport function getLevelLabel($asai: any, lv: number, lang = 'zh-CN'): string {\r\n\tconst def = getLevelDef($asai, lv);\r\n\tif (!def) return `lv${lv}`;\r\n\tif (lang.startsWith('en') && def.nameEn) return def.nameEn;\r\n\treturn def.name;\r\n}\r\n\r\nexport function toPublicUserLevels($asai: any, lang = 'zh-CN') {\r\n\tconst cfg = getUserLevelConfigSync($asai);\r\n\treturn {\r\n\t\tlevels: cfg.levels.map((l) => ({\r\n\t\t\tlv: l.lv,\r\n\t\t\tkey: l.key,\r\n\t\t\tname: getLevelLabel($asai, l.lv, lang),\r\n\t\t\tnameZh: l.name,\r\n\t\t\tnameEn: l.nameEn || l.name,\r\n\t\t})),\r\n\t\tthresholds: { ...cfg.thresholds },\r\n\t\trouteRights: (cfg.routeRights || getDefaultRouteRights($asai)).map((r) => ({ ...r })),\r\n\t};\r\n}\r\n\r\nexport function getRouteRights($asai: any): RouteRight[] {\r\n\treturn getUserLevelConfigSync($asai).routeRights || getDefaultRouteRights($asai);\r\n}\r\n\r\nexport function findRouteRight($asai: any, hash: string): RouteRight | null {\r\n\tconst routeRights = getRouteRights($asai);\r\n\tconst h = String(hash || '').replace(/^#?\\/?/, '').split('?')[0];\r\n\tif (!h || h === '/') {\r\n\t\treturn routeRights.find((r) => r.route === 'testkdd/testindex') || { route: '/', minLv: 0, public: true };\r\n\t}\r\n\tlet best: RouteRight | null = null;\r\n\tlet bestLen = -1;\r\n\tfor (const r of routeRights) {\r\n\t\tif (h === r.route || h.startsWith(r.route + '/') || h.includes(r.route)) {\r\n\t\t\tif (r.route.length > bestLen) {\r\n\t\t\t\tbest = r;\r\n\t\t\t\tbestLen = r.route.length;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn best;\r\n}\r\n\r\nexport function canAccessRoute($asai: any, hash: string, userLv: number): boolean {\r\n\tconst entry = findRouteRight($asai, hash);\r\n\tif (!entry) {\r\n\t\tconst fallback = Number($asai?.hostconfig?.security?.minUserLevel ?? 0);\r\n\t\treturn userLv >= fallback;\r\n\t}\r\n\tif (entry.public || entry.minLv === 0) return true;\r\n\treturn userLv >= entry.minLv;\r\n}\r\n","/** 默认路由权限(与 configrouter + testkdd 目录对齐) */\r\nexport interface RouteRight {\r\n\troute: string;\r\n\ttitle?: string;\r\n\tminLv: number;\r\n\tpublic?: boolean;\r\n}\r\n\r\nexport const DEFAULT_ROUTE_RIGHTS: RouteRight[] = [\r\n\t{ route: 'testkdd', title: 'testkdd', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testindex', title: '功能总览', minLv: 0, public: true },\r\n\t{ route: 'user/login', title: '用户登录', minLv: 0, public: true },\r\n\t{ route: 'user/reg', title: '用户注册', minLv: 0, public: true },\r\n\t{ route: 'user/exit', title: '退出登录', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testerrorcodes', title: '错误码注册表', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testhealth', title: '健康监控', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testauth', title: '认证实验室', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testasdb', title: 'AsDb 总览', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testasdbfile', title: 'AsDb 文件', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testasdbsqlite', title: 'AsDb SQLite', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testmfc', title: 'AES MFC', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testws', title: 'WebSocket', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testchat', title: 'WS 聊天室', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testascss', title: 'AsCss', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testpopbox', title: '弹窗组件', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testaes', title: 'AES 加解密', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testdirectives', title: 'Vue 指令', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testjsonp', title: 'JSONP', minLv: 0, public: true },\r\n\t{ route: 'testkdd/testlv1', title: '权限演示·操作员', minLv: 3 },\r\n\t{ route: 'testkdd/testlv2', title: '权限演示·管理员', minLv: 7 },\r\n\t{ route: 'testkdd/testlv3', title: '权限演示·开发者', minLv: 9 },\r\n\t{ route: 'testkdd/testlog', title: 'IEC62443 日志', minLv: 3 },\r\n\t{ route: 'user/manage', title: '用户管理', minLv: 7 },\r\n];\r\n\r\n/** configrouter rights.lvN → 默认 minLv 映射 */\r\nexport const LEGACY_RIGHTS_MIN_LV: Record<string, number> = {\r\n\tlv0: 0,\r\n\tlv1: 3,\r\n\tlv2: 7,\r\n\tlv3: 9,\r\n};\r\n\r\nexport function normalizeRouteRight(item: unknown): RouteRight | null {\r\n\tif (!item || typeof item !== 'object') return null;\r\n\tconst route = String((item as any).route || '').trim().replace(/^\\/+|\\/+$/g, '');\r\n\tif (!route) return null;\r\n\tconst minLv = Number((item as any).minLv ?? 0);\r\n\treturn {\r\n\t\troute,\r\n\t\ttitle: (item as any).title ? String((item as any).title).trim().slice(0, 128) : undefined,\r\n\t\tminLv: Number.isFinite(minLv) ? Math.max(0, Math.floor(minLv)) : 0,\r\n\t\tpublic: !!(item as any).public || minLv === 0,\r\n\t};\r\n}\r\n\r\nexport function mergeRouteRights(existing: RouteRight[], incoming: RouteRight[]): RouteRight[] {\r\n\tconst map = new Map<string, RouteRight>();\r\n\tfor (const r of existing) map.set(r.route, { ...r });\r\n\tfor (const r of incoming) {\r\n\t\tconst prev = map.get(r.route);\r\n\t\tmap.set(r.route, prev ? { ...prev, ...r, route: r.route } : r);\r\n\t}\r\n\treturn [...map.values()].sort((a, b) => a.route.localeCompare(b.route));\r\n}\r\n\r\nexport function routesFromLegacyRights(rights: Record<string, string[] | undefined>, titles?: Record<string, string>): RouteRight[] {\r\n\tconst out: RouteRight[] = [];\r\n\tif (!rights || typeof rights !== 'object') return out;\r\n\tfor (const [bucket, routes] of Object.entries(rights)) {\r\n\t\tif (!Array.isArray(routes)) continue;\r\n\t\tconst minLv = LEGACY_RIGHTS_MIN_LV[bucket] ?? 0;\r\n\t\tfor (const route of routes) {\r\n\t\t\tconst r = String(route || '').trim();\r\n\t\t\tif (!r) continue;\r\n\t\t\tout.push({\r\n\t\t\t\troute: r,\r\n\t\t\t\ttitle: titles?.[r],\r\n\t\t\t\tminLv,\r\n\t\t\t\tpublic: minLv === 0,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\treturn out;\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["d:\\Web\\Git\\asaicms-v1\\webserver\\src\\plugs\\asaihost-nodejs\\dist\\chunk-HHPGUJ75.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;AACA,IAAI,UAAU,EAAE,oBAAoB;AACpC,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,kBAAkB,IAAI,GAAG,CAAC,CAAC;AACrE,EAAE,OAAO,KAAK,CAAC,SAAS,CAAC;AACzB;AACA,sCAAM,QAAS,EAAE,UAAU,CAAC;AAC5B,SAAS,YAAY,CAAC,IAAI,EAAE;AAC5B,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B,EAAE,OAAO,GAAG,CAAC,KAAK;AAClB,EAAE,OAAO,CAAC,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"D:\\Web\\Git\\asaicms-v1\\webserver\\src\\plugs\\asaihost-nodejs\\dist\\chunk-HHPGUJ75.cjs","sourcesContent":[null]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sysserver/db/data-store.ts"],"sourcesContent":["/**\r\n * 统一数据存储注册表 — file / sqlite / mysql 自由切换,全库数据读写经此入口\r\n */\r\nimport type { DbType } from '../db';\r\nimport type { DbInstance } from './src/common';\r\nimport type Idb from './src/type';\r\n\r\nexport type StoreDomain = 'user' | 'log' | (string & {});\r\n\r\nexport interface StoreSpec {\r\n\tdomain: StoreDomain;\r\n\ttype: DbType;\r\n\topt: Record<string, unknown>;\r\n}\r\n\r\nexport interface ResolvedStoreConfig {\r\n\ttype: DbType;\r\n\topt: Record<string, unknown>;\r\n}\r\n\r\nconst CACHE_KEY = '_dataStoreRegistry';\r\n\r\nfunction cacheMap($asai: any): Map<string, DbInstance> {\r\n\tif (!$asai[CACHE_KEY]) $asai[CACHE_KEY] = new Map<string, DbInstance>();\r\n\treturn $asai[CACHE_KEY];\r\n}\r\n\r\nfunction specCacheKey(spec: StoreSpec): string {\r\n\tconst opt = { ...spec.opt };\r\n\tdelete opt.$asai;\r\n\treturn `${spec.domain}:${spec.type}:${JSON.stringify(opt)}`;\r\n}\r\n\r\n/** 从 asaihost 解析域配置(dataStores 优先,兼容 userStore / logger.store) */\r\nexport function resolveStoreConfig($asai: any, domain: StoreDomain): ResolvedStoreConfig {\r\n\tconst host = $asai?.hostconfig || {};\r\n\tconst stores = host.dataStores || {};\r\n\r\n\tif (stores[domain] && typeof stores[domain] === 'object') {\r\n\t\tconst s = stores[domain] as Record<string, unknown>;\r\n\t\treturn {\r\n\t\t\ttype: (s.type as DbType) || 'file',\r\n\t\t\topt: (s.opt as Record<string, unknown>) || {},\r\n\t\t};\r\n\t}\r\n\r\n\tif (domain === 'user' && host.userStore) {\r\n\t\tconst u = host.userStore;\r\n\t\treturn { type: (u.type as DbType) || 'file', opt: u.opt || {} };\r\n\t}\r\n\r\n\tif (domain === 'log' && host.logger?.store) {\r\n\t\tconst s = host.logger.store;\r\n\t\treturn { type: (s.type as DbType) || 'sqlite', opt: { database: s.database, create: s.create, dir: s.dir, ext: s.ext } };\r\n\t}\r\n\r\n\tif (domain === 'default' || domain === 'app') {\r\n\t\treturn {\r\n\t\t\ttype: 'sqlite',\r\n\t\t\topt: { database: './webdata/webdb/sqlite/asaisqlite.db', create: 1 },\r\n\t\t};\r\n\t}\r\n\r\n\treturn { type: 'file', opt: {} };\r\n}\r\n\r\n/** 归一化各驱动的 opt 默认值 */\r\nexport function normalizeStoreOpt(domain: StoreDomain, type: DbType, opt: Record<string, unknown>): Record<string, unknown> {\r\n\tconst o = { ...opt };\r\n\tif (type === 'file') {\r\n\t\tif (domain === 'user') {\r\n\t\t\tif (!o.dir) o.dir = 'webdata/webdb/users/';\r\n\t\t\tif (!o.ext) o.ext = '.json';\r\n\t\t} else if (domain === 'log') {\r\n\t\t\tif (!o.dir) o.dir = 'webdata/webdb/log/store/';\r\n\t\t\tif (!o.ext) o.ext = '.json';\r\n\t\t}\r\n\t\tif (o.create == null) o.create = 1;\r\n\t} else if (type === 'sqlite') {\r\n\t\tif (domain === 'user' && !o.database) o.database = './webdata/webdb/users/users.db';\r\n\t\tif (domain === 'log' && !o.database) o.database = './webdata/webdb/log/asai-logs.db';\r\n\t\tif ((domain === 'default' || domain === 'app') && !o.database) o.database = './webdata/webdb/sqlite/asaisqlite.db';\r\n\t\tif (o.create == null) o.create = 1;\r\n\t} else if (type === 'mysql') {\r\n\t\tif (!o.host) o.host = '127.0.0.1';\r\n\t\tif (!o.user) o.user = 'root';\r\n\t\tif (!o.password) o.password = '';\r\n\t\tif (!o.database) o.database = domain === 'log' ? 'asai_logs' : 'asai';\r\n\t\tif (o.create == null) o.create = 1;\r\n\t}\r\n\treturn o;\r\n}\r\n\r\n/**\r\n * 获取(并缓存)数据服务实例 — 全库统一入口\r\n * @param domain 预置域 user|log,或 AsDb 自定义域(建议含 database/dir 唯一标识)\r\n */\r\nexport function getDataServer($asai: any, domain: StoreDomain): DbInstance {\r\n\tconst resolved = resolveStoreConfig($asai, domain);\r\n\tconst opt = normalizeStoreOpt(domain, resolved.type, resolved.opt);\r\n\tconst spec: StoreSpec = { domain, type: resolved.type, opt };\r\n\treturn getDataServerBySpec($asai, spec);\r\n}\r\n\r\n/** 按显式 spec 获取实例(AsDb / 业务插件用) */\r\nexport function getDataServerBySpec($asai: any, spec: StoreSpec): DbInstance {\r\n\tconst opt = normalizeStoreOpt(spec.domain, spec.type, { ...spec.opt, $asai });\r\n\tconst full: StoreSpec = { ...spec, opt };\r\n\tconst key = specCacheKey(full);\r\n\tconst cache = cacheMap($asai);\r\n\tif (cache.has(key)) return cache.get(key)!;\r\n\r\n\tconst factory = $asai.dataserver as (t: string, o: Record<string, unknown>) => DbInstance;\r\n\tconst instance = factory(full.type, full.opt);\r\n\tcache.set(key, instance);\r\n\treturn instance;\r\n}\r\n\r\n/** AsDb 路由:按 cfg 生成稳定域键并复用连接 */\r\nexport function getDataServerForAsDb($asai: any, cfg: { type?: string; opt?: Record<string, unknown>; storeKey?: string }): DbInstance {\r\n\tconst type = (cfg?.type || 'sqlite') as DbType;\r\n\tconst opt = cfg?.opt || {};\r\n\tconst domain =\r\n\t\tcfg?.storeKey ||\r\n\t\t`asdb:${type}:${opt.database || opt.dir || 'default'}`;\r\n\treturn getDataServerBySpec($asai, { domain, type, opt });\r\n}\r\n\r\nexport function invalidateDataStore($asai: any, domain?: StoreDomain): void {\r\n\tconst cache = cacheMap($asai);\r\n\tif (!domain) {\r\n\t\tcache.clear();\r\n\t\treturn;\r\n\t}\r\n\tfor (const key of [...cache.keys()]) {\r\n\t\tif (key.startsWith(`${domain}:`)) cache.delete(key);\r\n\t}\r\n}\r\n\r\nexport function isStoreSqlBackend($asai: any, domain: StoreDomain): boolean {\r\n\tconst { type } = resolveStoreConfig($asai, domain);\r\n\treturn type === 'sqlite' || type === 'mysql';\r\n}\r\n\r\nexport function isStoreFileBackend($asai: any, domain: StoreDomain): boolean {\r\n\treturn resolveStoreConfig($asai, domain).type === 'file';\r\n}\r\n\r\n/** 共享 SQL 字面量转义(file 驱动不加引号) */\r\nexport function qStr(val: string | undefined | null, dbType: DbType): string {\r\n\tif (val == null || val === '') return \"''\";\r\n\tconst s = String(val).replace(/'/g, \"''\");\r\n\treturn dbType === 'file' ? s : `'${s}'`;\r\n}\r\n\r\nexport function qNum(val: number | undefined | null): string {\r\n\treturn String(Number(val ?? 0));\r\n}\r\n\r\nexport function asRows(result: unknown): Record<string, unknown>[] {\r\n\tif (!result) return [];\r\n\tif (Array.isArray(result)) return result as Record<string, unknown>[];\r\n\treturn [];\r\n}\r\n\r\nexport async function readJsonBlob(\r\n\tdb: { sqlDb(sql: Idb): Promise<unknown> },\r\n\tfilename: string,\r\n): Promise<Record<string, unknown>[]> {\r\n\tconst res = await db.sqlDb({\r\n\t\ttype: 'select',\r\n\t\ttable: '',\r\n\t\twhere: [['name', '=', filename]],\r\n\t\tfield: ['name', 'content'],\r\n\t});\r\n\tconst rows = asRows(res);\r\n\tif (!rows.length) return [];\r\n\ttry {\r\n\t\tconst parsed = JSON.parse(String(rows[0].content || '[]'));\r\n\t\treturn Array.isArray(parsed) ? parsed : [];\r\n\t} catch {\r\n\t\treturn [];\r\n\t}\r\n}\r\n\r\nexport async function writeJsonBlob(\r\n\tdb: { sqlDb(sql: Idb): Promise<unknown> },\r\n\tfilename: string,\r\n\tdata: Record<string, unknown>[],\r\n): Promise<void> {\r\n\tconst content = JSON.stringify(data, null, 2);\r\n\tconst probe = await db.sqlDb({\r\n\t\ttype: 'select',\r\n\t\ttable: '',\r\n\t\twhere: [['name', '=', filename]],\r\n\t\tfield: ['name', 'content'],\r\n\t});\r\n\tif (!asRows(probe).length) {\r\n\t\tawait db.sqlDb({ type: 'insert', table: '', value: [[filename, content]] });\r\n\t\treturn;\r\n\t}\r\n\tawait db.sqlDb({\r\n\t\ttype: 'update',\r\n\t\ttable: '',\r\n\t\twhere: [['name', '=', filename]],\r\n\t\tset: [['name', content]],\r\n\t});\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sysserver/lib/common/InterventionLog.ts"],"sourcesContent":["/**\r\n * IEC 62443-4-2 干预日志(Intervention Log)— CEF 格式安全事件记录引擎\r\n *\r\n * 依据标准要求实现:\r\n * - 留存 ≥5 年(retentionYears,默认 5),删除前校验留存期,删除动作本身必须被记录\r\n * - 自动记录:仅由服务端业务代码在真实干预发生时调用 logIntervention(),客户端无法直接写入任意日志内容\r\n * - 关联手段:绝对时间戳(rt) + 启动计数(cn1) + 运行计数(cn2) + 进程运行时长(cn3)\r\n * - 篡改证据:哈希链(每条记录携带对前一条记录的 sha256 摘要 cs4),任意历史记录被删改都会导致后续链路校验失败\r\n * - 日志格式:CEF:Version|DeviceVendor|DeviceProduct|DeviceVersion|SignatureID|Name|Severity|Extension\r\n *\r\n * 需要记录的干预类型(对应 IEC 62443-4-2 4-2 章节要求):\r\n * - SAFETY_PARAM 安全参数化/配置参数变更(使用 CRC 等标识手段)\r\n * - SRESW_UPDATE 嵌入式安全相关软件(SRESW)更新/修改\r\n * - SRASW_UPDATE 应用安全相关软件(SRASW)更新/修改\r\n * - HMI_PARAM 可能导致危险的人机界面参数化\r\n * - SAFETY_DISPLAY_SW 与安全相关指令显示相关的软件变更\r\n * - LOG_DELETE 日志文件删除(无论成功与否,均须记录)\r\n * - PROCESS_GUARD 进程守护/优雅退出/频繁崩溃重启(控制系统事件)\r\n *\r\n * 豁免(不应写入本日志):\r\n * - 未改变上述数据的干预(如成功/失败的常规鉴权动作)\r\n * - 触发机器安全状态的动作(如安全光幕开启)\r\n *\r\n * 测试/演示隔离(testPath):\r\n * - testkdd/testlog 等演示、自动化测试触发的干预动作一律写入独立的 'test' 命名空间目录\r\n * (logger.intervention.testPath),与承担 5 年合规留存义务的 'prod' 生产目录完全物理隔离。\r\n * - 两个命名空间各自拥有独立的哈希链状态、独立的删除审计文件,互不污染、互不计数,\r\n * 可反复清空 'test' 目录用于回归测试,不影响生产留存证据的完整性。\r\n */\r\nimport fsp from 'node:fs/promises';\r\nimport path from 'node:path';\r\nimport { createHash } from 'node:crypto';\r\nimport { getNowTime } from '../../../core/time';\r\nimport { mirrorInterventionLog, purgeSqliteEntriesForFile } from './LogStore';\r\nimport { getLogFormatTaxonomy } from './log-formats';\r\n\r\n/** 'prod' = 受5年留存保护的生产干预日志;'test' = 演示/自动化测试专用,完全隔离、不计入合规留存 */\r\nexport type LogNamespace = 'prod' | 'test';\r\n\r\nexport type InterventionType =\r\n\t| 'SAFETY_PARAM'\r\n\t| 'SRESW_UPDATE'\r\n\t| 'SRASW_UPDATE'\r\n\t| 'HMI_PARAM'\r\n\t| 'SAFETY_DISPLAY_SW'\r\n\t| 'LOG_DELETE'\r\n\t| 'PROCESS_GUARD';\r\n\r\nexport type InterventionCategory =\r\n\t| 'AccessControl'\r\n\t| 'RequestErrors'\r\n\t| 'ControlSystemEvents'\r\n\t| 'BackupRestore'\r\n\t| 'ConfigurationChanges'\r\n\t| 'AuditLogEvents';\r\n\r\nexport interface InterventionEvent {\r\n\ttype: InterventionType;\r\n\tname: string;\r\n\tcategory?: InterventionCategory;\r\n\tseverity?: number;\r\n\tus?: string;\r\n\tsrc?: string;\r\n\tdst?: string;\r\n\tproto?: string;\r\n\t/** CRC/哈希/版本号等标识手段,不要求存放二进制文件的真实版本号 */\r\n\tidentification?: string;\r\n\toutcome?: 'Success' | 'Failure';\r\n\tdetail?: string;\r\n\tfname?: string;\r\n}\r\n\r\nconst FILE_NAME_RE = /^intervention-\\d{4}-\\d{2}-\\d{2}\\.cef\\.log$/;\r\n\r\n/**\r\n * 删除动作的审计证据必须独立于被删除的内容文件存放,否则\"删除今天的日志文件\"这一操作\r\n * 会把记录删除行为本身的那条 CEF 记录也一并删掉,违反\"删除日志文件必须被记录\"的强制要求。\r\n * 该文件名不匹配 FILE_NAME_RE,deleteInterventionFile 会天然拒绝对它的删除请求。\r\n */\r\nconst DELETION_AUDIT_FILE = 'intervention-deletion-audit.cef.log';\r\n\r\nconst SIGNATURE_ID: Record<InterventionType, string> = {\r\n\tSAFETY_PARAM: 'ASAI.SAFETY.PARAM.001',\r\n\tSRESW_UPDATE: 'ASAI.SRESW.UPDATE.001',\r\n\tSRASW_UPDATE: 'ASAI.SRASW.UPDATE.001',\r\n\tHMI_PARAM: 'ASAI.HMI.PARAM.001',\r\n\tSAFETY_DISPLAY_SW: 'ASAI.SAFETY.DISPLAY.001',\r\n\tLOG_DELETE: 'ASAI.AUDIT.LOGDELETE.001',\r\n\tPROCESS_GUARD: 'ASAI.PROCESS.GUARD.001',\r\n};\r\n\r\nconst DEFAULT_CATEGORY: Record<InterventionType, InterventionCategory> = {\r\n\tSAFETY_PARAM: 'ConfigurationChanges',\r\n\tSRESW_UPDATE: 'ConfigurationChanges',\r\n\tSRASW_UPDATE: 'ConfigurationChanges',\r\n\tHMI_PARAM: 'ConfigurationChanges',\r\n\tSAFETY_DISPLAY_SW: 'ConfigurationChanges',\r\n\tLOG_DELETE: 'AuditLogEvents',\r\n\tPROCESS_GUARD: 'ControlSystemEvents',\r\n};\r\n\r\nconst DEFAULT_SEVERITY: Record<InterventionType, number> = {\r\n\tSAFETY_PARAM: 8,\r\n\tSRESW_UPDATE: 9,\r\n\tSRASW_UPDATE: 8,\r\n\tHMI_PARAM: 7,\r\n\tSAFETY_DISPLAY_SW: 8,\r\n\tLOG_DELETE: 7,\r\n\tPROCESS_GUARD: 9,\r\n};\r\n\r\n/** 用户提供的 6 类 CEF Severity 分级指引(中英文说明保留原文,便于前端展示) */\r\nconst CATEGORY_GUIDE: Record<InterventionCategory, { min: number; max: number; en: string; zh: string; note: string }> = {\r\n\tAccessControl: { min: 7, max: 8, en: 'Access Control', zh: '访问控制', note: '登录失败、权限提升、未授权访问尝试' },\r\n\tRequestErrors: { min: 2, max: 4, en: 'Request Errors', zh: '请求错误', note: '协议格式错误、无效命令、通信异常' },\r\n\tControlSystemEvents: { min: 8, max: 10, en: 'Control System Events', zh: '控制系统事件', note: '安全功能触发、PLC 模式切换、I/O 强制值' },\r\n\tBackupRestore: { min: 6, max: 7, en: 'Backup and Restore Events', zh: '备份与恢复', note: '正常备份偏低,恢复操作风险很高' },\r\n\tConfigurationChanges: { min: 7, max: 9, en: 'Configuration Changes', zh: '配置更改', note: '安全参数、控制逻辑、网络设置变更' },\r\n\tAuditLogEvents: { min: 7, max: 8, en: 'Audit Log Events', zh: '审计日志事件', note: '日志清除、日志篡改、日志系统故障' },\r\n};\r\n\r\nfunction getInterventionDir($asai: any, ns: LogNamespace = 'prod'): string {\r\n\tconst cfg = $asai?.hostconfig?.logger?.intervention || {};\r\n\tif (ns === 'test') return cfg.testPath || './webdata/webdb/log/intervention-test/';\r\n\treturn cfg.path || './webdata/webdb/log/intervention/';\r\n}\r\n\r\nfunction getRetentionYears($asai: any): number {\r\n\tconst y = $asai?.hostconfig?.logger?.intervention?.retentionYears;\r\n\treturn typeof y === 'number' && y > 0 ? y : 5;\r\n}\r\n\r\nfunction escHeader(v: unknown): string {\r\n\treturn String(v ?? '')\r\n\t\t.replace(/\\\\/g, '\\\\\\\\')\r\n\t\t.replace(/\\|/g, '\\\\|')\r\n\t\t.replace(/[\\r\\n]+/g, ' ');\r\n}\r\n\r\nfunction escExt(v: unknown): string {\r\n\treturn String(v ?? '')\r\n\t\t.replace(/\\\\/g, '\\\\\\\\')\r\n\t\t.replace(/=/g, '\\\\=')\r\n\t\t.replace(/[\\r\\n]+/g, ' ');\r\n}\r\n\r\nexport function sha256Hex(input: string): string {\r\n\treturn createHash('sha256').update(input, 'utf8').digest('hex');\r\n}\r\n\r\nconst CRC_TABLE: Uint32Array = (() => {\r\n\tconst table = new Uint32Array(256);\r\n\tfor (let n = 0; n < 256; n++) {\r\n\t\tlet c = n;\r\n\t\tfor (let k = 0; k < 8; k++) {\r\n\t\t\tc = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\r\n\t\t}\r\n\t\ttable[n] = c >>> 0;\r\n\t}\r\n\treturn table;\r\n})();\r\n\r\n/** CRC32 标识计算 — 用于安全参数/配置变更的\"标识手段\"(不存储真实版本号) */\r\nexport function crc32(input: string): string {\r\n\tlet crc = 0xffffffff;\r\n\tconst buf = Buffer.from(input, 'utf8');\r\n\tfor (let i = 0; i < buf.length; i++) {\r\n\t\tcrc = CRC_TABLE[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\r\n\t}\r\n\tcrc = (crc ^ 0xffffffff) >>> 0;\r\n\treturn crc.toString(16).padStart(8, '0');\r\n}\r\n\r\ninterface ChainState {\r\n\t/** 全局最新哈希 — 仅用于给\"新文件\"生成创建锚点,不直接参与任何单个文件的链式计算 */\r\n\tlastHash: string;\r\n\trunningCounter: number;\r\n\tbootCounter: number;\r\n\t/** 每个文件创建时刻的锚点(该文件第一条记录的 prevHash) */\r\n\tfileAnchors: Record<string, string>;\r\n\t/**\r\n\t * 每个文件\"当前链尾哈希\",按文件独立维护、独立递增。\r\n\t * 关键点:同一目录下可能存在多个文件交替写入(如内容文件与删除审计文件),\r\n\t * 若所有文件共用同一个全局 prevHash,其他文件的穿插写入会打断本文件的链式重放,\r\n\t * 导致 verifyChainForFile 对着一份完全没被篡改的文件也报\"校验失败\"(误报)。\r\n\t * 因此每个文件的下一条记录必须以\"这个文件自己上一条记录的哈希\"为 prevHash,\r\n\t * 不受目录内其他文件并发写入的影响,链条本身仍然对该文件内的任何删改保持完全敏感。\r\n\t */\r\n\tfileTip: Record<string, string>;\r\n}\r\n\r\n/** 状态/写队列按目录(即按命名空间)隔离缓存,确保 prod / test 互不干扰 */\r\nconst cachedStateByDir = new Map<string, ChainState>();\r\nconst bootHandledDirs = new Set<string>();\r\n\r\nfunction statePath($asai: any, ns: LogNamespace): string {\r\n\treturn path.join(getInterventionDir($asai, ns), '.chain-state.json');\r\n}\r\n\r\nasync function loadState($asai: any, ns: LogNamespace): Promise<ChainState> {\r\n\tconst dir = getInterventionDir($asai, ns);\r\n\tconst cached = cachedStateByDir.get(dir);\r\n\tif (cached) return cached;\r\n\tawait fsp.mkdir(dir, { recursive: true });\r\n\tlet state: ChainState = { lastHash: 'GENESIS', runningCounter: 0, bootCounter: 0, fileAnchors: {}, fileTip: {} };\r\n\ttry {\r\n\t\tconst raw = await fsp.readFile(statePath($asai, ns), 'utf8');\r\n\t\tconst loaded = JSON.parse(raw);\r\n\t\tstate = { ...state, ...loaded, fileAnchors: loaded.fileAnchors || {}, fileTip: loaded.fileTip || {} };\r\n\t} catch {\r\n\t\t/* 首次运行,使用初始状态 */\r\n\t}\r\n\tif (!bootHandledDirs.has(dir)) {\r\n\t\tstate.bootCounter += 1;\r\n\t\tbootHandledDirs.add(dir);\r\n\t\tawait fsp.writeFile(statePath($asai, ns), JSON.stringify(state), 'utf8');\r\n\t}\r\n\tcachedStateByDir.set(dir, state);\r\n\treturn state;\r\n}\r\n\r\nasync function saveState($asai: any, ns: LogNamespace, state: ChainState): Promise<void> {\r\n\tawait fsp.writeFile(statePath($asai, ns), JSON.stringify(state), 'utf8');\r\n\tcachedStateByDir.set(getInterventionDir($asai, ns), state);\r\n}\r\n\r\n/** 每个命名空间目录各自串行化写入,避免并发请求下运行计数/哈希链错序 */\r\nconst writeQueueByDir = new Map<string, Promise<void>>();\r\n\r\nasync function doLogIntervention(\r\n\t$asai: any,\r\n\tevent: InterventionEvent,\r\n\tns: LogNamespace,\r\n): Promise<{ line: string; file: string }> {\r\n\tconst state = await loadState($asai, ns);\r\n\tstate.runningCounter += 1;\r\n\r\n\tconst category = event.category || DEFAULT_CATEGORY[event.type];\r\n\tconst severity = event.severity ?? DEFAULT_SEVERITY[event.type] ?? 7;\r\n\tconst sigId = SIGNATURE_ID[event.type];\r\n\tconst nowIso = new Date().toISOString();\r\n\r\n\tconst ext: string[] = [];\r\n\text.push(`rt=${escExt(nowIso)}`);\r\n\tif (event.src) ext.push(`src=${escExt(event.src)}`);\r\n\tif (event.dst) ext.push(`dst=${escExt(event.dst)}`);\r\n\text.push(`proto=${escExt(event.proto || 'HTTPS')}`);\r\n\text.push(`cs1=${escExt(CATEGORY_GUIDE[category].en)}`);\r\n\text.push('cs1Label=EventCategory');\r\n\text.push(`cs2=${escExt(event.type)}`);\r\n\text.push('cs2Label=EventType');\r\n\tif (event.identification) {\r\n\t\text.push(`cs3=${escExt(event.identification)}`);\r\n\t\text.push('cs3Label=Identification');\r\n\t}\r\n\text.push(`cn1=${state.bootCounter}`);\r\n\text.push('cn1Label=BootCounter');\r\n\text.push(`cn2=${state.runningCounter}`);\r\n\text.push('cn2Label=RunningCounter');\r\n\text.push(`cn3=${Math.round(process.uptime() * 1000)}`);\r\n\text.push('cn3Label=UptimeMs');\r\n\tif (event.us) ext.push(`suser=${escExt(event.us)}`);\r\n\text.push(`outcome=${escExt(event.outcome || 'Success')}`);\r\n\tif (event.detail) ext.push(`msg=${escExt(event.detail)}`);\r\n\tif (event.fname) ext.push(`fname=${escExt(event.fname)}`);\r\n\r\n\tconst header = [\r\n\t\t'CEF:0',\r\n\t\tescHeader($asai?.hostconfig?.website?.title || 'AsaiCMS'),\r\n\t\tescHeader('AsaiHost'),\r\n\t\tescHeader($asai?.hostconfig?.website?.ver || '1.0.0.0'),\r\n\t\tescHeader(sigId),\r\n\t\tescHeader(event.name),\r\n\t\tString(severity),\r\n\t].join('|');\r\n\r\n\tconst bodyLine = `${header}|${ext.join(' ')}`;\r\n\tconst dir = getInterventionDir($asai, ns);\r\n\tconst fileName = event.type === 'LOG_DELETE' ? DELETION_AUDIT_FILE : `intervention-${getNowTime(2)}.cef.log`;\r\n\r\n\tif (!state.fileAnchors[fileName]) {\r\n\t\tstate.fileAnchors[fileName] = state.lastHash;\r\n\t}\r\n\tconst prevHashForFile = state.fileTip[fileName] ?? state.fileAnchors[fileName];\r\n\r\n\tconst chainHash = sha256Hex(`${prevHashForFile}|${bodyLine}`);\r\n\tconst fullLine = `${bodyLine} cs4=${chainHash} cs4Label=ChainHash\\n`;\r\n\r\n\tconst filePath = path.join(dir, fileName);\r\n\tawait fsp.mkdir(dir, { recursive: true });\r\n\tawait fsp.appendFile(filePath, fullLine, 'utf8');\r\n\r\n\tstate.fileTip[fileName] = chainHash;\r\n\tstate.lastHash = chainHash;\r\n\tawait saveState($asai, ns, state);\r\n\r\n\tvoid mirrorInterventionLog($asai, {\r\n\t\tns,\r\n\t\tfileName,\r\n\t\tevent,\r\n\t\trawLine: fullLine,\r\n\t\tchainHash,\r\n\t\tprevHash: prevHashForFile,\r\n\t\tcategory,\r\n\t\tseverity,\r\n\t}).catch(() => undefined);\r\n\r\n\t($asai?.$log || console.log)('INTERVENTION', `[${ns}]`, event.type, sigId, event.outcome || 'Success');\r\n\r\n\treturn { line: fullLine, file: fileName };\r\n}\r\n\r\n/**\r\n * 记录一条干预日志(IEC 62443-4-2 强制项)。\r\n * 仅应由服务端业务逻辑在真实干预发生时自动调用,禁止暴露\"任意写入\"接口给客户端。\r\n * ns 默认 'prod'(受5年留存保护的生产日志);演示/自动化测试触发的动作必须显式传入 'test',\r\n * 使其落入完全隔离、不计入合规留存的测试命名空间,避免测试足迹污染生产审计证据。\r\n */\r\nexport function logIntervention(\r\n\t$asai: any,\r\n\tevent: InterventionEvent,\r\n\tns: LogNamespace = 'prod',\r\n): Promise<{ line: string; file: string }> {\r\n\tconst dir = getInterventionDir($asai, ns);\r\n\tconst prevQueue = writeQueueByDir.get(dir) || Promise.resolve();\r\n\tconst task = prevQueue.then(() => doLogIntervention($asai, event, ns));\r\n\twriteQueueByDir.set(\r\n\t\tdir,\r\n\t\ttask.then(\r\n\t\t\t() => undefined,\r\n\t\t\t() => undefined,\r\n\t\t),\r\n\t);\r\n\treturn task;\r\n}\r\n\r\nfunction parseDateFromFileName(fileName: string): Date | null {\r\n\tconst m = fileName.match(/intervention-(\\d{4})-(\\d{2})-(\\d{2})\\.cef\\.log$/);\r\n\tif (!m) return null;\r\n\treturn new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));\r\n}\r\n\r\nexport interface RetentionMeta {\r\n\tfilePath: string;\r\n\tageDays: number;\r\n\tretentionDays: number;\r\n\tretentionYears: number;\r\n\texpired: boolean;\r\n}\r\n\r\nexport function getRetentionMeta($asai: any, fileName: string, ns: LogNamespace = 'prod'): RetentionMeta {\r\n\tconst dir = getInterventionDir($asai, ns);\r\n\tconst filePath = path.join(dir, fileName);\r\n\tconst fileDate = parseDateFromFileName(fileName) || new Date(0);\r\n\tconst ageDays = Math.floor((Date.now() - fileDate.getTime()) / 86400000);\r\n\tconst retentionYears = getRetentionYears($asai);\r\n\tconst retentionDays = Math.round(retentionYears * 365.25);\r\n\treturn { filePath, ageDays, retentionDays, retentionYears, expired: ageDays >= retentionDays };\r\n}\r\n\r\nexport async function listInterventionFiles($asai: any, ns: LogNamespace = 'prod') {\r\n\tconst dir = getInterventionDir($asai, ns);\r\n\tawait fsp.mkdir(dir, { recursive: true });\r\n\tconst entries = await fsp.readdir(dir, { withFileTypes: true });\r\n\tconst files = entries.filter((e) => e.isFile() && (FILE_NAME_RE.test(e.name) || e.name === DELETION_AUDIT_FILE));\r\n\tconst list = await Promise.all(\r\n\t\tfiles.map(async (e) => {\r\n\t\t\tconst isAuditFile = e.name === DELETION_AUDIT_FILE;\r\n\t\t\tconst filePath = path.join(dir, e.name);\r\n\t\t\tconst stat = await fsp.stat(filePath);\r\n\t\t\tconst meta = isAuditFile\r\n\t\t\t\t? { ageDays: 0, retentionDays: 0, retentionYears: getRetentionYears($asai), expired: false }\r\n\t\t\t\t: getRetentionMeta($asai, e.name, ns);\r\n\t\t\tlet entryCount = 0;\r\n\t\t\ttry {\r\n\t\t\t\tconst content = await fsp.readFile(filePath, 'utf8');\r\n\t\t\t\tentryCount = content.split('\\n').filter((l) => l.trim().startsWith('CEF:')).length;\r\n\t\t\t} catch {\r\n\t\t\t\t/* 忽略读取失败,entryCount 保持 0 */\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tname: e.name,\r\n\t\t\t\tns,\r\n\t\t\t\tsize: stat.size,\r\n\t\t\t\tmtime: stat.mtime.toISOString(),\r\n\t\t\t\tentryCount,\r\n\t\t\t\tageDays: meta.ageDays,\r\n\t\t\t\tretentionDays: meta.retentionDays,\r\n\t\t\t\tretentionYears: meta.retentionYears,\r\n\t\t\t\texpired: meta.expired,\r\n\t\t\t\tprotectedAudit: isAuditFile,\r\n\t\t\t};\r\n\t\t}),\r\n\t);\r\n\tlist.sort((a, b) => (a.name < b.name ? 1 : -1));\r\n\treturn list;\r\n}\r\n\r\n/** 手动扫描 CEF 头部(Version|Vendor|Product|DeviceVersion|SignatureID|Name|Severity),避免转义竖线干扰扩展字段解析 */\r\nfunction splitCefHeader(line: string): { header: string[]; extensionStr: string } | null {\r\n\tif (!line.startsWith('CEF:')) return null;\r\n\tconst header: string[] = [];\r\n\tlet cur = '';\r\n\tlet i = 4;\r\n\tlet count = 0;\r\n\twhile (i < line.length && count < 7) {\r\n\t\tconst ch = line[i];\r\n\t\tif (ch === '\\\\' && i + 1 < line.length) {\r\n\t\t\tcur += line[i + 1];\r\n\t\t\ti += 2;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (ch === '|') {\r\n\t\t\theader.push(cur);\r\n\t\t\tcur = '';\r\n\t\t\tcount++;\r\n\t\t\ti++;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tcur += ch;\r\n\t\ti++;\r\n\t}\r\n\tif (count < 7) return null;\r\n\treturn { header, extensionStr: line.slice(i) };\r\n}\r\n\r\nfunction parseExtension(extStr: string): Record<string, string> {\r\n\tconst extension: Record<string, string> = {};\r\n\tconst re = /([A-Za-z0-9]+)=((?:\\\\.|[^\\\\])*?)(?=\\s+[A-Za-z0-9]+=|$)/g;\r\n\tlet m: RegExpExecArray | null;\r\n\twhile ((m = re.exec(extStr))) {\r\n\t\textension[m[1]] = m[2].replace(/\\\\=/g, '=').replace(/\\\\\\\\/g, '\\\\').trim();\r\n\t}\r\n\treturn extension;\r\n}\r\n\r\nexport interface ParsedCefLine {\r\n\tlineNo: number;\r\n\tvalid: boolean;\r\n\traw: string;\r\n\tcefVersion?: string;\r\n\tvendor?: string;\r\n\tproduct?: string;\r\n\tversion?: string;\r\n\tsignatureId?: string;\r\n\tname?: string;\r\n\tseverity?: number;\r\n\tcategory?: string;\r\n\teventType?: string;\r\n\tidentification?: string;\r\n\tbootCounter?: string;\r\n\trunningCounter?: string;\r\n\tuptimeMs?: string;\r\n\toperator?: string;\r\n\toutcome?: string;\r\n\tdetail?: string;\r\n\ttimestamp?: string;\r\n\tchainHash?: string;\r\n}\r\n\r\nexport function parseCefLine(line: string, lineNo = 0): ParsedCefLine {\r\n\tconst split = splitCefHeader(line);\r\n\tif (!split) return { lineNo, valid: false, raw: line };\r\n\tconst [cefVersion, vendor, product, version, signatureId, name, severity] = split.header;\r\n\tconst ext = parseExtension(split.extensionStr);\r\n\treturn {\r\n\t\tlineNo,\r\n\t\tvalid: true,\r\n\t\traw: line,\r\n\t\tcefVersion,\r\n\t\tvendor,\r\n\t\tproduct,\r\n\t\tversion,\r\n\t\tsignatureId,\r\n\t\tname,\r\n\t\tseverity: Number(severity),\r\n\t\tcategory: ext.cs1,\r\n\t\teventType: ext.cs2,\r\n\t\tidentification: ext.cs3,\r\n\t\tbootCounter: ext.cn1,\r\n\t\trunningCounter: ext.cn2,\r\n\t\tuptimeMs: ext.cn3,\r\n\t\toperator: ext.suser,\r\n\t\toutcome: ext.outcome,\r\n\t\tdetail: ext.msg,\r\n\t\ttimestamp: ext.rt,\r\n\t\tchainHash: ext.cs4,\r\n\t};\r\n}\r\n\r\nexport interface ChainVerifyResult {\r\n\tok: boolean;\r\n\tresults: { line: number; ok: boolean; expected?: string; found?: string }[];\r\n}\r\n\r\n/** 依据文件锚点哈希重放整条链,任意历史记录被删改都会导致自该行起全部校验失败 */\r\nexport async function verifyChainForFile(\r\n\t$asai: any,\r\n\tfileName: string,\r\n\tlines: string[],\r\n\tns: LogNamespace = 'prod',\r\n): Promise<ChainVerifyResult> {\r\n\tconst state = await loadState($asai, ns);\r\n\tlet prevHash = state.fileAnchors?.[fileName] ?? 'GENESIS';\r\n\tconst results: ChainVerifyResult['results'] = [];\r\n\tlet lineNo = 0;\r\n\tfor (const raw of lines) {\r\n\t\tlineNo++;\r\n\t\tif (!raw.trim()) continue;\r\n\t\tconst m = raw.match(/\\bcs4=([0-9a-f]{64})\\b/);\r\n\t\tconst found = m ? m[1] : '';\r\n\t\tconst bodyLine = raw.replace(/\\s+cs4=[0-9a-f]{64}\\s+cs4Label=ChainHash\\s*$/, '');\r\n\t\tconst expected = sha256Hex(`${prevHash}|${bodyLine}`);\r\n\t\tconst ok = !!found && found === expected;\r\n\t\tresults.push({ line: lineNo, ok, expected, found });\r\n\t\tprevHash = found || expected;\r\n\t}\r\n\treturn { ok: results.every((r) => r.ok), results };\r\n}\r\n\r\nexport interface InterventionFileContent {\r\n\tfileName: string;\r\n\traw: string;\r\n\tparsed: ParsedCefLine[];\r\n\tchain: ChainVerifyResult;\r\n\tmeta: RetentionMeta;\r\n}\r\n\r\nexport async function readInterventionFile(\r\n\t$asai: any,\r\n\tfileName: string,\r\n\tns: LogNamespace = 'prod',\r\n): Promise<InterventionFileContent> {\r\n\tif (!FILE_NAME_RE.test(fileName) && fileName !== DELETION_AUDIT_FILE) throw new Error('Invalid file name');\r\n\tconst dir = getInterventionDir($asai, ns);\r\n\tconst filePath = path.join(dir, fileName);\r\n\tconst raw = await fsp.readFile(filePath, 'utf8');\r\n\tconst lines = raw.split('\\n').filter((l) => l.trim().length > 0);\r\n\tconst parsed = lines.map((l, idx) => parseCefLine(l, idx + 1));\r\n\tconst chain = await verifyChainForFile($asai, fileName, lines, ns);\r\n\tif (!chain.ok) {\r\n\t\tconst { maybeAlertChainBreak } = await import('../../../infra/log-alert');\r\n\t\tmaybeAlertChainBreak($asai, fileName, false, ns);\r\n\t}\r\n\tconst meta =\r\n\t\tfileName === DELETION_AUDIT_FILE\r\n\t\t\t? { filePath, ageDays: 0, retentionDays: 0, retentionYears: getRetentionYears($asai), expired: false }\r\n\t\t\t: getRetentionMeta($asai, fileName, ns);\r\n\treturn { fileName, raw, parsed, chain, meta };\r\n}\r\n\r\nexport interface DeleteOptions {\r\n\tus?: string;\r\n\tlv?: number;\r\n\treason?: string;\r\n\tforce?: boolean;\r\n}\r\n\r\n/**\r\n * 删除干预日志文件 — 留存期内(默认5年)仅允许 lv≥3 且提供 reason + force 的强制覆盖;\r\n * 无论是否放行,删除动作本身都会作为 LOG_DELETE 事件被记录(标准强制要求项)。\r\n */\r\nexport async function deleteInterventionFile(\r\n\t$asai: any,\r\n\tfileName: string,\r\n\topt: DeleteOptions = {},\r\n\tns: LogNamespace = 'prod',\r\n) {\r\n\tif (!FILE_NAME_RE.test(fileName)) throw new Error('Invalid file name');\r\n\tconst meta = getRetentionMeta($asai, fileName, ns);\r\n\tconst lv = opt.lv ?? -1;\r\n\r\n\tlet allowed = false;\r\n\tlet reasonCode = '';\r\n\tif (meta.expired) {\r\n\t\tallowed = lv >= 2;\r\n\t\treasonCode = allowed ? '' : 'INSUFFICIENT_LEVEL';\r\n\t} else if (!opt.force) {\r\n\t\treasonCode = 'RETENTION_NOT_EXPIRED';\r\n\t} else if (lv < 3) {\r\n\t\treasonCode = 'INSUFFICIENT_LEVEL';\r\n\t} else if (!opt.reason) {\r\n\t\treasonCode = 'REASON_REQUIRED';\r\n\t} else {\r\n\t\tallowed = true;\r\n\t}\r\n\r\n\tawait logIntervention(\r\n\t\t$asai,\r\n\t\t{\r\n\t\t\ttype: 'LOG_DELETE',\r\n\t\t\tname: `Delete intervention log file: ${fileName}`,\r\n\t\t\tus: opt.us || 'system',\r\n\t\t\toutcome: allowed ? 'Success' : 'Failure',\r\n\t\t\tidentification: fileName,\r\n\t\t\tseverity: allowed ? 7 : 8,\r\n\t\t\tdetail: `${allowed ? 'deleted' : 'denied'} reason=\"${opt.reason || ''}\" ageDays=${meta.ageDays} retentionDays=${meta.retentionDays} force=${!!opt.force} code=${reasonCode}`,\r\n\t\t},\r\n\t\tns,\r\n\t);\r\n\r\n\tif (!allowed) {\r\n\t\tconst err: any = new Error(reasonCode || 'DELETE_DENIED');\r\n\t\tthrow err;\r\n\t}\r\n\tawait fsp.unlink(meta.filePath);\r\n\tvoid purgeSqliteEntriesForFile($asai, fileName, ns).catch(() => undefined);\r\n\t/**\r\n\t * 物理内容已被删除(该删除动作已通过上面的 LOG_DELETE 写入不可删的审计文件),\r\n\t * 若同名文件之后被重新创建(如当日再次触发同类型事件),必须视为一份全新文件从头计链,\r\n\t * 而不是继续沿用已被删除内容的旧链尾/旧锚点——否则新文件的第一行会因为 prevHash\r\n\t * 对不上\"重新计算出的锚点\"而被误判为篡改。\r\n\t */\r\n\tconst state = await loadState($asai, ns);\r\n\tdelete state.fileAnchors[fileName];\r\n\tdelete state.fileTip[fileName];\r\n\tawait saveState($asai, ns, state);\r\n\treturn { deleted: true, fileName };\r\n}\r\n\r\nexport function getInterventionTaxonomy($asai?: any) {\r\n\treturn {\r\n\t\tformats: getLogFormatTaxonomy($asai).formats,\r\n\t\ttypes: (Object.keys(SIGNATURE_ID) as InterventionType[]).map((type) => ({\r\n\t\t\ttype,\r\n\t\t\tsignatureId: SIGNATURE_ID[type],\r\n\t\t\tcategory: DEFAULT_CATEGORY[type],\r\n\t\t\tdefaultSeverity: DEFAULT_SEVERITY[type],\r\n\t\t})),\r\n\t\tcategories: (Object.keys(CATEGORY_GUIDE) as InterventionCategory[]).map((key) => ({\r\n\t\t\tkey,\r\n\t\t\t...CATEGORY_GUIDE[key],\r\n\t\t})),\r\n\t\tretentionYears: 5,\r\n\t\texceptions: [\r\n\t\t\t'未改变安全参数/配置/软件/HMI 危险参数/安全指令显示软件的干预无需记录(如常规鉴权成功/失败)',\r\n\t\t\t'触发机器安全状态的动作(如安全光幕开启)不在记录范围内',\r\n\t\t\t'无需在日志中存储 SRASW/SRESW 二进制文件的真实版本号,使用 CRC/哈希等标识手段即可',\r\n\t\t],\r\n\t};\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["d:\\Web\\Git\\asaicms-v1\\webserver\\src\\plugs\\asaihost-nodejs\\dist\\chunk-QWVR2HNT.cjs"],"names":[],"mappings":"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","file":"D:\\Web\\Git\\asaicms-v1\\webserver\\src\\plugs\\asaihost-nodejs\\dist\\chunk-QWVR2HNT.cjs","sourcesContent":[null]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["d:\\Web\\Git\\asaicms-v1\\webserver\\src\\plugs\\asaihost-nodejs\\dist\\chunk-X7VHW2TD.cjs"],"names":[],"mappings":"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A;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"D:\\Web\\Git\\asaicms-v1\\webserver\\src\\plugs\\asaihost-nodejs\\dist\\chunk-X7VHW2TD.cjs","sourcesContent":[null]}
@@ -1,21 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
-
5
-
6
-
7
- var _chunkNLBFIRDBcjs = require('./chunk-NLBFIRDB.cjs');
8
- require('./chunk-G4WVDUBH.cjs');
9
- require('./chunk-VLMM735Q.cjs');
10
- require('./chunk-W7DVKGX5.cjs');
11
- require('./chunk-O6LVLSNB.cjs');
12
- require('./chunk-HHPGUJ75.cjs');
13
- require('./chunk-SMVZ3ZDJ.cjs');
14
-
15
-
16
-
17
-
18
-
19
-
20
- exports.logAccountPurge = _chunkNLBFIRDBcjs.logAccountPurge; exports.logProcessGuardEvent = _chunkNLBFIRDBcjs.logProcessGuardEvent; exports.logSecurityConfigIntervention = _chunkNLBFIRDBcjs.logSecurityConfigIntervention; exports.logSessionTerminate = _chunkNLBFIRDBcjs.logSessionTerminate; exports.logUserRbacChange = _chunkNLBFIRDBcjs.logUserRbacChange;
21
- //# sourceMappingURL=intervention-hooks-LE6X4C6N.cjs.map
@@ -1,31 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
- var _chunkW7DVKGX5cjs = require('./chunk-W7DVKGX5.cjs');
15
- require('./chunk-O6LVLSNB.cjs');
16
- require('./chunk-SMVZ3ZDJ.cjs');
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
- exports.W3C_ACCESS_FIELDS = _chunkW7DVKGX5cjs.W3C_ACCESS_FIELDS; exports.W3C_SERVER_FIELDS = _chunkW7DVKGX5cjs.W3C_SERVER_FIELDS; exports.buildAccessEntry = _chunkW7DVKGX5cjs.buildAccessEntry; exports.extractW3CFields = _chunkW7DVKGX5cjs.extractW3CFields; exports.formatCLF = _chunkW7DVKGX5cjs.formatCLF; exports.formatClfDate = _chunkW7DVKGX5cjs.formatClfDate; exports.formatW3CAccessRecord = _chunkW7DVKGX5cjs.formatW3CAccessRecord; exports.formatW3CHeader = _chunkW7DVKGX5cjs.formatW3CHeader; exports.formatW3CServerRecord = _chunkW7DVKGX5cjs.formatW3CServerRecord; exports.getLogFormatTaxonomy = _chunkW7DVKGX5cjs.getLogFormatTaxonomy; exports.parseCLF = _chunkW7DVKGX5cjs.parseCLF; exports.parseW3CRecord = _chunkW7DVKGX5cjs.parseW3CRecord;
31
- //# sourceMappingURL=log-formats-FKFMQKNO.cjs.map
@@ -1,20 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
-
5
-
6
-
7
-
8
- var _chunkKOFCBB3Ncjs = require('./chunk-KOFCBB3N.cjs');
9
- require('./chunk-X7VHW2TD.cjs');
10
- require('./chunk-HHPGUJ75.cjs');
11
- require('./chunk-SMVZ3ZDJ.cjs');
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
- exports.hashPassword = _chunkKOFCBB3Ncjs.hashPassword; exports.nextPassHistory = _chunkKOFCBB3Ncjs.nextPassHistory; exports.validatePasswordChange = _chunkKOFCBB3Ncjs.validatePasswordChange; exports.validatePasswordPolicy = _chunkKOFCBB3Ncjs.validatePasswordPolicy; exports.verifyHostPassword = _chunkKOFCBB3Ncjs.verifyHostPassword; exports.verifyPassword = _chunkKOFCBB3Ncjs.verifyPassword;
20
- //# sourceMappingURL=password-NZ5EGDWG.cjs.map
@@ -1,12 +0,0 @@
1
- import {
2
- createUserStore,
3
- ensureBootstrapAdmin
4
- } from "./chunk-E7V3EBDB.es.js";
5
- import "./chunk-EOGZPRML.es.js";
6
- import "./chunk-KUZQ36IJ.es.js";
7
- import "./chunk-6U2I5EON.es.js";
8
- export {
9
- createUserStore,
10
- ensureBootstrapAdmin
11
- };
12
- //# sourceMappingURL=user-store-J7LWEXSW.es.js.map
@@ -1,12 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
- var _chunkQWVR2HNTcjs = require('./chunk-QWVR2HNT.cjs');
5
- require('./chunk-X7VHW2TD.cjs');
6
- require('./chunk-HHPGUJ75.cjs');
7
- require('./chunk-SMVZ3ZDJ.cjs');
8
-
9
-
10
-
11
- exports.createUserStore = _chunkQWVR2HNTcjs.createUserStore; exports.ensureBootstrapAdmin = _chunkQWVR2HNTcjs.ensureBootstrapAdmin;
12
- //# sourceMappingURL=user-store-SX4N6PQ4.cjs.map