From 70747be388a4ba583d3b37d440d57bd327f81f46 Mon Sep 17 00:00:00 2001 From: qcqcqc <1220204124@zust.edu.cn> Date: Fri, 24 Oct 2025 14:20:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=A0=E7=BC=96=E8=AF=91=E5=99=A8?= =?UTF-8?q?=E6=9A=82=E4=B8=8D=E6=94=AF=E6=8C=81=E5=B5=8C=E5=A5=97=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E7=B1=BB=E5=9E=8B=EF=BC=8C=E6=95=85=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E5=9C=A8entity=E5=86=85=E5=A3=B0=E6=98=8ECosOrigin=EF=BC=88?= =?UTF-8?q?=E4=BB=A5=E5=90=8E=E9=80=82=E9=85=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/entities/Application.d.ts | 13 +++++ es/entities/ExtraFile.d.ts | 3 +- .../Application/_baseSchema.d.ts | 13 +++++ es/oak-app-domain/ExtraFile/_baseSchema.d.ts | 5 +- es/triggers/extraFile.js | 49 ++++++++++++++++-- es/triggers/index.d.ts | 2 +- es/types/Config.d.ts | 4 +- es/utils/getContextConfig.d.ts | 7 ++- es/utils/getContextConfig.js | 11 +++- es/utils/livestream.d.ts | 8 +-- lib/entities/Application.d.ts | 13 +++++ lib/entities/ExtraFile.d.ts | 3 +- .../Application/_baseSchema.d.ts | 13 +++++ lib/oak-app-domain/ExtraFile/_baseSchema.d.ts | 5 +- lib/triggers/extraFile.js | 50 +++++++++++++++++-- lib/triggers/index.d.ts | 2 +- lib/triggers/toDo.d.ts | 2 +- lib/types/Config.d.ts | 4 +- lib/utils/getContextConfig.d.ts | 7 ++- lib/utils/getContextConfig.js | 9 ++++ lib/utils/livestream.d.ts | 8 +-- src/entities/Application.ts | 3 +- 22 files changed, 201 insertions(+), 33 deletions(-) diff --git a/es/entities/Application.d.ts b/es/entities/Application.d.ts index 9b3e8f337..c983a4505 100644 --- a/es/entities/Application.d.ts +++ b/es/entities/Application.d.ts @@ -4,6 +4,7 @@ import { Schema as System } from './System'; import { Schema as Session } from './Session'; import { Schema as Domain } from './Domain'; import { Style } from '../types/Style'; +export type CosOrigin = 'qiniu' | 'wechat' | 'ctyun' | 'aliyun' | 'tencent' | 'local' | 'unknown' | 's3'; export type AppType = 'web' | 'wechatMp' | 'wechatPublic' | 'native'; export type WechatMpConfig = { type: 'wechatMp'; @@ -18,6 +19,9 @@ export type WechatMpConfig = { mode: 'clear' | 'compatible' | 'safe'; dataFormat: 'json' | 'xml'; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WebConfig = { type: 'web'; @@ -36,6 +40,9 @@ export type WebConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WechatPublicConfig = { type: 'wechatPublic'; @@ -58,6 +65,9 @@ export type WechatPublicConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type NativeConfig = { type: 'native'; @@ -71,6 +81,9 @@ export type NativeConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; type Versions = string[]; export interface Schema extends EntityShape { diff --git a/es/entities/ExtraFile.d.ts b/es/entities/ExtraFile.d.ts index db212b619..fb31b1663 100644 --- a/es/entities/ExtraFile.d.ts +++ b/es/entities/ExtraFile.d.ts @@ -2,8 +2,9 @@ import { String, Int, Text, Float, Boolean } from 'oak-domain/lib/types/DataType import { EntityShape } from 'oak-domain/lib/types/Entity'; import { EntityDesc } from 'oak-domain/lib/types/EntityDesc'; import { Schema as Application } from './Application'; +import { CosOrigin } from '../types/Config'; export interface Schema extends EntityShape { - origin: 'qiniu' | 'wechat' | 'ctyun' | 'aliyun' | 'tencent' | 'local' | 'unknown' | 's3'; + origin: CosOrigin; type: 'image' | 'video' | 'audio' | 'file'; bucket?: String<32>; objectId?: String<64>; diff --git a/es/oak-app-domain/Application/_baseSchema.d.ts b/es/oak-app-domain/Application/_baseSchema.d.ts index e9a2d3785..af5f6ccfc 100644 --- a/es/oak-app-domain/Application/_baseSchema.d.ts +++ b/es/oak-app-domain/Application/_baseSchema.d.ts @@ -4,6 +4,7 @@ import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/E import { GenericAction } from "oak-domain/lib/actions/action"; import { String, Text } from "oak-domain/lib/types/DataType"; import { Style } from "../../types/Style"; +export type CosOrigin = "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3"; export type AppType = "web" | "wechatMp" | "wechatPublic" | "native"; export type WechatMpConfig = { type: "wechatMp"; @@ -18,6 +19,9 @@ export type WechatMpConfig = { mode: "clear" | "compatible" | "safe"; dataFormat: "json" | "xml"; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WebConfig = { type: "web"; @@ -36,6 +40,9 @@ export type WebConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WechatPublicConfig = { type: "wechatPublic"; @@ -58,6 +65,9 @@ export type WechatPublicConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type NativeConfig = { type: "native"; @@ -71,6 +81,9 @@ export type NativeConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; type Versions = string[]; export type OpSchema = EntityShape & { diff --git a/es/oak-app-domain/ExtraFile/_baseSchema.d.ts b/es/oak-app-domain/ExtraFile/_baseSchema.d.ts index 6149c8541..4d99ee880 100644 --- a/es/oak-app-domain/ExtraFile/_baseSchema.d.ts +++ b/es/oak-app-domain/ExtraFile/_baseSchema.d.ts @@ -2,9 +2,10 @@ import { ForeignKey } from "oak-domain/lib/types/DataType"; import { Q_DateValue, Q_BooleanValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand"; import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity"; import { GenericAction } from "oak-domain/lib/actions/action"; +import { CosOrigin } from "../../types/Config"; import { String, Text, Int, Float, Boolean } from "oak-domain/lib/types/DataType"; export type OpSchema = EntityShape & { - origin: "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3"; + origin: CosOrigin; type: "image" | "video" | "audio" | "file"; bucket?: String<32> | null; objectId?: String<64> | null; @@ -33,7 +34,7 @@ export type OpFilter = { $$createAt$$: Q_DateValue; $$seq$$: Q_NumberValue; $$updateAt$$: Q_DateValue; - origin: Q_EnumValue<"qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3">; + origin: Q_EnumValue; type: Q_EnumValue<"image" | "video" | "audio" | "file">; bucket: Q_StringValue; objectId: Q_StringValue; diff --git a/es/triggers/extraFile.js b/es/triggers/extraFile.js index 86a3a6762..129ac97a4 100644 --- a/es/triggers/extraFile.js +++ b/es/triggers/extraFile.js @@ -1,6 +1,7 @@ import { getCosBackend } from '../utils/cos/index.backend'; import { OakException } from 'oak-domain/lib/types/Exception'; import { applicationProjection } from '../types/Projection'; +import assert from 'assert'; const triggers = [ { name: '生成extraFile需要的上传meta', @@ -9,20 +10,60 @@ const triggers = [ action: 'create', fn: async ({ operation }, context) => { const { data } = operation; + let cachedOrigin = undefined; + const getCosOrigin = async () => { + if (cachedOrigin) { + return cachedOrigin; + } + const [application] = await context.select("application", { + data: { + config: { + cos: { + defaultOrigin: 1, + } + }, + system: { + config: { + Cos: { + defaultOrigin: 1, + } + }, + platform: { + config: { + Cos: { + defaultOrigin: 1, + } + } + } + } + }, + filter: { + id: context.getApplicationId(), + }, + }, {}); + assert(application, `找不到 当前应用程序`); + cachedOrigin = application.config?.cos?.defaultOrigin || + application.system?.config?.Cos?.defaultOrigin || + application.system?.platform?.config?.Cos?.defaultOrigin; + return cachedOrigin; + }; const formMeta = async (data) => { - const { origin } = data; + // 如果提供了就用提供的origin,否则尝试从应用程序、系统配置、平台配置中获取默认的Cos源 + const configOrigin = data.origin || await getCosOrigin(); + data.origin = configOrigin; + assert(configOrigin, `extraFile的origin未指定,且应用程序、系统配置、平台配置中也没有默认的Cos源,请检查`); if (!data.applicationId) { data.applicationId = context.getApplicationId(); } - if (origin === 'unknown') { + if (configOrigin === 'unknown') { Object.assign(data, { uploadState: 'success', }); return; } - const cos = getCosBackend(origin); + const cos = getCosBackend(configOrigin); if (!cos) { - throw new OakException(`origin为${origin}的extraFile没有定义Cos类,请调用registerCos注入`); + throw new OakException(`origin为${configOrigin}的extraFile没有定义Cos类,请调用registerCos注入`); } await cos.formUploadMeta(context.getApplication(), data); Object.assign(data, { diff --git a/es/triggers/index.d.ts b/es/triggers/index.d.ts index 40965ed78..35ac70572 100644 --- a/es/triggers/index.d.ts +++ b/es/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; +declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; export default _default; diff --git a/es/types/Config.d.ts b/es/types/Config.d.ts index fb5537224..36e54fe4a 100644 --- a/es/types/Config.d.ts +++ b/es/types/Config.d.ts @@ -169,6 +169,7 @@ export type Config = { tencent?: TencentYunCosConfig; local?: LocalCosConfig; s3?: S3CosConfig; + defaultOrigin?: CosOrigin; }; Live?: { qiniu?: QiniuLiveConfig; @@ -202,5 +203,6 @@ export type Config = { passwordVerifyGap?: number; }; }; -export type Origin = 'ali' | 'tencent' | 'qiniu' | 'amap' | 'ctyun' | 'local'; +export type AccountOrigin = 'ali' | 'tencent' | 'qiniu' | 'amap' | 'ctyun' | 'local' | 's3'; +export type CosOrigin = 'qiniu' | 'wechat' | 'ctyun' | 'aliyun' | 'tencent' | 'local' | 'unknown' | 's3'; export type Service = 'Map' | 'Cos' | 'Live' | 'Sms' | 'Emails'; diff --git a/es/utils/getContextConfig.d.ts b/es/utils/getContextConfig.d.ts index 7b0c28136..249030146 100644 --- a/es/utils/getContextConfig.d.ts +++ b/es/utils/getContextConfig.d.ts @@ -1,11 +1,11 @@ -import { Origin, Service, Config } from '../types/Config'; +import { AccountOrigin, Service, Config } from '../types/Config'; /** * @param systemConfig * @param service * @param origin * @returns */ -export declare function getConfig(systemConfig: Config, service: Service, origin: Origin): { +export declare function getConfig(systemConfig: Config, service: Service, origin: AccountOrigin): { instance: import("oak-external-sdk").ALiYunInstance; config: any; } | { @@ -20,6 +20,9 @@ export declare function getConfig(systemConfig: Config, service: Service, origin } | { instance: import("oak-external-sdk").LocalInstance; config: any; +} | { + instance: import("oak-external-sdk").S3Instance; + config: any; } | { instance: import("oak-external-sdk").AmapInstance; config: any; diff --git a/es/utils/getContextConfig.js b/es/utils/getContextConfig.js index 6599c69ff..f46b457fb 100644 --- a/es/utils/getContextConfig.js +++ b/es/utils/getContextConfig.js @@ -1,6 +1,6 @@ import { assert } from 'oak-domain/lib/utils/assert'; import { OakDataException } from 'oak-domain/lib/types/Exception'; -import { AmapSDK, QiniuSDK, CTYunSDK, ALiYunSDK, TencentYunSDK, LocalSDK } from 'oak-external-sdk'; +import { AmapSDK, QiniuSDK, CTYunSDK, ALiYunSDK, TencentYunSDK, LocalSDK, S3SDK } from 'oak-external-sdk'; /** * @param systemConfig * @param service @@ -60,6 +60,15 @@ export function getConfig(systemConfig, service, origin) { config: originConfig, }; } + case 's3': { + const s3Account = originCloudAccounts.find((ele) => ele.accessKey === originConfig.accessKey); + assert(s3Account, `调用的服务${service}源${origin}找不到相应的平台帐号,请联系管理员`); + const s3Instance = S3SDK.getInstance(s3Account.accessKey, s3Account.secretKey); + return { + instance: s3Instance, + config: originConfig, + }; + } default: { assert(origin === 'amap'); const amapAccount = originCloudAccounts.find((ele) => ele.webApiKey === originConfig.webApiKey); diff --git a/es/utils/livestream.d.ts b/es/utils/livestream.d.ts index 74c945ac1..10b0c2274 100644 --- a/es/utils/livestream.d.ts +++ b/es/utils/livestream.d.ts @@ -1,7 +1,7 @@ import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity'; import { EntityDict } from '../oak-app-domain'; import { Schema as Livestream } from '../oak-app-domain/Livestream/Schema'; -import { Origin } from '../types/Config'; +import { AccountOrigin } from '../types/Config'; import { BackendRuntimeContext } from '../context/BackendRuntimeContext'; /** * 创建直播流并生成推拉流地址 @@ -11,7 +11,7 @@ import { BackendRuntimeContext } from '../context/BackendRuntimeContext'; * @returns Livestream 对象 */ export declare function getLivestream>(params: { - origin: Origin; + origin: AccountOrigin; streamTitle: string; expireAt: number; }, context: Cxt): Promise>; @@ -23,12 +23,12 @@ export declare function getLivestream>(params: { - origin: Origin; + origin: AccountOrigin; streamTitle: string; expireAt: number; }, context: Cxt): Promise>; export declare function getPlayBackUrl>(params: { - origin: Origin; + origin: AccountOrigin; streamTitle: string; start: number; end: number; diff --git a/lib/entities/Application.d.ts b/lib/entities/Application.d.ts index 9b3e8f337..c983a4505 100644 --- a/lib/entities/Application.d.ts +++ b/lib/entities/Application.d.ts @@ -4,6 +4,7 @@ import { Schema as System } from './System'; import { Schema as Session } from './Session'; import { Schema as Domain } from './Domain'; import { Style } from '../types/Style'; +export type CosOrigin = 'qiniu' | 'wechat' | 'ctyun' | 'aliyun' | 'tencent' | 'local' | 'unknown' | 's3'; export type AppType = 'web' | 'wechatMp' | 'wechatPublic' | 'native'; export type WechatMpConfig = { type: 'wechatMp'; @@ -18,6 +19,9 @@ export type WechatMpConfig = { mode: 'clear' | 'compatible' | 'safe'; dataFormat: 'json' | 'xml'; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WebConfig = { type: 'web'; @@ -36,6 +40,9 @@ export type WebConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WechatPublicConfig = { type: 'wechatPublic'; @@ -58,6 +65,9 @@ export type WechatPublicConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type NativeConfig = { type: 'native'; @@ -71,6 +81,9 @@ export type NativeConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; type Versions = string[]; export interface Schema extends EntityShape { diff --git a/lib/entities/ExtraFile.d.ts b/lib/entities/ExtraFile.d.ts index db212b619..fb31b1663 100644 --- a/lib/entities/ExtraFile.d.ts +++ b/lib/entities/ExtraFile.d.ts @@ -2,8 +2,9 @@ import { String, Int, Text, Float, Boolean } from 'oak-domain/lib/types/DataType import { EntityShape } from 'oak-domain/lib/types/Entity'; import { EntityDesc } from 'oak-domain/lib/types/EntityDesc'; import { Schema as Application } from './Application'; +import { CosOrigin } from '../types/Config'; export interface Schema extends EntityShape { - origin: 'qiniu' | 'wechat' | 'ctyun' | 'aliyun' | 'tencent' | 'local' | 'unknown' | 's3'; + origin: CosOrigin; type: 'image' | 'video' | 'audio' | 'file'; bucket?: String<32>; objectId?: String<64>; diff --git a/lib/oak-app-domain/Application/_baseSchema.d.ts b/lib/oak-app-domain/Application/_baseSchema.d.ts index e9a2d3785..af5f6ccfc 100644 --- a/lib/oak-app-domain/Application/_baseSchema.d.ts +++ b/lib/oak-app-domain/Application/_baseSchema.d.ts @@ -4,6 +4,7 @@ import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/E import { GenericAction } from "oak-domain/lib/actions/action"; import { String, Text } from "oak-domain/lib/types/DataType"; import { Style } from "../../types/Style"; +export type CosOrigin = "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3"; export type AppType = "web" | "wechatMp" | "wechatPublic" | "native"; export type WechatMpConfig = { type: "wechatMp"; @@ -18,6 +19,9 @@ export type WechatMpConfig = { mode: "clear" | "compatible" | "safe"; dataFormat: "json" | "xml"; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WebConfig = { type: "web"; @@ -36,6 +40,9 @@ export type WebConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type WechatPublicConfig = { type: "wechatPublic"; @@ -58,6 +65,9 @@ export type WechatPublicConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; export type NativeConfig = { type: "native"; @@ -71,6 +81,9 @@ export type NativeConfig = { hostname: string; port: string; }; + cos?: { + defaultOrigin: CosOrigin; + }; }; type Versions = string[]; export type OpSchema = EntityShape & { diff --git a/lib/oak-app-domain/ExtraFile/_baseSchema.d.ts b/lib/oak-app-domain/ExtraFile/_baseSchema.d.ts index 6149c8541..4d99ee880 100644 --- a/lib/oak-app-domain/ExtraFile/_baseSchema.d.ts +++ b/lib/oak-app-domain/ExtraFile/_baseSchema.d.ts @@ -2,9 +2,10 @@ import { ForeignKey } from "oak-domain/lib/types/DataType"; import { Q_DateValue, Q_BooleanValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand"; import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity"; import { GenericAction } from "oak-domain/lib/actions/action"; +import { CosOrigin } from "../../types/Config"; import { String, Text, Int, Float, Boolean } from "oak-domain/lib/types/DataType"; export type OpSchema = EntityShape & { - origin: "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3"; + origin: CosOrigin; type: "image" | "video" | "audio" | "file"; bucket?: String<32> | null; objectId?: String<64> | null; @@ -33,7 +34,7 @@ export type OpFilter = { $$createAt$$: Q_DateValue; $$seq$$: Q_NumberValue; $$updateAt$$: Q_DateValue; - origin: Q_EnumValue<"qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3">; + origin: Q_EnumValue; type: Q_EnumValue<"image" | "video" | "audio" | "file">; bucket: Q_StringValue; objectId: Q_StringValue; diff --git a/lib/triggers/extraFile.js b/lib/triggers/extraFile.js index 2e1fa5369..ba0385c66 100644 --- a/lib/triggers/extraFile.js +++ b/lib/triggers/extraFile.js @@ -1,8 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); const index_backend_1 = require("../utils/cos/index.backend"); const Exception_1 = require("oak-domain/lib/types/Exception"); const Projection_1 = require("../types/Projection"); +const assert_1 = tslib_1.__importDefault(require("assert")); const triggers = [ { name: '生成extraFile需要的上传meta', @@ -11,20 +13,60 @@ const triggers = [ action: 'create', fn: async ({ operation }, context) => { const { data } = operation; + let cachedOrigin = undefined; + const getCosOrigin = async () => { + if (cachedOrigin) { + return cachedOrigin; + } + const [application] = await context.select("application", { + data: { + config: { + cos: { + defaultOrigin: 1, + } + }, + system: { + config: { + Cos: { + defaultOrigin: 1, + } + }, + platform: { + config: { + Cos: { + defaultOrigin: 1, + } + } + } + } + }, + filter: { + id: context.getApplicationId(), + }, + }, {}); + (0, assert_1.default)(application, `找不到 当前应用程序`); + cachedOrigin = application.config?.cos?.defaultOrigin || + application.system?.config?.Cos?.defaultOrigin || + application.system?.platform?.config?.Cos?.defaultOrigin; + return cachedOrigin; + }; const formMeta = async (data) => { - const { origin } = data; + // 如果提供了就用提供的origin,否则尝试从应用程序、系统配置、平台配置中获取默认的Cos源 + const configOrigin = data.origin || await getCosOrigin(); + data.origin = configOrigin; + (0, assert_1.default)(configOrigin, `extraFile的origin未指定,且应用程序、系统配置、平台配置中也没有默认的Cos源,请检查`); if (!data.applicationId) { data.applicationId = context.getApplicationId(); } - if (origin === 'unknown') { + if (configOrigin === 'unknown') { Object.assign(data, { uploadState: 'success', }); return; } - const cos = (0, index_backend_1.getCosBackend)(origin); + const cos = (0, index_backend_1.getCosBackend)(configOrigin); if (!cos) { - throw new Exception_1.OakException(`origin为${origin}的extraFile没有定义Cos类,请调用registerCos注入`); + throw new Exception_1.OakException(`origin为${configOrigin}的extraFile没有定义Cos类,请调用registerCos注入`); } await cos.formUploadMeta(context.getApplication(), data); Object.assign(data, { diff --git a/lib/triggers/index.d.ts b/lib/triggers/index.d.ts index 40965ed78..ecc59871a 100644 --- a/lib/triggers/index.d.ts +++ b/lib/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; +declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; export default _default; diff --git a/lib/triggers/toDo.d.ts b/lib/triggers/toDo.d.ts index 1d9bc2ce2..e5be399e1 100644 --- a/lib/triggers/toDo.d.ts +++ b/lib/triggers/toDo.d.ts @@ -14,7 +14,7 @@ export declare function createToDo; +}, userIds?: string[]): Promise<1 | 0>; /** * 完成todo例程,当在entity对象上进行action操作时(操作条件是filter),将对应的todo完成 * 必须在entity的action的后trigger中调用 diff --git a/lib/types/Config.d.ts b/lib/types/Config.d.ts index fb5537224..36e54fe4a 100644 --- a/lib/types/Config.d.ts +++ b/lib/types/Config.d.ts @@ -169,6 +169,7 @@ export type Config = { tencent?: TencentYunCosConfig; local?: LocalCosConfig; s3?: S3CosConfig; + defaultOrigin?: CosOrigin; }; Live?: { qiniu?: QiniuLiveConfig; @@ -202,5 +203,6 @@ export type Config = { passwordVerifyGap?: number; }; }; -export type Origin = 'ali' | 'tencent' | 'qiniu' | 'amap' | 'ctyun' | 'local'; +export type AccountOrigin = 'ali' | 'tencent' | 'qiniu' | 'amap' | 'ctyun' | 'local' | 's3'; +export type CosOrigin = 'qiniu' | 'wechat' | 'ctyun' | 'aliyun' | 'tencent' | 'local' | 'unknown' | 's3'; export type Service = 'Map' | 'Cos' | 'Live' | 'Sms' | 'Emails'; diff --git a/lib/utils/getContextConfig.d.ts b/lib/utils/getContextConfig.d.ts index 7b0c28136..249030146 100644 --- a/lib/utils/getContextConfig.d.ts +++ b/lib/utils/getContextConfig.d.ts @@ -1,11 +1,11 @@ -import { Origin, Service, Config } from '../types/Config'; +import { AccountOrigin, Service, Config } from '../types/Config'; /** * @param systemConfig * @param service * @param origin * @returns */ -export declare function getConfig(systemConfig: Config, service: Service, origin: Origin): { +export declare function getConfig(systemConfig: Config, service: Service, origin: AccountOrigin): { instance: import("oak-external-sdk").ALiYunInstance; config: any; } | { @@ -20,6 +20,9 @@ export declare function getConfig(systemConfig: Config, service: Service, origin } | { instance: import("oak-external-sdk").LocalInstance; config: any; +} | { + instance: import("oak-external-sdk").S3Instance; + config: any; } | { instance: import("oak-external-sdk").AmapInstance; config: any; diff --git a/lib/utils/getContextConfig.js b/lib/utils/getContextConfig.js index b50dc75e3..d96904af7 100644 --- a/lib/utils/getContextConfig.js +++ b/lib/utils/getContextConfig.js @@ -63,6 +63,15 @@ function getConfig(systemConfig, service, origin) { config: originConfig, }; } + case 's3': { + const s3Account = originCloudAccounts.find((ele) => ele.accessKey === originConfig.accessKey); + (0, assert_1.assert)(s3Account, `调用的服务${service}源${origin}找不到相应的平台帐号,请联系管理员`); + const s3Instance = oak_external_sdk_1.S3SDK.getInstance(s3Account.accessKey, s3Account.secretKey); + return { + instance: s3Instance, + config: originConfig, + }; + } default: { (0, assert_1.assert)(origin === 'amap'); const amapAccount = originCloudAccounts.find((ele) => ele.webApiKey === originConfig.webApiKey); diff --git a/lib/utils/livestream.d.ts b/lib/utils/livestream.d.ts index 74c945ac1..10b0c2274 100644 --- a/lib/utils/livestream.d.ts +++ b/lib/utils/livestream.d.ts @@ -1,7 +1,7 @@ import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity'; import { EntityDict } from '../oak-app-domain'; import { Schema as Livestream } from '../oak-app-domain/Livestream/Schema'; -import { Origin } from '../types/Config'; +import { AccountOrigin } from '../types/Config'; import { BackendRuntimeContext } from '../context/BackendRuntimeContext'; /** * 创建直播流并生成推拉流地址 @@ -11,7 +11,7 @@ import { BackendRuntimeContext } from '../context/BackendRuntimeContext'; * @returns Livestream 对象 */ export declare function getLivestream>(params: { - origin: Origin; + origin: AccountOrigin; streamTitle: string; expireAt: number; }, context: Cxt): Promise>; @@ -23,12 +23,12 @@ export declare function getLivestream>(params: { - origin: Origin; + origin: AccountOrigin; streamTitle: string; expireAt: number; }, context: Cxt): Promise>; export declare function getPlayBackUrl>(params: { - origin: Origin; + origin: AccountOrigin; streamTitle: string; start: number; end: number; diff --git a/src/entities/Application.ts b/src/entities/Application.ts index 8d180f961..52ffbdbd9 100644 --- a/src/entities/Application.ts +++ b/src/entities/Application.ts @@ -6,7 +6,8 @@ import { Schema as Domain } from './Domain'; import { Style } from '../types/Style'; import { EntityDesc } from 'oak-domain/lib/types/EntityDesc'; -import { CosOrigin } from '../types/Config'; + +export type CosOrigin = 'qiniu' | 'wechat' | 'ctyun' | 'aliyun' | 'tencent' | 'local' | 'unknown' | 's3'; export type AppType = 'web' | 'wechatMp' | 'wechatPublic' | 'native'; export type WechatMpConfig = {