UNPKG

@convo-lang/convo-lang-aws-cdk

Version:
83 lines 3.76 kB
"use strict"; 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