Merge pull request #6 from devsapp/wss/fc-endpoint
feat: support custom fc-endpoint when create fc client
This commit is contained in:
commit
ea689b8623
56
src/index.ts
56
src/index.ts
|
@ -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 });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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 }) {
|
||||||
|
|
Loading…
Reference in New Issue