@apart-tech/intelligence-core 1.15.2 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -54,7 +54,10 @@ export type { MembershipWithUser } from "./services/membership-service.js";
54
54
  export { InviteService } from "./services/invite-service.js";
55
55
  export type { Invite } from "./services/invite-service.js";
56
56
  export { UsageService } from "./services/usage-service.js";
57
- export type { UsageSnapshot, PlanLimits } from "./services/usage-service.js";
57
+ export type { UsageSnapshot, PlanLimits, UsageMetric } from "./services/usage-service.js";
58
+ export { QuotaService, QuotaError } from "./services/quota-service.js";
59
+ export { BillingEventService } from "./services/billing-event-service.js";
60
+ export type { BillingEventType } from "./services/billing-event-service.js";
58
61
  export { TagService, TagValidationError, TagNotFoundError } from "./services/tag-service.js";
59
62
  export { ChunkService } from "./services/chunk-service.js";
60
63
  export { chunkText, estimateTokens, TARGET_CHUNK_TOKENS, MAX_CHUNK_TOKENS } from "./services/chunker.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvF,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGrG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGjE,YAAY,EACV,IAAI,EACJ,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EACL,YAAY,EACZ,SAAS,EACT,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AACjH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AACvG,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAChH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACjI,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAClJ,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EACV,WAAW,EACX,WAAW,EACX,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,YAAY,EACV,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACrP,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzG,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAGlG,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChK,YAAY,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpG,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -38,6 +38,8 @@ export { UserService } from "./services/user-service.js";
38
38
  export { MembershipService } from "./services/membership-service.js";
39
39
  export { InviteService } from "./services/invite-service.js";
40
40
  export { UsageService } from "./services/usage-service.js";
41
+ export { QuotaService, QuotaError } from "./services/quota-service.js";
42
+ export { BillingEventService } from "./services/billing-event-service.js";
41
43
  export { TagService, TagValidationError, TagNotFoundError } from "./services/tag-service.js";
42
44
  export { ChunkService } from "./services/chunk-service.js";
43
45
  export { chunkText, estimateTokens, TARGET_CHUNK_TOKENS, MAX_CHUNK_TOKENS } from "./services/chunker.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { PrismaClient, Prisma } from "@prisma/client";
2
+ export type BillingEventType = "plan_change" | "checkout_completed" | "subscription_updated" | "subscription_cancelled" | "payment_failed" | "quota_override_created" | "quota_override_deleted" | "welcome_bonus_granted";
3
+ /**
4
+ * Append-only audit log for billing-related events.
5
+ */
6
+ export declare class BillingEventService {
7
+ private db;
8
+ constructor(db: PrismaClient);
9
+ log(organizationId: string, eventType: BillingEventType, detail?: Record<string, unknown>, actor?: string): Promise<void>;
10
+ getEvents(organizationId: string, options?: {
11
+ limit?: number;
12
+ eventType?: string;
13
+ }): Promise<{
14
+ id: string;
15
+ createdAt: Date;
16
+ organizationId: string;
17
+ eventType: string;
18
+ detail: Prisma.JsonValue;
19
+ actor: string;
20
+ }[]>;
21
+ }
22
+ //# sourceMappingURL=billing-event-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-event-service.d.ts","sourceRoot":"","sources":["../../src/services/billing-event-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,oBAAoB,GACpB,sBAAsB,GACtB,wBAAwB,GACxB,gBAAgB,GAChB,wBAAwB,GACxB,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B;;GAEG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,GAAG,CACP,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,gBAAgB,EAC3B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,KAAK,GAAE,MAAiB,GACvB,OAAO,CAAC,IAAI,CAAC;IAWV,SAAS,CACb,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;CAWnD"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Append-only audit log for billing-related events.
3
+ */
4
+ export class BillingEventService {
5
+ db;
6
+ constructor(db) {
7
+ this.db = db;
8
+ }
9
+ async log(organizationId, eventType, detail = {}, actor = "system") {
10
+ await this.db.billingEvent.create({
11
+ data: {
12
+ organizationId,
13
+ eventType,
14
+ detail: detail,
15
+ actor,
16
+ },
17
+ });
18
+ }
19
+ async getEvents(organizationId, options) {
20
+ return this.db.billingEvent.findMany({
21
+ where: {
22
+ organizationId,
23
+ ...(options?.eventType ? { eventType: options.eventType } : {}),
24
+ },
25
+ orderBy: { createdAt: "desc" },
26
+ take: options?.limit ?? 50,
27
+ });
28
+ }
29
+ }
30
+ //# sourceMappingURL=billing-event-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-event-service.js","sourceRoot":"","sources":["../../src/services/billing-event-service.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACV;IAApB,YAAoB,EAAgB;QAAhB,OAAE,GAAF,EAAE,CAAc;IAAG,CAAC;IAExC,KAAK,CAAC,GAAG,CACP,cAAsB,EACtB,SAA2B,EAC3B,SAAkC,EAAE,EACpC,QAAgB,QAAQ;QAExB,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;YAChC,IAAI,EAAE;gBACJ,cAAc;gBACd,SAAS;gBACT,MAAM,EAAE,MAA+B;gBACvC,KAAK;aACN;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CACb,cAAsB,EACtB,OAAgD;QAEhD,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;YACnC,KAAK,EAAE;gBACL,cAAc;gBACd,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;YACD,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAC9B,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -13,6 +13,7 @@ import type { ChunkService } from "./chunk-service.js";
13
13
  import type { TagService } from "./tag-service.js";
