@convo-lang/convo-lang-aws-cdk
Version:
The language of AI
83 lines • 3.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConvoLangConstruct = void 0;
const convo_lang_1 = require("@convo-lang/convo-lang");
const cdk_common_1 = require("@iyio/cdk-common");
const cdk = require("aws-cdk-lib");
const db = require("aws-cdk-lib/aws-dynamodb");
const iam = require("aws-cdk-lib/aws-iam");
const secrets = require("aws-cdk-lib/aws-secretsmanager");
const constructs_1 = require("constructs");
const convo_lang_aws_cdk_deps_1 = require("./convo-lang-aws-cdk.deps");
class ConvoLangConstruct extends constructs_1.Construct {
constructor(scope, id, { managed = (0, cdk_common_1.getDefaultManagedProps)(), defaultFnProps, fnName = "ConvoLangApiFn", anonUsdCap, anonUsdCapTotal, grantAccess, handleQuotas = anonUsdCap !== undefined || anonUsdCapTotal !== undefined, } = {}) {
super(scope, id);
const { params } = managed;
let getQName = fnName;
if (getQName.endsWith('Fn')) {
getQName = getQName.substring(0, getQName.length - 2);
}
getQName += 'GetTokenQuotaFn';
const fnsInfo = [{
name: fnName,
arnParam: convo_lang_aws_cdk_deps_1.convoLangApiFnArnParam,
urlParam: convo_lang_aws_cdk_deps_1.convoLangApiFnUrlParam,
grantAccess,
createProps: {
createPublicUrl: true,
bundledHandlerFileNames: [
'../../dist/packages/convo-lang-aws-cdk/handlers/ConvoLangApi',
'../../node_modules/@convo-lang/convo-lang-aws-cdk/handlers/ConvoLangApi',
],
timeoutMs: 1000 * 60 * 5,
...defaultFnProps,
},
}];
const fnBuilder = new cdk_common_1.FnsBuilder(this, "Fns", {
fnsInfo,
managed,
});
this.fnBuilder = fnBuilder;
const handlerFn = fnBuilder.fns.find(f => f.info.name === fnName)?.fn;
if (!handlerFn) {
throw new Error('FnsBuilder did not create a matching named fn');
}
this.handlerFn = handlerFn;
handlerFn.func.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
"bedrock:InvokeModel"
],
resources: ["*"],
}));
if (anonUsdCap !== undefined) {
handlerFn.func.addEnvironment(convo_lang_aws_cdk_deps_1.convoLangAnonUsdCapParam.typeName, anonUsdCap.toString());
}
if (anonUsdCapTotal !== undefined) {
handlerFn.func.addEnvironment(convo_lang_aws_cdk_deps_1.convoLangAnonUsdCapTotalParam.typeName, anonUsdCapTotal.toString());
}
if (handleQuotas) {
const capTable = new db.Table(this, 'Caps', {
tableClass: db.TableClass.STANDARD,
billingMode: db.BillingMode.PAY_PER_REQUEST,
partitionKey: {
name: 'id',
type: db.AttributeType.STRING,
},
removalPolicy: cdk.RemovalPolicy.RETAIN,
});
capTable.grantFullAccess(handlerFn.func);
(0, cdk_common_1.grantTableQueryPerms)(handlerFn.func, capTable);
if (params) {
params.setParam(convo_lang_aws_cdk_deps_1.convoLangCapsTableParam, capTable.tableArn);
}
}
const secret = new secrets.Secret(this, 'ApiKey');
secret.grantRead(handlerFn.func);
if (params) {
params.setParam(convo_lang_1.openAiSecretsParam, secret.secretArn);
}
}
}
exports.ConvoLangConstruct = ConvoLangConstruct;
//# sourceMappingURL=ConvoLangConstruct.js.map