@carlonicora/nestjs-neo4jsonapi 2.7.2 → 2.9.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.
Files changed (106) hide show
  1. package/dist/agents/graph.creator/services/graph.creator.service.d.ts +82 -0
  2. package/dist/agents/graph.creator/services/graph.creator.service.d.ts.map +1 -1
  3. package/dist/agents/graph.creator/services/graph.creator.service.js +43 -10
  4. package/dist/agents/graph.creator/services/graph.creator.service.js.map +1 -1
  5. package/dist/agents/index.d.ts +1 -1
  6. package/dist/agents/index.d.ts.map +1 -1
  7. package/dist/agents/index.js +7 -1
  8. package/dist/agents/index.js.map +1 -1
  9. package/dist/config/base.config.d.ts.map +1 -1
  10. package/dist/config/base.config.js +4 -0
  11. package/dist/config/base.config.js.map +1 -1
  12. package/dist/config/interfaces/config.ai.interface.d.ts +5 -0
  13. package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
  14. package/dist/config/interfaces/config.prompts.interface.d.ts +15 -0
  15. package/dist/config/interfaces/config.prompts.interface.d.ts.map +1 -1
  16. package/dist/core/llm/index.d.ts +2 -0
  17. package/dist/core/llm/index.d.ts.map +1 -1
  18. package/dist/core/llm/index.js +2 -0
  19. package/dist/core/llm/index.js.map +1 -1
  20. package/dist/core/llm/interfaces/ai-candidate.interface.d.ts +32 -0
  21. package/dist/core/llm/interfaces/ai-candidate.interface.d.ts.map +1 -0
  22. package/dist/core/llm/interfaces/ai-candidate.interface.js +15 -0
  23. package/dist/core/llm/interfaces/ai-candidate.interface.js.map +1 -0
  24. package/dist/core/llm/llm.module.d.ts.map +1 -1
  25. package/dist/core/llm/llm.module.js +6 -1
  26. package/dist/core/llm/llm.module.js.map +1 -1
  27. package/dist/core/llm/services/ai-connection-resolver.service.d.ts +107 -0
  28. package/dist/core/llm/services/ai-connection-resolver.service.d.ts.map +1 -0
  29. package/dist/core/llm/services/ai-connection-resolver.service.js +329 -0
  30. package/dist/core/llm/services/ai-connection-resolver.service.js.map +1 -0
  31. package/dist/core/llm/services/embedder.service.d.ts +21 -0
  32. package/dist/core/llm/services/embedder.service.d.ts.map +1 -1
  33. package/dist/core/llm/services/embedder.service.js +52 -3
  34. package/dist/core/llm/services/embedder.service.js.map +1 -1
  35. package/dist/core/llm/services/llm.service.d.ts +65 -18
  36. package/dist/core/llm/services/llm.service.d.ts.map +1 -1
  37. package/dist/core/llm/services/llm.service.js +214 -70
  38. package/dist/core/llm/services/llm.service.js.map +1 -1
  39. package/dist/core/llm/services/model.service.d.ts +79 -2
  40. package/dist/core/llm/services/model.service.d.ts.map +1 -1
  41. package/dist/core/llm/services/model.service.js +289 -31
  42. package/dist/core/llm/services/model.service.js.map +1 -1
  43. package/dist/core/llm/services/vision.llm.service.d.ts +25 -1
  44. package/dist/core/llm/services/vision.llm.service.d.ts.map +1 -1
  45. package/dist/core/llm/services/vision.llm.service.js +74 -33
  46. package/dist/core/llm/services/vision.llm.service.js.map +1 -1
  47. package/dist/foundations/ai-connection/ai-connection.module.d.ts +5 -0
  48. package/dist/foundations/ai-connection/ai-connection.module.d.ts.map +1 -0
  49. package/dist/foundations/ai-connection/ai-connection.module.js +37 -0
  50. package/dist/foundations/ai-connection/ai-connection.module.js.map +1 -0
  51. package/dist/foundations/ai-connection/controllers/ai-connection.controller.d.ts +32 -0
  52. package/dist/foundations/ai-connection/controllers/ai-connection.controller.d.ts.map +1 -0
  53. package/dist/foundations/ai-connection/controllers/ai-connection.controller.js +162 -0
  54. package/dist/foundations/ai-connection/controllers/ai-connection.controller.js.map +1 -0
  55. package/dist/foundations/ai-connection/dtos/ai-connection.post.dto.d.ts +41 -0
  56. package/dist/foundations/ai-connection/dtos/ai-connection.post.dto.d.ts.map +1 -0
  57. package/dist/foundations/ai-connection/dtos/ai-connection.post.dto.js +189 -0
  58. package/dist/foundations/ai-connection/dtos/ai-connection.post.dto.js.map +1 -0
  59. package/dist/foundations/ai-connection/dtos/ai-connection.put.dto.d.ts +42 -0
  60. package/dist/foundations/ai-connection/dtos/ai-connection.put.dto.d.ts.map +1 -0
  61. package/dist/foundations/ai-connection/dtos/ai-connection.put.dto.js +179 -0
  62. package/dist/foundations/ai-connection/dtos/ai-connection.put.dto.js.map +1 -0
  63. package/dist/foundations/ai-connection/dtos/ai-connection.reorder.dto.d.ts +8 -0
  64. package/dist/foundations/ai-connection/dtos/ai-connection.reorder.dto.d.ts.map +1 -0
  65. package/dist/foundations/ai-connection/dtos/ai-connection.reorder.dto.js +38 -0
  66. package/dist/foundations/ai-connection/dtos/ai-connection.reorder.dto.js.map +1 -0
  67. package/dist/foundations/ai-connection/entities/ai-connection.d.ts +57 -0
  68. package/dist/foundations/ai-connection/entities/ai-connection.d.ts.map +1 -0
  69. package/dist/foundations/ai-connection/entities/ai-connection.js +73 -0
  70. package/dist/foundations/ai-connection/entities/ai-connection.js.map +1 -0
  71. package/dist/foundations/ai-connection/entities/ai-connection.meta.d.ts +3 -0
  72. package/dist/foundations/ai-connection/entities/ai-connection.meta.d.ts.map +1 -0
  73. package/dist/foundations/ai-connection/entities/ai-connection.meta.js +10 -0
  74. package/dist/foundations/ai-connection/entities/ai-connection.meta.js.map +1 -0
  75. package/dist/foundations/ai-connection/index.d.ts +12 -0
  76. package/dist/foundations/ai-connection/index.d.ts.map +1 -0
  77. package/dist/foundations/ai-connection/index.js +35 -0
  78. package/dist/foundations/ai-connection/index.js.map +1 -0
  79. package/dist/foundations/ai-connection/registry/ai-provider.registry.d.ts +54 -0
  80. package/dist/foundations/ai-connection/registry/ai-provider.registry.d.ts.map +1 -0
  81. package/dist/foundations/ai-connection/registry/ai-provider.registry.js +255 -0
  82. package/dist/foundations/ai-connection/registry/ai-provider.registry.js.map +1 -0
  83. package/dist/foundations/ai-connection/repositories/ai-connection.repository.d.ts +52 -0
  84. package/dist/foundations/ai-connection/repositories/ai-connection.repository.d.ts.map +1 -0
  85. package/dist/foundations/ai-connection/repositories/ai-connection.repository.js +85 -0
  86. package/dist/foundations/ai-connection/repositories/ai-connection.repository.js.map +1 -0
  87. package/dist/foundations/ai-connection/services/ai-connection-encryption.service.d.ts +52 -0
  88. package/dist/foundations/ai-connection/services/ai-connection-encryption.service.d.ts.map +1 -0
  89. package/dist/foundations/ai-connection/services/ai-connection-encryption.service.js +148 -0
  90. package/dist/foundations/ai-connection/services/ai-connection-encryption.service.js.map +1 -0
  91. package/dist/foundations/ai-connection/services/ai-connection.service.d.ts +79 -0
  92. package/dist/foundations/ai-connection/services/ai-connection.service.d.ts.map +1 -0
  93. package/dist/foundations/ai-connection/services/ai-connection.service.js +184 -0
  94. package/dist/foundations/ai-connection/services/ai-connection.service.js.map +1 -0
  95. package/dist/foundations/foundations.modules.d.ts.map +1 -1
  96. package/dist/foundations/foundations.modules.js +2 -0
  97. package/dist/foundations/foundations.modules.js.map +1 -1
  98. package/dist/foundations/index.d.ts +1 -0
  99. package/dist/foundations/index.d.ts.map +1 -1
  100. package/dist/foundations/index.js +1 -0
  101. package/dist/foundations/index.js.map +1 -1
  102. package/dist/foundations/tokenusage/services/tokenusage.service.d.ts +29 -0
  103. package/dist/foundations/tokenusage/services/tokenusage.service.d.ts.map +1 -1
  104. package/dist/foundations/tokenusage/services/tokenusage.service.js +15 -3
  105. package/dist/foundations/tokenusage/services/tokenusage.service.js.map +1 -1
  106. package/package.json +1 -1
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.AiConnectionEncryptionService = void 0;
43
+ const common_1 = require("@nestjs/common");
44
+ const crypto = __importStar(require("crypto"));
45
+ const base_config_1 = require("../../../config/base.config");
46
+ /**
47
+ * AI Connection Encryption Service
48
+ *
49
+ * Provides AES-256-GCM encryption/decryption for AI connection secrets
50
+ * (`apiKey`, `googleCredentialsBase64`). Secrets are encrypted before storage in
51
+ * Neo4j and decrypted only when the resolver builds a candidate — they are never
52
+ * serialised back over the API.
53
+ *
54
+ * Mirrors {@link TotpEncryptionService} (the in-package AES-256-GCM canonical),
55
+ * keyed from `encryption.key` (ENCRYPTION_KEY) instead of the TOTP key.
56
+ *
57
+ * Format: IV (12 bytes) + AuthTag (16 bytes) + Ciphertext (base64 encoded)
58
+ */
59
+ let AiConnectionEncryptionService = class AiConnectionEncryptionService {
60
+ constructor() {
61
+ this.algorithm = "aes-256-gcm";
62
+ this.ivLength = 12; // 96 bits for GCM
63
+ this.authTagLength = 16; // 128 bits
64
+ }
65
+ /**
66
+ * Whether a key is configured at all. Writing a secret without one must fail
67
+ * loudly at the admin API (fail-closed on write, fail-open on read).
68
+ */
69
+ isConfigured() {
70
+ return !!base_config_1.baseConfig.encryption.key;
71
+ }
72
+ /**
73
+ * Get the encryption key from config.
74
+ * The key must be exactly 32 bytes (256 bits) for AES-256.
75
+ */
76
+ getKey() {
77
+ const keyString = base_config_1.baseConfig.encryption.key;
78
+ if (!keyString) {
79
+ throw new Error("ENCRYPTION_KEY is not configured — cannot store AI connection secrets");
80
+ }
81
+ // If the key is hex-encoded (64 chars = 32 bytes), decode it
82
+ if (keyString.length === 64 && /^[0-9a-fA-F]+$/.test(keyString)) {
83
+ return Buffer.from(keyString, "hex");
84
+ }
85
+ // If the key is base64-encoded
86
+ if (keyString.length === 44 && keyString.endsWith("=")) {
87
+ const decoded = Buffer.from(keyString, "base64");
88
+ if (decoded.length === 32) {
89
+ return decoded;
90
+ }
91
+ }
92
+ // Otherwise, derive a 32-byte key using SHA-256
93
+ return crypto.createHash("sha256").update(keyString).digest();
94
+ }
95
+ /**
96
+ * Encrypt an AI connection secret using AES-256-GCM.
97
+ *
98
+ * @param plaintext - The secret to encrypt (API key or base64 GCP credentials)
99
+ * @returns The encrypted secret as a base64-encoded string containing IV, auth tag, and ciphertext
100
+ */
101
+ encrypt(plaintext) {
102
+ const key = this.getKey();
103
+ const iv = crypto.randomBytes(this.ivLength);
104
+ const cipher = crypto.createCipheriv(this.algorithm, key, iv);
105
+ const encrypted = Buffer.concat([cipher.update(plaintext, "utf8"), cipher.final()]);
106
+ const authTag = cipher.getAuthTag();
107
+ // Combine IV + AuthTag + Ciphertext
108
+ const combined = Buffer.concat([iv, authTag, encrypted]);
109
+ return combined.toString("base64");
110
+ }
111
+ /**
112
+ * Decrypt an AI connection secret encrypted with AES-256-GCM.
113
+ *
114
+ * @param ciphertext - The base64-encoded encrypted secret (IV + AuthTag + Ciphertext)
115
+ * @returns The decrypted secret
116
+ * @throws Error if decryption fails (invalid key, corrupted data, or tampered data)
117
+ */
118
+ decrypt(ciphertext) {
119
+ const key = this.getKey();
120
+ const combined = Buffer.from(ciphertext, "base64");
121
+ // Extract IV, AuthTag, and encrypted data
122
+ const iv = combined.subarray(0, this.ivLength);
123
+ const authTag = combined.subarray(this.ivLength, this.ivLength + this.authTagLength);
124
+ const encrypted = combined.subarray(this.ivLength + this.authTagLength);
125
+ const decipher = crypto.createDecipheriv(this.algorithm, key, iv);
126
+ decipher.setAuthTag(authTag);
127
+ const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
128
+ return decrypted.toString("utf8");
129
+ }
130
+ /**
131
+ * Verify that the encryption system is properly configured.
132
+ * Performs a round-trip encryption/decryption test.
133
+ *
134
+ * @returns true if encryption is working correctly
135
+ * @throws Error if encryption is not properly configured
136
+ */
137
+ verify() {
138
+ const testData = "test-secret-" + crypto.randomBytes(8).toString("hex");
139
+ const encrypted = this.encrypt(testData);
140
+ const decrypted = this.decrypt(encrypted);
141
+ return decrypted === testData;
142
+ }
143
+ };
144
+ exports.AiConnectionEncryptionService = AiConnectionEncryptionService;
145
+ exports.AiConnectionEncryptionService = AiConnectionEncryptionService = __decorate([
146
+ (0, common_1.Injectable)()
147
+ ], AiConnectionEncryptionService);
148
+ //# sourceMappingURL=ai-connection-encryption.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-connection-encryption.service.js","sourceRoot":"","sources":["../../../../src/foundations/ai-connection/services/ai-connection-encryption.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { ConfigService } from "@nestjs/config";
2
+ import { EventEmitter2 } from "@nestjs/event-emitter";
3
+ import { ClsService } from "nestjs-cls";
4
+ import { BaseConfigInterface } from "../../../config/interfaces/base.config.interface";
5
+ import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
6
+ import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
7
+ import { AiConnection, AiConnectionDescriptor } from "../entities/ai-connection";
8
+ import { AiConnectionRepository } from "../repositories/ai-connection.repository";
9
+ import { AiConnectionEncryptionService } from "./ai-connection-encryption.service";
10
+ export declare class AiConnectionService extends AbstractService<AiConnection, typeof AiConnectionDescriptor.relationships> {
11
+ private readonly aiConnectionRepository;
12
+ private readonly encryption;
13
+ private readonly eventEmitter;
14
+ private readonly configService;
15
+ protected readonly descriptor: import("../../..").EntityDescriptor<AiConnection, {
16
+ company: {
17
+ model: import("../../..").DataMeta;
18
+ direction: "out";
19
+ relationship: string;
20
+ cardinality: "one";
21
+ required: false;
22
+ dtoKey: string;
23
+ immutable: true;
24
+ };
25
+ }>;
26
+ constructor(jsonApiService: JsonApiService, aiConnectionRepository: AiConnectionRepository, clsService: ClsService, encryption: AiConnectionEncryptionService, eventEmitter: EventEmitter2, configService: ConfigService<BaseConfigInterface>);
27
+ /**
28
+ * List with the editor's meta: the provider field registry and the .env
29
+ * defaults per connection type (never secrets) — spec § 3.
30
+ */
31
+ findAllWithMeta(params: {
32
+ query: any;
33
+ }): Promise<any>;
34
+ /**
35
+ * Create from a JSON:API body: validate against the provider registry,
36
+ * encrypt secrets, persist, then refresh every resolver snapshot.
37
+ *
38
+ * This name shadows `AbstractService.create()`, which `createFromDTO()` calls
39
+ * back into with *mapped repository params* (`{ id, ...fields }`) — routing
40
+ * those through the body path would recurse forever. The shape guard below
41
+ * keeps both entry points working: a JSON:API body always carries `data`,
42
+ * mapped repository params never do.
43
+ */
44
+ create(body: any, included?: unknown[]): Promise<any>;
45
+ update(body: {
46
+ data: {
47
+ id: string;
48
+ attributes: Record<string, any>;
49
+ [k: string]: any;
50
+ };
51
+ }): Promise<any>;
52
+ reorder(params: {
53
+ ids: string[];
54
+ }): Promise<void>;
55
+ deleteConnection(params: {
56
+ id: string;
57
+ }): Promise<void>;
58
+ /**
59
+ * The inherited `AbstractService.delete()` enforces company ownership
60
+ * (`clsService.companyId === entity.company?.id`). That check is meaningless
61
+ * here and would reject every delete: this entity is `isCompanyScoped: false`
62
+ * and its `company` edge is the CONFIGURES *target* (the company a chain is
63
+ * scoped TO), not an owner — a global connection has no company at all, so
64
+ * `"" !== undefined` would always throw ForbiddenException.
65
+ *
66
+ * Authorisation is enforced at the controller (`AdminJwtAuthGuard` +
67
+ * `@Roles(RoleId.Administrator)`), matching every other admin-only foundation.
68
+ */
69
+ delete(params: {
70
+ id: string;
71
+ }): Promise<void>;
72
+ /**
73
+ * Registry validation + secret encryption. `onlyEncrypt` limits encryption to
74
+ * the secrets this request actually supplied (update path: kept secrets are
75
+ * already ciphertext).
76
+ */
77
+ private validateAndEncrypt;
78
+ }
79
+ //# sourceMappingURL=ai-connection.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-connection.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/ai-connection/services/ai-connection.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAMhF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAInF,qBACa,mBAAoB,SAAQ,eAAe,CAAC,YAAY,EAAE,OAAO,sBAAsB,CAAC,aAAa,CAAC;IAK/G,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IARhC,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;OAA0B;gBAGrD,cAAc,EAAE,cAAc,EACb,sBAAsB,EAAE,sBAAsB,EAC/D,UAAU,EAAE,UAAU,EACL,UAAU,EAAE,6BAA6B,EACzC,YAAY,EAAE,aAAa,EAC3B,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAKpE;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAiC3D;;;;;;;;;OASG;IACG,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IASrD,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IA6BvG,OAAO,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD,gBAAgB,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D;;;;;;;;;;OAUG;IACG,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAiB3B"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AiConnectionService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const event_emitter_1 = require("@nestjs/event-emitter");
16
+ const nestjs_cls_1 = require("nestjs-cls");
17
+ const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
18
+ const ai_candidate_interface_1 = require("../../../core/llm/interfaces/ai-candidate.interface");
19
+ const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
20
+ const ai_connection_1 = require("../entities/ai-connection");
21
+ const ai_provider_registry_1 = require("../registry/ai-provider.registry");
22
+ const ai_connection_repository_1 = require("../repositories/ai-connection.repository");
23
+ const ai_connection_encryption_service_1 = require("./ai-connection-encryption.service");
24
+ const SECRET_FIELDS = ["apiKey", "googleCredentialsBase64"];
25
+ let AiConnectionService = class AiConnectionService extends abstract_service_1.AbstractService {
26
+ constructor(jsonApiService, aiConnectionRepository, clsService, encryption, eventEmitter, configService) {
27
+ super(jsonApiService, aiConnectionRepository, clsService, ai_connection_1.AiConnectionDescriptor.model);
28
+ this.aiConnectionRepository = aiConnectionRepository;
29
+ this.encryption = encryption;
30
+ this.eventEmitter = eventEmitter;
31
+ this.configService = configService;
32
+ this.descriptor = ai_connection_1.AiConnectionDescriptor;
33
+ }
34
+ /**
35
+ * List with the editor's meta: the provider field registry and the .env
36
+ * defaults per connection type (never secrets) — spec § 3.
37
+ */
38
+ async findAllWithMeta(params) {
39
+ const response = await this.find({ query: params.query, fetchAll: true });
40
+ const ai = this.configService.get("ai");
41
+ const envBlockFor = (type) => {
42
+ switch (type) {
43
+ case "aiLite":
44
+ return ai?.aiLite;
45
+ case "aiLarge":
46
+ return ai?.aiLarge;
47
+ case "vision":
48
+ return ai?.vision;
49
+ case "audio":
50
+ return ai?.audio;
51
+ case "embedder":
52
+ return ai?.embedder;
53
+ case "transcriber":
54
+ return ai?.transcriber;
55
+ case "documentAi":
56
+ return ai?.documentAi;
57
+ default:
58
+ return ai?.ai;
59
+ }
60
+ };
61
+ const envDefaults = Object.fromEntries(ai_candidate_interface_1.AI_CONNECTION_TYPES.map((type) => {
62
+ const block = envBlockFor(type);
63
+ return [type, { provider: block?.provider, model: block?.model, url: block?.url }];
64
+ }));
65
+ response.meta = { ...(response.meta ?? {}), providerRegistry: ai_provider_registry_1.AI_PROVIDER_REGISTRY, envDefaults };
66
+ return response;
67
+ }
68
+ /**
69
+ * Create from a JSON:API body: validate against the provider registry,
70
+ * encrypt secrets, persist, then refresh every resolver snapshot.
71
+ *
72
+ * This name shadows `AbstractService.create()`, which `createFromDTO()` calls
73
+ * back into with *mapped repository params* (`{ id, ...fields }`) — routing
74
+ * those through the body path would recurse forever. The shape guard below
75
+ * keeps both entry points working: a JSON:API body always carries `data`,
76
+ * mapped repository params never do.
77
+ */
78
+ async create(body, included) {
79
+ if (!body?.data)
80
+ return super.create(body, included);
81
+ this.validateAndEncrypt(body.data.attributes);
82
+ const response = await this.createFromDTO({ data: body.data });
83
+ this.eventEmitter.emit(ai_candidate_interface_1.AI_CONNECTIONS_CHANGED_EVENT);
84
+ return response;
85
+ }
86
+ async update(body) {
87
+ const existing = await this.aiConnectionRepository.findById({ id: body.data.id });
88
+ // Blank/omitted secret = keep the stored (already encrypted) value; a
89
+ // supplied one is validated + re-encrypted (spec § Decisions "Secrets").
90
+ const attributes = body.data.attributes;
91
+ const suppliedSecrets = new Set();
92
+ for (const field of SECRET_FIELDS) {
93
+ const value = attributes[field];
94
+ if (value === undefined || value === null || value === "") {
95
+ const stored = existing?.[field];
96
+ if (stored === undefined || stored === null) {
97
+ // No stored value either: the key must be ABSENT, not undefined — the
98
+ // PUT query builder emits a SET term for every present key while the
99
+ // param mapper strips undefined values, so an undefined key produces
100
+ // "Neo4jError: Expected parameter(s): <field>".
101
+ delete attributes[field];
102
+ }
103
+ else {
104
+ attributes[field] = stored;
105
+ }
106
+ }
107
+ else {
108
+ suppliedSecrets.add(field);
109
+ }
110
+ }
111
+ this.validateAndEncrypt(attributes, suppliedSecrets);
112
+ const response = await this.putFromDTO({ data: body.data });
113
+ this.eventEmitter.emit(ai_candidate_interface_1.AI_CONNECTIONS_CHANGED_EVENT);
114
+ return response;
115
+ }
116
+ async reorder(params) {
117
+ // A reorder is defined over exactly one chain (connectionType + scope) —
118
+ // a malformed request mixing chains would scramble positions across them.
119
+ const connections = await this.aiConnectionRepository.findByIds({ ids: params.ids });
120
+ if (connections.length !== params.ids.length) {
121
+ throw new common_1.BadRequestException("One or more connections in the reorder request do not exist");
122
+ }
123
+ const chains = new Set(connections.map((c) => `${c.connectionType}|${c.companyId ?? "global"}`));
124
+ if (chains.size > 1) {
125
+ throw new common_1.BadRequestException("Reorder must target a single chain (one connection type and scope)");
126
+ }
127
+ await this.aiConnectionRepository.updatePositions({ ids: params.ids });
128
+ this.eventEmitter.emit(ai_candidate_interface_1.AI_CONNECTIONS_CHANGED_EVENT);
129
+ }
130
+ async deleteConnection(params) {
131
+ await this.delete({ id: params.id });
132
+ this.eventEmitter.emit(ai_candidate_interface_1.AI_CONNECTIONS_CHANGED_EVENT);
133
+ }
134
+ /**
135
+ * The inherited `AbstractService.delete()` enforces company ownership
136
+ * (`clsService.companyId === entity.company?.id`). That check is meaningless
137
+ * here and would reject every delete: this entity is `isCompanyScoped: false`
138
+ * and its `company` edge is the CONFIGURES *target* (the company a chain is
139
+ * scoped TO), not an owner — a global connection has no company at all, so
140
+ * `"" !== undefined` would always throw ForbiddenException.
141
+ *
142
+ * Authorisation is enforced at the controller (`AdminJwtAuthGuard` +
143
+ * `@Roles(RoleId.Administrator)`), matching every other admin-only foundation.
144
+ */
145
+ async delete(params) {
146
+ const entity = await this.aiConnectionRepository.findById({ id: params.id });
147
+ if (!entity)
148
+ throw new common_1.NotFoundException();
149
+ await this.aiConnectionRepository.delete({ id: params.id });
150
+ }
151
+ /**
152
+ * Registry validation + secret encryption. `onlyEncrypt` limits encryption to
153
+ * the secrets this request actually supplied (update path: kept secrets are
154
+ * already ciphertext).
155
+ */
156
+ validateAndEncrypt(attributes, onlyEncrypt) {
157
+ (0, ai_provider_registry_1.validateAiConnectionAttributes)({
158
+ connectionType: attributes.connectionType,
159
+ provider: attributes.provider,
160
+ attributes,
161
+ });
162
+ for (const field of SECRET_FIELDS) {
163
+ const value = attributes[field];
164
+ const mustEncrypt = value !== undefined && value !== null && value !== "" && (!onlyEncrypt || onlyEncrypt.has(field));
165
+ if (!mustEncrypt)
166
+ continue;
167
+ if (!this.encryption.isConfigured()) {
168
+ throw new common_1.BadRequestException("ENCRYPTION_KEY is not configured — cannot store AI connection secrets");
169
+ }
170
+ attributes[field] = this.encryption.encrypt(String(value));
171
+ }
172
+ }
173
+ };
174
+ exports.AiConnectionService = AiConnectionService;
175
+ exports.AiConnectionService = AiConnectionService = __decorate([
176
+ (0, common_1.Injectable)(),
177
+ __metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
178
+ ai_connection_repository_1.AiConnectionRepository,
179
+ nestjs_cls_1.ClsService,
180
+ ai_connection_encryption_service_1.AiConnectionEncryptionService,
181
+ event_emitter_1.EventEmitter2,
182
+ config_1.ConfigService])
183
+ ], AiConnectionService);
184
+ //# sourceMappingURL=ai-connection.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-connection.service.js","sourceRoot":"","sources":["../../../../src/foundations/ai-connection/services/ai-connection.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"foundations.modules.d.ts","sourceRoot":"","sources":["../../src/foundations/foundations.modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAS7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AA2BvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AAGrG;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,kEAAkE;IAClE,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;CACvB;AAkDD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBACa,iBAAiB;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,aAAa;CAoBhE"}
1
+ {"version":3,"file":"foundations.modules.d.ts","sourceRoot":"","sources":["../../src/foundations/foundations.modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAU7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AA2BvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AAGrG;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,kEAAkE;IAClE,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;CACvB;AAmDD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBACa,iBAAiB;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,aAAa;CAoBhE"}
@@ -9,6 +9,7 @@ var FoundationsModule_1;
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.FoundationsModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
+ const ai_connection_module_1 = require("./ai-connection/ai-connection.module");
12
13
  const assistant_module_1 = require("./assistant/assistant.module");
13
14
  const atomicfact_module_1 = require("./atomicfact/atomicfact.module");
14
15
  const audit_module_1 = require("./audit/audit.module");
@@ -51,6 +52,7 @@ const waitlist_module_1 = require("./waitlist/waitlist.module");
51
52
  * Queue registration is handled centrally by QueueModule (via baseConfig.chunkQueues).
52
53
  */
53
54
  const STATIC_FOUNDATION_MODULES = [
55
+ ai_connection_module_1.AiConnectionModule,
54
56
  assistant_module_1.AssistantModule,
55
57
  atomicfact_module_1.AtomicFactModule,
56
58
  audit_module_1.AuditModule,
@@ -1 +1 @@
1
- {"version":3,"file":"foundations.modules.js","sourceRoot":"","sources":["../../src/foundations/foundations.modules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"foundations.modules.js","sourceRoot":"","sources":["../../src/foundations/foundations.modules.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * Foundation modules - domain-specific business logic modules
3
3
  */
4
4
  export * from "./foundations.modules";
5
+ export * from "./ai-connection";
5
6
  export * from "./assistant";
6
7
  export * from "./assistant-action";
7
8
  export * from "./assistant-message";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/foundations/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,uBAAuB,CAAC;AAGtC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/foundations/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,uBAAuB,CAAC;AAGtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
20
20
  // Centralized FoundationsModule - import all foundation modules with single forRoot()
21
21
  __exportStar(require("./foundations.modules"), exports);
22
22
  // Individual foundation modules with entities, metas, repositories, and services
23
+ __exportStar(require("./ai-connection"), exports);
23
24
  __exportStar(require("./assistant"), exports);
24
25
  __exportStar(require("./assistant-action"), exports);
25
26
  __exportStar(require("./assistant-message"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/foundations/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,sFAAsF;AACtF,wDAAsC;AAEtC,iFAAiF;AACjF,8CAA4B;AAC5B,qDAAmC;AACnC,sDAAoC;AACpC,+CAA6B;AAC7B,0CAAwB;AACxB,yCAAuB;AACvB,0CAAwB;AACxB,4CAA0B;AAC1B,4CAA0B;AAC1B,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,iDAA+B;AAC/B,4CAA0B;AAC1B,gDAA8B;AAC9B,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,2CAAyB;AACzB,iDAA+B;AAC/B,0CAAwB;AACxB,yCAAuB;AACvB,6CAA2B;AAC3B,8CAA4B;AAC5B,yCAAuB;AACvB,uCAAqB;AACrB,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,yCAAuB;AACvB,kDAAgC;AAChC,6CAA2B;AAC3B,yCAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/foundations/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,sFAAsF;AACtF,wDAAsC;AAEtC,iFAAiF;AACjF,kDAAgC;AAChC,8CAA4B;AAC5B,qDAAmC;AACnC,sDAAoC;AACpC,+CAA6B;AAC7B,0CAAwB;AACxB,yCAAuB;AACvB,0CAAwB;AACxB,4CAA0B;AAC1B,4CAA0B;AAC1B,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,iDAA+B;AAC/B,4CAA0B;AAC1B,gDAA8B;AAC9B,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,2CAAyB;AACzB,iDAA+B;AAC/B,0CAAwB;AACxB,yCAAuB;AACvB,6CAA2B;AAC3B,8CAA4B;AAC5B,yCAAuB;AACvB,uCAAqB;AACrB,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,yCAAuB;AACvB,kDAAgC;AAChC,6CAA2B;AAC3B,yCAAuB"}
@@ -9,6 +9,21 @@ import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service"
9
9
  import { TokenUsage, TokenUsageDescriptor } from "../../tokenusage/entities/tokenusage";
10
10
  import { TokenUsageAggregated, TokenUsageRepository, TokenUsageSummary } from "../../tokenusage/repositories/tokenusage.repository";
11
11
  import { ModelWeight } from "../../../core/llm/enums/model.weight";
12
+ /**
13
+ * Per-call cost rates, in euros per 1M tokens, belonging to the AI connection
14
+ * that ACTUALLY served a call.
15
+ *
16
+ * Exists because a call may be served by any link of a DB-backed fallback chain
17
+ * (`AiConnection`), and each link carries its own prices — so the config block
18
+ * for the tier is no longer necessarily the right rate card. Supplied ONLY for
19
+ * candidates whose `source` is `"db"`; an `.env`-sourced candidate passes
20
+ * nothing and keeps the config-block path exactly as before.
21
+ */
22
+ export interface TokenUsageRatesInterface {
23
+ inputCostPer1MTokens?: number;
24
+ outputCostPer1MTokens?: number;
25
+ cachedInputCostPer1MTokens?: number;
26
+ }
12
27
  /**
13
28
  * TokenUsage service.
14
29
  *
@@ -43,11 +58,23 @@ export declare class TokenUsageService extends AbstractService<TokenUsage, typeo
43
58
  * Computes the monetary cost of a call from the per-tier rates in config
44
59
  * (`inputCostPer1MTokens` / `outputCostPer1MTokens`). Single source of truth —
45
60
  * used both for persistence and for surfacing cost in ephemeral telemetry.
61
+ *
62
+ * `rates` overrides those config rates with the ones belonging to the AI
63
+ * connection that actually served the call (see
64
+ * {@link TokenUsageRatesInterface}). It is passed ONLY for DB-backed
65
+ * connections, so a caller that never configures any keeps the config-block
66
+ * path bit-for-bit. Each rate falls back to the config block individually, so
67
+ * a connection that prices only some fields still bills the rest at the tier
68
+ * rate — EXCEPT the cached rate, which falls back to the EFFECTIVE input rate
69
+ * rather than the config's cached rate: mixing one connection's input price
70
+ * with another's cache discount would price cached tokens above uncached ones.
46
71
  */
47
72
  computeCost(params: {
48
73
  tokens: TokenUsageInterface;
49
74
  useVisionCosts?: boolean;
50
75
  modelWeight?: ModelWeight;
76
+ /** Rates of the connection that served the call; overrides the config block. */
77
+ rates?: TokenUsageRatesInterface;
51
78
  }): number;
52
79
  /**
53
80
  * Persists one usage record and converts its monetary cost into billing
@@ -71,6 +98,8 @@ export declare class TokenUsageService extends AbstractService<TokenUsage, typeo
71
98
  applyMinimum?: boolean;
72
99
  /** Pre-computed cost in euros; when provided `computeCost` is skipped (embeddings: estimated tokens × the embedder rate). */
73
100
  costOverride?: number;
101
+ /** Rates of the AI connection that served the call; forwarded to `computeCost`. */
102
+ rates?: TokenUsageRatesInterface;
74
103
  }): Promise<void>;
75
104
  /**
76
105
  * KEPT (custom filtering not covered by inherited find()): date-range + tokenUsageType
@@ -1 +1 @@
1
- {"version":3,"file":"tokenusage.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAA0B,MAAM,4BAA4B,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGnE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,iBAAkB,SAAQ,eAAe,CAAC,UAAU,EAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAOzG,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IAE7D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IACpE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa;IAThD,SAAS,CAAC,QAAQ,CAAC,UAAU,sDAAwB;IAErD,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAsC;gBAG7D,cAAc,EAAE,cAAc,EACX,oBAAoB,EAAE,oBAAoB,EAC7D,UAAU,EAAE,UAAU,EACH,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC,EACjD,YAAY,EAAE,aAAa;IAKhD,SAAS,KAAK,QAAQ,IAAI,iBAAiB,CAE1C;IAED,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW;IAW9C;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,MAAM;IAYjH;;;;;;;;;;OAUG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAC7B,MAAM,EAAE,mBAAmB,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,sJAAsJ;QACtJ,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,6HAA6H;QAC7H,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CjB;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE;IAezG;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAO9G;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAMpG"}
1
+ {"version":3,"file":"tokenusage.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":"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"}
@@ -70,13 +70,24 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
70
70
  * Computes the monetary cost of a call from the per-tier rates in config
71
71
  * (`inputCostPer1MTokens` / `outputCostPer1MTokens`). Single source of truth —
72
72
  * used both for persistence and for surfacing cost in ephemeral telemetry.
73
+ *
74
+ * `rates` overrides those config rates with the ones belonging to the AI
75
+ * connection that actually served the call (see
76
+ * {@link TokenUsageRatesInterface}). It is passed ONLY for DB-backed
77
+ * connections, so a caller that never configures any keeps the config-block
78
+ * path bit-for-bit. Each rate falls back to the config block individually, so
79
+ * a connection that prices only some fields still bills the rest at the tier
80
+ * rate — EXCEPT the cached rate, which falls back to the EFFECTIVE input rate
81
+ * rather than the config's cached rate: mixing one connection's input price
82
+ * with another's cache discount would price cached tokens above uncached ones.
73
83
  */
74
84
  computeCost(params) {
75
85
  const costConfig = params.useVisionCosts ? this.aiConfig.vision : this.configForWeight(params.modelWeight);
76
- const inputRate = costConfig.inputCostPer1MTokens ?? 0;
77
- const outputRate = costConfig.outputCostPer1MTokens ?? 0;
86
+ const inputRate = params.rates?.inputCostPer1MTokens ?? costConfig.inputCostPer1MTokens ?? 0;
87
+ const outputRate = params.rates?.outputCostPer1MTokens ?? costConfig.outputCostPer1MTokens ?? 0;
78
88
  // vision/audio configs have no cached rate → falls back to the full input rate (no discount).
79
- const cachedRate = costConfig.cachedInputCostPer1MTokens ?? inputRate;
89
+ const configCachedRate = costConfig.cachedInputCostPer1MTokens;
90
+ const cachedRate = params.rates?.cachedInputCostPer1MTokens ?? (params.rates ? inputRate : (configCachedRate ?? inputRate));
80
91
  const cached = Math.min(params.tokens.cached ?? 0, params.tokens.input);
81
92
  const uncachedInput = params.tokens.input - cached;
82
93
  const cost = uncachedInput * inputRate + cached * cachedRate + params.tokens.output * outputRate;
@@ -99,6 +110,7 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
99
110
  tokens: params.tokens,
100
111
  useVisionCosts: params.useVisionCosts,
101
112
  modelWeight: params.modelWeight,
113
+ rates: params.rates,
102
114
  });
103
115
  const creditsConfig = this.configService.get("credits");
104
116
  let credits = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenusage.service.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenusage.service.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":"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"}