返回 AiToEarn
assets.config.ts
根目录 / project / aitoearn-backend / libs / assets / src / assets.config.ts
1 import { aliOssConfigSchema } from '@yikart/ali-oss'
2 import { s3ConfigSchema } from '@yikart/aws-s3'
3 import { z } from 'zod'
4
5 export const ASSETS_CONFIG = Symbol('ASSETS_CONFIG')
6
7 export const cloudflareQueueConfigSchema = z.object({
8 accountId: z.string(),
9 queueId: z.string(),
10 apiToken: z.string(),
11 })
12
13 const s3AssetsConfigSchema = z.looseObject({
14 ...s3ConfigSchema.shape,
15 maxSize: z.number().positive().optional(),
16 provider: z.literal('s3'),
17 cloudflare: cloudflareQueueConfigSchema.optional(),
18 })
19
20 const aliOssAssetsConfigSchema = z.looseObject({
21 ...aliOssConfigSchema.shape,
22 maxSize: z.number().positive().optional(),
23 provider: z.literal('ali-oss'),
24 callbackUrl: z.string().optional().describe('OSS 上传完成回调 URL'),
25 })
26
27 const assetsDiscriminatedSchema = z.discriminatedUnion('provider', [
28 s3AssetsConfigSchema,
29 aliOssAssetsConfigSchema,
30 ])
31
32 export const assetsConfigSchema = z.preprocess(
33 (val) => {
34 if (val && typeof val === 'object' && !('provider' in val)) {
35 return { ...val, provider: 's3' }
36 }
37 return val
38 },
39 assetsDiscriminatedSchema,
40 )
41
42 export type AssetsConfig = z.infer<typeof assetsDiscriminatedSchema>
43
44 /**
45 * 判断 Cloudflare Queue 是否已配置
46 * cloudflare 配置存在则启用 Queue 模式,否则使用轮询模式
47 */
48 export function isQueueEnabled(config: AssetsConfig): boolean {
49 return config.provider === 's3' && !!config.cloudflare
50 }
51
52 /**
53 * 判断 AliOss Callback 是否已配置
54 * callbackUrl 配置存在则启用回调模式,上传完成后 OSS 主动推送确认
55 */
56 export function isCallbackEnabled(config: AssetsConfig): boolean {
57 return config.provider === 'ali-oss' && !!config.callbackUrl
58 }
59
59 lines TYPESCRIPT