This commit is contained in:
Pan Qiancheng 2025-12-02 18:05:37 +08:00
parent 20708057da
commit ee57c1e932
83 changed files with 721 additions and 164 deletions

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "article", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "articleMenu", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "article", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "articleMenu", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -77,7 +77,12 @@ export class ExtraFile extends Feature {
const up = new Upload();
const cos = getCos(extraFile.origin);
try {
await cos.upload(extraFile, up.uploadFile, file, this.uploadToAspect.bind(this));
await cos.upload({
extraFile: extraFile,
uploadFn: up.uploadFile,
file: file,
uploadToAspect: this.uploadToAspect.bind(this),
});
}
catch (err) {
item.state = 'failed';
@ -135,7 +140,12 @@ export class ExtraFile extends Feature {
return "unknown";
}
const cos = getCos(origin);
return cos.composeFileUrl(this.application.getApplication(), extraFile, style);
return cos.composeFileUrl({
application: this.application.getApplication(),
extraFile: extraFile,
style: style,
cache: this.cache,
});
}
getFileState(id) {
if (this.files[id]) {
@ -171,7 +181,13 @@ export class ExtraFile extends Feature {
this.fileUpLoad = up;
try {
const cos = getCos(newExtraFile.origin);
await cos.upload(newExtraFile, up.uploadFile, file, this.uploadToAspect.bind(this), getPercent);
await cos.upload({
extraFile: newExtraFile,
uploadFn: up.uploadFile,
file: file,
uploadToAspect: this.uploadToAspect.bind(this),
getPercent: getPercent,
});
if (!cos.autoInform()) {
await this.cache.exec('operate', {
entity: 'extraFile',

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<1 | 0>;
}, userIds?: string[]): Promise<0 | 1>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

23
es/types/Cos.d.ts vendored
View File

@ -1,5 +1,6 @@
import { EntityDict } from '../oak-app-domain';
import { BRC } from '..';
import { Cache } from 'oak-frontend-base/es/features/cache';
export type UploadFn = (file: File | string, name: string, // 文件的part name
uploadUrl: string, // 上传的url
formData: Record<string, any>, // 上传的其它part参数
@ -26,11 +27,22 @@ export interface Cos<ED extends EntityDict> {
* @param extraFile
* @returns
*/
upload: (extraFile: ED['extraFile']['OpSchema'], uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function) => Promise<void>;
upload: (options: {
extraFile: ED['extraFile']['OpSchema'];
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}) => Promise<void>;
/**
* 访urlurl应当和objectId一对一映射extraFile之间共享cos上的路径
*/
composeFileUrl: (application: Partial<ED['application']['Schema']>, extraFile: Partial<ED['extraFile']['OpSchema']>, style?: string) => string;
composeFileUrl: (options: {
application: Partial<ED['application']['Schema']>;
extraFile: Partial<ED['extraFile']['OpSchema']>;
cache: Cache<ED>;
style?: string;
}) => string;
}
export interface CosBackend<ED extends EntityDict> {
name: string;
@ -45,7 +57,12 @@ export interface CosBackend<ED extends EntityDict> {
/**
* 访urlurl应当和objectId一对一映射extraFile之间共享cos上的路径
*/
composeFileUrlBackend: (application: ED['application']['Schema'], extraFile: ED['extraFile']['OpSchema'], context: BRC<ED>, style?: string) => Promise<string>;
composeFileUrlBackend: (options: {
application: ED['application']['Schema'];
extraFile: ED['extraFile']['OpSchema'];
context: BRC<ED>;
style?: string;
}) => Promise<string>;
/**
* upload是否成功不确定的文件OSS发起主动确认
* @param extraFile

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class ALiYunBackend extends ALiYun implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -10,8 +10,25 @@ export default class ALiYunBackend extends ALiYun {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: aliyunCosConfig } = this.getConfig(application);
if (aliyunCosConfig) {
let bucket = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class ALiYun implements Cos<EntityDict> {
account: import("../../types/Config").AliCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -24,7 +24,8 @@ export default class ALiYun {
assert(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -57,7 +58,8 @@ export default class ALiYun {
}
throw new OakUploadException('文件上传阿里云失败');
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: aliyunCosConfig } = this.getConfig(application);
if (aliyunCosConfig) {
let bucket = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class CTYunBackend extends CTYun implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -10,8 +10,25 @@ export default class CTYunBackend extends CTYun {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: ctYunCosConfig } = this.getConfig(application);
if (ctYunCosConfig) {
let bucket = ctYunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class CTYun implements Cos<EntityDict> {
account: import("../../types/Config").CTYunCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -24,7 +24,8 @@ export default class CTYun {
assert(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -67,7 +68,8 @@ export default class CTYun {
// 转换参数如120w_120h_90q由一个或多个键值对以"_"连接)组成,“值”在前“键”在后,“值”为数字类型,“键”为一位字母。
// 转换格式(如.jpg是指定图片转换的输出格式通过指定转换格式可以对原图处理并返回指定的图片格式。支持的转换格式为 jpg、webp、png、bmp。
// 对象存储文档 https://www.ctyun.cn/document/10026693/10026878
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: ctYunCosConfig } = this.getConfig(application);
if (ctYunCosConfig) {
let bucket = ctYunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -30,5 +30,7 @@ export function getCosBackend(origin) {
export async function composeFileUrlBackend(application, extraFile, context, style) {
const { origin } = extraFile;
const cos = CosBackendDict[origin];
return cos.composeFileUrlBackend(application, extraFile, context, style);
return cos.composeFileUrlBackend({
application, extraFile, context, style
});
}

View File

@ -1,4 +1,5 @@
import { EntityDict } from '../../oak-app-domain';
import { Cache } from 'oak-frontend-base/es/features/cache';
import { Cos } from '../../types/Cos';
/**
* OSS上实现的uploader类
@ -6,4 +7,9 @@ import { Cos } from '../../types/Cos';
*/
export declare function registerCos<ED extends EntityDict>(clazz: new () => Cos<ED>): void;
export declare function getCos<ED extends EntityDict>(origin: string): Cos<ED>;
export declare function composeFileUrl<ED extends EntityDict>(application: Partial<ED['application']['Schema']>, extraFile: Partial<ED['extraFile']['OpSchema']>, style?: string): string;
export declare function composeFileUrl<ED extends EntityDict>(options: {
application: Partial<ED['application']['Schema']>;
extraFile: Partial<ED['extraFile']['OpSchema']>;
style?: string;
cache: Cache<ED>;
}): string;

View File

@ -15,8 +15,8 @@ export function getCos(origin) {
assert(CosDict.hasOwnProperty(origin));
return CosDict[origin];
}
export function composeFileUrl(application, extraFile, style) {
const { origin } = extraFile;
export function composeFileUrl(options) {
const { origin } = options.extraFile;
const cos = CosDict[origin];
return cos.composeFileUrl(application, extraFile, style);
return cos.composeFileUrl(options);
}

View File

@ -5,7 +5,12 @@ import Local from './local';
import { BRC } from '../..';
export default class LocalBackend extends Local implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -10,8 +10,23 @@ export default class LocalBackend extends Local {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: localConfig } = this.getConfig(application);
let bucket = localConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol, nginxPath } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}${nginxPath ? '/' + nginxPath : ''}/${this.formKey(extraFile)}${style ? style : ''}`;
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class Local implements Cos<EntityDict> {
account: import("../../types/Config").LocalCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -24,7 +24,8 @@ export default class Local {
assert(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
let result;
const { applicationId, type, extra2, id } = extraFile;
try {
@ -45,8 +46,8 @@ export default class Local {
throw new OakUploadException('文件上传服务器失败');
}
}
composeFileUrl(application, extraFile, style //多媒体样式
) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: localConfig } = this.getConfig(application);
let bucket = localConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {

View File

@ -5,7 +5,12 @@ import Qiniu from './qiniu';
import { BRC } from '../..';
export default class QiniuBackend extends Qiniu implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -11,8 +11,25 @@ export default class QiniuBackend extends Qiniu {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: qiniuCosConfig } = this.getConfig(application);
if (qiniuCosConfig) {
let bucket = qiniuCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class Qiniu implements Cos<EntityDict> {
account: import("../../types/Config").QiniuCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -24,7 +24,8 @@ export default class Qiniu {
assert(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -62,8 +63,8 @@ export default class Qiniu {
// 对于图片文件 1.png ,访问样式链接 https://{domain}/1.png-small.jpg即可获得处理后的 jpg 格式图片
// "-"是默认的样式分隔符,
// 查看文档 https://developer.qiniu.com/kodo/8558/set-the-picture-style
composeFileUrl(application, extraFile, style //多媒体样式
) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: qiniuCosConfig } = this.getConfig(application);
if (qiniuCosConfig) {
let bucket = qiniuCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class S3Backend extends S3 implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -19,8 +19,30 @@ export default class S3Backend extends S3 {
endpoint,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: s3CosConfig, endpoint } = this.getConfig(application);
if (s3CosConfig) {
let bucket = s3CosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol, pathStyle } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
const key = this.formKey(extraFile);
// 如果使用 pathStyle (Minio 常用)
if (pathStyle && endpoint) {
return `${protocol2}//${domain}/${bucket.name}/${key}${style ? style : ''}`;
}
// 否则使用虚拟主机风格 (AWS S3 默认)
return `${protocol2}//${domain}/${key}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

14
es/utils/cos/s3.d.ts vendored
View File

@ -12,6 +12,16 @@ export default class S3 implements Cos<EntityDict> {
defaultBucket: string;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -26,7 +26,8 @@ export default class S3 {
assert(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -52,7 +53,8 @@ export default class S3 {
}
throw new OakUploadException('文件上传S3失败');
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: s3CosConfig, endpoint } = this.getConfig(application);
if (s3CosConfig) {
let bucket = s3CosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class TencentYunBackend extends TencentYun implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -10,8 +10,25 @@ export default class TencentYunBackend extends TencentYun {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: tencentCosConfig } = this.getConfig(application);
if (tencentCosConfig) {
let bucket = tencentCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class TencentYun implements Cos<EntityDict> {
account: import("../../types/Config").TencentCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -25,7 +25,8 @@ export default class TencentYun {
assert(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -61,7 +62,8 @@ export default class TencentYun {
}
throw new OakUploadException('文件上传腾讯云失败');
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: tencentCosConfig } = this.getConfig(application);
if (tencentCosConfig) {
let bucket = tencentCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import Unknown from './unknown';
import { BRC } from '../..';
export default class UnknownBackend extends Unknown implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -3,8 +3,9 @@ export default class UnknownBackend extends Unknown {
getConfigAndInstance(application) {
return {};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
return extraFile.extra1;
}
async formUploadMeta(application, extraFile) {
}

View File

@ -6,6 +6,16 @@ export default class Unknown implements Cos<EntityDict> {
autoInform(): boolean;
protected getConfig(application: EntityDict['application']['Schema']): {};
protected formKey(extraFile: OpSchema): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -13,12 +13,13 @@ export default class Unknown {
assert(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
throw new OakUploadException('unknown未实现上传');
}
// 类型unknown 只能从extra1取值
composeFileUrl(application, extraFile, style //多媒体样式
) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
return extraFile.extra1;
}
}

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class WechatBackend extends Wechat implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<any>;

View File

@ -9,8 +9,9 @@ export default class WechatBackend extends Wechat {
type,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
return '';
}
async formUploadMeta(application, extraFile) {
// 微信上传素材库

View File

@ -9,6 +9,16 @@ export default class Wechat implements Cos<EntityDict> {
config: WechatPublicConfig;
type: "wechatPublic";
};
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -14,7 +14,8 @@ export default class Wechat {
type: application.type,
};
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
let result;
const { applicationId, type, extra2, id } = extraFile;
assert(type === 'image');
@ -38,7 +39,7 @@ export default class Wechat {
throw new OakUploadException('文件上传微信失败');
}
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
return '';
}
}

View File

@ -1,6 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.batchGetMaterialList = exports.getArticle = exports.batchGetArticle = exports.deleteMaterial = exports.getMaterial = exports.uploadWechatMedia = exports.signatureJsSDK = exports.getApplication = void 0;
exports.getApplication = getApplication;
exports.signatureJsSDK = signatureJsSDK;
exports.uploadWechatMedia = uploadWechatMedia;
exports.getMaterial = getMaterial;
exports.deleteMaterial = deleteMaterial;
exports.batchGetArticle = batchGetArticle;
exports.getArticle = getArticle;
exports.batchGetMaterialList = batchGetMaterialList;
const tslib_1 = require("tslib");
const assert_1 = require("oak-domain/lib/utils/assert");
const Projection_1 = require("../types/Projection");
@ -114,7 +121,6 @@ async function getApplication(params, context) {
}
}
}
exports.getApplication = getApplication;
async function signatureJsSDK({ url, env }, context) {
const application = context.getApplication();
const { type, config } = application;
@ -125,7 +131,6 @@ async function signatureJsSDK({ url, env }, context) {
const result = await wechatInstance.signatureJsSDK({ url });
return result;
}
exports.signatureJsSDK = signatureJsSDK;
async function uploadWechatMedia(params, // FormData表单提交 isPermanent 变成 'true' | 'false'
context) {
const { applicationId, file, type: mediaType, description, extraFileId, } = params;
@ -206,7 +211,6 @@ context) {
mediaId,
};
}
exports.uploadWechatMedia = uploadWechatMedia;
async function getMaterial(params, context) {
const { mediaId, applicationId, isPermanent = false } = params;
(0, assert_1.assert)(applicationId);
@ -251,7 +255,6 @@ async function getMaterial(params, context) {
}
return result;
}
exports.getMaterial = getMaterial;
async function deleteMaterial(params, context) {
const { mediaId, applicationId } = params;
(0, assert_1.assert)(applicationId);
@ -275,7 +278,6 @@ async function deleteMaterial(params, context) {
});
return result;
}
exports.deleteMaterial = deleteMaterial;
async function batchGetArticle(params, context) {
const { applicationId, offset, count, noContent } = params;
(0, assert_1.assert)(applicationId);
@ -302,7 +304,6 @@ async function batchGetArticle(params, context) {
});
return result;
}
exports.batchGetArticle = batchGetArticle;
async function getArticle(params, context) {
const { applicationId, articleId } = params;
(0, assert_1.assert)(applicationId);
@ -327,7 +328,6 @@ async function getArticle(params, context) {
});
return result;
}
exports.getArticle = getArticle;
async function batchGetMaterialList(params, context) {
const { applicationId } = params;
(0, assert_1.assert)(applicationId);
@ -355,4 +355,3 @@ async function batchGetMaterialList(params, context) {
});
return result;
}
exports.batchGetMaterialList = batchGetMaterialList;

View File

@ -1,6 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteMenu = exports.deleteConditionalMenu = exports.createConditionalMenu = exports.createMenu = exports.getMenu = exports.getCurrentMenu = void 0;
exports.getCurrentMenu = getCurrentMenu;
exports.getMenu = getMenu;
exports.createMenu = createMenu;
exports.createConditionalMenu = createConditionalMenu;
exports.deleteConditionalMenu = deleteConditionalMenu;
exports.deleteMenu = deleteMenu;
const tslib_1 = require("tslib");
const WechatSDK_1 = tslib_1.__importDefault(require("oak-external-sdk/lib/WechatSDK"));
const assert_1 = require("oak-domain/lib/utils/assert");
@ -39,7 +44,6 @@ async function getCurrentMenu(params, context) {
throw e;
}
}
exports.getCurrentMenu = getCurrentMenu;
async function getMenu(params, context) {
const application = await getWechatPublicConfig(params.applicationId, context);
(0, assert_1.assert)(application);
@ -66,7 +70,6 @@ async function getMenu(params, context) {
throw e;
}
}
exports.getMenu = getMenu;
async function createMenu(params, context) {
const application = await getWechatPublicConfig(params.applicationId, context);
(0, assert_1.assert)(application);
@ -104,7 +107,6 @@ async function createMenu(params, context) {
throw e;
}
}
exports.createMenu = createMenu;
async function createConditionalMenu(params, context) {
const application = await getWechatPublicConfig(params.applicationId, context);
(0, assert_1.assert)(application);
@ -143,7 +145,6 @@ async function createConditionalMenu(params, context) {
throw e;
}
}
exports.createConditionalMenu = createConditionalMenu;
async function deleteConditionalMenu(params, context) {
const application = await getWechatPublicConfig(params.applicationId, context);
(0, assert_1.assert)(application);
@ -157,7 +158,6 @@ async function deleteConditionalMenu(params, context) {
const result = await wechatInstance.deleteConditionalMenu(params.menuId);
return result;
}
exports.deleteConditionalMenu = deleteConditionalMenu;
async function deleteMenu(params, context) {
const application = await getWechatPublicConfig(params.applicationId, context);
(0, assert_1.assert)(application);
@ -171,4 +171,3 @@ async function deleteMenu(params, context) {
const result = await wechatInstance.deleteMenu();
return result;
}
exports.deleteMenu = deleteMenu;

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "article", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "articleMenu", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "article", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "articleMenu", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -80,7 +80,12 @@ class ExtraFile extends Feature_1.Feature {
const up = new upload_1.Upload();
const cos = (0, index_frontend_1.getCos)(extraFile.origin);
try {
await cos.upload(extraFile, up.uploadFile, file, this.uploadToAspect.bind(this));
await cos.upload({
extraFile: extraFile,
uploadFn: up.uploadFile,
file: file,
uploadToAspect: this.uploadToAspect.bind(this),
});
}
catch (err) {
item.state = 'failed';
@ -138,7 +143,12 @@ class ExtraFile extends Feature_1.Feature {
return "unknown";
}
const cos = (0, index_frontend_1.getCos)(origin);
return cos.composeFileUrl(this.application.getApplication(), extraFile, style);
return cos.composeFileUrl({
application: this.application.getApplication(),
extraFile: extraFile,
style: style,
cache: this.cache,
});
}
getFileState(id) {
if (this.files[id]) {
@ -174,7 +184,13 @@ class ExtraFile extends Feature_1.Feature {
this.fileUpLoad = up;
try {
const cos = (0, index_frontend_1.getCos)(newExtraFile.origin);
await cos.upload(newExtraFile, up.uploadFile, file, this.uploadToAspect.bind(this), getPercent);
await cos.upload({
extraFile: newExtraFile,
uploadFn: up.uploadFile,
file: file,
uploadToAspect: this.uploadToAspect.bind(this),
getPercent: getPercent,
});
if (!cos.autoInform()) {
await this.cache.exec('operate', {
entity: 'extraFile',

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<1 | 0>;
}, userIds?: string[]): Promise<0 | 1>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

23
lib/types/Cos.d.ts vendored
View File

@ -1,5 +1,6 @@
import { EntityDict } from '../oak-app-domain';
import { BRC } from '..';
import { Cache } from 'oak-frontend-base/es/features/cache';
export type UploadFn = (file: File | string, name: string, // 文件的part name
uploadUrl: string, // 上传的url
formData: Record<string, any>, // 上传的其它part参数
@ -26,11 +27,22 @@ export interface Cos<ED extends EntityDict> {
* @param extraFile
* @returns
*/
upload: (extraFile: ED['extraFile']['OpSchema'], uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function) => Promise<void>;
upload: (options: {
extraFile: ED['extraFile']['OpSchema'];
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}) => Promise<void>;
/**
* 访urlurl应当和objectId一对一映射extraFile之间共享cos上的路径
*/
composeFileUrl: (application: Partial<ED['application']['Schema']>, extraFile: Partial<ED['extraFile']['OpSchema']>, style?: string) => string;
composeFileUrl: (options: {
application: Partial<ED['application']['Schema']>;
extraFile: Partial<ED['extraFile']['OpSchema']>;
cache: Cache<ED>;
style?: string;
}) => string;
}
export interface CosBackend<ED extends EntityDict> {
name: string;
@ -45,7 +57,12 @@ export interface CosBackend<ED extends EntityDict> {
/**
* 访urlurl应当和objectId一对一映射extraFile之间共享cos上的路径
*/
composeFileUrlBackend: (application: ED['application']['Schema'], extraFile: ED['extraFile']['OpSchema'], context: BRC<ED>, style?: string) => Promise<string>;
composeFileUrlBackend: (options: {
application: ED['application']['Schema'];
extraFile: ED['extraFile']['OpSchema'];
context: BRC<ED>;
style?: string;
}) => Promise<string>;
/**
* upload是否成功不确定的文件OSS发起主动确认
* @param extraFile

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class ALiYunBackend extends ALiYun implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -13,8 +13,25 @@ class ALiYunBackend extends aliyun_1.default {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: aliyunCosConfig } = this.getConfig(application);
if (aliyunCosConfig) {
let bucket = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class ALiYun implements Cos<EntityDict> {
account: import("../../types/Config").AliCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -26,7 +26,8 @@ class ALiYun {
(0, assert_1.assert)(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -59,7 +60,8 @@ class ALiYun {
}
throw new Exception_1.OakUploadException('文件上传阿里云失败');
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: aliyunCosConfig } = this.getConfig(application);
if (aliyunCosConfig) {
let bucket = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class CTYunBackend extends CTYun implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -13,8 +13,25 @@ class CTYunBackend extends ctyun_1.default {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: ctYunCosConfig } = this.getConfig(application);
if (ctYunCosConfig) {
let bucket = ctYunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class CTYun implements Cos<EntityDict> {
account: import("../../types/Config").CTYunCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -26,7 +26,8 @@ class CTYun {
(0, assert_1.assert)(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -69,7 +70,8 @@ class CTYun {
// 转换参数如120w_120h_90q由一个或多个键值对以"_"连接)组成,“值”在前“键”在后,“值”为数字类型,“键”为一位字母。
// 转换格式(如.jpg是指定图片转换的输出格式通过指定转换格式可以对原图处理并返回指定的图片格式。支持的转换格式为 jpg、webp、png、bmp。
// 对象存储文档 https://www.ctyun.cn/document/10026693/10026878
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: ctYunCosConfig } = this.getConfig(application);
if (ctYunCosConfig) {
let bucket = ctYunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -36,5 +36,7 @@ function getCosBackend(origin) {
async function composeFileUrlBackend(application, extraFile, context, style) {
const { origin } = extraFile;
const cos = CosBackendDict[origin];
return cos.composeFileUrlBackend(application, extraFile, context, style);
return cos.composeFileUrlBackend({
application, extraFile, context, style
});
}

View File

@ -1,4 +1,5 @@
import { EntityDict } from '../../oak-app-domain';
import { Cache } from 'oak-frontend-base/es/features/cache';
import { Cos } from '../../types/Cos';
/**
* OSS上实现的uploader类
@ -6,4 +7,9 @@ import { Cos } from '../../types/Cos';
*/
export declare function registerCos<ED extends EntityDict>(clazz: new () => Cos<ED>): void;
export declare function getCos<ED extends EntityDict>(origin: string): Cos<ED>;
export declare function composeFileUrl<ED extends EntityDict>(application: Partial<ED['application']['Schema']>, extraFile: Partial<ED['extraFile']['OpSchema']>, style?: string): string;
export declare function composeFileUrl<ED extends EntityDict>(options: {
application: Partial<ED['application']['Schema']>;
extraFile: Partial<ED['extraFile']['OpSchema']>;
style?: string;
cache: Cache<ED>;
}): string;

View File

@ -21,8 +21,8 @@ function getCos(origin) {
(0, assert_1.assert)(CosDict.hasOwnProperty(origin));
return CosDict[origin];
}
function composeFileUrl(application, extraFile, style) {
const { origin } = extraFile;
function composeFileUrl(options) {
const { origin } = options.extraFile;
const cos = CosDict[origin];
return cos.composeFileUrl(application, extraFile, style);
return cos.composeFileUrl(options);
}

View File

@ -5,7 +5,12 @@ import Local from './local';
import { BRC } from '../..';
export default class LocalBackend extends Local implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -13,8 +13,23 @@ class LocalBackend extends local_1.default {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: localConfig } = this.getConfig(application);
let bucket = localConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol, nginxPath } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}${nginxPath ? '/' + nginxPath : ''}/${this.formKey(extraFile)}${style ? style : ''}`;
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class Local implements Cos<EntityDict> {
account: import("../../types/Config").LocalCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -26,7 +26,8 @@ class Local {
(0, assert_1.assert)(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
let result;
const { applicationId, type, extra2, id } = extraFile;
try {
@ -47,8 +48,8 @@ class Local {
throw new Exception_1.OakUploadException('文件上传服务器失败');
}
}
composeFileUrl(application, extraFile, style //多媒体样式
) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: localConfig } = this.getConfig(application);
let bucket = localConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {

View File

@ -5,7 +5,12 @@ import Qiniu from './qiniu';
import { BRC } from '../..';
export default class QiniuBackend extends Qiniu implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -14,8 +14,25 @@ class QiniuBackend extends qiniu_1.default {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: qiniuCosConfig } = this.getConfig(application);
if (qiniuCosConfig) {
let bucket = qiniuCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class Qiniu implements Cos<EntityDict> {
account: import("../../types/Config").QiniuCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -26,7 +26,8 @@ class Qiniu {
(0, assert_1.assert)(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -64,8 +65,8 @@ class Qiniu {
// 对于图片文件 1.png ,访问样式链接 https://{domain}/1.png-small.jpg即可获得处理后的 jpg 格式图片
// "-"是默认的样式分隔符,
// 查看文档 https://developer.qiniu.com/kodo/8558/set-the-picture-style
composeFileUrl(application, extraFile, style //多媒体样式
) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: qiniuCosConfig } = this.getConfig(application);
if (qiniuCosConfig) {
let bucket = qiniuCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class S3Backend extends S3 implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -22,8 +22,30 @@ class S3Backend extends s3_1.default {
endpoint,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: s3CosConfig, endpoint } = this.getConfig(application);
if (s3CosConfig) {
let bucket = s3CosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol, pathStyle } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
const key = this.formKey(extraFile);
// 如果使用 pathStyle (Minio 常用)
if (pathStyle && endpoint) {
return `${protocol2}//${domain}/${bucket.name}/${key}${style ? style : ''}`;
}
// 否则使用虚拟主机风格 (AWS S3 默认)
return `${protocol2}//${domain}/${key}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

14
lib/utils/cos/s3.d.ts vendored
View File

@ -12,6 +12,16 @@ export default class S3 implements Cos<EntityDict> {
defaultBucket: string;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -28,7 +28,8 @@ class S3 {
(0, assert_1.assert)(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -54,7 +55,8 @@ class S3 {
}
throw new Exception_1.OakUploadException('文件上传S3失败');
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: s3CosConfig, endpoint } = this.getConfig(application);
if (s3CosConfig) {
let bucket = s3CosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class TencentYunBackend extends TencentYun implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -13,8 +13,25 @@ class TencentYunBackend extends tencent_1.default {
instance,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
const { config: tencentCosConfig } = this.getConfig(application);
if (tencentCosConfig) {
let bucket = tencentCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
if (bucket) {
const { domain, protocol } = bucket;
let protocol2 = protocol;
if (protocol instanceof Array) {
// protocol存在https: 说明域名有证书
const index = protocol.includes('https:')
? protocol.findIndex((ele) => ele === 'https:')
: 0;
protocol2 = protocol[index];
}
return `${protocol2}//${domain}/${this.formKey(extraFile)}${style ? style : ''}`;
}
}
return '';
}
async formUploadMeta(application, extraFile) {
const { bucket } = extraFile;

View File

@ -10,6 +10,16 @@ export default class TencentYun implements Cos<EntityDict> {
account: import("../../types/Config").TencentCloudConfig;
};
protected formKey(extraFile: Partial<OpSchema>): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -27,7 +27,8 @@ class TencentYun {
(0, assert_1.assert)(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
const uploadMeta = extraFile.uploadMeta;
let response;
try {
@ -63,7 +64,8 @@ class TencentYun {
}
throw new Exception_1.OakUploadException('文件上传腾讯云失败');
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
const { config: tencentCosConfig } = this.getConfig(application);
if (tencentCosConfig) {
let bucket = tencentCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);

View File

@ -5,7 +5,12 @@ import Unknown from './unknown';
import { BRC } from '../..';
export default class UnknownBackend extends Unknown implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;

View File

@ -6,8 +6,9 @@ class UnknownBackend extends unknown_1.default {
getConfigAndInstance(application) {
return {};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
return extraFile.extra1;
}
async formUploadMeta(application, extraFile) {
}

View File

@ -6,6 +6,16 @@ export default class Unknown implements Cos<EntityDict> {
autoInform(): boolean;
protected getConfig(application: EntityDict['application']['Schema']): {};
protected formKey(extraFile: OpSchema): string;
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -15,12 +15,13 @@ class Unknown {
(0, assert_1.assert)(objectId);
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
throw new Exception_1.OakUploadException('unknown未实现上传');
}
// 类型unknown 只能从extra1取值
composeFileUrl(application, extraFile, style //多媒体样式
) {
composeFileUrl(options) {
const { application, extraFile, style } = options;
return extraFile.extra1;
}
}

View File

@ -5,7 +5,12 @@ import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
import { BRC } from '../..';
export default class WechatBackend extends Wechat implements CosBackend<EntityDict> {
private getConfigAndInstance;
composeFileUrlBackend(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>, style?: string): Promise<string>;
composeFileUrlBackend(options: {
application: EntityDict['application']['Schema'];
extraFile: OpSchema;
context: BRC<EntityDict>;
style?: string;
}): Promise<string>;
formUploadMeta(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<void>;
checkWhetherSuccess(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<boolean>;
removeFile(application: EntityDict['application']['Schema'], extraFile: OpSchema): Promise<any>;

View File

@ -12,8 +12,9 @@ class WechatBackend extends wechat_1.default {
type,
};
}
async composeFileUrlBackend(application, extraFile, context, style) {
return this.composeFileUrl(application, extraFile, style);
async composeFileUrlBackend(options) {
const { application, extraFile, context, style } = options;
return '';
}
async formUploadMeta(application, extraFile) {
// 微信上传素材库

View File

@ -9,6 +9,16 @@ export default class Wechat implements Cos<EntityDict> {
config: WechatPublicConfig;
type: "wechatPublic";
};
upload(extraFile: OpSchema, uploadFn: UploadFn, file: string | File, uploadToAspect?: UploadToAspect, getPercent?: Function): Promise<void>;
composeFileUrl(application: Partial<EntityDict['application']['Schema']>, extraFile: Partial<EntityDict['extraFile']['OpSchema']>, style?: string): string;
upload(options: {
extraFile: OpSchema;
uploadFn: UploadFn;
file: string | File;
uploadToAspect?: UploadToAspect;
getPercent?: Function;
}): Promise<void>;
composeFileUrl(options: {
application: Partial<EntityDict['application']['Schema']>;
extraFile: Partial<EntityDict['extraFile']['OpSchema']>;
style?: string;
}): string;
}

View File

@ -16,7 +16,8 @@ class Wechat {
type: application.type,
};
}
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
async upload(options) {
const { extraFile, uploadFn, file, uploadToAspect, getPercent } = options;
let result;
const { applicationId, type, extra2, id } = extraFile;
(0, assert_1.assert)(type === 'image');
@ -40,7 +41,7 @@ class Wechat {
throw new Exception_1.OakUploadException('文件上传微信失败');
}
}
composeFileUrl(application, extraFile, style) {
composeFileUrl(options) {
return '';
}
}

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getConfig = void 0;
exports.getConfig = getConfig;
const assert_1 = require("oak-domain/lib/utils/assert");
const Exception_1 = require("oak-domain/lib/types/Exception");
const oak_external_sdk_1 = require("oak-external-sdk");
@ -84,4 +84,3 @@ function getConfig(systemConfig, service, origin) {
}
}
}
exports.getConfig = getConfig;