@apart-tech/intelligence-core 1.11.4 → 1.11.6
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/auth/ability.d.ts +148 -0
- package/dist/auth/ability.d.ts.map +1 -0
- package/dist/auth/ability.js +291 -0
- package/dist/auth/ability.js.map +1 -0
- package/dist/auth/ability.test.d.ts +2 -0
- package/dist/auth/ability.test.d.ts.map +1 -0
- package/dist/auth/ability.test.js +693 -0
- package/dist/auth/ability.test.js.map +1 -0
- package/dist/auth/delegation-jwt.d.ts +167 -0
- package/dist/auth/delegation-jwt.d.ts.map +1 -0
- package/dist/auth/delegation-jwt.js +237 -0
- package/dist/auth/delegation-jwt.js.map +1 -0
- package/dist/auth/delegation-jwt.test.d.ts +2 -0
- package/dist/auth/delegation-jwt.test.d.ts.map +1 -0
- package/dist/auth/delegation-jwt.test.js +283 -0
- package/dist/auth/delegation-jwt.test.js.map +1 -0
- package/dist/auth/principal.d.ts +94 -0
- package/dist/auth/principal.d.ts.map +1 -0
- package/dist/auth/principal.js +33 -0
- package/dist/auth/principal.js.map +1 -0
- package/dist/config/config.test.d.ts +2 -0
- package/dist/config/config.test.d.ts.map +1 -0
- package/dist/config/config.test.js +57 -0
- package/dist/config/config.test.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +22 -1
- package/dist/config/index.js.map +1 -1
- package/dist/db/tenant.d.ts.map +1 -1
- package/dist/db/tenant.js +8 -0
- package/dist/db/tenant.js.map +1 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/jwt.test.d.ts +2 -0
- package/dist/lib/__tests__/jwt.test.d.ts.map +1 -0
- package/dist/lib/__tests__/jwt.test.js +97 -0
- package/dist/lib/__tests__/jwt.test.js.map +1 -0
- package/dist/lib/jwt.d.ts +20 -0
- package/dist/lib/jwt.d.ts.map +1 -1
- package/dist/lib/jwt.js +56 -3
- package/dist/lib/jwt.js.map +1 -1
- package/dist/services/__tests__/chunk-service.test.d.ts +2 -0
- package/dist/services/__tests__/chunk-service.test.d.ts.map +1 -0
- package/dist/services/__tests__/chunk-service.test.js +111 -0
- package/dist/services/__tests__/chunk-service.test.js.map +1 -0
- package/dist/services/__tests__/chunker.test.d.ts +2 -0
- package/dist/services/__tests__/chunker.test.d.ts.map +1 -0
- package/dist/services/__tests__/chunker.test.js +113 -0
- package/dist/services/__tests__/chunker.test.js.map +1 -0
- package/dist/services/__tests__/delegation-cleanup-service.test.d.ts +2 -0
- package/dist/services/__tests__/delegation-cleanup-service.test.d.ts.map +1 -0
- package/dist/services/__tests__/delegation-cleanup-service.test.js +211 -0
- package/dist/services/__tests__/delegation-cleanup-service.test.js.map +1 -0
- package/dist/services/__tests__/node-service.test.d.ts +2 -0
- package/dist/services/__tests__/node-service.test.d.ts.map +1 -0
- package/dist/services/__tests__/node-service.test.js +207 -0
- package/dist/services/__tests__/node-service.test.js.map +1 -0
- package/dist/services/__tests__/pii-detector-service.test.js +51 -0
- package/dist/services/__tests__/pii-detector-service.test.js.map +1 -1
- package/dist/services/__tests__/pii-encryption-service.test.js +37 -0
- package/dist/services/__tests__/pii-encryption-service.test.js.map +1 -1
- package/dist/services/__tests__/search-service.test.d.ts +2 -0
- package/dist/services/__tests__/search-service.test.d.ts.map +1 -0
- package/dist/services/__tests__/search-service.test.js +163 -0
- package/dist/services/__tests__/search-service.test.js.map +1 -0
- package/dist/services/agent-run-service.d.ts +44 -7
- package/dist/services/agent-run-service.d.ts.map +1 -1
- package/dist/services/agent-run-service.js +14 -0
- package/dist/services/agent-run-service.js.map +1 -1
- package/dist/services/agent-schedule-service.d.ts +21 -0
- package/dist/services/agent-schedule-service.d.ts.map +1 -1
- package/dist/services/agent-schedule-service.js +12 -0
- package/dist/services/agent-schedule-service.js.map +1 -1
- package/dist/services/audit-event-service.d.ts +76 -0
- package/dist/services/audit-event-service.d.ts.map +1 -0
- package/dist/services/audit-event-service.js +48 -0
- package/dist/services/audit-event-service.js.map +1 -0
- package/dist/services/backfill-chunks.d.ts +30 -0
- package/dist/services/backfill-chunks.d.ts.map +1 -0
- package/dist/services/backfill-chunks.js +55 -0
- package/dist/services/backfill-chunks.js.map +1 -0
- package/dist/services/chunk-service.d.ts +45 -0
- package/dist/services/chunk-service.d.ts.map +1 -0
- package/dist/services/chunk-service.js +111 -0
- package/dist/services/chunk-service.js.map +1 -0
- package/dist/services/chunker.d.ts +32 -0
- package/dist/services/chunker.d.ts.map +1 -0
- package/dist/services/chunker.js +289 -0
- package/dist/services/chunker.js.map +1 -0
- package/dist/services/context-service.d.ts +3 -1
- package/dist/services/context-service.d.ts.map +1 -1
- package/dist/services/context-service.js +17 -1
- package/dist/services/context-service.js.map +1 -1
- package/dist/services/delegation-cleanup-service.d.ts +133 -0
- package/dist/services/delegation-cleanup-service.d.ts.map +1 -0
- package/dist/services/delegation-cleanup-service.js +111 -0
- package/dist/services/delegation-cleanup-service.js.map +1 -0
- package/dist/services/edge-service.d.ts.map +1 -1
- package/dist/services/edge-service.js +3 -0
- package/dist/services/edge-service.js.map +1 -1
- package/dist/services/node-service.d.ts +12 -1
- package/dist/services/node-service.d.ts.map +1 -1
- package/dist/services/node-service.js +54 -11
- package/dist/services/node-service.js.map +1 -1
- package/dist/services/org-agent-type-service.d.ts +15 -0
- package/dist/services/org-agent-type-service.d.ts.map +1 -1
- package/dist/services/org-agent-type-service.js +2 -0
- package/dist/services/org-agent-type-service.js.map +1 -1
- package/dist/services/pii-detector-service.d.ts +1 -0
- package/dist/services/pii-detector-service.d.ts.map +1 -1
- package/dist/services/pii-detector-service.js +95 -2
- package/dist/services/pii-detector-service.js.map +1 -1
- package/dist/services/pii-encryption-service.d.ts +10 -0
- package/dist/services/pii-encryption-service.d.ts.map +1 -1
- package/dist/services/pii-encryption-service.js +32 -0
- package/dist/services/pii-encryption-service.js.map +1 -1
- package/dist/services/search-service.d.ts +30 -1
- package/dist/services/search-service.d.ts.map +1 -1
- package/dist/services/search-service.js +262 -45
- package/dist/services/search-service.js.map +1 -1
- package/dist/services/tag-service.d.ts +78 -0
- package/dist/services/tag-service.d.ts.map +1 -0
- package/dist/services/tag-service.js +639 -0
- package/dist/services/tag-service.js.map +1 -0
- package/dist/services/tag-service.test.d.ts +2 -0
- package/dist/services/tag-service.test.d.ts.map +1 -0
- package/dist/services/tag-service.test.js +448 -0
- package/dist/services/tag-service.test.js.map +1 -0
- package/dist/services/usage-service.d.ts +48 -0
- package/dist/services/usage-service.d.ts.map +1 -0
- package/dist/services/usage-service.js +116 -0
- package/dist/services/usage-service.js.map +1 -0
- package/dist/services/user-service.d.ts.map +1 -1
- package/dist/services/user-service.js +24 -6
- package/dist/services/user-service.js.map +1 -1
- package/dist/services/user-service.test.d.ts +2 -0
- package/dist/services/user-service.test.d.ts.map +1 -0
- package/dist/services/user-service.test.js +86 -0
- package/dist/services/user-service.test.js.map +1 -0
- package/dist/services/workspace-service.d.ts +2 -0
- package/dist/services/workspace-service.d.ts.map +1 -1
- package/dist/services/workspace-service.js +7 -1
- package/dist/services/workspace-service.js.map +1 -1
- package/dist/types/index.d.ts +80 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +3 -2
- package/prisma/schema.prisma +335 -82
- package/dist/db/schema.d.ts +0 -507
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js +0 -77
- package/dist/db/schema.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ export { encryptAesGcm, decryptAesGcm, deriveKey, deriveKeyV2 } from "./lib/cryp
|
|
|
7
7
|
export { getAgentKeySecret, getPiiKeySecret, getEmbeddingKeySecret } from "./lib/encryption-keys.js";
|
|
8
8
|
export { verifyAuth0Jwt } from "./lib/jwt.js";
|
|
9
9
|
export type { Auth0Config, Auth0JwtPayload } from "./lib/jwt.js";
|
|
10
|
+
export type { Role, UserPrincipal, OrgAgentPrincipal, DelegatedAgentPrincipal, Principal, } from "./auth/principal.js";
|
|
11
|
+
export { isUserPrincipal, isOrgAgentPrincipal, isDelegatedAgentPrincipal, } from "./auth/principal.js";
|
|
12
|
+
export type { AppAction, AppSubject, AppAbility, AppRawRule } from "./auth/ability.js";
|
|
13
|
+
export { buildAbility, intersect, UnsupportedIntersectionError, } from "./auth/ability.js";
|
|
14
|
+
export type { DelegationTokenPayload, MintDelegationTokenArgs, DelegationTokenErrorReason, DelegationKeyLoadErrorReason, } from "./auth/delegation-jwt.js";
|
|
15
|
+
export { DELEGATION_ALGORITHM, DELEGATION_ISSUER, DELEGATION_KEY_MIN_BYTES, DELEGATION_TTL_SECONDS, DelegationKeyLoadError, DelegationTokenError, loadDelegationKeyFromEnv, mintDelegationToken, peekIssuer, verifyDelegationToken, } from "./auth/delegation-jwt.js";
|
|
10
16
|
export * from "./types/index.js";
|
|
11
17
|
export { loadConfig } from "./config/index.js";
|
|
12
18
|
export { NodeService } from "./services/node-service.js";
|
|
@@ -32,7 +38,11 @@ export type { OrgAgentTypeRecord, CreateOrgAgentTypeInput, UpdateOrgAgentTypeInp
|
|
|
32
38
|
export { OrgMcpServerService } from "./services/org-mcp-server-service.js";
|
|
33
39
|
export type { OrgMcpServerRecord, McpServerConfig, CreateOrgMcpServerInput, UpdateOrgMcpServerInput } from "./services/org-mcp-server-service.js";
|
|
34
40
|
export { AgentRunService } from "./services/agent-run-service.js";
|
|
35
|
-
export type { AgentRun } from "./services/agent-run-service.js";
|
|
41
|
+
export type { AgentRun, AgentRunCreateInput } from "./services/agent-run-service.js";
|
|
42
|
+
export { AuditEventService } from "./services/audit-event-service.js";
|
|
43
|
+
export type { AuditAction, AuditResult, RecordAuditEventInput, } from "./services/audit-event-service.js";
|
|
44
|
+
export { cancelOrphanedAgentRuns } from "./services/delegation-cleanup-service.js";
|
|
45
|
+
export type { DelegationCleanupDb, CancelOrphanedAgentRunsResult, } from "./services/delegation-cleanup-service.js";
|
|
36
46
|
export { AgentScheduleService } from "./services/agent-schedule-service.js";
|
|
37
47
|
export type { AgentScheduleRecord, CreateAgentScheduleInput, UpdateAgentScheduleInput } from "./services/agent-schedule-service.js";
|
|
38
48
|
export { CLI_REFERENCE } from "./services/agent-cli-reference.js";
|
|
@@ -43,6 +53,14 @@ export { MembershipService } from "./services/membership-service.js";
|
|
|
43
53
|
export type { MembershipWithUser } from "./services/membership-service.js";
|
|
44
54
|
export { InviteService } from "./services/invite-service.js";
|
|
45
55
|
export type { Invite } from "./services/invite-service.js";
|
|
56
|
+
export { UsageService } from "./services/usage-service.js";
|
|
57
|
+
export type { UsageSnapshot, PlanLimits } from "./services/usage-service.js";
|
|
58
|
+
export { TagService, TagValidationError, TagNotFoundError } from "./services/tag-service.js";
|
|
59
|
+
export { ChunkService } from "./services/chunk-service.js";
|
|
60
|
+
export { chunkText, estimateTokens, TARGET_CHUNK_TOKENS, MAX_CHUNK_TOKENS } from "./services/chunker.js";
|
|
61
|
+
export type { ChunkInput } from "./services/chunker.js";
|
|
62
|
+
export { backfillChunks } from "./services/backfill-chunks.js";
|
|
63
|
+
export type { BackfillOptions, BackfillProgress } from "./services/backfill-chunks.js";
|
|
46
64
|
export { createEmbeddingProvider, validateEmbeddingKey, OpenAIEmbeddingProvider, VoyageEmbeddingProvider, OllamaEmbeddingProvider } from "./providers/index.js";
|
|
47
65
|
export type { CreateEmbeddingProviderOptions } from "./providers/index.js";
|
|
48
66
|
export { BatchingEmbeddingProvider } from "./providers/batching.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,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,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ export { encryptAesGcm, decryptAesGcm, deriveKey, deriveKeyV2 } from "./lib/cryp
|
|
|
7
7
|
export { getAgentKeySecret, getPiiKeySecret, getEmbeddingKeySecret } from "./lib/encryption-keys.js";
|
|
8
8
|
// JWT
|
|
9
9
|
export { verifyAuth0Jwt } from "./lib/jwt.js";
|
|
10
|
+
export { isUserPrincipal, isOrgAgentPrincipal, isDelegatedAgentPrincipal, } from "./auth/principal.js";
|
|
11
|
+
export { buildAbility, intersect, UnsupportedIntersectionError, } from "./auth/ability.js";
|
|
12
|
+
export { DELEGATION_ALGORITHM, DELEGATION_ISSUER, DELEGATION_KEY_MIN_BYTES, DELEGATION_TTL_SECONDS, DelegationKeyLoadError, DelegationTokenError, loadDelegationKeyFromEnv, mintDelegationToken, peekIssuer, verifyDelegationToken, } from "./auth/delegation-jwt.js";
|
|
10
13
|
// Types
|
|
11
14
|
export * from "./types/index.js";
|
|
12
15
|
// Config
|
|
@@ -27,11 +30,18 @@ export { OrgAgentConfigService } from "./services/org-agent-config-service.js";
|
|
|
27
30
|
export { OrgAgentTypeService } from "./services/org-agent-type-service.js";
|
|
28
31
|
export { OrgMcpServerService } from "./services/org-mcp-server-service.js";
|
|
29
32
|
export { AgentRunService } from "./services/agent-run-service.js";
|
|
33
|
+
export { AuditEventService } from "./services/audit-event-service.js";
|
|
34
|
+
export { cancelOrphanedAgentRuns } from "./services/delegation-cleanup-service.js";
|
|
30
35
|
export { AgentScheduleService } from "./services/agent-schedule-service.js";
|
|
31
36
|
export { CLI_REFERENCE } from "./services/agent-cli-reference.js";
|
|
32
37
|
export { UserService } from "./services/user-service.js";
|
|
33
38
|
export { MembershipService } from "./services/membership-service.js";
|
|
34
39
|
export { InviteService } from "./services/invite-service.js";
|
|
40
|
+
export { UsageService } from "./services/usage-service.js";
|
|
41
|
+
export { TagService, TagValidationError, TagNotFoundError } from "./services/tag-service.js";
|
|
42
|
+
export { ChunkService } from "./services/chunk-service.js";
|
|
43
|
+
export { chunkText, estimateTokens, TARGET_CHUNK_TOKENS, MAX_CHUNK_TOKENS } from "./services/chunker.js";
|
|
44
|
+
export { backfillChunks } from "./services/backfill-chunks.js";
|
|
35
45
|
// Providers
|
|
36
46
|
export { createEmbeddingProvider, validateEmbeddingKey, OpenAIEmbeddingProvider, VoyageEmbeddingProvider, OllamaEmbeddingProvider } from "./providers/index.js";
|
|
37
47
|
export { BatchingEmbeddingProvider } from "./providers/batching.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGvF,SAAS;AACT,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;AAErG,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/jwt.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { JWKS_CACHE_MAX_AGE_MS, JWKS_COOLDOWN_MS, createAuth0JwksResolver, resetJwksCache, verifyAuth0Jwt, } from "../jwt.js";
|
|
3
|
+
// A minimal JWKS response body. jose parses this on reload() but won't
|
|
4
|
+
// fail just because the keys are not usable for real verification —
|
|
5
|
+
// failure only happens when a JWT is actually verified against a key.
|
|
6
|
+
const FAKE_JWKS_BODY = JSON.stringify({
|
|
7
|
+
keys: [
|
|
8
|
+
{
|
|
9
|
+
kty: "RSA",
|
|
10
|
+
kid: "test-key-1",
|
|
11
|
+
use: "sig",
|
|
12
|
+
alg: "RS256",
|
|
13
|
+
n: "xGP_acGn7xCn3OQ0qoBXwOyw5nSGY3SnlbSXr3QxBOQPfOSmM0wQ4TgKGhY0t5T3pNS6EHF3OwBf3jL5p8O5_yQ",
|
|
14
|
+
e: "AQAB",
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
});
|
|
18
|
+
function fakeJwksFetch(counter) {
|
|
19
|
+
return async (_url, _init) => {
|
|
20
|
+
counter.calls += 1;
|
|
21
|
+
return new Response(FAKE_JWKS_BODY, {
|
|
22
|
+
status: 200,
|
|
23
|
+
headers: { "content-type": "application/json" },
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
describe("JWKS bounded cache (finding M6)", () => {
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
resetJwksCache();
|
|
30
|
+
});
|
|
31
|
+
it("publishes explicit cache bounds as source-visible constants", () => {
|
|
32
|
+
// The finding is that the JWKS cache has no visible invalidation.
|
|
33
|
+
// Closing it means the bounds live in our source, not in a library
|
|
34
|
+
// default that a future version bump could silently change.
|
|
35
|
+
expect(JWKS_CACHE_MAX_AGE_MS).toBe(5 * 60 * 1000);
|
|
36
|
+
expect(JWKS_COOLDOWN_MS).toBe(30 * 1000);
|
|
37
|
+
});
|
|
38
|
+
it("reload() on a fresh resolver triggers exactly one fetch", async () => {
|
|
39
|
+
const counter = { calls: 0 };
|
|
40
|
+
const resolver = createAuth0JwksResolver("example.auth0.com", {
|
|
41
|
+
cacheMaxAgeMs: 50,
|
|
42
|
+
cooldownMs: 0,
|
|
43
|
+
fetchImpl: fakeJwksFetch(counter),
|
|
44
|
+
});
|
|
45
|
+
await resolver.reload();
|
|
46
|
+
expect(counter.calls).toBe(1);
|
|
47
|
+
expect(resolver.fresh).toBe(true);
|
|
48
|
+
});
|
|
49
|
+
it("fresh becomes false after cacheMaxAge elapses", async () => {
|
|
50
|
+
const counter = { calls: 0 };
|
|
51
|
+
const resolver = createAuth0JwksResolver("example.auth0.com", {
|
|
52
|
+
cacheMaxAgeMs: 30,
|
|
53
|
+
cooldownMs: 0,
|
|
54
|
+
fetchImpl: fakeJwksFetch(counter),
|
|
55
|
+
});
|
|
56
|
+
await resolver.reload();
|
|
57
|
+
expect(resolver.fresh).toBe(true);
|
|
58
|
+
// Wait past cacheMaxAge. After this, jose's bounded-age check
|
|
59
|
+
// returns false, which is the signal that triggers automatic
|
|
60
|
+
// refetch on the next verification attempt.
|
|
61
|
+
await new Promise((r) => setTimeout(r, 60));
|
|
62
|
+
expect(resolver.fresh).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it("a second reload after cache expiry triggers a second fetch", async () => {
|
|
65
|
+
// The core M6 guarantee: a rotated/compromised signing key at
|
|
66
|
+
// Auth0 cannot stay trusted indefinitely. After cacheMaxAge
|
|
67
|
+
// elapses, jose re-fetches the JWKS — observable here via the
|
|
68
|
+
// mock fetch's call counter.
|
|
69
|
+
const counter = { calls: 0 };
|
|
70
|
+
const resolver = createAuth0JwksResolver("example.auth0.com", {
|
|
71
|
+
cacheMaxAgeMs: 20,
|
|
72
|
+
cooldownMs: 0,
|
|
73
|
+
fetchImpl: fakeJwksFetch(counter),
|
|
74
|
+
});
|
|
75
|
+
await resolver.reload();
|
|
76
|
+
expect(counter.calls).toBe(1);
|
|
77
|
+
await new Promise((r) => setTimeout(r, 40));
|
|
78
|
+
await resolver.reload();
|
|
79
|
+
expect(counter.calls).toBe(2);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe("verifyAuth0Jwt", () => {
|
|
83
|
+
afterEach(() => {
|
|
84
|
+
resetJwksCache();
|
|
85
|
+
});
|
|
86
|
+
it("rejects a malformed token without touching the network", async () => {
|
|
87
|
+
// Sanity regression: verifyAuth0Jwt should fail fast on obviously
|
|
88
|
+
// invalid input. jose throws a parse error before any JWKS
|
|
89
|
+
// retrieval is attempted, so this is safe to run without
|
|
90
|
+
// mocking the network.
|
|
91
|
+
await expect(verifyAuth0Jwt("not-a-real-jwt", {
|
|
92
|
+
domain: "example.auth0.com",
|
|
93
|
+
audience: "https://api.example.com",
|
|
94
|
+
})).rejects.toThrow();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=jwt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/jwt.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/jwt.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRemoteJWKSet } from "jose";
|
|
1
2
|
import type { JWTPayload } from "jose";
|
|
2
3
|
export interface Auth0Config {
|
|
3
4
|
domain: string;
|
|
@@ -6,8 +7,27 @@ export interface Auth0Config {
|
|
|
6
7
|
export interface Auth0JwtPayload extends JWTPayload {
|
|
7
8
|
sub: string;
|
|
8
9
|
email?: string;
|
|
10
|
+
email_verified?: boolean;
|
|
9
11
|
name?: string;
|
|
10
12
|
org_id?: string;
|
|
11
13
|
}
|
|
14
|
+
export declare const JWKS_CACHE_MAX_AGE_MS: number;
|
|
15
|
+
export declare const JWKS_COOLDOWN_MS: number;
|
|
16
|
+
export type JwksResolver = ReturnType<typeof createRemoteJWKSet>;
|
|
17
|
+
/**
|
|
18
|
+
* Build a remote JWKS resolver for an Auth0 domain with bounded caching.
|
|
19
|
+
* Exported for test injection; production callers use {@link getJWKS}.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createAuth0JwksResolver(domain: string, options?: {
|
|
22
|
+
cacheMaxAgeMs?: number;
|
|
23
|
+
cooldownMs?: number;
|
|
24
|
+
fetchImpl?: (url: URL | string, init?: RequestInit) => Promise<Response>;
|
|
25
|
+
}): JwksResolver;
|
|
26
|
+
/**
|
|
27
|
+
* Invalidate the per-process JWKS cache for a given Auth0 domain.
|
|
28
|
+
* Intended for tests and for manual revocation flows. Production auth
|
|
29
|
+
* flows rely on the bounded cacheMaxAge above to rotate keys.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resetJwksCache(domain?: string): void;
|
|
12
32
|
export declare function verifyAuth0Jwt(token: string, config: Auth0Config): Promise<Auth0JwtPayload>;
|
|
13
33
|
//# sourceMappingURL=jwt.d.ts.map
|
package/dist/lib/jwt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA0B,MAAM,MAAM,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsBD,eAAO,MAAM,qBAAqB,QAAgB,CAAC;AACnD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAIjE;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC1E,GACA,YAAY,CAcd;AAUD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,eAAe,CAAC,CAc1B"}
|
package/dist/lib/jwt.js
CHANGED
|
@@ -1,13 +1,66 @@
|
|
|
1
|
-
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
1
|
+
import { createRemoteJWKSet, customFetch, jwtVerify } from "jose";
|
|
2
|
+
// Bounded JWKS cache for Auth0 signing keys (closes finding M6).
|
|
3
|
+
//
|
|
4
|
+
// jose's createRemoteJWKSet has three relevant knobs: cooldownDuration
|
|
5
|
+
// (minimum gap between HTTP refetches triggered by kid misses),
|
|
6
|
+
// cacheMaxAge (maximum age before a refetch is mandatory regardless of
|
|
7
|
+
// kid state), and reload() (manual invalidation). We configure the
|
|
8
|
+
// first two explicitly so the security bounds are visible at the call
|
|
9
|
+
// site instead of inherited from whatever jose's defaults happen to be
|
|
10
|
+
// in the currently installed version.
|
|
11
|
+
//
|
|
12
|
+
// Exposure window for a compromised or rotated Auth0 signing key:
|
|
13
|
+
// - worst case ≤ JWKS_CACHE_MAX_AGE_MS (5 minutes) before jose
|
|
14
|
+
// force-refetches and drops the stale key from its internal cache.
|
|
15
|
+
// - best case: the next token Auth0 issues carries a kid not in
|
|
16
|
+
// cache, jose refetches immediately (subject to cooldown).
|
|
17
|
+
//
|
|
18
|
+
// We intentionally use a tighter cacheMaxAge than jose's 10-minute
|
|
19
|
+
// default because Auth0 key rotations and key compromises are both
|
|
20
|
+
// security-critical events where we'd rather hit jwks.json every few
|
|
21
|
+
// minutes than trust a stale key for longer.
|
|
22
|
+
export const JWKS_CACHE_MAX_AGE_MS = 5 * 60 * 1000;
|
|
23
|
+
export const JWKS_COOLDOWN_MS = 30 * 1000;
|
|
2
24
|
const jwksCache = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Build a remote JWKS resolver for an Auth0 domain with bounded caching.
|
|
27
|
+
* Exported for test injection; production callers use {@link getJWKS}.
|
|
28
|
+
*/
|
|
29
|
+
export function createAuth0JwksResolver(domain, options) {
|
|
30
|
+
const url = new URL(`https://${domain}/.well-known/jwks.json`);
|
|
31
|
+
const createOpts = {
|
|
32
|
+
cacheMaxAge: options?.cacheMaxAgeMs ?? JWKS_CACHE_MAX_AGE_MS,
|
|
33
|
+
cooldownDuration: options?.cooldownMs ?? JWKS_COOLDOWN_MS,
|
|
34
|
+
};
|
|
35
|
+
if (options?.fetchImpl) {
|
|
36
|
+
// jose exposes a named `customFetch` symbol for fetch injection;
|
|
37
|
+
// tests pass their mock in this way. Production callers never
|
|
38
|
+
// need it — the default fetch is used.
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
createOpts[customFetch] = options.fetchImpl;
|
|
41
|
+
}
|
|
42
|
+
return createRemoteJWKSet(url, createOpts);
|
|
43
|
+
}
|
|
3
44
|
function getJWKS(domain) {
|
|
4
45
|
const key = domain;
|
|
5
46
|
if (!jwksCache.has(key)) {
|
|
6
|
-
|
|
7
|
-
jwksCache.set(key, createRemoteJWKSet(url));
|
|
47
|
+
jwksCache.set(key, createAuth0JwksResolver(domain));
|
|
8
48
|
}
|
|
9
49
|
return jwksCache.get(key);
|
|
10
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Invalidate the per-process JWKS cache for a given Auth0 domain.
|
|
53
|
+
* Intended for tests and for manual revocation flows. Production auth
|
|
54
|
+
* flows rely on the bounded cacheMaxAge above to rotate keys.
|
|
55
|
+
*/
|
|
56
|
+
export function resetJwksCache(domain) {
|
|
57
|
+
if (domain) {
|
|
58
|
+
jwksCache.delete(domain);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
jwksCache.clear();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
11
64
|
export async function verifyAuth0Jwt(token, config) {
|
|
12
65
|
const jwks = getJWKS(config.domain);
|
|
13
66
|
const issuer = `https://${config.domain}/`;
|
package/dist/lib/jwt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAgBlE,iEAAiE;AACjE,EAAE;AACF,uEAAuE;AACvE,gEAAgE;AAChE,uEAAuE;AACvE,mEAAmE;AACnE,sEAAsE;AACtE,uEAAuE;AACvE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,uEAAuE;AACvE,kEAAkE;AAClE,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,mEAAmE;AACnE,qEAAqE;AACrE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AAI1C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,OAIC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,MAAM,wBAAwB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAA6C;QAC3D,WAAW,EAAE,OAAO,EAAE,aAAa,IAAI,qBAAqB;QAC5D,gBAAgB,EAAE,OAAO,EAAE,UAAU,IAAI,gBAAgB;KAC1D,CAAC;IACF,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,iEAAiE;QACjE,8DAA8D;QAC9D,uCAAuC;QACvC,8DAA8D;QAC7D,UAAkB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IACvD,CAAC;IACD,OAAO,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,OAAO,CAAC,MAAc;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,MAAmB;IAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,WAAW,MAAM,CAAC,MAAM,GAAG,CAAC;IAE3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;QAC/C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,OAA0B,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-service.test.d.ts","sourceRoot":"","sources":["../../../src/services/__tests__/chunk-service.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { ChunkService } from "../chunk-service.js";
|
|
3
|
+
import { PiiDetectorService } from "../pii-detector-service.js";
|
|
4
|
+
import { PiiEncryptionService } from "../pii-encryption-service.js";
|
|
5
|
+
function createMockDb() {
|
|
6
|
+
const rawCalls = [];
|
|
7
|
+
return {
|
|
8
|
+
$executeRaw: vi.fn((...args) => {
|
|
9
|
+
rawCalls.push(args);
|
|
10
|
+
return Promise.resolve(1);
|
|
11
|
+
}),
|
|
12
|
+
$queryRaw: vi.fn().mockResolvedValue([]),
|
|
13
|
+
$queryRawUnsafe: vi.fn().mockResolvedValue([]),
|
|
14
|
+
_rawCalls: rawCalls,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function createMockEmbeddings() {
|
|
18
|
+
return {
|
|
19
|
+
lastBatchInput: null,
|
|
20
|
+
embed: vi.fn(async () => [0.1, 0.2, 0.3]),
|
|
21
|
+
embedBatch: vi.fn(async function (texts) {
|
|
22
|
+
this.lastBatchInput = texts;
|
|
23
|
+
return texts.map(() => [0.1, 0.2, 0.3]);
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
describe("ChunkService", () => {
|
|
28
|
+
const detector = new PiiDetectorService();
|
|
29
|
+
const piiEncryption = new PiiEncryptionService(detector);
|
|
30
|
+
const tenantCtx = { organizationId: "org-1" };
|
|
31
|
+
let db;
|
|
32
|
+
let embeddings;
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
db = createMockDb();
|
|
35
|
+
embeddings = createMockEmbeddings();
|
|
36
|
+
});
|
|
37
|
+
describe("chunkAndEmbed", () => {
|
|
38
|
+
it("calls embedBatch with heading-prefixed texts", async () => {
|
|
39
|
+
const service = new ChunkService(db, embeddings, tenantCtx);
|
|
40
|
+
const content = "# Overview\n\nThis is a paragraph about the overview topic.";
|
|
41
|
+
await service.chunkAndEmbed("node-1", "Test Title", content);
|
|
42
|
+
expect(embeddings.embedBatch).toHaveBeenCalled();
|
|
43
|
+
const batchTexts = embeddings.embedBatch.mock.calls[0][0];
|
|
44
|
+
// At least one text should have heading prefix
|
|
45
|
+
expect(batchTexts.some((t) => t.includes("Overview:"))).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it("deletes existing chunks before inserting", async () => {
|
|
48
|
+
const service = new ChunkService(db, embeddings, tenantCtx);
|
|
49
|
+
await service.chunkAndEmbed("node-1", "Title", "Some content here.");
|
|
50
|
+
// $executeRaw should be called for DELETE
|
|
51
|
+
expect(db.$executeRaw).toHaveBeenCalled();
|
|
52
|
+
const deleteCall = db.$executeRaw.mock.calls.find((call) => {
|
|
53
|
+
const tpl = call[0];
|
|
54
|
+
return tpl.raw.join("").includes("DELETE FROM node_chunks");
|
|
55
|
+
});
|
|
56
|
+
expect(deleteCall).toBeDefined();
|
|
57
|
+
});
|
|
58
|
+
it("strips PII before chunking in encrypt mode", async () => {
|
|
59
|
+
const service = new ChunkService(db, embeddings, tenantCtx, piiEncryption, { mode: "encrypt", orgKey: Buffer.alloc(32) });
|
|
60
|
+
await service.chunkAndEmbed("node-1", "Contact", "Email john@example.com for info");
|
|
61
|
+
expect(embeddings.embedBatch).toHaveBeenCalled();
|
|
62
|
+
const batchTexts = embeddings.embedBatch.mock.calls[0][0];
|
|
63
|
+
// PII should be stripped
|
|
64
|
+
for (const text of batchTexts) {
|
|
65
|
+
expect(text).not.toContain("john@example.com");
|
|
66
|
+
expect(text).toContain("[EMAIL]");
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
it("sets embedding_pii_mode on chunks", async () => {
|
|
70
|
+
const service = new ChunkService(db, embeddings, tenantCtx, piiEncryption, { mode: "encrypt", orgKey: Buffer.alloc(32) });
|
|
71
|
+
await service.chunkAndEmbed("node-1", "Title", "Some content for testing.");
|
|
72
|
+
// $queryRawUnsafe should be called with INSERT containing pii mode
|
|
73
|
+
expect(db.$queryRawUnsafe).toHaveBeenCalled();
|
|
74
|
+
const insertCall = db.$queryRawUnsafe.mock.calls[0];
|
|
75
|
+
const sql = insertCall[0];
|
|
76
|
+
expect(sql).toContain("INSERT INTO node_chunks");
|
|
77
|
+
// One of the params should be the pii mode
|
|
78
|
+
expect(insertCall).toContain("encrypt");
|
|
79
|
+
});
|
|
80
|
+
it("does nothing for empty content", async () => {
|
|
81
|
+
const service = new ChunkService(db, embeddings, tenantCtx);
|
|
82
|
+
await service.chunkAndEmbed("node-1", "", "");
|
|
83
|
+
expect(embeddings.embedBatch).not.toHaveBeenCalled();
|
|
84
|
+
expect(db.$queryRawUnsafe).not.toHaveBeenCalled();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe("deleteByNodeId", () => {
|
|
88
|
+
it("executes DELETE via $executeRaw", async () => {
|
|
89
|
+
const service = new ChunkService(db, embeddings, tenantCtx);
|
|
90
|
+
await service.deleteByNodeId("node-1");
|
|
91
|
+
expect(db.$executeRaw).toHaveBeenCalled();
|
|
92
|
+
const call = db.$executeRaw.mock.calls[0];
|
|
93
|
+
const tpl = call[0];
|
|
94
|
+
const sql = tpl.raw.join("");
|
|
95
|
+
expect(sql).toContain("DELETE FROM node_chunks");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe("getByNodeId", () => {
|
|
99
|
+
it("queries with tenant filter and orders by chunk_index", async () => {
|
|
100
|
+
const service = new ChunkService(db, embeddings, tenantCtx);
|
|
101
|
+
await service.getByNodeId("node-1");
|
|
102
|
+
expect(db.$queryRaw).toHaveBeenCalled();
|
|
103
|
+
const call = db.$queryRaw.mock.calls[0];
|
|
104
|
+
const tpl = call[0];
|
|
105
|
+
const sql = tpl.raw.join("");
|
|
106
|
+
expect(sql).toContain("node_chunks");
|
|
107
|
+
expect(sql).toContain("ORDER BY chunk_index ASC");
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=chunk-service.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-service.test.js","sourceRoot":"","sources":["../../../src/services/__tests__/chunk-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.test.d.ts","sourceRoot":"","sources":["../../../src/services/__tests__/chunker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { chunkText, estimateTokens, MAX_CHUNK_TOKENS, } from "../chunker.js";
|
|
3
|
+
describe("estimateTokens", () => {
|
|
4
|
+
it("estimates ~4 chars per token", () => {
|
|
5
|
+
expect(estimateTokens("abcd")).toBe(1);
|
|
6
|
+
expect(estimateTokens("abcdefgh")).toBe(2);
|
|
7
|
+
expect(estimateTokens("a")).toBe(1); // ceil(1/4) = 1
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
describe("chunkText", () => {
|
|
11
|
+
it("returns empty array for empty content", () => {
|
|
12
|
+
expect(chunkText("")).toEqual([]);
|
|
13
|
+
expect(chunkText(" ")).toEqual([]);
|
|
14
|
+
});
|
|
15
|
+
it("returns single chunk for short text", () => {
|
|
16
|
+
const text = "This is a short paragraph.";
|
|
17
|
+
const chunks = chunkText(text);
|
|
18
|
+
expect(chunks).toHaveLength(1);
|
|
19
|
+
expect(chunks[0].content).toBe(text);
|
|
20
|
+
expect(chunks[0].chunkIndex).toBe(0);
|
|
21
|
+
expect(chunks[0].overlapPrev).toBe(0);
|
|
22
|
+
expect(chunks[0].tokenCount).toBeGreaterThan(0);
|
|
23
|
+
});
|
|
24
|
+
it("splits long text at paragraph boundaries", () => {
|
|
25
|
+
// Create text with multiple paragraphs that exceed TARGET_CHUNK_TOKENS
|
|
26
|
+
const para = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(20);
|
|
27
|
+
const text = `${para}\n\n${para}\n\n${para}`;
|
|
28
|
+
const chunks = chunkText(text);
|
|
29
|
+
expect(chunks.length).toBeGreaterThan(1);
|
|
30
|
+
// Each chunk should be within bounds
|
|
31
|
+
for (const chunk of chunks) {
|
|
32
|
+
expect(chunk.tokenCount).toBeLessThanOrEqual(MAX_CHUNK_TOKENS);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
it("carries heading context into chunks", () => {
|
|
36
|
+
const text = `# Introduction
|
|
37
|
+
|
|
38
|
+
First paragraph under intro.
|
|
39
|
+
|
|
40
|
+
# Details
|
|
41
|
+
|
|
42
|
+
Detail paragraph here with some content.`;
|
|
43
|
+
const chunks = chunkText(text);
|
|
44
|
+
expect(chunks.length).toBeGreaterThanOrEqual(2);
|
|
45
|
+
const introChunk = chunks.find((c) => c.content.includes("First paragraph"));
|
|
46
|
+
expect(introChunk?.headingContext).toBe("Introduction");
|
|
47
|
+
const detailChunk = chunks.find((c) => c.content.includes("Detail paragraph"));
|
|
48
|
+
expect(detailChunk?.headingContext).toBe("Details");
|
|
49
|
+
});
|
|
50
|
+
it("does not split code blocks", () => {
|
|
51
|
+
const codeBlock = "```javascript\n" + "const x = 1;\n".repeat(50) + "```";
|
|
52
|
+
const text = `Some intro text.\n\n${codeBlock}\n\nSome outro text.`;
|
|
53
|
+
const chunks = chunkText(text);
|
|
54
|
+
// Find the chunk containing the code block
|
|
55
|
+
const codeChunk = chunks.find((c) => c.content.includes("```javascript"));
|
|
56
|
+
expect(codeChunk).toBeDefined();
|
|
57
|
+
expect(codeChunk.content).toContain("const x = 1;");
|
|
58
|
+
expect(codeChunk.content).toContain("```");
|
|
59
|
+
});
|
|
60
|
+
it("has overlap = 0 at structural boundaries", () => {
|
|
61
|
+
// Multiple short paragraphs that fit in separate chunks due to accumulation
|
|
62
|
+
const para = "Short paragraph. ".repeat(40); // ~160 tokens each
|
|
63
|
+
const text = `${para}\n\n${para}\n\n${para}`;
|
|
64
|
+
const chunks = chunkText(text);
|
|
65
|
+
// Structural boundaries (paragraph breaks) should have overlap = 0
|
|
66
|
+
for (const chunk of chunks) {
|
|
67
|
+
if (chunk.chunkIndex === 0 || chunk.content.startsWith("Short paragraph")) {
|
|
68
|
+
expect(chunk.overlapPrev).toBe(0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
it("produces multiple chunks for forced mid-paragraph splits of long text", () => {
|
|
73
|
+
// Single huge paragraph that forces mid-paragraph splitting
|
|
74
|
+
const longPara = "This is a sentence that keeps going. ".repeat(100);
|
|
75
|
+
const chunks = chunkText(longPara);
|
|
76
|
+
expect(chunks.length).toBeGreaterThan(1);
|
|
77
|
+
// Each chunk should respect the max token limit
|
|
78
|
+
for (const chunk of chunks) {
|
|
79
|
+
expect(chunk.tokenCount).toBeLessThanOrEqual(MAX_CHUNK_TOKENS);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
it("produces correct offsets", () => {
|
|
83
|
+
const text = "First paragraph.\n\nSecond paragraph.\n\nThird paragraph.";
|
|
84
|
+
const chunks = chunkText(text);
|
|
85
|
+
// All chunks should have valid offset ranges
|
|
86
|
+
for (const chunk of chunks) {
|
|
87
|
+
expect(chunk.startOffset).toBeGreaterThanOrEqual(0);
|
|
88
|
+
expect(chunk.endOffset).toBeGreaterThan(chunk.startOffset);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
it("assigns sequential chunk indices", () => {
|
|
92
|
+
const para = "Content paragraph with some text. ".repeat(30);
|
|
93
|
+
const text = `# Section 1\n\n${para}\n\n# Section 2\n\n${para}`;
|
|
94
|
+
const chunks = chunkText(text);
|
|
95
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
96
|
+
expect(chunks[i].chunkIndex).toBe(i);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
it("handles text with no headings", () => {
|
|
100
|
+
const text = "Just plain text without any markdown headings.\n\nAnother paragraph here.";
|
|
101
|
+
const chunks = chunkText(text);
|
|
102
|
+
expect(chunks.length).toBeGreaterThanOrEqual(1);
|
|
103
|
+
expect(chunks[0].headingContext).toBeNull();
|
|
104
|
+
});
|
|
105
|
+
it("handles text with only headings", () => {
|
|
106
|
+
const text = "# Heading 1\n\n## Heading 2";
|
|
107
|
+
const chunks = chunkText(text);
|
|
108
|
+
// Headings are parsed as structure, remaining text is minimal
|
|
109
|
+
// The exact count depends on how headings are parsed, but should be small
|
|
110
|
+
expect(chunks.length).toBeLessThanOrEqual(1);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=chunker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.test.js","sourceRoot":"","sources":["../../../src/services/__tests__/chunker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-cleanup-service.test.d.ts","sourceRoot":"","sources":["../../../src/services/__tests__/delegation-cleanup-service.test.ts"],"names":[],"mappings":""}
|