sa2kit 3.3.0 → 3.6.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 (143) hide show
  1. package/dist/{chunk-LGVPFYPR.mjs → chunk-4H3SGG3T.mjs} +27 -3
  2. package/dist/chunk-4H3SGG3T.mjs.map +1 -0
  3. package/dist/{chunk-KVYHCGRY.js → chunk-7Z3XR2Y4.js} +552 -263
  4. package/dist/chunk-7Z3XR2Y4.js.map +1 -0
  5. package/dist/{chunk-5H2FICSO.js → chunk-LBMUIWJR.js} +27 -3
  6. package/dist/chunk-LBMUIWJR.js.map +1 -0
  7. package/dist/chunk-XPY45Y75.js +1143 -0
  8. package/dist/chunk-XPY45Y75.js.map +1 -0
  9. package/dist/{chunk-YIRPPMCN.mjs → chunk-XSTMLLJV.mjs} +474 -198
  10. package/dist/chunk-XSTMLLJV.mjs.map +1 -0
  11. package/dist/chunk-ZJLS5JU5.mjs +1090 -0
  12. package/dist/chunk-ZJLS5JU5.mjs.map +1 -0
  13. package/dist/common/aiApi/client/index.d.mts +71 -0
  14. package/dist/common/aiApi/client/index.d.ts +71 -0
  15. package/dist/common/aiApi/client/index.js +165 -0
  16. package/dist/common/aiApi/client/index.js.map +1 -0
  17. package/dist/common/aiApi/client/index.mjs +151 -0
  18. package/dist/common/aiApi/client/index.mjs.map +1 -0
  19. package/dist/common/aiApi/index.d.mts +184 -0
  20. package/dist/common/aiApi/index.d.ts +184 -0
  21. package/dist/common/aiApi/index.js +217 -0
  22. package/dist/common/aiApi/index.mjs +4 -0
  23. package/dist/common/aiApi/server/index.d.mts +3 -0
  24. package/dist/common/aiApi/server/index.d.ts +3 -0
  25. package/dist/common/aiApi/server/index.js +217 -0
  26. package/dist/common/aiApi/server/index.mjs +4 -0
  27. package/dist/common/auth/server/index.js +8 -8
  28. package/dist/common/auth/server/index.mjs +2 -2
  29. package/dist/common/components/index.js +176 -177
  30. package/dist/common/components/index.mjs +1 -2
  31. package/dist/common/config/bootstrap/index.d.mts +24 -0
  32. package/dist/common/config/bootstrap/index.d.ts +24 -0
  33. package/dist/common/config/bootstrap/index.js +15 -15
  34. package/dist/common/config/bootstrap/index.mjs +1 -1
  35. package/dist/common/config/server/index.js +14 -14
  36. package/dist/common/config/server/index.mjs +1 -1
  37. package/dist/common/index.js +2 -3
  38. package/dist/common/index.mjs +1 -2
  39. package/dist/index.d.mts +314 -154
  40. package/dist/index.d.ts +314 -154
  41. package/dist/index.js +1055 -369
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +1005 -360
  44. package/dist/index.mjs.map +1 -1
  45. package/dist/types-CiqMQ-uu.d.mts +166 -0
  46. package/dist/types-CiqMQ-uu.d.ts +166 -0
  47. package/package.json +15 -50
  48. package/dist/chunk-3R6JHA6D.js +0 -120
  49. package/dist/chunk-3R6JHA6D.js.map +0 -1
  50. package/dist/chunk-4PJM4752.js +0 -4
  51. package/dist/chunk-4PJM4752.js.map +0 -1
  52. package/dist/chunk-5H2FICSO.js.map +0 -1
  53. package/dist/chunk-7PMT4L4I.js +0 -324
  54. package/dist/chunk-7PMT4L4I.js.map +0 -1
  55. package/dist/chunk-FY2X3LYR.mjs +0 -3
  56. package/dist/chunk-FY2X3LYR.mjs.map +0 -1
  57. package/dist/chunk-GS4SAW25.mjs +0 -116
  58. package/dist/chunk-GS4SAW25.mjs.map +0 -1
  59. package/dist/chunk-HL4H2HF6.js +0 -279
  60. package/dist/chunk-HL4H2HF6.js.map +0 -1
  61. package/dist/chunk-IJIQUMAK.mjs +0 -272
  62. package/dist/chunk-IJIQUMAK.mjs.map +0 -1
  63. package/dist/chunk-KVYHCGRY.js.map +0 -1
  64. package/dist/chunk-LGVPFYPR.mjs.map +0 -1
  65. package/dist/chunk-MMDSZIXD.mjs +0 -286
  66. package/dist/chunk-MMDSZIXD.mjs.map +0 -1
  67. package/dist/chunk-N2O3OX5Y.mjs +0 -243
  68. package/dist/chunk-N2O3OX5Y.mjs.map +0 -1
  69. package/dist/chunk-RRQ2X26Z.js +0 -106
  70. package/dist/chunk-RRQ2X26Z.js.map +0 -1
  71. package/dist/chunk-RVNQI6BI.js +0 -249
  72. package/dist/chunk-RVNQI6BI.js.map +0 -1
  73. package/dist/chunk-UJUWDF7M.mjs +0 -336
  74. package/dist/chunk-UJUWDF7M.mjs.map +0 -1
  75. package/dist/chunk-VCKXK6V5.js +0 -345
  76. package/dist/chunk-VCKXK6V5.js.map +0 -1
  77. package/dist/chunk-VIEXDTNF.mjs +0 -100
  78. package/dist/chunk-VIEXDTNF.mjs.map +0 -1
  79. package/dist/chunk-YIRPPMCN.mjs.map +0 -1
  80. package/dist/common/ai/llm/core/index.d.mts +0 -70
  81. package/dist/common/ai/llm/core/index.d.ts +0 -70
  82. package/dist/common/ai/llm/core/index.js +0 -54
  83. package/dist/common/ai/llm/core/index.mjs +0 -5
  84. package/dist/common/ai/llm/electron/index.d.mts +0 -6
  85. package/dist/common/ai/llm/electron/index.d.ts +0 -6
  86. package/dist/common/ai/llm/electron/index.js +0 -67
  87. package/dist/common/ai/llm/electron/index.mjs +0 -10
  88. package/dist/common/ai/llm/index.d.mts +0 -3
  89. package/dist/common/ai/llm/index.d.ts +0 -3
  90. package/dist/common/ai/llm/index.js +0 -54
  91. package/dist/common/ai/llm/index.js.map +0 -1
  92. package/dist/common/ai/llm/index.mjs +0 -5
  93. package/dist/common/ai/llm/index.mjs.map +0 -1
  94. package/dist/common/ai/llm/miniapp/index.d.mts +0 -6
  95. package/dist/common/ai/llm/miniapp/index.d.ts +0 -6
  96. package/dist/common/ai/llm/miniapp/index.js +0 -59
  97. package/dist/common/ai/llm/miniapp/index.js.map +0 -1
  98. package/dist/common/ai/llm/miniapp/index.mjs +0 -6
  99. package/dist/common/ai/llm/miniapp/index.mjs.map +0 -1
  100. package/dist/common/ai/llm/rn/index.d.mts +0 -6
  101. package/dist/common/ai/llm/rn/index.d.ts +0 -6
  102. package/dist/common/ai/llm/rn/index.js +0 -59
  103. package/dist/common/ai/llm/rn/index.js.map +0 -1
  104. package/dist/common/ai/llm/rn/index.mjs +0 -6
  105. package/dist/common/ai/llm/rn/index.mjs.map +0 -1
  106. package/dist/common/ai/llm/ui/electron/index.d.mts +0 -5
  107. package/dist/common/ai/llm/ui/electron/index.d.ts +0 -5
  108. package/dist/common/ai/llm/ui/electron/index.js +0 -22
  109. package/dist/common/ai/llm/ui/electron/index.js.map +0 -1
  110. package/dist/common/ai/llm/ui/electron/index.mjs +0 -9
  111. package/dist/common/ai/llm/ui/electron/index.mjs.map +0 -1
  112. package/dist/common/ai/llm/ui/miniapp/index.d.mts +0 -9
  113. package/dist/common/ai/llm/ui/miniapp/index.d.ts +0 -9
  114. package/dist/common/ai/llm/ui/miniapp/index.js +0 -14
  115. package/dist/common/ai/llm/ui/miniapp/index.js.map +0 -1
  116. package/dist/common/ai/llm/ui/miniapp/index.mjs +0 -5
  117. package/dist/common/ai/llm/ui/miniapp/index.mjs.map +0 -1
  118. package/dist/common/ai/llm/ui/rn/index.d.mts +0 -9
  119. package/dist/common/ai/llm/ui/rn/index.d.ts +0 -9
  120. package/dist/common/ai/llm/ui/rn/index.js +0 -14
  121. package/dist/common/ai/llm/ui/rn/index.js.map +0 -1
  122. package/dist/common/ai/llm/ui/rn/index.mjs +0 -5
  123. package/dist/common/ai/llm/ui/rn/index.mjs.map +0 -1
  124. package/dist/common/ai/llm/ui/web/index.d.mts +0 -15
  125. package/dist/common/ai/llm/ui/web/index.d.ts +0 -15
  126. package/dist/common/ai/llm/ui/web/index.js +0 -21
  127. package/dist/common/ai/llm/ui/web/index.js.map +0 -1
  128. package/dist/common/ai/llm/ui/web/index.mjs +0 -8
  129. package/dist/common/ai/llm/ui/web/index.mjs.map +0 -1
  130. package/dist/common/ai/llm/web/index.d.mts +0 -6
  131. package/dist/common/ai/llm/web/index.d.ts +0 -6
  132. package/dist/common/ai/llm/web/index.js +0 -66
  133. package/dist/common/ai/llm/web/index.js.map +0 -1
  134. package/dist/common/ai/llm/web/index.mjs +0 -9
  135. package/dist/common/ai/llm/web/index.mjs.map +0 -1
  136. package/dist/types-B2rs_jq1.d.mts +0 -38
  137. package/dist/types-DgACCUpT.d.ts +0 -122
  138. package/dist/types-DwS2Eg0q.d.ts +0 -38
  139. package/dist/types-LU_BGSzk.d.mts +0 -122
  140. /package/dist/common/{ai/llm/core → aiApi}/index.js.map +0 -0
  141. /package/dist/common/{ai/llm/core → aiApi}/index.mjs.map +0 -0
  142. /package/dist/common/{ai/llm/electron → aiApi/server}/index.js.map +0 -0
  143. /package/dist/common/{ai/llm/electron → aiApi/server}/index.mjs.map +0 -0
