UNPKG

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

Version:
70 lines 2.58 kB
import { createUpdateExpression, dynamoClient } from "@iyio/aws-dynamo"; import { convoLangAnonUsdCapParam, convoLangAnonUsdCapTotalParam, convoLangCapsTableParam } from "./convo-lang-aws-cdk.deps.js"; const CapsTable = { name: "Caps", primaryKey: "id", tableIdParam: convoLangCapsTableParam, }; const _getCapAsync = async (id) => { let cap = await dynamoClient().getFromTableAsync(CapsTable, { id }); if (cap) { return cap; } cap = { id, usage: 0 }; await dynamoClient().putIntoTable(CapsTable, cap); return cap; }; export const getTokenQuotaAsync = (caller) => { const id = caller.remoteAddress || '0.0.0.0'; return _getCapAsync(id); }; export const checkTokenQuotaAsync = async (caller) => { const id = caller.remoteAddress || '0.0.0.0'; let singleCap = convoLangAnonUsdCapParam.get(); let totalCap = convoLangAnonUsdCapTotalParam.get(); if (singleCap === undefined && totalCap === undefined) { return { allow: true }; } const [single, total] = await Promise.all([ singleCap !== undefined ? _getCapAsync(id) : undefined, totalCap !== undefined ? _getCapAsync('_') : undefined, ]); if (single?.cap !== undefined) { singleCap = single.cap; } if (total?.cap !== undefined) { totalCap = total.cap; } const allow = ((singleCap === undefined ? true : single ? single.usage < singleCap : false) && (totalCap === undefined ? true : total ? total.usage < totalCap : false)); return { allow, singleUsage: (singleCap === undefined || !single) ? undefined : singleCap - single.usage, totalUsage: (totalCap === undefined || !total) ? undefined : totalCap - total.usage, singleCap, totalCap }; }; export const storeTokenUsageAsync = async (usage, caller) => { const id = caller.remoteAddress || '0.0.0.0'; const singleCap = convoLangAnonUsdCapParam.get(); const totalCap = convoLangAnonUsdCapTotalParam.get(); if (singleCap === undefined && totalCap === undefined) { return; } await Promise.all([ singleCap !== undefined ? dynamoClient().patchTableItem(CapsTable, { id, usage: createUpdateExpression({ add: usage }) }) : undefined, totalCap !== undefined ? dynamoClient().patchTableItem(CapsTable, { id: '_', usage: createUpdateExpression({ add: usage }) }) : undefined, ]); }; //# sourceMappingURL=price-capping.js.map