14
14
  import type { PiiEncryptionService } from "./pii-encryption-service.js";
15
15
  import type { PiiEncryptionOptions } from "./pii-encryption-service.js";
16
+ import type { UsageService } from "./usage-service.js";
16
17
  /**
17
18
  * Minimal GCS interface so core doesn't depend on @google-cloud/storage.
18
19
  * The API package passes the real `Storage` instance which satisfies this.
@@ -50,8 +51,9 @@ export declare class DocumentService {
50
51
  private tagService;
51
52
  private piiEncryption?;
52
53
  private piiOptions?;
54
+ private usageService?;
53
55
  private tenantCtx;
54
- constructor(db: PrismaClient, storage: GcsStorage, bucketName: string, ocrService: OcrService, nodeService: NodeService, chunkService: ChunkService, tagService: TagService, piiEncryption?: PiiEncryptionService | undefined, piiOptions?: PiiEncryptionOptions | undefined, tenantCtx?: TenantContext);
56
+ constructor(db: PrismaClient, storage: GcsStorage, bucketName: string, ocrService: OcrService, nodeService: NodeService, chunkService: ChunkService, tagService: TagService, piiEncryption?: PiiEncryptionService | undefined, piiOptions?: PiiEncryptionOptions | undefined, tenantCtx?: TenantContext, usageService?: UsageService | undefined);
55
57
  /**
56
58
  * Create Document records and generate signed PUT URLs for direct upload.
57
59
  */
