Merge pull request #6 from devsapp/wss/fc-endpoint

feat: support custom fc-endpoint when create fc client
This commit is contained in:
wss-git 2021-08-03 10:28:26 +08:00 committed by GitHub
commit ea689b8623
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 32 deletions

View File

@ -5,16 +5,45 @@ import HELP from './common/help';
import { InputProps, isProperties, IProperties } from './interface/entity'; import { InputProps, isProperties, IProperties } from './interface/entity';
// import StdoutFormatter from './common/stdout-formatter'; // import StdoutFormatter from './common/stdout-formatter';
import RemoteInvoke from './lib/remote-invoke'; import RemoteInvoke from './lib/remote-invoke';
import Client from './lib/client';
export default class FcRemoteInvoke { export default class FcRemoteInvoke {
async report(componentName: string, command: string, accountID: string): Promise<void> { /**
* event
* @param inputs
* @returns
*/
async invoke(inputs: InputProps): Promise<any> {
const {
props,
eventPayload,
credentials,
isHelp,
invocationType,
} = await this.handlerInputs(inputs);
await this.report('fc-remote-invoke', 'invoke', credentials?.AccountID);
if (isHelp) {
core.help(HELP);
return;
}
let fcClient;
if (!props.domainName) {
fcClient = await Client.buildFcClient(props.region, credentials);
}
const remoteInvoke = new RemoteInvoke(fcClient, credentials.AccountID);
await remoteInvoke.invoke(props, eventPayload, { invocationType });
}
private async report(componentName: string, command: string, accountID: string): Promise<void> {
core.reportComponent(componentName, { core.reportComponent(componentName, {
command, command,
uid: accountID, uid: accountID,
}); });
} }
async handlerInputs(inputs: InputProps): Promise<any> { private async handlerInputs(inputs: InputProps): Promise<any> {
// 去除 args 的行首以及行尾的空格 // 去除 args 的行首以及行尾的空格
const args: string = (inputs?.args || '').replace(/(^\s*)|(\s*$)/g, ''); const args: string = (inputs?.args || '').replace(/(^\s*)|(\s*$)/g, '');
logger.debug(`input args: ${args}`); logger.debug(`input args: ${args}`);
@ -85,27 +114,4 @@ export default class FcRemoteInvoke {
}; };
} }
/**
* event
* @param inputs
* @returns
*/
public async invoke(inputs: InputProps): Promise<any> {
const {
props,
eventPayload,
credentials,
isHelp,
invocationType,
} = await this.handlerInputs(inputs);
await this.report('fc-remote-invoke', 'invoke', credentials?.AccountID);
if (isHelp) {
core.help(HELP);
return;
}
const remoteInvoke = new RemoteInvoke(props.region, credentials, props.domainName);
await remoteInvoke.invoke(props, eventPayload, { invocationType });
}
} }

View File

@ -1,14 +1,24 @@
import FC from '@alicloud/fc2'; import FC from '@alicloud/fc2';
import * as core from '@serverless-devs/core';
import { ICredentials } from '../interface/entity'; import { ICredentials } from '../interface/entity';
export default class Client { export default class Client {
static buildFcClient(region: string, credentials: ICredentials) { static async buildFcClient(region: string, credentials: ICredentials) {
return new FC(credentials.AccountID, { return new FC(credentials.AccountID, {
accessKeyID: credentials.AccessKeyID, accessKeyID: credentials.AccessKeyID,
accessKeySecret: credentials.AccessKeySecret, accessKeySecret: credentials.AccessKeySecret,
securityToken: credentials.SecurityToken, securityToken: credentials.SecurityToken,
region, region,
endpoint: await this.getFcEndpoint(),
timeout: 6000000, timeout: 6000000,
}) })
} }
private static async getFcEndpoint(): Promise<string | undefined> {
const fcDefault = await core.loadComponent('devsapp/fc-default');
const fcEndpoint: string = await fcDefault.get({ args: 'fc-endpoint' });
if (!fcEndpoint) { return undefined; }
const enableFcEndpoint: any = await fcDefault.get({ args: 'enable-fc-endpoint' });
return (enableFcEndpoint === true || enableFcEndpoint === 'true') ? fcEndpoint : undefined;
}
} }

View File

@ -1,6 +1,5 @@
import _ from 'lodash'; import _ from 'lodash';
import got from 'got'; import got from 'got';
import Client from './client';
import { IProperties, IEventPayload } from '../interface/entity'; import { IProperties, IEventPayload } from '../interface/entity';
import Event from './event'; import Event from './event';
import logger from '../common/logger'; import logger from '../common/logger';
@ -9,11 +8,9 @@ export default class RemoteInvoke {
fcClient: any; fcClient: any;
accountId: string; accountId: string;
constructor(region: string, credentials, domainName) { constructor(fcClient: any, accountId: string) {
if (!domainName) { this.fcClient = fcClient;
this.accountId = credentials.AccountID; this.accountId = accountId;
this.fcClient = Client.buildFcClient(region, credentials);
}
} }
async invoke (props: IProperties, eventPayload: IEventPayload, { invocationType }) { async invoke (props: IProperties, eventPayload: IEventPayload, { invocationType }) {