@@ -49,6 +49,29 @@ var aliyunCdnSchema = z.object({
49
49
  accessKeyId: z.string().optional(),
50
50
  accessKeySecret: z.string().optional()
51
51
  });
52
+ var huarongdaoLevelSchema = z.object({
53
+ id: z.coerce.number(),
54
+ label: z.string(),
55
+ rows: z.coerce.number(),
56
+ cols: z.coerce.number(),
57
+ shuffleSteps: z.coerce.number(),
58
+ sourceImageUrl: z.string().optional().default("")
59
+ });
60
+ var businessSchema = z.object({
61
+ /** 首页 Hero / 导航 / 时间线等(profile-v1 Home 模块) */
62
+ homePage: z.record(z.string(), z.unknown()).optional(),
63
+ huarongdao: z.object({
64
+ theme: z.enum(["miku", "sakura"]).optional(),
65
+ levels: z.array(huarongdaoLevelSchema).optional(),
66
+ bgmTracks: z.array(z.string()).optional()
67
+ }).optional(),
68
+ qiniu: z.object({
69
+ accessKey: z.string().optional(),
70
+ secretKey: z.string().optional(),
71
+ bucketName: z.string().optional(),
72
+ domain: z.string().optional()
73
+ }).optional()
74
+ }).optional();
52
75
  var appConfigSchema = z.object({
53
76
  app: z.object({
54
77
  name: z.string().min(1),
@@ -59,7 +82,8 @@ var appConfigSchema = z.object({
59
82
  storage: z.object({
60
83
  aliyunOss: aliyunOssSchema.optional(),
61
84
  aliyunCdn: aliyunCdnSchema.optional()
62
- }).optional()
85
+ }).optional(),
86
+ business: businessSchema
63
87
  });
64
88
  var FILE_BY_ENV = {
65
89
  local: "config/app.config.local.yaml",
@@ -397,5 +421,5 @@ function resolveAuthConfigFromAppConfig(config, overrides) {
397
421
  }
398
422
 
399
423
  export { SOPS_ENCRYPTED_PATH, appConfigSchema, applyAppConfigToProcessEnv, checkAppConfigFromFile, createAliyunPnvsSmsProvider, createConsoleSmsProvider, diagnoseAppConfig, getAppConfig, isNextBuildPhaseWithoutRuntimeEnv, loadAppConfig, logConfigDoctorReport, readAppConfigFile, resetAppConfigCache, resolveAppConfigEnv, resolveAppConfigPath, resolveAuthConfigFromAppConfig };
400
- //# sourceMappingURL=chunk-LGVPFYPR.mjs.map
401
- //# sourceMappingURL=chunk-LGVPFYPR.mjs.map
424
+ //# sourceMappingURL=chunk-4H3SGG3T.mjs.map
425
+ //# sourceMappingURL=chunk-4H3SGG3T.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/config/bootstrap/schema.ts","../src/common/config/bootstrap/paths.ts","../src/common/config/bootstrap/apply-to-process-env.ts","../src/common/config/bootstrap/doctor.ts","../src/common/config/bootstrap/load-app-config.ts","../src/common/auth/server/sms/providers/aliyun-pnvs.ts","../src/common/auth/server/sms/providers/console.ts","../src/common/config/bootstrap/resolve-auth-from-config.ts"],"names":["parseYaml"],"mappings":"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","file":"chunk-4H3SGG3T.mjs","sourcesContent":["import { z } from 'zod';\n\nconst aliyunSmsSchema = z.object({\n accessKeyId: z.string().optional(),\n accessKeySecret: z.string().optional(),\n signName: z.string().optional(),\n templateCode: z.string().optional(),\n countryCode: z.string().optional(),\n codeValidMinutes: z.coerce.number().int().positive().optional(),\n endpoint: z.string().url().optional(),\n});\n\nconst authSchema = z.object({\n secret: z.string().min(32, 'auth.secret 至少 32 字符'),\n url: z.string().url('auth.url 须为合法 URL'),\n publicUrl: z.string().url('auth.publicUrl 须为合法 URL'),\n trustedOrigins: z.array(z.string().url()).optional(),\n logOtpInDev: z.boolean().optional(),\n sms: z\n .object({\n provider: z.enum(['console', 'aliyun-pnvs', 'none']).optional(),\n aliyun: aliyunSmsSchema.optional(),\n })\n .optional(),\n email: z\n .object({\n provider: z.string().optional(),\n })\n .optional(),\n});\n\nconst databaseSchema = z.object({\n url: z.string().min(1, 'database.url 不能为空'),\n poolSize: z.coerce.number().int().positive().max(100).optional(),\n timeout: z.coerce.number().int().positive().max(30000).optional(),\n sslMode: z.enum(['disable', 'prefer', 'require']).optional(),\n});\n\nconst aliyunOssSchema = z.object({\n enabled: z.boolean().optional(),\n region: z.string().optional(),\n bucket: z.string().optional(),\n accessKeyId: z.string().optional(),\n accessKeySecret: z.string().optional(),\n customDomain: z.string().optional(),\n secure: z.boolean().optional(),\n internal: z.boolean().optional(),\n});\n\nconst aliyunCdnSchema = z.object({\n enabled: z.boolean().optional(),\n domain: z.string().optional(),\n accessKeyId: z.string().optional(),\n accessKeySecret: z.string().optional(),\n});\n\nconst huarongdaoLevelSchema = z.object({\n id: z.coerce.number(),\n label: z.string(),\n rows: z.coerce.number(),\n cols: z.coerce.number(),\n shuffleSteps: z.coerce.number(),\n sourceImageUrl: z.string().optional().default(''),\n});\n\nconst businessSchema = z\n .object({\n /** 首页 Hero / 导航 / 时间线等(profile-v1 Home 模块) */\n homePage: z.record(z.string(), z.unknown()).optional(),\n huarongdao: z\n .object({\n theme: z.enum(['miku', 'sakura']).optional(),\n levels: z.array(huarongdaoLevelSchema).optional(),\n bgmTracks: z.array(z.string()).optional(),\n })\n .optional(),\n qiniu: z\n .object({\n accessKey: z.string().optional(),\n secretKey: z.string().optional(),\n bucketName: z.string().optional(),\n domain: z.string().optional(),\n })\n .optional(),\n })\n .optional();\n\nexport const appConfigSchema = z.object({\n app: z.object({\n name: z.string().min(1),\n env: z.enum(['development', 'production', 'test']).optional(),\n }),\n database: databaseSchema,\n auth: authSchema,\n storage: z\n .object({\n aliyunOss: aliyunOssSchema.optional(),\n aliyunCdn: aliyunCdnSchema.optional(),\n })\n .optional(),\n business: businessSchema,\n});\n\nexport type AppConfig = z.infer<typeof appConfigSchema>;\nexport type AppConfigInput = z.input<typeof appConfigSchema>;\n","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nexport type AppConfigEnvName = 'local' | 'production' | 'test';\n\nexport type ResolveAppConfigPathOptions = {\n cwd?: string;\n env?: AppConfigEnvName;\n explicitPath?: string;\n};\n\nconst FILE_BY_ENV: Record<AppConfigEnvName, string> = {\n local: 'config/app.config.local.yaml',\n production: 'config/app.config.production.yaml',\n test: 'config/app.config.test.yaml',\n};\n\n/** SOPS 密文默认路径(解密前由运维/脚本处理,应用运行时读明文 production.yaml) */\nexport const SOPS_ENCRYPTED_PATH = 'config/production.enc.yaml';\n\nexport function resolveAppConfigEnv(): AppConfigEnvName {\n const fromEnv = process.env.APP_CONFIG_ENV?.trim();\n if (fromEnv === 'local' || fromEnv === 'production' || fromEnv === 'test') {\n return fromEnv;\n }\n if (process.env.NODE_ENV === 'production') return 'production';\n if (process.env.NODE_ENV === 'test') return 'test';\n return 'local';\n}\n\nexport function isNextBuildPhaseWithoutRuntimeEnv(): boolean {\n return (\n process.env.NEXT_PHASE === 'phase-production-build' ||\n process.env.NEXT_PHASE === 'phase-export'\n );\n}\n\nexport function resolveAppConfigPath(options: ResolveAppConfigPathOptions = {}): string {\n const cwd = options.cwd ?? process.cwd();\n\n if (options.explicitPath) {\n return resolve(cwd, options.explicitPath);\n }\n\n const fromEnv = process.env.APP_CONFIG_PATH?.trim();\n if (fromEnv) {\n return resolve(cwd, fromEnv);\n }\n\n const envName = options.env ?? resolveAppConfigEnv();\n const candidate = resolve(cwd, FILE_BY_ENV[envName]);\n\n if (existsSync(candidate)) {\n return candidate;\n }\n\n const examplePath = resolve(cwd, 'config/app.config.example.yaml');\n if (isNextBuildPhaseWithoutRuntimeEnv() && existsSync(examplePath)) {\n return examplePath;\n }\n\n // 开发回退:local 不存在时尝试 production(CI / 解密后路径)\n if (envName === 'local') {\n const productionFallback = resolve(cwd, FILE_BY_ENV.production);\n if (existsSync(productionFallback)) {\n return productionFallback;\n }\n }\n\n return candidate;\n}\n","import type { AppConfig } from './schema';\n\n/**\n * 将 AppConfig 同步到 process.env,兼容仍读取扁平 env 的 sa2kit 模块(ossFile、legacy 脚本)。\n * 仅在进程内调用一次;已有非空 env 不被覆盖。\n */\nexport function applyAppConfigToProcessEnv(config: AppConfig): void {\n const set = (key: string, value: string | undefined) => {\n if (!value || (process.env[key] && process.env[key]!.length > 0)) return;\n process.env[key] = value;\n };\n\n set('DATABASE_URL', config.database.url);\n if (config.database.poolSize !== undefined) {\n set('DATABASE_POOL_SIZE', String(config.database.poolSize));\n }\n if (config.database.timeout !== undefined) {\n set('DATABASE_TIMEOUT', String(config.database.timeout));\n }\n if (config.database.sslMode) {\n set('DATABASE_SSL_MODE', config.database.sslMode);\n }\n\n set('BETTER_AUTH_SECRET', config.auth.secret);\n set('BETTER_AUTH_URL', config.auth.url);\n set('NEXT_PUBLIC_APP_URL', config.auth.publicUrl);\n\n if (config.auth.trustedOrigins?.length) {\n set('BETTER_AUTH_TRUSTED_ORIGINS', config.auth.trustedOrigins.join(','));\n }\n\n const smsProvider = config.auth.sms?.provider;\n if (smsProvider) {\n set('SA2KIT_SMS_PROVIDER', smsProvider);\n }\n\n const aliyunSms = config.auth.sms?.aliyun;\n if (aliyunSms) {\n set('ALIYUN_SMS_ACCESS_KEY_ID', aliyunSms.accessKeyId);\n set('ALIYUN_SMS_ACCESS_KEY_SECRET', aliyunSms.accessKeySecret);\n set('ALIYUN_SMS_SIGN_NAME', aliyunSms.signName);\n set('ALIYUN_SMS_TEMPLATE_CODE', aliyunSms.templateCode);\n set('ALIYUN_SMS_COUNTRY_CODE', aliyunSms.countryCode);\n if (aliyunSms.codeValidMinutes !== undefined) {\n set('ALIYUN_SMS_CODE_VALID_MINUTES', String(aliyunSms.codeValidMinutes));\n }\n set('ALIYUN_SMS_ENDPOINT', aliyunSms.endpoint);\n }\n\n if (config.auth.email?.provider) {\n set('SA2KIT_EMAIL_PROVIDER', config.auth.email.provider);\n }\n\n if (config.auth.logOtpInDev !== undefined) {\n set('SA2KIT_AUTH_LOG_OTP', config.auth.logOtpInDev ? '1' : '0');\n }\n\n const oss = config.storage?.aliyunOss;\n if (oss) {\n if (oss.region) set('ALIYUN_OSS_REGION', oss.region);\n if (oss.bucket) set('ALIYUN_OSS_BUCKET', oss.bucket);\n if (oss.accessKeyId) set('ALIYUN_OSS_ACCESS_KEY_ID', oss.accessKeyId);\n if (oss.accessKeySecret) set('ALIYUN_OSS_ACCESS_KEY_SECRET', oss.accessKeySecret);\n if (oss.customDomain) set('ALIYUN_OSS_CUSTOM_DOMAIN', oss.customDomain);\n if (oss.secure !== undefined) set('ALIYUN_OSS_SECURE', oss.secure ? 'true' : 'false');\n if (oss.internal !== undefined) set('ALIYUN_OSS_INTERNAL', oss.internal ? 'true' : 'false');\n }\n\n const cdn = config.storage?.aliyunCdn;\n if (cdn) {\n if (cdn.domain) set('ALIYUN_CDN_DOMAIN', cdn.domain);\n if (cdn.accessKeyId) set('ALIYUN_CDN_ACCESS_KEY_ID', cdn.accessKeyId);\n if (cdn.accessKeySecret) set('ALIYUN_CDN_ACCESS_KEY_SECRET', cdn.accessKeySecret);\n }\n}\n","import type { AppConfig } from './schema';\n\nexport type ConfigDoctorIssueLevel = 'error' | 'warning' | 'info';\n\nexport type ConfigDoctorIssue = {\n level: ConfigDoctorIssueLevel;\n featureId: string;\n featureName: string;\n message: string;\n hints?: string[];\n};\n\nexport type ConfigDoctorReport = {\n ok: boolean;\n issues: ConfigDoctorIssue[];\n enabledFeatures: string[];\n};\n\nfunction isSet(value: string | undefined): boolean {\n return Boolean(value && value.trim().length > 0);\n}\n\nexport function diagnoseAppConfig(config: AppConfig): ConfigDoctorReport {\n const issues: ConfigDoctorIssue[] = [];\n const enabledFeatures: string[] = ['app', 'database', 'auth-core'];\n\n const env = config.app.env ?? process.env.NODE_ENV ?? 'development';\n const isProd = env === 'production';\n\n // Auth SMS\n const smsProvider = config.auth.sms?.provider ?? (isProd ? undefined : 'console');\n if (smsProvider === 'aliyun-pnvs') {\n const aliyun = config.auth.sms?.aliyun;\n const missing = [\n !isSet(aliyun?.accessKeyId) && 'auth.sms.aliyun.accessKeyId',\n !isSet(aliyun?.accessKeySecret) && 'auth.sms.aliyun.accessKeySecret',\n !isSet(aliyun?.signName) && 'auth.sms.aliyun.signName',\n !isSet(aliyun?.templateCode) && 'auth.sms.aliyun.templateCode',\n ].filter(Boolean) as string[];\n\n if (missing.length === 0) {\n enabledFeatures.push('auth-sms');\n } else {\n issues.push({\n level: 'error',\n featureId: 'auth-sms',\n featureName: '手机短信 OTP',\n message: `sms.provider=aliyun-pnvs 但缺少:${missing.join(', ')}`,\n });\n }\n } else if (smsProvider === 'console') {\n enabledFeatures.push('auth-sms');\n if (isProd) {\n issues.push({\n level: 'warning',\n featureId: 'auth-sms',\n featureName: '手机短信 OTP',\n message: '生产环境使用 console SMS,验证码仅输出到日志。',\n hints: ['生产请改为 aliyun-pnvs 并填写 auth.sms.aliyun.*'],\n });\n }\n } else {\n issues.push({\n level: isProd ? 'warning' : 'info',\n featureId: 'auth-sms',\n featureName: '手机短信 OTP',\n message: isProd\n ? '未配置短信 provider,用户收不到验证码。'\n : '未配置短信;开发可设 auth.sms.provider: console',\n hints: ['开发:auth.sms.provider: console', '生产:auth.sms.provider: aliyun-pnvs'],\n });\n }\n\n // OSS\n const oss = config.storage?.aliyunOss;\n const ossComplete =\n oss?.enabled !== false &&\n isSet(oss?.region) &&\n isSet(oss?.bucket) &&\n isSet(oss?.accessKeyId) &&\n isSet(oss?.accessKeySecret);\n\n if (ossComplete) {\n enabledFeatures.push('storage-oss');\n } else if (oss?.enabled === true) {\n issues.push({\n level: 'error',\n featureId: 'storage-oss',\n featureName: '阿里云 OSS',\n message: 'storage.aliyunOss.enabled 为 true 但配置不完整。',\n });\n } else {\n issues.push({\n level: 'info',\n featureId: 'storage-oss',\n featureName: '阿里云 OSS',\n message: '未启用完整 OSS 配置,文件上传将回退本地存储(若模块允许)。',\n });\n }\n\n const ok = !issues.some((i) => i.level === 'error');\n return { ok, issues, enabledFeatures };\n}\n\nlet loggedOnce = false;\n\nexport function logConfigDoctorReport(report: ConfigDoctorReport, options?: { force?: boolean }): void {\n if (loggedOnce && !options?.force) return;\n loggedOnce = true;\n\n const lines: string[] = ['[sa2kit/config] 配置检查'];\n for (const issue of report.issues) {\n const prefix = issue.level === 'error' ? '✗' : issue.level === 'warning' ? '⚠' : '○';\n lines.push(`${prefix} ${issue.featureName}: ${issue.message}`);\n for (const hint of issue.hints ?? []) {\n lines.push(` → ${hint}`);\n }\n }\n if (report.issues.length === 0) {\n lines.push('✓ 配置项检查通过');\n }\n lines.push(` 已启用: ${report.enabledFeatures.join(', ')}`);\n console.info(lines.join('\\n'));\n}\n","import { readFileSync } from 'node:fs';\nimport { parse as parseYaml } from 'yaml';\nimport { applyAppConfigToProcessEnv } from './apply-to-process-env';\nimport { diagnoseAppConfig, logConfigDoctorReport, type ConfigDoctorReport } from './doctor';\nimport { resolveAppConfigPath, type ResolveAppConfigPathOptions } from './paths';\nimport { appConfigSchema, type AppConfig } from './schema';\n\nexport type LoadAppConfigOptions = ResolveAppConfigPathOptions & {\n /** 是否写入 process.env(默认 true) */\n applyToProcessEnv?: boolean;\n /** 是否打印 doctor 报告(默认 true) */\n logDoctor?: boolean;\n};\n\nlet cachedConfig: AppConfig | undefined;\nlet cachedPath: string | undefined;\n\nexport function readAppConfigFile(filePath: string): AppConfig {\n const raw = readFileSync(filePath, 'utf8');\n const parsed = parseYaml(raw);\n const result = appConfigSchema.safeParse(parsed);\n\n if (!result.success) {\n const details = result.error.issues\n .map((issue) => ` - ${issue.path.join('.')}: ${issue.message}`)\n .join('\\n');\n throw new Error(`AppConfig 校验失败 (${filePath}):\\n${details}`);\n }\n\n return result.data;\n}\n\nexport function loadAppConfig(options: LoadAppConfigOptions = {}): AppConfig {\n const filePath = resolveAppConfigPath(options);\n\n if (cachedConfig && cachedPath === filePath) {\n return cachedConfig;\n }\n\n const config = readAppConfigFile(filePath);\n cachedPath = filePath;\n cachedConfig = config;\n\n if (options.applyToProcessEnv !== false) {\n applyAppConfigToProcessEnv(config);\n }\n\n if (options.logDoctor !== false) {\n logConfigDoctorReport(diagnoseAppConfig(config));\n }\n\n return config;\n}\n\nexport function getAppConfig(): AppConfig {\n if (!cachedConfig) {\n return loadAppConfig();\n }\n return cachedConfig;\n}\n\nexport function resetAppConfigCache(): void {\n cachedConfig = undefined;\n cachedPath = undefined;\n}\n\nexport function checkAppConfigFromFile(\n filePath: string,\n): { config: AppConfig; report: ConfigDoctorReport } {\n const config = readAppConfigFile(filePath);\n return { config, report: diagnoseAppConfig(config) };\n}\n","import type { AliyunPnvsSmsConfig, Sa2kitSmsProvider } from '../types';\n\ntype PopCoreClient = {\n request(\n action: string,\n params: Record<string, string>,\n options?: { method?: string },\n ): Promise<{ Code?: string; Success?: boolean; Message?: string }>;\n};\n\nasync function loadPopCore(): Promise<new (config: Record<string, string>) => PopCoreClient> {\n try {\n const mod = await import('@alicloud/pop-core');\n return (mod.default ?? mod) as unknown as new (config: Record<string, string>) => PopCoreClient;\n } catch {\n throw new Error(\n '启用 SA2KIT_SMS_PROVIDER=aliyun-pnvs 需要安装 @alicloud/pop-core:pnpm add @alicloud/pop-core',\n );\n }\n}\n\nexport function createAliyunPnvsSmsProvider(config: AliyunPnvsSmsConfig): Sa2kitSmsProvider {\n return {\n async sendOTP(phoneNumber, code) {\n const Core = await loadPopCore();\n const client = new Core({\n accessKeyId: config.accessKeyId,\n accessKeySecret: config.accessKeySecret,\n endpoint: config.endpoint ?? 'https://dypnsapi.aliyuncs.com',\n apiVersion: '2017-05-25',\n });\n\n const minutes = String(config.codeValidMinutes ?? 5);\n const result = await client.request(\n 'SendSmsVerifyCode',\n {\n PhoneNumber: phoneNumber,\n CountryCode: config.countryCode ?? '86',\n SignName: config.signName,\n TemplateCode: config.templateCode,\n TemplateParam: JSON.stringify({ code, min: minutes }),\n },\n { method: 'POST' },\n );\n\n if (result.Code !== 'OK' && result.Success !== true) {\n throw new Error(\n `阿里云短信认证发送失败: ${result.Message ?? result.Code ?? 'unknown error'}`,\n );\n }\n },\n };\n}\n","import type { Sa2kitSmsProvider } from '../types';\n\nexport function createConsoleSmsProvider(): Sa2kitSmsProvider {\n return {\n async sendOTP(phoneNumber, code) {\n console.info(`[sa2kit/auth][sms][console] ${phoneNumber} => ${code}`);\n },\n };\n}\n","import type { Sa2kitAuthConfig } from '../../auth/server/types';\nimport type { AppConfig } from './schema';\nimport { createAliyunPnvsSmsProvider } from '../../auth/server/sms/providers/aliyun-pnvs';\nimport { createConsoleSmsProvider } from '../../auth/server/sms/providers/console';\n\nfunction parseTrustedOrigins(config: AppConfig): string[] {\n const baseURL = config.auth.url;\n const defaults = [baseURL, 'http://localhost:3000', 'http://127.0.0.1:3000'];\n const extra = config.auth.trustedOrigins ?? [];\n return [...defaults, ...extra].filter((origin, index, list) => list.indexOf(origin) === index);\n}\n\nexport function resolveAuthConfigFromAppConfig(\n config: AppConfig,\n overrides: Partial<Sa2kitAuthConfig> & Pick<Sa2kitAuthConfig, 'db'>,\n): Sa2kitAuthConfig {\n const smsProvider = config.auth.sms?.provider ?? 'console';\n let sms = overrides.sms;\n\n if (!sms && smsProvider === 'console') {\n const consoleProvider = createConsoleSmsProvider();\n sms = { sendOTP: consoleProvider.sendOTP.bind(consoleProvider) };\n }\n\n if (!sms && smsProvider === 'aliyun-pnvs') {\n const aliyun = config.auth.sms?.aliyun;\n if (\n aliyun?.accessKeyId &&\n aliyun.accessKeySecret &&\n aliyun.signName &&\n aliyun.templateCode\n ) {\n const provider = createAliyunPnvsSmsProvider({\n accessKeyId: aliyun.accessKeyId,\n accessKeySecret: aliyun.accessKeySecret,\n signName: aliyun.signName,\n templateCode: aliyun.templateCode,\n countryCode: aliyun.countryCode ?? '86',\n codeValidMinutes: aliyun.codeValidMinutes ?? 5,\n endpoint: aliyun.endpoint,\n });\n sms = { sendOTP: provider.sendOTP.bind(provider) };\n }\n }\n\n const isProd = (config.app.env ?? process.env.NODE_ENV) === 'production';\n\n return {\n db: overrides.db,\n baseURL: overrides.baseURL ?? config.auth.url,\n secret: overrides.secret ?? config.auth.secret,\n trustedOrigins: overrides.trustedOrigins ?? parseTrustedOrigins(config),\n basePath: overrides.basePath,\n sms: overrides.sms ?? sms,\n email: overrides.email,\n phoneNumberValidator: overrides.phoneNumberValidator,\n logOtpInDev:\n overrides.logOtpInDev ??\n config.auth.logOtpInDev ??\n (!isProd || process.env.SA2KIT_AUTH_LOG_OTP === '1'),\n };\n}\n"]}