@@ -1 +1 @@
1
- {"version":3,"file":"document-service.d.ts","sourceRoot":"","sources":["../../src/services/document-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-service.d.ts","sourceRoot":"","sources":["../../src/services/document-service.ts"],"names":[],"mappings":"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"}
@@ -19,8 +19,9 @@ export class DocumentService {
19
19
  tagService;
20
20
  piiEncryption;
21
21
  piiOptions;
22
+ usageService;
22
23
  tenantCtx;
23
- constructor(db, storage, bucketName, ocrService, nodeService, chunkService, tagService, piiEncryption, piiOptions, tenantCtx) {
24
+ constructor(db, storage, bucketName, ocrService, nodeService, chunkService, tagService, piiEncryption, piiOptions, tenantCtx, usageService) {
24
25
  this.db = db;
25
26
  this.storage = storage;
26
27
  this.bucketName = bucketName;
@@ -30,6 +31,7 @@ export class DocumentService {
30
31
  this.tagService = tagService;
31
32
  this.piiEncryption = piiEncryption;
32
33
  this.piiOptions = piiOptions;
34
+ this.usageService = usageService;
33
35
  this.tenantCtx = tenantCtx ?? { organizationId: SINGLE_TENANT_ORG_ID };
34
36
  }
35
37
  /**
@@ -162,6 +164,10 @@ export class DocumentService {
162
164
  const ocrResult = await this.ocrService.extractText(readUrl);
163
165
  // Count pages from --- separators
164
166
  const pageCount = ocrResult.text.split("\n---\n").length;
167
+ // 5b. Meter OCR page usage
168
+ if (this.usageService) {
169
+ await this.usageService.incrementOcrPages(this.tenantCtx.organizationId, pageCount);
170
+ }
165
171
  // 6. Create node with extracted text
166
172
  const node = await this.nodeService.create({
167
173
  type: "document",
@@ -1 +1 @@
1
- {"version":3,"file":"document-service.js","sourceRoot":"","sources":["../../src/services/document-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-service.js","sourceRoot":"","sources":["../../src/services/document-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ import { UsageService, type PlanLimits } from "./usage-service.js";
3
+ export declare class QuotaError extends Error {
4
+ readonly resource: string;
5
+ readonly current: number;
6
+ readonly limit: number;
7
+ readonly plan: string;
8
+ constructor(resource: string, current: number, limit: number, plan: string);
9
+ }
10
+ /**
11
+ * Enforces plan-based quotas with optional per-org overrides.
12
+ *
13
+ * Quota checks happen at the service/route level so that all clients
14
+ * (web, CLI, MCP, agents) are gated consistently.
15
+ */
16
+ export declare class QuotaService {
17
+ private db;
18
+ private usageService;
19
+ constructor(db: PrismaClient, usageService: UsageService);
20
+ checkOcrQuota(orgId: string, pagesToProcess: number): Promise<void>;
21
+ checkStorageQuota(orgId: string, bytesToAdd: number): Promise<void>;
22
+ checkAgentRunQuota(orgId: string): Promise<void>;
23
+ checkNodeQuota(orgId: string): Promise<void>;
24
+ checkMemberQuota(orgId: string): Promise<void>;
25
+ checkFileSizeLimit(orgId: string, sizeBytes: number): Promise<void>;
26
+ checkPagePerDocumentLimit(orgId: string, pageCount: number): Promise<void>;
27
+ /**
28
+ * Get the effective limits for an org, factoring in seat count and overrides.
29
+ */
30
+ getEffectiveLimits(orgId: string): Promise<PlanLimits & {
31
+ plan: string;
32
+ }>;
33
+ /**
34
+ * Resolve the effective limit for a resource, checking for overrides first.
35
+ * For pro plans, per-seat metrics are multiplied by seat count.
36
+ */
37
+ private resolveLimit;
38
+ /**
39
+ * Helper to get current usage + effective limit for a periodic metric.
40
+ */
41
+ private getEffectiveUsage;
42
+ }
43
+ //# sourceMappingURL=quota-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-service.d.ts","sourceRoot":"","sources":["../../src/services/quota-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEnE,qBAAa,UAAW,SAAQ,KAAK;aAEjB,QAAQ,EAAE,MAAM;aAChB,OAAO,EAAE,MAAM;aACf,KAAK,EAAE,MAAM;aACb,IAAI,EAAE,MAAM;gBAHZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM;CAK/B;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,YAAY;gBADZ,EAAE,EAAE,YAAY,EAChB,YAAY,EAAE,YAAY;IAG9B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnE,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5C,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnE,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhF;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAqB/E;;;OAGG;YACW,YAAY;IAmC1B;;OAEG;YACW,iBAAiB;CAsBhC"}
@@ -0,0 +1,148 @@
1
+ import { UsageService } from "./usage-service.js";
2
+ export class QuotaError extends Error {
3
+ resource;
4
+ current;
5
+ limit;
6
+ plan;
7
+ constructor(resource, current, limit, plan) {
8
+ super(`Quota exceeded for ${resource}: ${current}/${limit} on ${plan} plan`);
9
+ this.resource = resource;
10
+ this.current = current;
11
+ this.limit = limit;
12
+ this.plan = plan;
13
+ this.name = "QuotaError";
14
+ }
15
+ }
16
+ /**
17
+ * Enforces plan-based quotas with optional per-org overrides.
18
+ *
19
+ * Quota checks happen at the service/route level so that all clients
20
+ * (web, CLI, MCP, agents) are gated consistently.
21
+ */
22
+ export class QuotaService {
23
+ db;
24
+ usageService;
25
+ constructor(db, usageService) {
26
+ this.db = db;
27
+ this.usageService = usageService;
28
+ }
29
+ async checkOcrQuota(orgId, pagesToProcess) {
30
+ const { plan, current, limit } = await this.getEffectiveUsage(orgId, "maxOcrPagesPerMonth", "ocr_pages");
31
+ if (current + pagesToProcess > limit) {
32
+ throw new QuotaError("ocr_pages", current, limit, plan);
33
+ }
34
+ }
35
+ async checkStorageQuota(orgId, bytesToAdd) {
36
+ const { plan, limit } = await this.getEffectiveUsage(orgId, "maxStorageBytes", "storage_bytes");
37
+ const current = await this.usageService.getStorageUsed(orgId);
38
+ if (current + bytesToAdd > limit) {
39
+ throw new QuotaError("storage_bytes", current, limit, plan);
40
+ }
41
+ }
42
+ async checkAgentRunQuota(orgId) {
43
+ const { plan, current, limit } = await this.getEffectiveUsage(orgId, "maxAgentRunsPerMonth", "agent_runs");
44
+ if (current >= limit) {
45
+ throw new QuotaError("agent_runs", current, limit, plan);
46
+ }
47
+ }
48
+ async checkNodeQuota(orgId) {
49
+ const snapshot = await this.usageService.getUsage(orgId);
50
+ const limit = await this.resolveLimit(orgId, snapshot.plan, "maxNodes", "nodes");
51
+ if (snapshot.usage.nodes >= limit) {
52
+ throw new QuotaError("nodes", snapshot.usage.nodes, limit, snapshot.plan);
53
+ }
54
+ }
55
+ async checkMemberQuota(orgId) {
56
+ const snapshot = await this.usageService.getUsage(orgId);
57
+ const limit = await this.resolveLimit(orgId, snapshot.plan, "maxMembers", "members");
58
+ if (snapshot.usage.members >= limit) {
59
+ throw new QuotaError("members", snapshot.usage.members, limit, snapshot.plan);
60
+ }
61
+ }
62
+ async checkFileSizeLimit(orgId, sizeBytes) {
63
+ const snapshot = await this.usageService.getUsage(orgId);
64
+ const limit = await this.resolveLimit(orgId, snapshot.plan, "maxFileSizeBytes", "file_size_bytes");
65
+ if (sizeBytes > limit) {
66
+ throw new QuotaError("file_size_bytes", sizeBytes, limit, snapshot.plan);
67
+ }
68
+ }
69
+ async checkPagePerDocumentLimit(orgId, pageCount) {
70
+ const snapshot = await this.usageService.getUsage(orgId);
71
+ const limit = await this.resolveLimit(orgId, snapshot.plan, "maxPagesPerDocument", "pages_per_document");
72
+ if (pageCount > limit) {
73
+ throw new QuotaError("pages_per_document", pageCount, limit, snapshot.plan);
74
+ }
75
+ }
76
+ /**
77
+ * Get the effective limits for an org, factoring in seat count and overrides.
78
+ */
79
+ async getEffectiveLimits(orgId) {
80
+ const snapshot = await this.usageService.getUsage(orgId);
81
+ const baseLimits = snapshot.limits;
82
+ const seats = snapshot.usage.members;
83
+ // Pro per-seat limits are multiplied by seat count
84
+ const isPro = snapshot.plan === "pro";
85
+ const effectiveLimits = {
86
+ maxNodes: await this.resolveLimit(orgId, snapshot.plan, "maxNodes", "nodes"),
87
+ maxApiCallsPerMonth: await this.resolveLimit(orgId, snapshot.plan, "maxApiCallsPerMonth", "api_calls"),
88
+ maxMembers: await this.resolveLimit(orgId, snapshot.plan, "maxMembers", "members"),
89
+ maxOcrPagesPerMonth: await this.resolveLimit(orgId, snapshot.plan, "maxOcrPagesPerMonth", "ocr_pages"),
90
+ maxStorageBytes: await this.resolveLimit(orgId, snapshot.plan, "maxStorageBytes", "storage_bytes"),
91
+ maxAgentRunsPerMonth: await this.resolveLimit(orgId, snapshot.plan, "maxAgentRunsPerMonth", "agent_runs"),
92
+ maxFileSizeBytes: await this.resolveLimit(orgId, snapshot.plan, "maxFileSizeBytes", "file_size_bytes"),
93
+ maxPagesPerDocument: await this.resolveLimit(orgId, snapshot.plan, "maxPagesPerDocument", "pages_per_document"),
94
+ };
95
+ return { ...effectiveLimits, plan: snapshot.plan };
96
+ }
97
+ /**
98
+ * Resolve the effective limit for a resource, checking for overrides first.
99
+ * For pro plans, per-seat metrics are multiplied by seat count.
100
+ */
101
+ async resolveLimit(orgId, plan, limitKey, resource) {
102
+ // Check for active override
103
+ const override = await this.db.quotaOverride.findFirst({
104
+ where: {
105
+ organizationId: orgId,
106
+ resource,
107
+ OR: [
108
+ { expiresAt: null },
109
+ { expiresAt: { gt: new Date() } },
110
+ ],
111
+ },
112
+ orderBy: { createdAt: "desc" },
113
+ });
114
+ if (override) {
115
+ return override.overrideLimit;
116
+ }
117
+ const baseLimits = UsageService.getPlanLimits(plan);
118
+ const baseValue = baseLimits[limitKey];
119
+ // For pro plan, per-seat metrics scale with seat count
120
+ if (plan === "pro" && PER_SEAT_METRICS.includes(resource)) {
121
+ const seats = await this.db.membership.count({ where: { organizationId: orgId } });
122
+ return baseValue * Math.max(seats, 1);
123
+ }
124
+ return baseValue;
125
+ }
126
+ /**
127
+ * Helper to get current usage + effective limit for a periodic metric.
128
+ */
129
+ async getEffectiveUsage(orgId, limitKey, resource) {
130
+ const snapshot = await this.usageService.getUsage(orgId);
131
+ const limit = await this.resolveLimit(orgId, snapshot.plan, limitKey, resource);
132
+ // Map resource to usage field
133
+ const usageMap = {
134
+ ocr_pages: snapshot.usage.ocrPages,
135
+ agent_runs: snapshot.usage.agentRuns,
136
+ storage_bytes: snapshot.usage.storageBytes,
137
+ api_calls: snapshot.usage.apiCalls,
138
+ };
139
+ return {
140
+ plan: snapshot.plan,
141
+ current: usageMap[resource] ?? 0,
142
+ limit,
143
+ };
144
+ }
145
+ }
146
+ /** Metrics that scale linearly with seat count on pro plans. */
147
+ const PER_SEAT_METRICS = ["ocr_pages", "storage_bytes", "agent_runs"];
148
+ //# sourceMappingURL=quota-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-service.js","sourceRoot":"","sources":["../../src/services/quota-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=quota-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-service.test.d.ts","sourceRoot":"","sources":["../../src/services/quota-service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,165 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { QuotaService, QuotaError } from "./quota-service.js";
3
+ import { UsageService } from "./usage-service.js";
4
+ const ORG_ID = "org-1";
5
+ function makeMockUsageService(overrides) {
6
+ const defaults = {
7
+ plan: "free",
8
+ nodes: 10,
9
+ apiCalls: 0,
10
+ members: 1,
11
+ ocrPages: 0,
12
+ storageBytes: 0,
13
+ agentRuns: 0,
14
+ ...overrides,
15
+ };
16
+ return {
17
+ getUsage: vi.fn(async () => ({
18
+ plan: defaults.plan,
19
+ limits: UsageService.getPlanLimits(defaults.plan),
20
+ usage: {
21
+ nodes: defaults.nodes,
22
+ apiCalls: defaults.apiCalls,
23
+ members: defaults.members,
24
+ ocrPages: defaults.ocrPages,
25
+ storageBytes: defaults.storageBytes,
26
+ agentRuns: defaults.agentRuns,
27
+ },
28
+ stripeCustomerId: null,
29
+ stripeSubscriptionId: null,
30
+ currentPeriodEnd: null,
31
+ })),
32
+ getStorageUsed: vi.fn(async () => defaults.storageBytes),
33
+ };
34
+ }
35
+ function makeMockDb(opts) {
36
+ return {
37
+ quotaOverride: {
38
+ findFirst: vi.fn(async ({ where }) => {
39
+ const match = opts?.overrides?.find((o) => o.resource === where.resource);
40
+ if (match) {
41
+ return { overrideLimit: match.overrideLimit, expiresAt: match.expiresAt };
42
+ }
43
+ return null;
44
+ }),
45
+ },
46
+ membership: {
47
+ count: vi.fn(async () => opts?.memberCount ?? 1),
48
+ },
49
+ };
50
+ }
51
+ describe("QuotaService", () => {
52
+ describe("free tier", () => {
53
+ it("allows OCR within budget", async () => {
54
+ const usage = makeMockUsageService({ ocrPages: 10 });
55
+ const db = makeMockDb();
56
+ const svc = new QuotaService(db, usage);
57
+ // 10 existing + 5 = 15, limit is 25
58
+ await expect(svc.checkOcrQuota(ORG_ID, 5)).resolves.toBeUndefined();
59
+ });
60
+ it("blocks OCR over budget", async () => {
61
+ const usage = makeMockUsageService({ ocrPages: 20 });
62
+ const db = makeMockDb();
63
+ const svc = new QuotaService(db, usage);
64
+ // 20 existing + 10 = 30, limit is 25
65
+ await expect(svc.checkOcrQuota(ORG_ID, 10)).rejects.toThrow(QuotaError);
66
+ });
67
+ it("blocks agent runs on free tier (limit is 0)", async () => {
68
+ const usage = makeMockUsageService({ agentRuns: 0 });
69
+ const db = makeMockDb();
70
+ const svc = new QuotaService(db, usage);
71
+ // 0 >= 0 → blocked
72
+ await expect(svc.checkAgentRunQuota(ORG_ID)).rejects.toThrow(QuotaError);
73
+ });
74
+ it("allows storage within budget", async () => {
75
+ const usage = makeMockUsageService({ storageBytes: 500_000_000 });
76
+ const db = makeMockDb();
77
+ const svc = new QuotaService(db, usage);
78
+ // 500MB + 100MB < 1GB
79
+ await expect(svc.checkStorageQuota(ORG_ID, 100_000_000)).resolves.toBeUndefined();
80
+ });
81
+ it("blocks storage over budget", async () => {
82
+ const usage = makeMockUsageService({ storageBytes: 1_000_000_000 });
83
+ const db = makeMockDb();
84
+ const svc = new QuotaService(db, usage);
85
+ // 1GB + 100MB > 1GB
86
+ await expect(svc.checkStorageQuota(ORG_ID, 100_000_000)).rejects.toThrow(QuotaError);
87
+ });
88
+ it("enforces file size limit for free tier (10 MB)", async () => {
89
+ const usage = makeMockUsageService();
90
+ const db = makeMockDb();
91
+ const svc = new QuotaService(db, usage);
92
+ await expect(svc.checkFileSizeLimit(ORG_ID, 11_000_000)).rejects.toThrow(QuotaError);
93
+ await expect(svc.checkFileSizeLimit(ORG_ID, 5_000_000)).resolves.toBeUndefined();
94
+ });
95
+ it("enforces page per document limit (20)", async () => {
96
+ const usage = makeMockUsageService();
97
+ const db = makeMockDb();
98
+ const svc = new QuotaService(db, usage);
99
+ await expect(svc.checkPagePerDocumentLimit(ORG_ID, 25)).rejects.toThrow(QuotaError);
100
+ await expect(svc.checkPagePerDocumentLimit(ORG_ID, 15)).resolves.toBeUndefined();
101
+ });
102
+ });
103
+ describe("pro tier", () => {
104
+ it("allows agent runs on pro tier", async () => {
105
+ const usage = makeMockUsageService({ plan: "pro", agentRuns: 10, members: 3 });
106
+ const db = makeMockDb({ memberCount: 3 });
107
+ const svc = new QuotaService(db, usage);
108
+ // 10 < 50 * 3 = 150
109
+ await expect(svc.checkAgentRunQuota(ORG_ID)).resolves.toBeUndefined();
110
+ });
111
+ it("scales OCR limit by seats", async () => {
112
+ const usage = makeMockUsageService({ plan: "pro", ocrPages: 900, members: 2 });
113
+ const db = makeMockDb({ memberCount: 2 });
114
+ const svc = new QuotaService(db, usage);
115
+ // 900 + 200 = 1100 > 500 * 2 = 1000
116
+ await expect(svc.checkOcrQuota(ORG_ID, 200)).rejects.toThrow(QuotaError);
117
+ // 900 + 50 = 950 < 1000
118
+ await expect(svc.checkOcrQuota(ORG_ID, 50)).resolves.toBeUndefined();
119
+ });
120
+ });
121
+ describe("quota overrides", () => {
122
+ it("uses override instead of plan limit", async () => {
123
+ const usage = makeMockUsageService({ ocrPages: 30 });
124
+ const db = makeMockDb({
125
+ overrides: [
126
+ { resource: "ocr_pages", overrideLimit: 100, expiresAt: null },
127
+ ],
128
+ });
129
+ const svc = new QuotaService(db, usage);
130
+ // Override is 100, usage is 30, adding 60 = 90 < 100
131
+ await expect(svc.checkOcrQuota(ORG_ID, 60)).resolves.toBeUndefined();
132
+ });
133
+ it("override allows agent runs on free tier", async () => {
134
+ const usage = makeMockUsageService({ agentRuns: 0 });
135
+ const db = makeMockDb({
136
+ overrides: [
137
+ { resource: "agent_runs", overrideLimit: 10, expiresAt: null },
138
+ ],
139
+ });
140
+ const svc = new QuotaService(db, usage);
141
+ // Override gives 10 agent runs, usage is 0
142
+ await expect(svc.checkAgentRunQuota(ORG_ID)).resolves.toBeUndefined();
143
+ });
144
+ });
145
+ describe("QuotaError", () => {
146
+ it("contains resource, current, limit, plan fields", async () => {
147
+ const usage = makeMockUsageService({ ocrPages: 30 });
148
+ const db = makeMockDb();
149
+ const svc = new QuotaService(db, usage);
150
+ try {
151
+ await svc.checkOcrQuota(ORG_ID, 10);
152
+ expect.unreachable();
153
+ }
154
+ catch (err) {
155
+ expect(err).toBeInstanceOf(QuotaError);
156
+ const qErr = err;
157
+ expect(qErr.resource).toBe("ocr_pages");
158
+ expect(qErr.current).toBe(30);
159
+ expect(qErr.limit).toBe(25);
160
+ expect(qErr.plan).toBe("free");
161
+ }
162
+ });
163
+ });
164
+ });
165
+ //# sourceMappingURL=quota-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-service.test.js","sourceRoot":"","sources":["../../src/services/quota-service.test.ts"],"names":[],"mappings":"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"}