feat(channels): add line and zalo minio override config

This commit is contained in:
William Valentin
2026-02-17 10:54:43 -08:00
parent 2fe6495c92
commit 77ae15b3e2
4 changed files with 171 additions and 6 deletions
+75
View File
@@ -790,6 +790,44 @@ describe('configSchema — line', () => {
expect(result.line.allowed_source_ids).toEqual([]);
expect(result.line.require_mention).toBe(true);
expect(result.line.mention_name).toBe('flynn');
expect(result.line.minio.enabled).toBe(false);
expect(result.line.minio.prefix).toBe('flynn/channels/line');
expect(result.line.minio.secure).toBe(true);
expect(result.line.minio.expires).toBe('24h');
});
it('accepts line-specific minio overrides', () => {
const result = configSchema.parse({
...minimalConfig,
line: {
channel_access_token: 'line-token',
channel_secret: 'line-secret',
minio: {
enabled: true,
endpoint: 'localhost:9000',
access_key: 'line-key',
secret_key: 'line-secret',
bucket: 'line-attachments',
prefix: 'line/files',
secure: false,
expires: '12h',
mc_path: '/usr/local/bin/mc',
},
},
});
if (!result.line) {
throw new Error('Expected line config');
}
expect(result.line.minio.enabled).toBe(true);
expect(result.line.minio.endpoint).toBe('localhost:9000');
expect(result.line.minio.access_key).toBe('line-key');
expect(result.line.minio.secret_key).toBe('line-secret');
expect(result.line.minio.bucket).toBe('line-attachments');
expect(result.line.minio.prefix).toBe('line/files');
expect(result.line.minio.secure).toBe(false);
expect(result.line.minio.expires).toBe('12h');
expect(result.line.minio.mc_path).toBe('/usr/local/bin/mc');
});
});
@@ -842,6 +880,43 @@ describe('configSchema — zalo', () => {
expect(result.zalo.allowed_user_ids).toEqual([]);
expect(result.zalo.require_mention).toBe(true);
expect(result.zalo.mention_name).toBe('flynn');
expect(result.zalo.minio.enabled).toBe(false);
expect(result.zalo.minio.prefix).toBe('flynn/channels/zalo');
expect(result.zalo.minio.secure).toBe(true);
expect(result.zalo.minio.expires).toBe('24h');
});
it('accepts zalo-specific minio overrides', () => {
const result = configSchema.parse({
...minimalConfig,
zalo: {
oa_access_token: 'oa-token',
minio: {
enabled: true,
endpoint: 'localhost:9000',
access_key: 'zalo-key',
secret_key: 'zalo-secret',
bucket: 'zalo-attachments',
prefix: 'zalo/files',
secure: false,
expires: '8h',
mc_path: '/usr/local/bin/mc',
},
},
});
if (!result.zalo) {
throw new Error('Expected zalo config');
}
expect(result.zalo.minio.enabled).toBe(true);
expect(result.zalo.minio.endpoint).toBe('localhost:9000');
expect(result.zalo.minio.access_key).toBe('zalo-key');
expect(result.zalo.minio.secret_key).toBe('zalo-secret');
expect(result.zalo.minio.bucket).toBe('zalo-attachments');
expect(result.zalo.minio.prefix).toBe('zalo/files');
expect(result.zalo.minio.secure).toBe(false);
expect(result.zalo.minio.expires).toBe('8h');
expect(result.zalo.minio.mc_path).toBe('/usr/local/bin/mc');
});
});
+22
View File
@@ -595,6 +595,17 @@ const lineSchema = z.object({
allowed_source_ids: z.array(z.string()).default([]),
require_mention: z.boolean().default(true),
mention_name: z.string().default('flynn'),
minio: z.object({
enabled: z.boolean().default(false),
endpoint: z.string().optional(),
access_key: z.string().optional(),
secret_key: z.string().optional(),
bucket: z.string().optional(),
prefix: z.string().default('flynn/channels/line'),
secure: z.boolean().default(true),
expires: z.string().default('24h'),
mc_path: z.string().optional(),
}).default({}),
}).optional();
const feishuSchema = z.object({
@@ -614,6 +625,17 @@ const zaloSchema = z.object({
allowed_user_ids: z.array(z.string()).default([]),
require_mention: z.boolean().default(true),
mention_name: z.string().default('flynn'),
minio: z.object({
enabled: z.boolean().default(false),
endpoint: z.string().optional(),
access_key: z.string().optional(),
secret_key: z.string().optional(),
bucket: z.string().optional(),
prefix: z.string().default('flynn/channels/zalo'),
secure: z.boolean().default(true),
expires: z.string().default('24h'),
mc_path: z.string().optional(),
}).default({}),
}).optional();
const browserSchema = z.object({