diff --git a/apps/api/v2/src/modules/billing/services/billing.service.ts b/apps/api/v2/src/modules/billing/services/billing.service.ts index f29ccd1dfc..1f4540d1d0 100644 --- a/apps/api/v2/src/modules/billing/services/billing.service.ts +++ b/apps/api/v2/src/modules/billing/services/billing.service.ts @@ -1,3 +1,4 @@ +import { getIncrementUsageIdempotencyKey, getIncrementUsageJobTag } from "@calcom/platform-libraries/tasker"; import { InjectQueue } from "@nestjs/bull"; import { BadRequestException, @@ -453,8 +454,8 @@ export class BillingService implements IBillingService, OnModuleDestroy { payload: { userId }, options: { delay: startTime, - tags: [`platform.billing.usage.${uid}`], - idempotencyKey: `platform.billing.usage.${uid}-${userId}`, + tags: [getIncrementUsageJobTag(uid)], + idempotencyKey: getIncrementUsageIdempotencyKey(uid, userId), }, }); return true; diff --git a/apps/api/v2/tsconfig.json b/apps/api/v2/tsconfig.json index bd20b41a4b..de16359d75 100644 --- a/apps/api/v2/tsconfig.json +++ b/apps/api/v2/tsconfig.json @@ -33,7 +33,8 @@ "@calcom/platform-libraries/private-links": ["../../../packages/platform/libraries/private-links.ts"], "@calcom/platform-libraries/organizations": ["../../../packages/platform/libraries/organizations.ts"], "@calcom/platform-libraries/errors": ["../../../packages/platform/libraries/errors.ts"], - "@calcom/platform-libraries/calendars": ["../../../packages/platform/libraries/calendars.ts"] + "@calcom/platform-libraries/calendars": ["../../../packages/platform/libraries/calendars.ts"], + "@calcom/platform-libraries/tasker": ["../../../packages/platform/libraries/tasker.ts"] }, "incremental": true, "skipLibCheck": true, diff --git a/packages/features/ee/organizations/lib/billing/tasker/constants.ts b/packages/features/ee/organizations/lib/billing/tasker/constants.ts new file mode 100644 index 0000000000..edaaca3909 --- /dev/null +++ b/packages/features/ee/organizations/lib/billing/tasker/constants.ts @@ -0,0 +1,9 @@ +export const INCREMENT_USAGE_JOB_ID = "platform.billing.increment-usage"; +export const RESCHEDULE_USAGE_INCREMENT_JOB_ID = "platform.billing.reschedule-usage-increment"; +export const CANCEL_USAGE_INCREMENT_JOB_ID = "platform.billing.cancel-usage-increment"; +const INCREMENT_USAGE_JOB_TAG = "platform.billing.usage."; +export const getIncrementUsageJobTag = (bookingUid: string): string => + `${INCREMENT_USAGE_JOB_TAG}${bookingUid}`; +const INCREMENT_USAGE_IDEMPOTENCY_KEY = `platform.billing.usage.`; +export const getIncrementUsageIdempotencyKey = (bookingUid: string, userId: number): string => + `${INCREMENT_USAGE_IDEMPOTENCY_KEY}${bookingUid}-${userId}`; diff --git a/packages/features/ee/organizations/lib/billing/tasker/trigger/cancel-usage-increment.ts b/packages/features/ee/organizations/lib/billing/tasker/trigger/cancel-usage-increment.ts index 508ccdaea4..c0f4e1989e 100644 --- a/packages/features/ee/organizations/lib/billing/tasker/trigger/cancel-usage-increment.ts +++ b/packages/features/ee/organizations/lib/billing/tasker/trigger/cancel-usage-increment.ts @@ -1,11 +1,9 @@ import { logger, runs, schemaTask, type TaskWithSchema } from "@trigger.dev/sdk"; import type { z } from "zod"; - +import { CANCEL_USAGE_INCREMENT_JOB_ID, getIncrementUsageJobTag } from "../constants"; import { platformBillingTaskConfig } from "./config"; import { platformBillingCancelUsageIncrementTaskSchema } from "./schema"; -export const CANCEL_USAGE_INCREMENT_JOB_ID = "platform.billing.cancel-usage-increment"; - export const cancelUsageIncrement: TaskWithSchema< typeof CANCEL_USAGE_INCREMENT_JOB_ID, typeof platformBillingCancelUsageIncrementTaskSchema @@ -16,7 +14,7 @@ export const cancelUsageIncrement: TaskWithSchema< run: async (payload: z.infer) => { const runId: string = ( await runs.list({ - tag: `increment-${payload.bookingUid}`, + tag: getIncrementUsageJobTag(payload.bookingUid), limit: 1, }) )?.data?.[0]?.id; diff --git a/packages/features/ee/organizations/lib/billing/tasker/trigger/increment-usage.ts b/packages/features/ee/organizations/lib/billing/tasker/trigger/increment-usage.ts index c90c78ddfb..9101925d16 100644 --- a/packages/features/ee/organizations/lib/billing/tasker/trigger/increment-usage.ts +++ b/packages/features/ee/organizations/lib/billing/tasker/trigger/increment-usage.ts @@ -1,11 +1,10 @@ import { ErrorWithCode } from "@calcom/lib/errors"; import { logger, schemaTask, type TaskWithSchema } from "@trigger.dev/sdk"; import type { z } from "zod"; +import { INCREMENT_USAGE_JOB_ID } from "../constants"; import { platformBillingTaskConfig } from "./config"; import { platformBillingTaskSchema } from "./schema"; -export const INCREMENT_USAGE_JOB_ID = "platform.billing.increment-usage"; - export const incrementUsage: TaskWithSchema = schemaTask({ id: INCREMENT_USAGE_JOB_ID, diff --git a/packages/features/ee/organizations/lib/billing/tasker/trigger/reschedule-usage-increment.ts b/packages/features/ee/organizations/lib/billing/tasker/trigger/reschedule-usage-increment.ts index d6c41ee11f..c7114af6ae 100644 --- a/packages/features/ee/organizations/lib/billing/tasker/trigger/reschedule-usage-increment.ts +++ b/packages/features/ee/organizations/lib/billing/tasker/trigger/reschedule-usage-increment.ts @@ -1,10 +1,9 @@ import { logger, runs, schemaTask, type TaskWithSchema } from "@trigger.dev/sdk"; import type z from "zod"; +import { getIncrementUsageJobTag, RESCHEDULE_USAGE_INCREMENT_JOB_ID } from "../constants"; import { platformBillingTaskConfig } from "./config"; import { platformBillingRescheduleUsageIncrementTaskSchema } from "./schema"; -export const RESCHEDULE_USAGE_INCREMENT_JOB_ID = "platform.billing.reschedule-usage-increment"; - export const rescheduleUsageIncrement: TaskWithSchema< typeof RESCHEDULE_USAGE_INCREMENT_JOB_ID, typeof platformBillingRescheduleUsageIncrementTaskSchema @@ -15,7 +14,7 @@ export const rescheduleUsageIncrement: TaskWithSchema< run: async (payload: z.infer) => { const runId: string = ( await runs.list({ - tag: `platform.billing.usage.${payload.bookingUid}`, + tag: getIncrementUsageJobTag(payload.bookingUid), limit: 1, }) )?.data?.[0]?.id; diff --git a/packages/platform/libraries/package.json b/packages/platform/libraries/package.json index 84fa257837..01a374ffe1 100644 --- a/packages/platform/libraries/package.json +++ b/packages/platform/libraries/package.json @@ -109,6 +109,11 @@ "import": "./dist/calendars.js", "require": "./dist/calendars.cjs", "types": "./dist/calendars.d.ts" + }, + "./tasker": { + "import": "./dist/tasker.js", + "require": "./dist/tasker.cjs", + "types": "./dist/tasker.d.ts" } }, "typesVersions": { @@ -154,6 +159,9 @@ ], "calendars": [ "dist/calendars.d.ts" + ], + "tasker": [ + "dist/tasker.d.ts" ] } } diff --git a/packages/platform/libraries/tasker.ts b/packages/platform/libraries/tasker.ts new file mode 100644 index 0000000000..c0066d7af5 --- /dev/null +++ b/packages/platform/libraries/tasker.ts @@ -0,0 +1,7 @@ +export { + CANCEL_USAGE_INCREMENT_JOB_ID, + getIncrementUsageIdempotencyKey, + getIncrementUsageJobTag, + INCREMENT_USAGE_JOB_ID, + RESCHEDULE_USAGE_INCREMENT_JOB_ID, +} from "@calcom/features/ee/organizations/lib/billing/tasker/constants"; diff --git a/packages/platform/libraries/vite.config.js b/packages/platform/libraries/vite.config.js index e8896ee716..48619f12fc 100644 --- a/packages/platform/libraries/vite.config.js +++ b/packages/platform/libraries/vite.config.js @@ -44,6 +44,7 @@ export default defineConfig({ pbac: resolve(__dirname, "./pbac.ts"), errors: resolve(__dirname, "./errors.ts"), calendars: resolve(__dirname, "./calendars.ts"), + tasker: resolve(__dirname, "./tasker.ts"), }, name: "calcom-lib", fileName: "calcom-lib",